#!/usr/bin/env node

exports.id = 131;
exports.ids = [131];
exports.modules = {

/***/ 24411:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"Deed\",\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newRegistrar\",\"type\":\"address\"}],\"name\":\"setRegistrar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newValue\",\"type\":\"uint256\"},{\"name\":\"throwOnFailure\",\"type\":\"bool\"}],\"name\":\"setBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"refundRatio\",\"type\":\"uint256\"}],\"name\":\"closeDeed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"destroyDeed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"previousOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"creationDate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"metadata\":\"\",\"bytecode\":\"0x\",\"deployedBytecode\":\"0x\",\"sourceMap\":\"\",\"deployedSourceMap\":\"\",\"source\":\"pragma solidity >=0.4.24;\\n\\ninterface Deed {\\n\\n    function setOwner(address payable newOwner) external;\\n    function setRegistrar(address newRegistrar) external;\\n    function setBalance(uint newValue, bool throwOnFailure) external;\\n    function closeDeed(uint refundRatio) external;\\n    function destroyDeed() external;\\n\\n    function owner() external view returns (address);\\n    function previousOwner() external view returns (address);\\n    function value() external view returns (uint);\\n    function creationDate() external view returns (uint);\\n\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\",\"exportedSymbols\":{\"Deed\":[47]},\"id\":48,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":1,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:0\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"interface\",\"documentation\":null,\"fullyImplemented\":false,\"id\":47,\"linearizedBaseContracts\":[47],\"name\":\"Deed\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"body\":null,\"documentation\":null,\"id\":6,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":4,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":3,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":6,\"src\":\"67:24:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":2,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"67:15:0\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"66:26:0\"},\"returnParameters\":{\"id\":5,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"101:0:0\"},\"scope\":47,\"src\":\"49:53:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":11,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setRegistrar\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":9,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":8,\"name\":\"newRegistrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":11,\"src\":\"129:20:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":7,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"129:7:0\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"128:22:0\"},\"returnParameters\":{\"id\":10,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"159:0:0\"},\"scope\":47,\"src\":\"107:53:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":18,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setBalance\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":16,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":13,\"name\":\"newValue\",\"nodeType\":\"VariableDeclaration\",\"scope\":18,\"src\":\"185:13:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":12,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"185:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":15,\"name\":\"throwOnFailure\",\"nodeType\":\"VariableDeclaration\",\"scope\":18,\"src\":\"200:19:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":14,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"200:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"184:36:0\"},\"returnParameters\":{\"id\":17,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"229:0:0\"},\"scope\":47,\"src\":\"165:65:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":23,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"closeDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":21,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":20,\"name\":\"refundRatio\",\"nodeType\":\"VariableDeclaration\",\"scope\":23,\"src\":\"254:16:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":19,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"254:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"253:18:0\"},\"returnParameters\":{\"id\":22,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"280:0:0\"},\"scope\":47,\"src\":\"235:46:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":26,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"destroyDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":24,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"306:2:0\"},\"returnParameters\":{\"id\":25,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"317:0:0\"},\"scope\":47,\"src\":\"286:32:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":31,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"owner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":27,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"338:2:0\"},\"returnParameters\":{\"id\":30,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":29,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":31,\"src\":\"364:7:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":28,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"364:7:0\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"363:9:0\"},\"scope\":47,\"src\":\"324:49:0\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":36,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"previousOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":32,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"400:2:0\"},\"returnParameters\":{\"id\":35,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":34,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":36,\"src\":\"426:7:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":33,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"426:7:0\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"425:9:0\"},\"scope\":47,\"src\":\"378:57:0\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":41,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"value\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":37,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"454:2:0\"},\"returnParameters\":{\"id\":40,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":39,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":41,\"src\":\"480:4:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":38,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"480:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"479:6:0\"},\"scope\":47,\"src\":\"440:46:0\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":46,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"creationDate\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":42,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"512:2:0\"},\"returnParameters\":{\"id\":45,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":44,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":46,\"src\":\"538:4:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":43,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"538:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"537:6:0\"},\"scope\":47,\"src\":\"491:53:0\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":48,\"src\":\"27:520:0\"}],\"src\":\"0:548:0\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\",\"exportedSymbols\":{\"Deed\":[47]},\"id\":48,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":1,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:0\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"interface\",\"documentation\":null,\"fullyImplemented\":false,\"id\":47,\"linearizedBaseContracts\":[47],\"name\":\"Deed\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"body\":null,\"documentation\":null,\"id\":6,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":4,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":3,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":6,\"src\":\"67:24:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":2,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"67:15:0\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"66:26:0\"},\"returnParameters\":{\"id\":5,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"101:0:0\"},\"scope\":47,\"src\":\"49:53:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":11,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setRegistrar\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":9,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":8,\"name\":\"newRegistrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":11,\"src\":\"129:20:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":7,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"129:7:0\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"128:22:0\"},\"returnParameters\":{\"id\":10,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"159:0:0\"},\"scope\":47,\"src\":\"107:53:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":18,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setBalance\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":16,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":13,\"name\":\"newValue\",\"nodeType\":\"VariableDeclaration\",\"scope\":18,\"src\":\"185:13:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":12,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"185:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":15,\"name\":\"throwOnFailure\",\"nodeType\":\"VariableDeclaration\",\"scope\":18,\"src\":\"200:19:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":14,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"200:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"184:36:0\"},\"returnParameters\":{\"id\":17,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"229:0:0\"},\"scope\":47,\"src\":\"165:65:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":23,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"closeDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":21,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":20,\"name\":\"refundRatio\",\"nodeType\":\"VariableDeclaration\",\"scope\":23,\"src\":\"254:16:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":19,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"254:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"253:18:0\"},\"returnParameters\":{\"id\":22,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"280:0:0\"},\"scope\":47,\"src\":\"235:46:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":26,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"destroyDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":24,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"306:2:0\"},\"returnParameters\":{\"id\":25,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"317:0:0\"},\"scope\":47,\"src\":\"286:32:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":31,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"owner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":27,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"338:2:0\"},\"returnParameters\":{\"id\":30,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":29,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":31,\"src\":\"364:7:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":28,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"364:7:0\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"363:9:0\"},\"scope\":47,\"src\":\"324:49:0\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":36,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"previousOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":32,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"400:2:0\"},\"returnParameters\":{\"id\":35,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":34,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":36,\"src\":\"426:7:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":33,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"426:7:0\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"425:9:0\"},\"scope\":47,\"src\":\"378:57:0\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":41,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"value\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":37,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"454:2:0\"},\"returnParameters\":{\"id\":40,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":39,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":41,\"src\":\"480:4:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":38,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"480:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"479:6:0\"},\"scope\":47,\"src\":\"440:46:0\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":46,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"creationDate\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":42,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"512:2:0\"},\"returnParameters\":{\"id\":45,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":44,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":46,\"src\":\"538:4:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":43,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"538:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"537:6:0\"},\"scope\":47,\"src\":\"491:53:0\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":48,\"src\":\"27:520:0\"}],\"src\":\"0:548:0\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.073Z\",\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}}");

/***/ }),

/***/ 369244:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"DeedImplementation\",\"abi\":[{\"inputs\":[{\"name\":\"initialOwner\",\"type\":\"address\"}],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"DeedClosed\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newRegistrar\",\"type\":\"address\"}],\"name\":\"setRegistrar\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newValue\",\"type\":\"uint256\"},{\"name\":\"throwOnFailure\",\"type\":\"bool\"}],\"name\":\"setBalance\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"refundRatio\",\"type\":\"uint256\"}],\"name\":\"closeDeed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"destroyDeed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"previousOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"value\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"creationDate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.0+commit.1d4f565a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"creationDate\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"destroyDeed\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setOwner\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"value\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"previousOwner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"newValue\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"throwOnFailure\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"setBalance\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"refundRatio\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"closeDeed\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"newRegistrar\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setRegistrar\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"name\\\":\\\"initialOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":false,\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnerChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"DeedClosed\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"details\\\":\\\"The deed can be controlled only by the registrar and can only send ether back to the owner.\\\",\\\"methods\\\":{\\\"closeDeed(uint256)\\\":{\\\"details\\\":\\\"Close a deed and refund a specified fraction of the bid value\\\",\\\"params\\\":{\\\"refundRatio\\\":\\\"The amount*1/1000 to refund\\\"}},\\\"destroyDeed()\\\":{\\\"details\\\":\\\"Close a deed and refund a specified fraction of the bid value\\\"}},\\\"title\\\":\\\"Deed to hold ether in exchange for ownership of a node\\\"},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/DeedImplementation.sol\\\":\\\"DeedImplementation\\\"},\\\"evmVersion\\\":\\\"byzantium\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\\\":{\\\"keccak256\\\":\\\"0x7b4abd2f65e2e093743077b899d0fb4952627ad7ff6104b840f9869f5baa5e96\\\",\\\"urls\\\":[\\\"bzzr://5b8d57c40a5f830516a6fb6d5e03a9293b0129a3bf49b8d48f69c2ec91f90a45\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/DeedImplementation.sol\\\":{\\\"keccak256\\\":\\\"0x91242ba8032d5e01a8a59da84afb4d0d5b1007d4257bde8e6caa20fbc700cdc7\\\",\\\"urls\\\":[\\\"bzzr://b3c449a5f75a92026469cdd531b431c0f0f1cc83f3fc7fc2ef65342176d436e4\\\"]}},\\\"version\\\":1}\",\"bytecode\":\" \",\"deployedBytecode\":\" \",\"sourceMap\":\"220:2768:1:-;;;724:208;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;724:208:1;;;;;;;;;;;;;;;;800:12;791:6;;:21;;;;;;;;;;;;;;;;;;835:10;822;;:23;;;;;;;;;;;;;;;;;;871:3;855:13;:19;;;;893:4;884:6;;:13;;;;;;;;;;;;;;;;;;916:9;907:6;:18;;;;724:208;220:2768;;;;;;\",\"deployedSourceMap\":\"220:2768:1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2507:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2507:83:1;;;;;;;;;;;;;;;;;;;;;;;2170:63;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2170:63:1;;;;;;938:277;;8:9:-1;5:2;;;30:1;27;20:12;5:2;938:277:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;938:277:1;;;;;;;;;;;;;;;;;;;;;;2425:76;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2425:76:1;;;;;;;;;;;;;;;;;;;;;;;2324:95;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2324:95:1;;;;;;;;;;;;;;;;;;;;;;;;;;;2239:79;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2239:79:1;;;;;;;;;;;;;;;;;;;;;;;;;;;1336:347;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1336:347:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1336:347:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1840:234;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1840:234:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1840:234:1;;;;;;;;;;;;;;;;;;;;1221:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1221:109:1;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1221:109:1;;;;;;;;;;;;;;;;;;;;;;2507:83;2554:4;2507:83;:::o;2170:63::-;2212:14;:12;:14::i;:::-;2170:63::o;938:277::-;620:10;;;;;;;;;;;606:24;;:10;:24;;;598:33;;;;;;;;1043:3;1023:24;;:8;:24;;;;1015:33;;;;;;;;1075:6;;;;;;;;;;;1058:14;;:23;;;;;;;;;;;;;;;;;;1163:8;1154:6;;:17;;;;;;;;;;;;;;;;;;1186:22;1199:8;1186:22;;;;;;;;;;;;;;;;;;;;;;938:277;:::o;2425:76::-;2465:4;2488:6;;2481:13;;2425:76;:::o;2324:95::-;2372:7;2398:14;;;;;;;;;;;2391:21;;2324:95;:::o;2239:79::-;2279:7;2305:6;;;;;;;;;;;2298:13;;2239:79;:::o;1336:347::-;620:10;;;;;;;;;;;606:24;;:10;:24;;;598:33;;;;;;;;693:6;;;;;;;;;;;685:15;;;;;;;;1513:8;1503:6;;:18;;1495:27;;;;;;;;1541:8;1532:6;:17;;;;1611:6;;;;;;;;;;;:11;;:45;1647:8;1631:4;1623:21;;;:32;1611:45;;;;;;;;;;;;;;;;;;;;;;;:64;;;;1661:14;1660:15;1611:64;1603:73;;;;;;;;1336:347;;:::o;1840:234::-;620:10;;;;;;;;;;;606:24;;:10;:24;;;598:33;;;;;;;;693:6;;;;;;;;;;;685:15;;;;;;;;1930:5;1921:6;;:14;;;;;;;;;;;;;;;;;;303:6;1953:9;;:62;2010:4;1995;1987:21;;;1972:11;1965:4;:18;1964:44;1963:51;;;;;;;;1953:62;;;;;;;;;;;;;;;;;;;;;;;1945:71;;;;;;;;2031:12;;;;;;;;;;2053:14;:12;:14::i;:::-;1840:234;:::o;1221:109::-;620:10;;;;;;;;;;;606:24;;:10;:24;;;598:33;;;;;;;;1311:12;1298:10;;:25;;;;;;;;;;;;;;;;;;1221:109;:::o;2596:390::-;2648:6;;;;;;;;;;;2647:7;2639:16;;;;;;;;2901:6;;;;;;;;;;;:11;;:34;2921:4;2913:21;;;2901:34;;;;;;;;;;;;;;;;;;;;;;;2897:83;;;303:6;2951:18;;;2897:83;2596:390::o\",\"source\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"./Deed.sol\\\";\\n\\n/**\\n * @title Deed to hold ether in exchange for ownership of a node\\n * @dev The deed can be controlled only by the registrar and can only send ether back to the owner.\\n */\\ncontract DeedImplementation is Deed {\\n\\n    address payable constant burn = address(0xdead);\\n\\n    address payable private _owner;\\n    address private _previousOwner;\\n    address private _registrar;\\n\\n    uint private _creationDate;\\n    uint private _value;\\n\\n    bool active;\\n\\n    event OwnerChanged(address newOwner);\\n    event DeedClosed();\\n\\n    modifier onlyRegistrar {\\n        require(msg.sender == _registrar);\\n        _;\\n    }\\n\\n    modifier onlyActive {\\n        require(active);\\n        _;\\n    }\\n\\n    constructor(address payable initialOwner) public payable {\\n        _owner = initialOwner;\\n        _registrar = msg.sender;\\n        _creationDate = now;\\n        active = true;\\n        _value = msg.value;\\n    }\\n\\n    function setOwner(address payable newOwner) external onlyRegistrar {\\n        require(newOwner != address(0x0));\\n        _previousOwner = _owner;  // This allows contracts to check who sent them the ownership\\n        _owner = newOwner;\\n        emit OwnerChanged(newOwner);\\n    }\\n\\n    function setRegistrar(address newRegistrar) external onlyRegistrar {\\n        _registrar = newRegistrar;\\n    }\\n\\n    function setBalance(uint newValue, bool throwOnFailure) external onlyRegistrar onlyActive {\\n        // Check if it has enough balance to set the value\\n        require(_value >= newValue);\\n        _value = newValue;\\n        // Send the difference to the owner\\n        require(_owner.send(address(this).balance - newValue) || !throwOnFailure);\\n    }\\n\\n    /**\\n     * @dev Close a deed and refund a specified fraction of the bid value\\n     *\\n     * @param refundRatio The amount*1/1000 to refund\\n     */\\n    function closeDeed(uint refundRatio) external onlyRegistrar onlyActive {\\n        active = false;\\n        require(burn.send(((1000 - refundRatio) * address(this).balance)/1000));\\n        emit DeedClosed();\\n        _destroyDeed();\\n    }\\n\\n    /**\\n     * @dev Close a deed and refund a specified fraction of the bid value\\n     */\\n    function destroyDeed() external {\\n        _destroyDeed();\\n    }\\n\\n    function owner() external view returns (address) {\\n        return _owner;\\n    }\\n\\n    function previousOwner() external view returns (address) {\\n        return _previousOwner;\\n    }\\n\\n    function value() external view returns (uint) {\\n        return _value;\\n    }\\n\\n    function creationDate() external view returns (uint) {\\n        _creationDate;\\n    }\\n\\n    function _destroyDeed() internal {\\n        require(!active);\\n\\n        // Instead of selfdestruct(owner), invoke owner fallback function to allow\\n        // owner to log an event if desired; but owner should also be aware that\\n        // its fallback function can also be invoked by setBalance\\n        if (_owner.send(address(this).balance)) {\\n            selfdestruct(burn);\\n        }\\n    }\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/DeedImplementation.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/DeedImplementation.sol\",\"exportedSymbols\":{\"DeedImplementation\":[299]},\"id\":300,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":49,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:1\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\",\"file\":\"./Deed.sol\",\"id\":50,\"nodeType\":\"ImportDirective\",\"scope\":300,\"sourceUnit\":48,\"src\":\"25:20:1\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":51,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"251:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":52,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"251:4:1\"}],\"contractDependencies\":[47],\"contractKind\":\"contract\",\"documentation\":\"@title Deed to hold ether in exchange for ownership of a node\\n@dev The deed can be controlled only by the registrar and can only send ether back to the owner.\",\"fullyImplemented\":true,\"id\":299,\"linearizedBaseContracts\":[299,47],\"name\":\"DeedImplementation\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":57,\"name\":\"burn\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"263:47:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":53,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"263:15:1\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307864656164\",\"id\":55,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"303:6:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_57005_by_1\",\"typeString\":\"int_const 57005\"},\"value\":\"0xdead\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_57005_by_1\",\"typeString\":\"int_const 57005\"}],\"id\":54,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"295:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":56,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"295:15:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"visibility\":\"internal\"},{\"constant\":false,\"id\":59,\"name\":\"_owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"317:30:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":58,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"317:15:1\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":61,\"name\":\"_previousOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"353:30:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":60,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"353:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":63,\"name\":\"_registrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"389:26:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":62,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"389:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":65,\"name\":\"_creationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"422:26:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":64,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"422:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":67,\"name\":\"_value\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"454:19:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":66,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"454:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":69,\"name\":\"active\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"480:11:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":68,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"480:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"},{\"anonymous\":false,\"documentation\":null,\"id\":73,\"name\":\"OwnerChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":72,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":71,\"indexed\":false,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":73,\"src\":\"517:16:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":70,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"517:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"516:18:1\"},\"src\":\"498:37:1\"},{\"anonymous\":false,\"documentation\":null,\"id\":75,\"name\":\"DeedClosed\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":74,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"556:2:1\"},\"src\":\"540:19:1\"},{\"body\":{\"id\":85,\"nodeType\":\"Block\",\"src\":\"588:61:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":81,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":78,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"606:3:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":79,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"606:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"id\":80,\"name\":\"_registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":63,\"src\":\"620:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"606:24:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":77,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"598:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":82,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"598:33:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":83,\"nodeType\":\"ExpressionStatement\",\"src\":\"598:33:1\"},{\"id\":84,\"nodeType\":\"PlaceholderStatement\",\"src\":\"641:1:1\"}]},\"documentation\":null,\"id\":86,\"name\":\"onlyRegistrar\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":76,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"588:0:1\"},\"src\":\"565:84:1\",\"visibility\":\"internal\"},{\"body\":{\"id\":93,\"nodeType\":\"Block\",\"src\":\"675:43:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":89,\"name\":\"active\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":69,\"src\":\"693:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":88,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"685:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":90,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"685:15:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":91,\"nodeType\":\"ExpressionStatement\",\"src\":\"685:15:1\"},{\"id\":92,\"nodeType\":\"PlaceholderStatement\",\"src\":\"710:1:1\"}]},\"documentation\":null,\"id\":94,\"name\":\"onlyActive\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":87,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"675:0:1\"},\"src\":\"655:63:1\",\"visibility\":\"internal\"},{\"body\":{\"id\":121,\"nodeType\":\"Block\",\"src\":\"781:151:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":101,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":99,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"791:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":100,\"name\":\"initialOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":96,\"src\":\"800:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"791:21:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":102,\"nodeType\":\"ExpressionStatement\",\"src\":\"791:21:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":106,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":103,\"name\":\"_registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":63,\"src\":\"822:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":104,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"835:3:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":105,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"835:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"822:23:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":107,\"nodeType\":\"ExpressionStatement\",\"src\":\"822:23:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":110,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":108,\"name\":\"_creationDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":65,\"src\":\"855:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":109,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"871:3:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"855:19:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":111,\"nodeType\":\"ExpressionStatement\",\"src\":\"855:19:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":114,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":112,\"name\":\"active\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":69,\"src\":\"884:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"74727565\",\"id\":113,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"893:4:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"true\"},\"src\":\"884:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":115,\"nodeType\":\"ExpressionStatement\",\"src\":\"884:13:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":119,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":116,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"907:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":117,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"916:3:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":118,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"916:9:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"907:18:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":120,\"nodeType\":\"ExpressionStatement\",\"src\":\"907:18:1\"}]},\"documentation\":null,\"id\":122,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":97,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":96,\"name\":\"initialOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":122,\"src\":\"736:28:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":95,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"736:15:1\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"735:30:1\"},\"returnParameters\":{\"id\":98,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"781:0:1\"},\"scope\":299,\"src\":\"724:208:1\",\"stateMutability\":\"payable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":149,\"nodeType\":\"Block\",\"src\":\"1005:210:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"id\":134,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":130,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":124,\"src\":\"1023:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":132,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1043:3:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":131,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1035:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":133,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1035:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1023:24:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":129,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1015:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":135,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1015:33:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":136,\"nodeType\":\"ExpressionStatement\",\"src\":\"1015:33:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":139,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":137,\"name\":\"_previousOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":61,\"src\":\"1058:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":138,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"1075:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1058:23:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":140,\"nodeType\":\"ExpressionStatement\",\"src\":\"1058:23:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":143,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":141,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"1154:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":142,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":124,\"src\":\"1163:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1154:17:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":144,\"nodeType\":\"ExpressionStatement\",\"src\":\"1154:17:1\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":146,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":124,\"src\":\"1199:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":145,\"name\":\"OwnerChanged\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":73,\"src\":\"1186:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_address_$returns$__$\",\"typeString\":\"function (address)\"}},\"id\":147,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1186:22:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":148,\"nodeType\":\"EmitStatement\",\"src\":\"1181:27:1\"}]},\"documentation\":null,\"id\":150,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":127,\"modifierName\":{\"argumentTypes\":null,\"id\":126,\"name\":\"onlyRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":86,\"src\":\"991:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"991:13:1\"}],\"name\":\"setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":125,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":124,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":150,\"src\":\"956:24:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":123,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"956:15:1\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"955:26:1\"},\"returnParameters\":{\"id\":128,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1005:0:1\"},\"scope\":299,\"src\":\"938:277:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":6,\"visibility\":\"external\"},{\"body\":{\"id\":161,\"nodeType\":\"Block\",\"src\":\"1288:42:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":159,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":157,\"name\":\"_registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":63,\"src\":\"1298:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":158,\"name\":\"newRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":152,\"src\":\"1311:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"1298:25:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":160,\"nodeType\":\"ExpressionStatement\",\"src\":\"1298:25:1\"}]},\"documentation\":null,\"id\":162,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":155,\"modifierName\":{\"argumentTypes\":null,\"id\":154,\"name\":\"onlyRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":86,\"src\":\"1274:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1274:13:1\"}],\"name\":\"setRegistrar\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":153,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":152,\"name\":\"newRegistrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":162,\"src\":\"1243:20:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":151,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1243:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1242:22:1\"},\"returnParameters\":{\"id\":156,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1288:0:1\"},\"scope\":299,\"src\":\"1221:109:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":11,\"visibility\":\"external\"},{\"body\":{\"id\":198,\"nodeType\":\"Block\",\"src\":\"1426:257:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":176,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":174,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"1503:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":175,\"name\":\"newValue\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":164,\"src\":\"1513:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1503:18:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":173,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1495:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":177,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1495:27:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":178,\"nodeType\":\"ExpressionStatement\",\"src\":\"1495:27:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":181,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":179,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"1532:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":180,\"name\":\"newValue\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":164,\"src\":\"1541:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1532:17:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":182,\"nodeType\":\"ExpressionStatement\",\"src\":\"1532:17:1\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":195,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":191,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":187,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3047,\"src\":\"1631:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}],\"id\":186,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1623:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":188,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1623:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":189,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"balance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1623:21:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":190,\"name\":\"newValue\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":164,\"src\":\"1647:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1623:32:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":184,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"1611:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":185,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"send\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1611:11:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$\",\"typeString\":\"function (uint256) returns (bool)\"}},\"id\":192,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1611:45:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"id\":194,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"1660:15:1\",\"subExpression\":{\"argumentTypes\":null,\"id\":193,\"name\":\"throwOnFailure\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":166,\"src\":\"1661:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1611:64:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":183,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1603:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":196,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1603:73:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":197,\"nodeType\":\"ExpressionStatement\",\"src\":\"1603:73:1\"}]},\"documentation\":null,\"id\":199,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":169,\"modifierName\":{\"argumentTypes\":null,\"id\":168,\"name\":\"onlyRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":86,\"src\":\"1401:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1401:13:1\"},{\"arguments\":null,\"id\":171,\"modifierName\":{\"argumentTypes\":null,\"id\":170,\"name\":\"onlyActive\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":94,\"src\":\"1415:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1415:10:1\"}],\"name\":\"setBalance\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":167,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":164,\"name\":\"newValue\",\"nodeType\":\"VariableDeclaration\",\"scope\":199,\"src\":\"1356:13:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":163,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1356:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":166,\"name\":\"throwOnFailure\",\"nodeType\":\"VariableDeclaration\",\"scope\":199,\"src\":\"1371:19:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":165,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1371:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1355:36:1\"},\"returnParameters\":{\"id\":172,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1426:0:1\"},\"scope\":299,\"src\":\"1336:347:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":18,\"visibility\":\"external\"},{\"body\":{\"id\":236,\"nodeType\":\"Block\",\"src\":\"1911:163:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":210,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":208,\"name\":\"active\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":69,\"src\":\"1921:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"66616c7365\",\"id\":209,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1930:5:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"false\"},\"src\":\"1921:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":211,\"nodeType\":\"ExpressionStatement\",\"src\":\"1921:14:1\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":226,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":223,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":217,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"hexValue\":\"31303030\",\"id\":215,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1965:4:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"},\"value\":\"1000\"},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":216,\"name\":\"refundRatio\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":201,\"src\":\"1972:11:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1965:18:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":218,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"1964:20:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"*\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":220,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3047,\"src\":\"1995:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}],\"id\":219,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1987:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":221,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1987:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":222,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"balance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1987:21:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1964:44:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":224,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"1963:46:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"/\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31303030\",\"id\":225,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2010:4:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"},\"value\":\"1000\"},\"src\":\"1963:51:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":213,\"name\":\"burn\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":57,\"src\":\"1953:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":214,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"send\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1953:9:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$\",\"typeString\":\"function (uint256) returns (bool)\"}},\"id\":227,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1953:62:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":212,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1945:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":228,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1945:71:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":229,\"nodeType\":\"ExpressionStatement\",\"src\":\"1945:71:1\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":230,\"name\":\"DeedClosed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":75,\"src\":\"2031:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$__$returns$__$\",\"typeString\":\"function ()\"}},\"id\":231,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2031:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":232,\"nodeType\":\"EmitStatement\",\"src\":\"2026:17:1\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":233,\"name\":\"_destroyDeed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2053:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$__$returns$__$\",\"typeString\":\"function ()\"}},\"id\":234,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2053:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":235,\"nodeType\":\"ExpressionStatement\",\"src\":\"2053:14:1\"}]},\"documentation\":\"@dev Close a deed and refund a specified fraction of the bid value\\n     * @param refundRatio The amount*1/1000 to refund\",\"id\":237,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":204,\"modifierName\":{\"argumentTypes\":null,\"id\":203,\"name\":\"onlyRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":86,\"src\":\"1886:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1886:13:1\"},{\"arguments\":null,\"id\":206,\"modifierName\":{\"argumentTypes\":null,\"id\":205,\"name\":\"onlyActive\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":94,\"src\":\"1900:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1900:10:1\"}],\"name\":\"closeDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":202,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":201,\"name\":\"refundRatio\",\"nodeType\":\"VariableDeclaration\",\"scope\":237,\"src\":\"1859:16:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":200,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1859:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1858:18:1\"},\"returnParameters\":{\"id\":207,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1911:0:1\"},\"scope\":299,\"src\":\"1840:234:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":23,\"visibility\":\"external\"},{\"body\":{\"id\":243,\"nodeType\":\"Block\",\"src\":\"2202:31:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":240,\"name\":\"_destroyDeed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2212:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$__$returns$__$\",\"typeString\":\"function ()\"}},\"id\":241,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2212:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":242,\"nodeType\":\"ExpressionStatement\",\"src\":\"2212:14:1\"}]},\"documentation\":\"@dev Close a deed and refund a specified fraction of the bid value\",\"id\":244,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"destroyDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":238,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2190:2:1\"},\"returnParameters\":{\"id\":239,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2202:0:1\"},\"scope\":299,\"src\":\"2170:63:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":26,\"visibility\":\"external\"},{\"body\":{\"id\":251,\"nodeType\":\"Block\",\"src\":\"2288:30:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":249,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"2305:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"functionReturnParameters\":248,\"id\":250,\"nodeType\":\"Return\",\"src\":\"2298:13:1\"}]},\"documentation\":null,\"id\":252,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"owner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":245,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2253:2:1\"},\"returnParameters\":{\"id\":248,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":247,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":252,\"src\":\"2279:7:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":246,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2279:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2278:9:1\"},\"scope\":299,\"src\":\"2239:79:1\",\"stateMutability\":\"view\",\"superFunction\":31,\"visibility\":\"external\"},{\"body\":{\"id\":259,\"nodeType\":\"Block\",\"src\":\"2381:38:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":257,\"name\":\"_previousOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":61,\"src\":\"2398:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"functionReturnParameters\":256,\"id\":258,\"nodeType\":\"Return\",\"src\":\"2391:21:1\"}]},\"documentation\":null,\"id\":260,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"previousOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":253,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2346:2:1\"},\"returnParameters\":{\"id\":256,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":255,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":260,\"src\":\"2372:7:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":254,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2372:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2371:9:1\"},\"scope\":299,\"src\":\"2324:95:1\",\"stateMutability\":\"view\",\"superFunction\":36,\"visibility\":\"external\"},{\"body\":{\"id\":267,\"nodeType\":\"Block\",\"src\":\"2471:30:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":265,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"2488:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":264,\"id\":266,\"nodeType\":\"Return\",\"src\":\"2481:13:1\"}]},\"documentation\":null,\"id\":268,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"value\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":261,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2439:2:1\"},\"returnParameters\":{\"id\":264,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":263,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":268,\"src\":\"2465:4:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":262,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2465:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2464:6:1\"},\"scope\":299,\"src\":\"2425:76:1\",\"stateMutability\":\"view\",\"superFunction\":41,\"visibility\":\"external\"},{\"body\":{\"id\":275,\"nodeType\":\"Block\",\"src\":\"2560:30:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":273,\"name\":\"_creationDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":65,\"src\":\"2570:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":274,\"nodeType\":\"ExpressionStatement\",\"src\":\"2570:13:1\"}]},\"documentation\":null,\"id\":276,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"creationDate\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":269,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2528:2:1\"},\"returnParameters\":{\"id\":272,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":271,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":276,\"src\":\"2554:4:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":270,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2554:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2553:6:1\"},\"scope\":299,\"src\":\"2507:83:1\",\"stateMutability\":\"view\",\"superFunction\":46,\"visibility\":\"external\"},{\"body\":{\"id\":297,\"nodeType\":\"Block\",\"src\":\"2629:357:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":281,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"2647:7:1\",\"subExpression\":{\"argumentTypes\":null,\"id\":280,\"name\":\"active\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":69,\"src\":\"2648:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":279,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"2639:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":282,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2639:16:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":283,\"nodeType\":\"ExpressionStatement\",\"src\":\"2639:16:1\"},{\"condition\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":287,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3047,\"src\":\"2921:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}],\"id\":286,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2913:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":288,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2913:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":289,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"balance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2913:21:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":284,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"2901:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":285,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"send\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2901:11:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$\",\"typeString\":\"function (uint256) returns (bool)\"}},\"id\":290,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2901:34:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":296,\"nodeType\":\"IfStatement\",\"src\":\"2897:83:1\",\"trueBody\":{\"id\":295,\"nodeType\":\"Block\",\"src\":\"2937:43:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":292,\"name\":\"burn\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":57,\"src\":\"2964:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":291,\"name\":\"selfdestruct\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3040,\"src\":\"2951:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$\",\"typeString\":\"function (address payable)\"}},\"id\":293,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2951:18:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":294,\"nodeType\":\"ExpressionStatement\",\"src\":\"2951:18:1\"}]}}]},\"documentation\":null,\"id\":298,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_destroyDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":277,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2617:2:1\"},\"returnParameters\":{\"id\":278,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2629:0:1\"},\"scope\":299,\"src\":\"2596:390:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"}],\"scope\":300,\"src\":\"220:2768:1\"}],\"src\":\"0:2989:1\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/DeedImplementation.sol\",\"exportedSymbols\":{\"DeedImplementation\":[299]},\"id\":300,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":49,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:1\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\",\"file\":\"./Deed.sol\",\"id\":50,\"nodeType\":\"ImportDirective\",\"scope\":300,\"sourceUnit\":48,\"src\":\"25:20:1\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":51,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"251:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":52,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"251:4:1\"}],\"contractDependencies\":[47],\"contractKind\":\"contract\",\"documentation\":\"@title Deed to hold ether in exchange for ownership of a node\\n@dev The deed can be controlled only by the registrar and can only send ether back to the owner.\",\"fullyImplemented\":true,\"id\":299,\"linearizedBaseContracts\":[299,47],\"name\":\"DeedImplementation\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":57,\"name\":\"burn\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"263:47:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":53,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"263:15:1\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307864656164\",\"id\":55,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"303:6:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_57005_by_1\",\"typeString\":\"int_const 57005\"},\"value\":\"0xdead\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_57005_by_1\",\"typeString\":\"int_const 57005\"}],\"id\":54,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"295:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":56,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"295:15:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"visibility\":\"internal\"},{\"constant\":false,\"id\":59,\"name\":\"_owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"317:30:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":58,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"317:15:1\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":61,\"name\":\"_previousOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"353:30:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":60,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"353:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":63,\"name\":\"_registrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"389:26:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":62,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"389:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":65,\"name\":\"_creationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"422:26:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":64,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"422:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":67,\"name\":\"_value\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"454:19:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":66,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"454:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":69,\"name\":\"active\",\"nodeType\":\"VariableDeclaration\",\"scope\":299,\"src\":\"480:11:1\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":68,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"480:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"},{\"anonymous\":false,\"documentation\":null,\"id\":73,\"name\":\"OwnerChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":72,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":71,\"indexed\":false,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":73,\"src\":\"517:16:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":70,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"517:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"516:18:1\"},\"src\":\"498:37:1\"},{\"anonymous\":false,\"documentation\":null,\"id\":75,\"name\":\"DeedClosed\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":74,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"556:2:1\"},\"src\":\"540:19:1\"},{\"body\":{\"id\":85,\"nodeType\":\"Block\",\"src\":\"588:61:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":81,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":78,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"606:3:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":79,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"606:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"id\":80,\"name\":\"_registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":63,\"src\":\"620:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"606:24:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":77,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"598:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":82,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"598:33:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":83,\"nodeType\":\"ExpressionStatement\",\"src\":\"598:33:1\"},{\"id\":84,\"nodeType\":\"PlaceholderStatement\",\"src\":\"641:1:1\"}]},\"documentation\":null,\"id\":86,\"name\":\"onlyRegistrar\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":76,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"588:0:1\"},\"src\":\"565:84:1\",\"visibility\":\"internal\"},{\"body\":{\"id\":93,\"nodeType\":\"Block\",\"src\":\"675:43:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":89,\"name\":\"active\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":69,\"src\":\"693:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":88,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"685:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":90,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"685:15:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":91,\"nodeType\":\"ExpressionStatement\",\"src\":\"685:15:1\"},{\"id\":92,\"nodeType\":\"PlaceholderStatement\",\"src\":\"710:1:1\"}]},\"documentation\":null,\"id\":94,\"name\":\"onlyActive\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":87,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"675:0:1\"},\"src\":\"655:63:1\",\"visibility\":\"internal\"},{\"body\":{\"id\":121,\"nodeType\":\"Block\",\"src\":\"781:151:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":101,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":99,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"791:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":100,\"name\":\"initialOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":96,\"src\":\"800:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"791:21:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":102,\"nodeType\":\"ExpressionStatement\",\"src\":\"791:21:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":106,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":103,\"name\":\"_registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":63,\"src\":\"822:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":104,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"835:3:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":105,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"835:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"822:23:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":107,\"nodeType\":\"ExpressionStatement\",\"src\":\"822:23:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":110,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":108,\"name\":\"_creationDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":65,\"src\":\"855:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":109,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"871:3:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"855:19:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":111,\"nodeType\":\"ExpressionStatement\",\"src\":\"855:19:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":114,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":112,\"name\":\"active\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":69,\"src\":\"884:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"74727565\",\"id\":113,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"893:4:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"true\"},\"src\":\"884:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":115,\"nodeType\":\"ExpressionStatement\",\"src\":\"884:13:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":119,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":116,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"907:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":117,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"916:3:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":118,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"916:9:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"907:18:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":120,\"nodeType\":\"ExpressionStatement\",\"src\":\"907:18:1\"}]},\"documentation\":null,\"id\":122,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":97,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":96,\"name\":\"initialOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":122,\"src\":\"736:28:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":95,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"736:15:1\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"735:30:1\"},\"returnParameters\":{\"id\":98,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"781:0:1\"},\"scope\":299,\"src\":\"724:208:1\",\"stateMutability\":\"payable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":149,\"nodeType\":\"Block\",\"src\":\"1005:210:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"id\":134,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":130,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":124,\"src\":\"1023:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":132,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1043:3:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":131,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1035:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":133,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1035:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1023:24:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":129,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1015:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":135,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1015:33:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":136,\"nodeType\":\"ExpressionStatement\",\"src\":\"1015:33:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":139,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":137,\"name\":\"_previousOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":61,\"src\":\"1058:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":138,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"1075:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1058:23:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":140,\"nodeType\":\"ExpressionStatement\",\"src\":\"1058:23:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":143,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":141,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"1154:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":142,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":124,\"src\":\"1163:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1154:17:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":144,\"nodeType\":\"ExpressionStatement\",\"src\":\"1154:17:1\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":146,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":124,\"src\":\"1199:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":145,\"name\":\"OwnerChanged\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":73,\"src\":\"1186:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_address_$returns$__$\",\"typeString\":\"function (address)\"}},\"id\":147,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1186:22:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":148,\"nodeType\":\"EmitStatement\",\"src\":\"1181:27:1\"}]},\"documentation\":null,\"id\":150,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":127,\"modifierName\":{\"argumentTypes\":null,\"id\":126,\"name\":\"onlyRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":86,\"src\":\"991:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"991:13:1\"}],\"name\":\"setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":125,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":124,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":150,\"src\":\"956:24:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":123,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"956:15:1\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"955:26:1\"},\"returnParameters\":{\"id\":128,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1005:0:1\"},\"scope\":299,\"src\":\"938:277:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":6,\"visibility\":\"external\"},{\"body\":{\"id\":161,\"nodeType\":\"Block\",\"src\":\"1288:42:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":159,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":157,\"name\":\"_registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":63,\"src\":\"1298:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":158,\"name\":\"newRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":152,\"src\":\"1311:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"1298:25:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":160,\"nodeType\":\"ExpressionStatement\",\"src\":\"1298:25:1\"}]},\"documentation\":null,\"id\":162,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":155,\"modifierName\":{\"argumentTypes\":null,\"id\":154,\"name\":\"onlyRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":86,\"src\":\"1274:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1274:13:1\"}],\"name\":\"setRegistrar\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":153,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":152,\"name\":\"newRegistrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":162,\"src\":\"1243:20:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":151,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1243:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1242:22:1\"},\"returnParameters\":{\"id\":156,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1288:0:1\"},\"scope\":299,\"src\":\"1221:109:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":11,\"visibility\":\"external\"},{\"body\":{\"id\":198,\"nodeType\":\"Block\",\"src\":\"1426:257:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":176,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":174,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"1503:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":175,\"name\":\"newValue\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":164,\"src\":\"1513:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1503:18:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":173,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1495:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":177,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1495:27:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":178,\"nodeType\":\"ExpressionStatement\",\"src\":\"1495:27:1\"},{\"expression\":{\"argumentTypes\":null,\"id\":181,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":179,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"1532:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":180,\"name\":\"newValue\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":164,\"src\":\"1541:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1532:17:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":182,\"nodeType\":\"ExpressionStatement\",\"src\":\"1532:17:1\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":195,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":191,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":187,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3047,\"src\":\"1631:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}],\"id\":186,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1623:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":188,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1623:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":189,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"balance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1623:21:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":190,\"name\":\"newValue\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":164,\"src\":\"1647:8:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1623:32:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":184,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"1611:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":185,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"send\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1611:11:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$\",\"typeString\":\"function (uint256) returns (bool)\"}},\"id\":192,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1611:45:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"id\":194,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"1660:15:1\",\"subExpression\":{\"argumentTypes\":null,\"id\":193,\"name\":\"throwOnFailure\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":166,\"src\":\"1661:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1611:64:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":183,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1603:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":196,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1603:73:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":197,\"nodeType\":\"ExpressionStatement\",\"src\":\"1603:73:1\"}]},\"documentation\":null,\"id\":199,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":169,\"modifierName\":{\"argumentTypes\":null,\"id\":168,\"name\":\"onlyRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":86,\"src\":\"1401:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1401:13:1\"},{\"arguments\":null,\"id\":171,\"modifierName\":{\"argumentTypes\":null,\"id\":170,\"name\":\"onlyActive\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":94,\"src\":\"1415:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1415:10:1\"}],\"name\":\"setBalance\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":167,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":164,\"name\":\"newValue\",\"nodeType\":\"VariableDeclaration\",\"scope\":199,\"src\":\"1356:13:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":163,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1356:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":166,\"name\":\"throwOnFailure\",\"nodeType\":\"VariableDeclaration\",\"scope\":199,\"src\":\"1371:19:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":165,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1371:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1355:36:1\"},\"returnParameters\":{\"id\":172,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1426:0:1\"},\"scope\":299,\"src\":\"1336:347:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":18,\"visibility\":\"external\"},{\"body\":{\"id\":236,\"nodeType\":\"Block\",\"src\":\"1911:163:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":210,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":208,\"name\":\"active\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":69,\"src\":\"1921:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"66616c7365\",\"id\":209,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1930:5:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"false\"},\"src\":\"1921:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":211,\"nodeType\":\"ExpressionStatement\",\"src\":\"1921:14:1\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":226,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":223,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":217,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"hexValue\":\"31303030\",\"id\":215,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1965:4:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"},\"value\":\"1000\"},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":216,\"name\":\"refundRatio\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":201,\"src\":\"1972:11:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1965:18:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":218,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"1964:20:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"*\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":220,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3047,\"src\":\"1995:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}],\"id\":219,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1987:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":221,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1987:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":222,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"balance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1987:21:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1964:44:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":224,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"1963:46:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"/\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31303030\",\"id\":225,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2010:4:1\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"},\"value\":\"1000\"},\"src\":\"1963:51:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":213,\"name\":\"burn\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":57,\"src\":\"1953:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":214,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"send\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1953:9:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$\",\"typeString\":\"function (uint256) returns (bool)\"}},\"id\":227,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1953:62:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":212,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1945:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":228,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1945:71:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":229,\"nodeType\":\"ExpressionStatement\",\"src\":\"1945:71:1\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":230,\"name\":\"DeedClosed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":75,\"src\":\"2031:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$__$returns$__$\",\"typeString\":\"function ()\"}},\"id\":231,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2031:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":232,\"nodeType\":\"EmitStatement\",\"src\":\"2026:17:1\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":233,\"name\":\"_destroyDeed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2053:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$__$returns$__$\",\"typeString\":\"function ()\"}},\"id\":234,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2053:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":235,\"nodeType\":\"ExpressionStatement\",\"src\":\"2053:14:1\"}]},\"documentation\":\"@dev Close a deed and refund a specified fraction of the bid value\\n     * @param refundRatio The amount*1/1000 to refund\",\"id\":237,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":204,\"modifierName\":{\"argumentTypes\":null,\"id\":203,\"name\":\"onlyRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":86,\"src\":\"1886:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1886:13:1\"},{\"arguments\":null,\"id\":206,\"modifierName\":{\"argumentTypes\":null,\"id\":205,\"name\":\"onlyActive\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":94,\"src\":\"1900:10:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1900:10:1\"}],\"name\":\"closeDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":202,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":201,\"name\":\"refundRatio\",\"nodeType\":\"VariableDeclaration\",\"scope\":237,\"src\":\"1859:16:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":200,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1859:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1858:18:1\"},\"returnParameters\":{\"id\":207,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1911:0:1\"},\"scope\":299,\"src\":\"1840:234:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":23,\"visibility\":\"external\"},{\"body\":{\"id\":243,\"nodeType\":\"Block\",\"src\":\"2202:31:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":240,\"name\":\"_destroyDeed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2212:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$__$returns$__$\",\"typeString\":\"function ()\"}},\"id\":241,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2212:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":242,\"nodeType\":\"ExpressionStatement\",\"src\":\"2212:14:1\"}]},\"documentation\":\"@dev Close a deed and refund a specified fraction of the bid value\",\"id\":244,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"destroyDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":238,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2190:2:1\"},\"returnParameters\":{\"id\":239,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2202:0:1\"},\"scope\":299,\"src\":\"2170:63:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":26,\"visibility\":\"external\"},{\"body\":{\"id\":251,\"nodeType\":\"Block\",\"src\":\"2288:30:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":249,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"2305:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"functionReturnParameters\":248,\"id\":250,\"nodeType\":\"Return\",\"src\":\"2298:13:1\"}]},\"documentation\":null,\"id\":252,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"owner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":245,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2253:2:1\"},\"returnParameters\":{\"id\":248,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":247,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":252,\"src\":\"2279:7:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":246,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2279:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2278:9:1\"},\"scope\":299,\"src\":\"2239:79:1\",\"stateMutability\":\"view\",\"superFunction\":31,\"visibility\":\"external\"},{\"body\":{\"id\":259,\"nodeType\":\"Block\",\"src\":\"2381:38:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":257,\"name\":\"_previousOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":61,\"src\":\"2398:14:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"functionReturnParameters\":256,\"id\":258,\"nodeType\":\"Return\",\"src\":\"2391:21:1\"}]},\"documentation\":null,\"id\":260,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"previousOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":253,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2346:2:1\"},\"returnParameters\":{\"id\":256,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":255,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":260,\"src\":\"2372:7:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":254,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2372:7:1\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2371:9:1\"},\"scope\":299,\"src\":\"2324:95:1\",\"stateMutability\":\"view\",\"superFunction\":36,\"visibility\":\"external\"},{\"body\":{\"id\":267,\"nodeType\":\"Block\",\"src\":\"2471:30:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":265,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"2488:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":264,\"id\":266,\"nodeType\":\"Return\",\"src\":\"2481:13:1\"}]},\"documentation\":null,\"id\":268,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"value\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":261,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2439:2:1\"},\"returnParameters\":{\"id\":264,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":263,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":268,\"src\":\"2465:4:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":262,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2465:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2464:6:1\"},\"scope\":299,\"src\":\"2425:76:1\",\"stateMutability\":\"view\",\"superFunction\":41,\"visibility\":\"external\"},{\"body\":{\"id\":275,\"nodeType\":\"Block\",\"src\":\"2560:30:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":273,\"name\":\"_creationDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":65,\"src\":\"2570:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":274,\"nodeType\":\"ExpressionStatement\",\"src\":\"2570:13:1\"}]},\"documentation\":null,\"id\":276,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"creationDate\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":269,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2528:2:1\"},\"returnParameters\":{\"id\":272,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":271,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":276,\"src\":\"2554:4:1\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":270,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2554:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2553:6:1\"},\"scope\":299,\"src\":\"2507:83:1\",\"stateMutability\":\"view\",\"superFunction\":46,\"visibility\":\"external\"},{\"body\":{\"id\":297,\"nodeType\":\"Block\",\"src\":\"2629:357:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":281,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"2647:7:1\",\"subExpression\":{\"argumentTypes\":null,\"id\":280,\"name\":\"active\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":69,\"src\":\"2648:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":279,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"2639:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":282,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2639:16:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":283,\"nodeType\":\"ExpressionStatement\",\"src\":\"2639:16:1\"},{\"condition\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":287,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3047,\"src\":\"2921:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}],\"id\":286,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2913:7:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":288,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2913:13:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":289,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"balance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2913:21:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":284,\"name\":\"_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":59,\"src\":\"2901:6:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"id\":285,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"send\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2901:11:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_send_nonpayable$_t_uint256_$returns$_t_bool_$\",\"typeString\":\"function (uint256) returns (bool)\"}},\"id\":290,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2901:34:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":296,\"nodeType\":\"IfStatement\",\"src\":\"2897:83:1\",\"trueBody\":{\"id\":295,\"nodeType\":\"Block\",\"src\":\"2937:43:1\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":292,\"name\":\"burn\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":57,\"src\":\"2964:4:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":291,\"name\":\"selfdestruct\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3040,\"src\":\"2951:12:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_selfdestruct_nonpayable$_t_address_payable_$returns$__$\",\"typeString\":\"function (address payable)\"}},\"id\":293,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2951:18:1\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":294,\"nodeType\":\"ExpressionStatement\",\"src\":\"2951:18:1\"}]}}]},\"documentation\":null,\"id\":298,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_destroyDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":277,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2617:2:1\"},\"returnParameters\":{\"id\":278,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2629:0:1\"},\"scope\":299,\"src\":\"2596:390:1\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"}],\"scope\":300,\"src\":\"220:2768:1\"}],\"src\":\"0:2989:1\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.075Z\",\"devdoc\":{\"details\":\"The deed can be controlled only by the registrar and can only send ether back to the owner.\",\"methods\":{\"closeDeed(uint256)\":{\"details\":\"Close a deed and refund a specified fraction of the bid value\",\"params\":{\"refundRatio\":\"The amount*1/1000 to refund\"}},\"destroyDeed()\":{\"details\":\"Close a deed and refund a specified fraction of the bid value\"}},\"title\":\"Deed to hold ether in exchange for ownership of a node\"},\"userdoc\":{\"methods\":{}}}");

/***/ }),

/***/ 120650:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"ENS\",\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"label\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"resolver\",\"type\":\"address\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setRecord\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"resolver\",\"type\":\"address\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setSubnodeRecord\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"recordExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"metadata\":\"\",\"bytecode\":\"0x\",\"deployedBytecode\":\"0x\",\"sourceMap\":\"\",\"deployedSourceMap\":\"\",\"source\":\"pragma solidity >=0.4.24;\\n\\ninterface ENS {\\n\\n    // Logged when the owner of a node assigns a new owner to a subnode.\\n    event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);\\n\\n    // Logged when the owner of a node transfers ownership to a new account.\\n    event Transfer(bytes32 indexed node, address owner);\\n\\n    // Logged when the resolver for a node changes.\\n    event NewResolver(bytes32 indexed node, address resolver);\\n\\n    // Logged when the TTL of a node changes\\n    event NewTTL(bytes32 indexed node, uint64 ttl);\\n\\n    // Logged when an operator is added or removed.\\n    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);\\n\\n    function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external;\\n    function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external;\\n    function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external returns(bytes32);\\n    function setResolver(bytes32 node, address resolver) external;\\n    function setOwner(bytes32 node, address owner) external;\\n    function setTTL(bytes32 node, uint64 ttl) external;\\n    function setApprovalForAll(address operator, bool approved) external;\\n    function owner(bytes32 node) external view returns (address);\\n    function resolver(bytes32 node) external view returns (address);\\n    function ttl(bytes32 node) external view returns (uint64);\\n    function recordExists(bytes32 node) external view returns (bool);\\n    function isApprovedForAll(address owner, address operator) external view returns (bool);\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"exportedSymbols\":{\"ENS\":[436]},\"id\":437,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":301,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:2\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"interface\",\"documentation\":null,\"fullyImplemented\":false,\"id\":436,\"linearizedBaseContracts\":[436],\"name\":\"ENS\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"anonymous\":false,\"documentation\":null,\"id\":309,\"name\":\"NewOwner\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":308,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":303,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":309,\"src\":\"136:20:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":302,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"136:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":305,\"indexed\":true,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":309,\"src\":\"158:21:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":304,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"158:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":307,\"indexed\":false,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":309,\"src\":\"181:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":306,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"181:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"135:60:2\"},\"src\":\"121:75:2\"},{\"anonymous\":false,\"documentation\":null,\"id\":315,\"name\":\"Transfer\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":314,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":311,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":315,\"src\":\"294:20:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":310,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"294:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":313,\"indexed\":false,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":315,\"src\":\"316:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":312,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"316:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"293:37:2\"},\"src\":\"279:52:2\"},{\"anonymous\":false,\"documentation\":null,\"id\":321,\"name\":\"NewResolver\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":320,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":317,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":321,\"src\":\"407:20:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":316,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"407:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":319,\"indexed\":false,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":321,\"src\":\"429:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":318,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"429:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"406:40:2\"},\"src\":\"389:58:2\"},{\"anonymous\":false,\"documentation\":null,\"id\":327,\"name\":\"NewTTL\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":326,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":323,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":327,\"src\":\"511:20:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":322,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"511:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":325,\"indexed\":false,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":327,\"src\":\"533:10:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":324,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"533:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"510:34:2\"},\"src\":\"498:47:2\"},{\"anonymous\":false,\"documentation\":null,\"id\":335,\"name\":\"ApprovalForAll\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":334,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":329,\"indexed\":true,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":335,\"src\":\"624:21:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":328,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"624:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":331,\"indexed\":true,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":335,\"src\":\"647:24:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":330,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"647:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":333,\"indexed\":false,\"name\":\"approved\",\"nodeType\":\"VariableDeclaration\",\"scope\":335,\"src\":\"673:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":332,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"673:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"623:64:2\"},\"src\":\"603:85:2\"},{\"body\":null,\"documentation\":null,\"id\":346,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":344,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":337,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":346,\"src\":\"713:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":336,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"713:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":339,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":346,\"src\":\"727:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":338,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"727:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":341,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":346,\"src\":\"742:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":340,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"742:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":343,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":346,\"src\":\"760:10:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":342,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"760:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"712:59:2\"},\"returnParameters\":{\"id\":345,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"780:0:2\"},\"scope\":436,\"src\":\"694:87:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":359,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setSubnodeRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":357,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":348,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"812:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":347,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"812:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":350,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"826:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":349,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"826:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":352,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"841:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":351,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"841:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":354,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"856:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":353,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"856:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":356,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"874:10:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":355,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"874:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"811:74:2\"},\"returnParameters\":{\"id\":358,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"894:0:2\"},\"scope\":436,\"src\":\"786:109:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":370,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setSubnodeOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":366,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":361,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":370,\"src\":\"925:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":360,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"925:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":363,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":370,\"src\":\"939:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":362,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"939:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":365,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":370,\"src\":\"954:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":364,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"954:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"924:44:2\"},\"returnParameters\":{\"id\":369,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":368,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":370,\"src\":\"986:7:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":367,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"986:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"985:9:2\"},\"scope\":436,\"src\":\"900:95:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":377,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setResolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":375,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":372,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":377,\"src\":\"1021:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":371,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1021:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":374,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":377,\"src\":\"1035:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":373,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1035:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1020:32:2\"},\"returnParameters\":{\"id\":376,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1061:0:2\"},\"scope\":436,\"src\":\"1000:62:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":384,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":382,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":379,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":384,\"src\":\"1085:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":378,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1085:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":381,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":384,\"src\":\"1099:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":380,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1099:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1084:29:2\"},\"returnParameters\":{\"id\":383,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1122:0:2\"},\"scope\":436,\"src\":\"1067:56:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":391,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setTTL\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":389,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":386,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":391,\"src\":\"1144:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":385,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1144:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":388,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":391,\"src\":\"1158:10:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":387,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1158:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1143:26:2\"},\"returnParameters\":{\"id\":390,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1178:0:2\"},\"scope\":436,\"src\":\"1128:51:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":398,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setApprovalForAll\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":396,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":393,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":398,\"src\":\"1211:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":392,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1211:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":395,\"name\":\"approved\",\"nodeType\":\"VariableDeclaration\",\"scope\":398,\"src\":\"1229:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":394,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1229:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1210:33:2\"},\"returnParameters\":{\"id\":397,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1252:0:2\"},\"scope\":436,\"src\":\"1184:69:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":405,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"owner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":401,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":400,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":405,\"src\":\"1273:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":399,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1273:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1272:14:2\"},\"returnParameters\":{\"id\":404,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":403,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":405,\"src\":\"1310:7:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":402,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1310:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1309:9:2\"},\"scope\":436,\"src\":\"1258:61:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":412,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"resolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":408,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":407,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":412,\"src\":\"1342:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":406,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1342:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1341:14:2\"},\"returnParameters\":{\"id\":411,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":410,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":412,\"src\":\"1379:7:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":409,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1379:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1378:9:2\"},\"scope\":436,\"src\":\"1324:64:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":419,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"ttl\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":415,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":414,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":419,\"src\":\"1406:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":413,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1406:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1405:14:2\"},\"returnParameters\":{\"id\":418,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":417,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":419,\"src\":\"1443:6:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":416,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1443:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1442:8:2\"},\"scope\":436,\"src\":\"1393:58:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":426,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"recordExists\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":422,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":421,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":426,\"src\":\"1478:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":420,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1478:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1477:14:2\"},\"returnParameters\":{\"id\":425,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":424,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":426,\"src\":\"1515:4:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":423,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1515:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1514:6:2\"},\"scope\":436,\"src\":\"1456:65:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":435,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isApprovedForAll\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":431,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":428,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":435,\"src\":\"1552:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":427,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1552:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":430,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":435,\"src\":\"1567:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":429,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1567:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1551:33:2\"},\"returnParameters\":{\"id\":434,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":433,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":435,\"src\":\"1608:4:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":432,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1608:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1607:6:2\"},\"scope\":436,\"src\":\"1526:88:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":437,\"src\":\"27:1589:2\"}],\"src\":\"0:1617:2\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"exportedSymbols\":{\"ENS\":[436]},\"id\":437,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":301,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:2\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"interface\",\"documentation\":null,\"fullyImplemented\":false,\"id\":436,\"linearizedBaseContracts\":[436],\"name\":\"ENS\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"anonymous\":false,\"documentation\":null,\"id\":309,\"name\":\"NewOwner\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":308,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":303,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":309,\"src\":\"136:20:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":302,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"136:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":305,\"indexed\":true,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":309,\"src\":\"158:21:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":304,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"158:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":307,\"indexed\":false,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":309,\"src\":\"181:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":306,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"181:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"135:60:2\"},\"src\":\"121:75:2\"},{\"anonymous\":false,\"documentation\":null,\"id\":315,\"name\":\"Transfer\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":314,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":311,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":315,\"src\":\"294:20:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":310,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"294:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":313,\"indexed\":false,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":315,\"src\":\"316:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":312,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"316:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"293:37:2\"},\"src\":\"279:52:2\"},{\"anonymous\":false,\"documentation\":null,\"id\":321,\"name\":\"NewResolver\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":320,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":317,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":321,\"src\":\"407:20:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":316,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"407:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":319,\"indexed\":false,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":321,\"src\":\"429:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":318,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"429:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"406:40:2\"},\"src\":\"389:58:2\"},{\"anonymous\":false,\"documentation\":null,\"id\":327,\"name\":\"NewTTL\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":326,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":323,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":327,\"src\":\"511:20:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":322,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"511:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":325,\"indexed\":false,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":327,\"src\":\"533:10:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":324,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"533:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"510:34:2\"},\"src\":\"498:47:2\"},{\"anonymous\":false,\"documentation\":null,\"id\":335,\"name\":\"ApprovalForAll\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":334,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":329,\"indexed\":true,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":335,\"src\":\"624:21:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":328,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"624:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":331,\"indexed\":true,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":335,\"src\":\"647:24:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":330,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"647:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":333,\"indexed\":false,\"name\":\"approved\",\"nodeType\":\"VariableDeclaration\",\"scope\":335,\"src\":\"673:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":332,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"673:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"623:64:2\"},\"src\":\"603:85:2\"},{\"body\":null,\"documentation\":null,\"id\":346,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":344,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":337,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":346,\"src\":\"713:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":336,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"713:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":339,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":346,\"src\":\"727:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":338,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"727:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":341,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":346,\"src\":\"742:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":340,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"742:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":343,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":346,\"src\":\"760:10:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":342,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"760:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"712:59:2\"},\"returnParameters\":{\"id\":345,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"780:0:2\"},\"scope\":436,\"src\":\"694:87:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":359,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setSubnodeRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":357,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":348,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"812:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":347,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"812:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":350,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"826:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":349,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"826:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":352,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"841:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":351,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"841:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":354,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"856:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":353,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"856:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":356,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":359,\"src\":\"874:10:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":355,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"874:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"811:74:2\"},\"returnParameters\":{\"id\":358,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"894:0:2\"},\"scope\":436,\"src\":\"786:109:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":370,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setSubnodeOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":366,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":361,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":370,\"src\":\"925:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":360,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"925:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":363,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":370,\"src\":\"939:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":362,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"939:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":365,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":370,\"src\":\"954:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":364,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"954:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"924:44:2\"},\"returnParameters\":{\"id\":369,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":368,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":370,\"src\":\"986:7:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":367,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"986:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"985:9:2\"},\"scope\":436,\"src\":\"900:95:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":377,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setResolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":375,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":372,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":377,\"src\":\"1021:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":371,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1021:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":374,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":377,\"src\":\"1035:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":373,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1035:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1020:32:2\"},\"returnParameters\":{\"id\":376,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1061:0:2\"},\"scope\":436,\"src\":\"1000:62:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":384,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":382,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":379,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":384,\"src\":\"1085:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":378,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1085:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":381,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":384,\"src\":\"1099:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":380,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1099:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1084:29:2\"},\"returnParameters\":{\"id\":383,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1122:0:2\"},\"scope\":436,\"src\":\"1067:56:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":391,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setTTL\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":389,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":386,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":391,\"src\":\"1144:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":385,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1144:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":388,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":391,\"src\":\"1158:10:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":387,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1158:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1143:26:2\"},\"returnParameters\":{\"id\":390,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1178:0:2\"},\"scope\":436,\"src\":\"1128:51:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":398,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setApprovalForAll\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":396,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":393,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":398,\"src\":\"1211:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":392,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1211:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":395,\"name\":\"approved\",\"nodeType\":\"VariableDeclaration\",\"scope\":398,\"src\":\"1229:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":394,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1229:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1210:33:2\"},\"returnParameters\":{\"id\":397,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1252:0:2\"},\"scope\":436,\"src\":\"1184:69:2\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":405,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"owner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":401,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":400,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":405,\"src\":\"1273:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":399,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1273:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1272:14:2\"},\"returnParameters\":{\"id\":404,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":403,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":405,\"src\":\"1310:7:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":402,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1310:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1309:9:2\"},\"scope\":436,\"src\":\"1258:61:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":412,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"resolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":408,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":407,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":412,\"src\":\"1342:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":406,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1342:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1341:14:2\"},\"returnParameters\":{\"id\":411,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":410,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":412,\"src\":\"1379:7:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":409,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1379:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1378:9:2\"},\"scope\":436,\"src\":\"1324:64:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":419,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"ttl\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":415,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":414,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":419,\"src\":\"1406:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":413,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1406:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1405:14:2\"},\"returnParameters\":{\"id\":418,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":417,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":419,\"src\":\"1443:6:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":416,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1443:6:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1442:8:2\"},\"scope\":436,\"src\":\"1393:58:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":426,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"recordExists\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":422,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":421,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":426,\"src\":\"1478:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":420,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1478:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1477:14:2\"},\"returnParameters\":{\"id\":425,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":424,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":426,\"src\":\"1515:4:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":423,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1515:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1514:6:2\"},\"scope\":436,\"src\":\"1456:65:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":435,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isApprovedForAll\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":431,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":428,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":435,\"src\":\"1552:13:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":427,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1552:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":430,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":435,\"src\":\"1567:16:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":429,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1567:7:2\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1551:33:2\"},\"returnParameters\":{\"id\":434,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":433,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":435,\"src\":\"1608:4:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":432,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1608:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1607:6:2\"},\"scope\":436,\"src\":\"1526:88:2\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":437,\"src\":\"27:1589:2\"}],\"src\":\"0:1617:2\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.078Z\",\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}}");

/***/ }),

/***/ 329252:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"ENSRegistry\",\"abi\":[{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"label\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"NewOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"NewTTL\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"ApprovalForAll\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"resolver\",\"type\":\"address\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setRecord\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"resolver\",\"type\":\"address\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setSubnodeRecord\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"setSubnodeOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"ttl\",\"type\":\"uint64\"}],\"name\":\"setTTL\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"operator\",\"type\":\"address\"},{\"name\":\"approved\",\"type\":\"bool\"}],\"name\":\"setApprovalForAll\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"resolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"ttl\",\"outputs\":[{\"name\":\"\",\"type\":\"uint64\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"recordExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"operator\",\"type\":\"address\"}],\"name\":\"isApprovedForAll\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.0+commit.1d4f565a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"resolver\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"label\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setSubnodeOwner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"ttl\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"setTTL\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ttl\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setResolver\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setOwner\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"label\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"ttl\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"setSubnodeRecord\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"operator\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"approved\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"setApprovalForAll\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"ttl\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"setRecord\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"operator\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"isApprovedForAll\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"recordExists\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"label\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewOwner\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"Transfer\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"NewResolver\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"ttl\\\",\\\"type\\\":\\\"uint64\\\"}],\\\"name\\\":\\\"NewTTL\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"operator\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"approved\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"ApprovalForAll\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Constructs a new ENS registrar.\\\"},\\\"isApprovedForAll(address,address)\\\":{\\\"details\\\":\\\"Query if an address is an authorized operator for another address.\\\",\\\"params\\\":{\\\"operator\\\":\\\"The address that acts on behalf of the owner.\\\",\\\"owner\\\":\\\"The address that owns the records.\\\"},\\\"return\\\":\\\"True if `operator` is an approved operator for `owner`, false otherwise.\\\"},\\\"owner(bytes32)\\\":{\\\"details\\\":\\\"Returns the address that owns the specified node.\\\",\\\"params\\\":{\\\"node\\\":\\\"The specified node.\\\"},\\\"return\\\":\\\"address of the owner.\\\"},\\\"recordExists(bytes32)\\\":{\\\"details\\\":\\\"Returns whether a record has been imported to the registry.\\\",\\\"params\\\":{\\\"node\\\":\\\"The specified node.\\\"},\\\"return\\\":\\\"Bool if record exists\\\"},\\\"resolver(bytes32)\\\":{\\\"details\\\":\\\"Returns the address of the resolver for the specified node.\\\",\\\"params\\\":{\\\"node\\\":\\\"The specified node.\\\"},\\\"return\\\":\\\"address of the resolver.\\\"},\\\"setApprovalForAll(address,bool)\\\":{\\\"details\\\":\\\"Enable or disable approval for a third party (\\\\\\\"operator\\\\\\\") to manage all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\\\",\\\"params\\\":{\\\"approved\\\":\\\"True if the operator is approved, false to revoke approval.\\\",\\\"operator\\\":\\\"Address to add to the set of authorized operators.\\\"}},\\\"setOwner(bytes32,address)\\\":{\\\"details\\\":\\\"Transfers ownership of a node to a new address. May only be called by the current owner of the node.\\\",\\\"params\\\":{\\\"node\\\":\\\"The node to transfer ownership of.\\\",\\\"owner\\\":\\\"The address of the new owner.\\\"}},\\\"setRecord(bytes32,address,address,uint64)\\\":{\\\"details\\\":\\\"Sets the record for a node.\\\",\\\"params\\\":{\\\"node\\\":\\\"The node to update.\\\",\\\"owner\\\":\\\"The address of the new owner.\\\",\\\"resolver\\\":\\\"The address of the resolver.\\\",\\\"ttl\\\":\\\"The TTL in seconds.\\\"}},\\\"setResolver(bytes32,address)\\\":{\\\"details\\\":\\\"Sets the resolver address for the specified node.\\\",\\\"params\\\":{\\\"node\\\":\\\"The node to update.\\\",\\\"resolver\\\":\\\"The address of the resolver.\\\"}},\\\"setSubnodeOwner(bytes32,bytes32,address)\\\":{\\\"details\\\":\\\"Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\\\",\\\"params\\\":{\\\"label\\\":\\\"The hash of the label specifying the subnode.\\\",\\\"node\\\":\\\"The parent node.\\\",\\\"owner\\\":\\\"The address of the new owner.\\\"}},\\\"setSubnodeRecord(bytes32,bytes32,address,address,uint64)\\\":{\\\"details\\\":\\\"Sets the record for a subnode.\\\",\\\"params\\\":{\\\"label\\\":\\\"The hash of the label specifying the subnode.\\\",\\\"node\\\":\\\"The parent node.\\\",\\\"owner\\\":\\\"The address of the new owner.\\\",\\\"resolver\\\":\\\"The address of the resolver.\\\",\\\"ttl\\\":\\\"The TTL in seconds.\\\"}},\\\"setTTL(bytes32,uint64)\\\":{\\\"details\\\":\\\"Sets the TTL for the specified node.\\\",\\\"params\\\":{\\\"node\\\":\\\"The node to update.\\\",\\\"ttl\\\":\\\"The TTL in seconds.\\\"}},\\\"ttl(bytes32)\\\":{\\\"details\\\":\\\"Returns the TTL of a node, and any records associated with it.\\\",\\\"params\\\":{\\\"node\\\":\\\"The specified node.\\\"},\\\"return\\\":\\\"ttl of the node.\\\"}}},\\\"userdoc\\\":{\\\"methods\\\":{},\\\"notice\\\":\\\"The ENS registry contract.\\\"}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/ENSRegistry.sol\\\":\\\"ENSRegistry\\\"},\\\"evmVersion\\\":\\\"byzantium\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\\\":{\\\"keccak256\\\":\\\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\\\",\\\"urls\\\":[\\\"bzzr://8e5a54eed92d9bf8824175cf337e0df46e647deb0864eb5f091ea0b8132568f6\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/ENSRegistry.sol\\\":{\\\"keccak256\\\":\\\"0xa40b635d209272928968c804b0a8ee390d599e84100b491c9ad38e86b841fed8\\\",\\\"urls\\\":[\\\"bzzr://91a012d872296cc34bd57685eaa5ee909bd8e03cb01c05239bff1dd6fb8b0999\\\"]}},\\\"version\\\":1}\",\"bytecode\":\" \",\"deployedBytecode\":\" \",\"sourceMap\":\"84:5835:3:-;;;621:69;8:9:-1;5:2;;;30:1;27;20:12;5:2;621:69:3;673:10;652:7;:12;660:3;652:12;;;;;;;;;;;;;:18;;;:31;;;;;;;;;;;;;;;;;;84:5835;;;;;;\",\"deployedSourceMap\":\"84:5835:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4325:108;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4325:108:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4325:108:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3940:212;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3940:212:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3940:212:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2340:287;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2340:287:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2340:287:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3119:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3119:138:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3119:138:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4601:97;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4601:97:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4601:97:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2802:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2802:169:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2802:169:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1882:146;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1882:146:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1882:146:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1412:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1412:231:3;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;1412:231:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3591:189;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3591:189:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3591:189:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;931:174;;8:9:-1;5:2;;;30:1;27;20:12;5:2;931:174:3;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;931:174:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5303:138;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5303:138:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5303:138:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4868:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4868:122:3;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4868:122:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4325:108;4378:7;4404;:13;4412:4;4404:13;;;;;;;;;;;:22;;;;;;;;;;;;4397:29;;4325:108;;;:::o;3940:212::-;3990:7;4009:12;4024:7;:13;4032:4;4024:13;;;;;;;;;;;:19;;;;;;;;;;;;4009:34;;4073:4;4057:21;;:4;:21;;;4053:71;;;4109:3;4094:19;;;;;4053:71;4141:4;4134:11;;;3940:212;;;;:::o;2340:287::-;2441:7;2427:4;432:13;448:7;:13;456:4;448:13;;;;;;;;;;;:19;;;;;;;;;;;;432:35;;494:10;485:19;;:5;:19;;;:51;;;;508:9;:16;518:5;508:16;;;;;;;;;;;;;;;:28;525:10;508:28;;;;;;;;;;;;;;;;;;;;;;;;;485:51;477:60;;;;;;;;2460:15;2505:4;2511:5;2488:29;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2488:29:3;;;2478:40;;;;;;2460:58;;2528:25;2538:7;2547:5;2528:9;:25::i;:::-;2583:5;2577:4;2568:28;2590:5;2568:28;;;;;;;;;;;;;;;;;;;;;;2613:7;2606:14;;;2340:287;;;;;;;:::o;3119:138::-;3179:4;432:13;448:7;:13;456:4;448:13;;;;;;;;;;;:19;;;;;;;;;;;;432:35;;494:10;485:19;;:5;:19;;;:51;;;;508:9;:16;518:5;508:16;;;;;;;;;;;;;;;:28;525:10;508:28;;;;;;;;;;;;;;;;;;;;;;;;;485:51;477:60;;;;;;;;3207:4;3200:17;3213:3;3200:17;;;;;;;;;;;;;;;;;;;;;;3247:3;3227:7;:13;3235:4;3227:13;;;;;;;;;;;:17;;;:23;;;;;;;;;;;;;;;;;;3119:138;;;;:::o;4601:97::-;4649:6;4674:7;:13;4682:4;4674:13;;;;;;;;;;;:17;;;;;;;;;;;;4667:24;;4601:97;;;:::o;2802:169::-;2873:4;432:13;448:7;:13;456:4;448:13;;;;;;;;;;;:19;;;;;;;;;;;;432:35;;494:10;485:19;;:5;:19;;;:51;;;;508:9;:16;518:5;508:16;;;;;;;;;;;;;;;:28;525:10;508:28;;;;;;;;;;;;;;;;;;;;;;;;;485:51;477:60;;;;;;;;2906:4;2894:27;2912:8;2894:27;;;;;;;;;;;;;;;;;;;;;;2956:8;2931:7;:13;2939:4;2931:13;;;;;;;;;;;:22;;;:33;;;;;;;;;;;;;;;;;;2802:169;;;;:::o;1882:146::-;1947:4;432:13;448:7;:13;456:4;448:13;;;;;;;;;;;:19;;;;;;;;;;;;432:35;;494:10;485:19;;:5;:19;;;:51;;;;508:9;:16;518:5;508:16;;;;;;;;;;;;;;;:28;525:10;508:28;;;;;;;;;;;;;;;;;;;;;;;;;485:51;477:60;;;;;;;;1963:22;1973:4;1979:5;1963:9;:22::i;:::-;2009:4;2000:21;2015:5;2000:21;;;;;;;;;;;;;;;;;;;;;;1882:146;;;;:::o;1412:231::-;1531:15;1549:35;1565:4;1571:5;1578;1549:15;:35::i;:::-;1531:53;;1594:42;1613:7;1622:8;1632:3;1594:18;:42::i;:::-;1412:231;;;;;;:::o;3591:189::-;3704:8;3670:9;:21;3680:10;3670:21;;;;;;;;;;;;;;;:31;3692:8;3670:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;3754:8;3727:46;;3742:10;3727:46;;;3764:8;3727:46;;;;;;;;;;;;;;;;;;;;;;3591:189;;:::o;931:174::-;1028:21;1037:4;1043:5;1028:8;:21::i;:::-;1059:39;1078:4;1084:8;1094:3;1059:18;:39::i;:::-;931:174;;;;:::o;5303:138::-;5385:4;5408:9;:16;5418:5;5408:16;;;;;;;;;;;;;;;:26;5425:8;5408:26;;;;;;;;;;;;;;;;;;;;;;;;;5401:33;;5303:138;;;;:::o;4868:122::-;4925:4;4979:3;4948:35;;:7;:13;4956:4;4948:13;;;;;;;;;;;:19;;;;;;;;;;;;:35;;;;4941:42;;4868:122;;;:::o;5447:101::-;5536:5;5514:7;:13;5522:4;5514:13;;;;;;;;;;;:19;;;:27;;;;;;;;;;;;;;;;;;5447:101;;:::o;5554:363::-;5660:7;:13;5668:4;5660:13;;;;;;;;;;;:22;;;;;;;;;;;;5648:34;;:8;:34;;;;5645:143;;;5723:8;5698:7;:13;5706:4;5698:13;;;;;;;;;;;:22;;;:33;;;;;;;;;;;;;;;;;;5762:4;5750:27;5768:8;5750:27;;;;;;;;;;;;;;;;;;;;;;5645:143;5808:7;:13;5816:4;5808:13;;;;;;;;;;;:17;;;;;;;;;;;;5801:24;;:3;:24;;;;5798:113;;;5861:3;5841:7;:13;5849:4;5841:13;;;;;;;;;;;:17;;;:23;;;;;;;;;;;;;;;;;;5890:4;5883:17;5896:3;5883:17;;;;;;;;;;;;;;;;;;;;;;5798:113;5554:363;;;:::o\",\"source\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"./ENS.sol\\\";\\n\\n/**\\n * The ENS registry contract.\\n */\\ncontract ENSRegistry is ENS {\\n\\n    struct Record {\\n        address owner;\\n        address resolver;\\n        uint64 ttl;\\n    }\\n\\n    mapping (bytes32 => Record) records;\\n    mapping (address => mapping(address => bool)) operators;\\n\\n    // Permits modifications only by the owner of the specified node.\\n    modifier authorised(bytes32 node) {\\n        address owner = records[node].owner;\\n        require(owner == msg.sender || operators[owner][msg.sender]);\\n        _;\\n    }\\n\\n    /**\\n     * @dev Constructs a new ENS registrar.\\n     */\\n    constructor() public {\\n        records[0x0].owner = msg.sender;\\n    }\\n\\n    /**\\n     * @dev Sets the record for a node.\\n     * @param node The node to update.\\n     * @param owner The address of the new owner.\\n     * @param resolver The address of the resolver.\\n     * @param ttl The TTL in seconds.\\n     */\\n    function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external {\\n        setOwner(node, owner);\\n        _setResolverAndTTL(node, resolver, ttl);\\n    }\\n\\n    /**\\n     * @dev Sets the record for a subnode.\\n     * @param node The parent node.\\n     * @param label The hash of the label specifying the subnode.\\n     * @param owner The address of the new owner.\\n     * @param resolver The address of the resolver.\\n     * @param ttl The TTL in seconds.\\n     */\\n    function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external {\\n        bytes32 subnode = setSubnodeOwner(node, label, owner);\\n        _setResolverAndTTL(subnode, resolver, ttl);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\\n     * @param node The node to transfer ownership of.\\n     * @param owner The address of the new owner.\\n     */\\n    function setOwner(bytes32 node, address owner) public authorised(node) {\\n        _setOwner(node, owner);\\n        emit Transfer(node, owner);\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\\n     * @param node The parent node.\\n     * @param label The hash of the label specifying the subnode.\\n     * @param owner The address of the new owner.\\n     */\\n    function setSubnodeOwner(bytes32 node, bytes32 label, address owner) public authorised(node) returns(bytes32) {\\n        bytes32 subnode = keccak256(abi.encodePacked(node, label));\\n        _setOwner(subnode, owner);\\n        emit NewOwner(node, label, owner);\\n        return subnode;\\n    }\\n\\n    /**\\n     * @dev Sets the resolver address for the specified node.\\n     * @param node The node to update.\\n     * @param resolver The address of the resolver.\\n     */\\n    function setResolver(bytes32 node, address resolver) public authorised(node) {\\n        emit NewResolver(node, resolver);\\n        records[node].resolver = resolver;\\n    }\\n\\n    /**\\n     * @dev Sets the TTL for the specified node.\\n     * @param node The node to update.\\n     * @param ttl The TTL in seconds.\\n     */\\n    function setTTL(bytes32 node, uint64 ttl) public authorised(node) {\\n        emit NewTTL(node, ttl);\\n        records[node].ttl = ttl;\\n    }\\n\\n    /**\\n     * @dev Enable or disable approval for a third party (\\\"operator\\\") to manage\\n     *  all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\\n     * @param operator Address to add to the set of authorized operators.\\n     * @param approved True if the operator is approved, false to revoke approval.\\n     */\\n    function setApprovalForAll(address operator, bool approved) external {\\n        operators[msg.sender][operator] = approved;\\n        emit ApprovalForAll(msg.sender, operator, approved);\\n    }\\n\\n    /**\\n     * @dev Returns the address that owns the specified node.\\n     * @param node The specified node.\\n     * @return address of the owner.\\n     */\\n    function owner(bytes32 node) public view returns (address) {\\n        address addr = records[node].owner;\\n        if (addr == address(this)) {\\n            return address(0x0);\\n        }\\n\\n        return addr;\\n    }\\n\\n    /**\\n     * @dev Returns the address of the resolver for the specified node.\\n     * @param node The specified node.\\n     * @return address of the resolver.\\n     */\\n    function resolver(bytes32 node) public view returns (address) {\\n        return records[node].resolver;\\n    }\\n\\n    /**\\n     * @dev Returns the TTL of a node, and any records associated with it.\\n     * @param node The specified node.\\n     * @return ttl of the node.\\n     */\\n    function ttl(bytes32 node) public view returns (uint64) {\\n        return records[node].ttl;\\n    }\\n\\n    /**\\n     * @dev Returns whether a record has been imported to the registry.\\n     * @param node The specified node.\\n     * @return Bool if record exists\\n     */\\n    function recordExists(bytes32 node) public view returns (bool) {\\n        return records[node].owner != address(0x0);\\n    }\\n\\n    /**\\n     * @dev Query if an address is an authorized operator for another address.\\n     * @param owner The address that owns the records.\\n     * @param operator The address that acts on behalf of the owner.\\n     * @return True if `operator` is an approved operator for `owner`, false otherwise.\\n     */\\n    function isApprovedForAll(address owner, address operator) external view returns (bool) {\\n        return operators[owner][operator];\\n    }\\n\\n    function _setOwner(bytes32 node, address owner) internal {\\n        records[node].owner = owner;\\n    }\\n\\n    function _setResolverAndTTL(bytes32 node, address resolver, uint64 ttl) internal {\\n        if(resolver != records[node].resolver) {\\n            records[node].resolver = resolver;\\n            emit NewResolver(node, resolver);\\n        }\\n\\n        if(ttl != records[node].ttl) {\\n            records[node].ttl = ttl;\\n            emit NewTTL(node, ttl);\\n        }\\n    }\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENSRegistry.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENSRegistry.sol\",\"exportedSymbols\":{\"ENSRegistry\":[830]},\"id\":831,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":438,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:3\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":439,\"nodeType\":\"ImportDirective\",\"scope\":831,\"sourceUnit\":437,\"src\":\"25:19:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":440,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"108:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":441,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"108:3:3\"}],\"contractDependencies\":[436],\"contractKind\":\"contract\",\"documentation\":\"The ENS registry contract.\",\"fullyImplemented\":true,\"id\":830,\"linearizedBaseContracts\":[830,436],\"name\":\"ENSRegistry\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"canonicalName\":\"ENSRegistry.Record\",\"id\":448,\"members\":[{\"constant\":false,\"id\":443,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":448,\"src\":\"143:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":442,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"143:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":445,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":448,\"src\":\"166:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":444,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"166:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":447,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":448,\"src\":\"192:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":446,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"192:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"name\":\"Record\",\"nodeType\":\"StructDefinition\",\"scope\":830,\"src\":\"119:90:3\",\"visibility\":\"public\"},{\"constant\":false,\"id\":452,\"name\":\"records\",\"nodeType\":\"VariableDeclaration\",\"scope\":830,\"src\":\"215:35:3\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record)\"},\"typeName\":{\"id\":451,\"keyType\":{\"id\":449,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"224:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"215:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record)\"},\"valueType\":{\"contractScope\":null,\"id\":450,\"name\":\"Record\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":448,\"src\":\"235:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage_ptr\",\"typeString\":\"struct ENSRegistry.Record\"}}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":458,\"name\":\"operators\",\"nodeType\":\"VariableDeclaration\",\"scope\":830,\"src\":\"256:55:3\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"},\"typeName\":{\"id\":457,\"keyType\":{\"id\":453,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"265:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"256:45:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"},\"valueType\":{\"id\":456,\"keyType\":{\"id\":454,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"284:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"276:24:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"},\"valueType\":{\"id\":455,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"295:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}}},\"value\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":484,\"nodeType\":\"Block\",\"src\":\"422:133:3\",\"statements\":[{\"assignments\":[463],\"declarations\":[{\"constant\":false,\"id\":463,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":484,\"src\":\"432:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":462,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"432:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":468,\"initialValue\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":464,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"448:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":466,\"indexExpression\":{\"argumentTypes\":null,\"id\":465,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":460,\"src\":\"456:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"448:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":467,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"448:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"432:35:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":480,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":473,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":470,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":463,\"src\":\"485:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":471,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"494:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":472,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"494:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"485:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":474,\"name\":\"operators\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":458,\"src\":\"508:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":476,\"indexExpression\":{\"argumentTypes\":null,\"id\":475,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":463,\"src\":\"518:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"508:16:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":479,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":477,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"525:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":478,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"525:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"508:28:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"485:51:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":469,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"477:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":481,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"477:60:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":482,\"nodeType\":\"ExpressionStatement\",\"src\":\"477:60:3\"},{\"id\":483,\"nodeType\":\"PlaceholderStatement\",\"src\":\"547:1:3\"}]},\"documentation\":null,\"id\":485,\"name\":\"authorised\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":461,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":460,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":485,\"src\":\"408:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":459,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"408:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"407:14:3\"},\"src\":\"388:167:3\",\"visibility\":\"internal\"},{\"body\":{\"id\":496,\"nodeType\":\"Block\",\"src\":\"642:48:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":494,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":488,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"652:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":490,\"indexExpression\":{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":489,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"660:3:3\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"652:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":491,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"652:18:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":492,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"673:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":493,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"673:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"652:31:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":495,\"nodeType\":\"ExpressionStatement\",\"src\":\"652:31:3\"}]},\"documentation\":\"@dev Constructs a new ENS registrar.\",\"id\":497,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":486,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"632:2:3\"},\"returnParameters\":{\"id\":487,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"642:0:3\"},\"scope\":830,\"src\":\"621:69:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":519,\"nodeType\":\"Block\",\"src\":\"1018:87:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":509,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":499,\"src\":\"1037:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":510,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":501,\"src\":\"1043:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":508,\"name\":\"setOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":569,\"src\":\"1028:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":511,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1028:21:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":512,\"nodeType\":\"ExpressionStatement\",\"src\":\"1028:21:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":514,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":499,\"src\":\"1078:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":515,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":503,\"src\":\"1084:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":516,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":505,\"src\":\"1094:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}],\"id\":513,\"name\":\"_setResolverAndTTL\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":829,\"src\":\"1059:18:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$\",\"typeString\":\"function (bytes32,address,uint64)\"}},\"id\":517,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1059:39:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":518,\"nodeType\":\"ExpressionStatement\",\"src\":\"1059:39:3\"}]},\"documentation\":\"@dev Sets the record for a node.\\n@param node The node to update.\\n@param owner The address of the new owner.\\n@param resolver The address of the resolver.\\n@param ttl The TTL in seconds.\",\"id\":520,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":506,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":499,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":520,\"src\":\"950:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":498,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"950:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":501,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":520,\"src\":\"964:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":500,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"964:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":503,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":520,\"src\":\"979:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":502,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"979:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":505,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":520,\"src\":\"997:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":504,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"997:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"949:59:3\"},\"returnParameters\":{\"id\":507,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1018:0:3\"},\"scope\":830,\"src\":\"931:174:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":346,\"visibility\":\"external\"},{\"body\":{\"id\":547,\"nodeType\":\"Block\",\"src\":\"1521:122:3\",\"statements\":[{\"assignments\":[534],\"declarations\":[{\"constant\":false,\"id\":534,\"name\":\"subnode\",\"nodeType\":\"VariableDeclaration\",\"scope\":547,\"src\":\"1531:15:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":533,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1531:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":540,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":536,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":522,\"src\":\"1565:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":537,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":524,\"src\":\"1571:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":538,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":526,\"src\":\"1578:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":535,\"name\":\"setSubnodeOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":607,\"src\":\"1549:15:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) returns (bytes32)\"}},\"id\":539,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1549:35:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1531:53:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":542,\"name\":\"subnode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":534,\"src\":\"1613:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":543,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":528,\"src\":\"1622:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":544,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":530,\"src\":\"1632:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}],\"id\":541,\"name\":\"_setResolverAndTTL\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":829,\"src\":\"1594:18:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$\",\"typeString\":\"function (bytes32,address,uint64)\"}},\"id\":545,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1594:42:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":546,\"nodeType\":\"ExpressionStatement\",\"src\":\"1594:42:3\"}]},\"documentation\":\"@dev Sets the record for a subnode.\\n@param node The parent node.\\n@param label The hash of the label specifying the subnode.\\n@param owner The address of the new owner.\\n@param resolver The address of the resolver.\\n@param ttl The TTL in seconds.\",\"id\":548,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setSubnodeRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":531,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":522,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1438:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":521,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1438:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":524,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1452:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":523,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1452:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":526,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1467:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":525,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1467:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":528,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1482:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":527,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1482:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":530,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1500:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":529,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1500:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1437:74:3\"},\"returnParameters\":{\"id\":532,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1521:0:3\"},\"scope\":830,\"src\":\"1412:231:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":359,\"visibility\":\"external\"},{\"body\":{\"id\":568,\"nodeType\":\"Block\",\"src\":\"1953:75:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":559,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":550,\"src\":\"1973:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":560,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":552,\"src\":\"1979:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":558,\"name\":\"_setOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":779,\"src\":\"1963:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":561,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1963:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":562,\"nodeType\":\"ExpressionStatement\",\"src\":\"1963:22:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":564,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":550,\"src\":\"2009:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":565,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":552,\"src\":\"2015:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":563,\"name\":\"Transfer\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":315,\"src\":\"2000:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":566,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2000:21:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":567,\"nodeType\":\"EmitStatement\",\"src\":\"1995:26:3\"}]},\"documentation\":\"@dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\\n@param node The node to transfer ownership of.\\n@param owner The address of the new owner.\",\"id\":569,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":555,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":550,\"src\":\"1947:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":556,\"modifierName\":{\"argumentTypes\":null,\"id\":554,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":485,\"src\":\"1936:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1936:16:3\"}],\"name\":\"setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":553,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":550,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":569,\"src\":\"1900:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":549,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1900:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":552,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":569,\"src\":\"1914:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":551,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1914:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1899:29:3\"},\"returnParameters\":{\"id\":557,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1953:0:3\"},\"scope\":830,\"src\":\"1882:146:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":384,\"visibility\":\"public\"},{\"body\":{\"id\":606,\"nodeType\":\"Block\",\"src\":\"2450:177:3\",\"statements\":[{\"assignments\":[584],\"declarations\":[{\"constant\":false,\"id\":584,\"name\":\"subnode\",\"nodeType\":\"VariableDeclaration\",\"scope\":606,\"src\":\"2460:15:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":583,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2460:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":592,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":588,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":571,\"src\":\"2505:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":589,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":573,\"src\":\"2511:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":586,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"2488:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":587,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2488:16:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":590,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2488:29:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":585,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"2478:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":591,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2478:40:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2460:58:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":594,\"name\":\"subnode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":584,\"src\":\"2538:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":595,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":575,\"src\":\"2547:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":593,\"name\":\"_setOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":779,\"src\":\"2528:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":596,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2528:25:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":597,\"nodeType\":\"ExpressionStatement\",\"src\":\"2528:25:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":599,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":571,\"src\":\"2577:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":600,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":573,\"src\":\"2583:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":601,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":575,\"src\":\"2590:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":598,\"name\":\"NewOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":309,\"src\":\"2568:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,bytes32,address)\"}},\"id\":602,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2568:28:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":603,\"nodeType\":\"EmitStatement\",\"src\":\"2563:33:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":604,\"name\":\"subnode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":584,\"src\":\"2613:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":582,\"id\":605,\"nodeType\":\"Return\",\"src\":\"2606:14:3\"}]},\"documentation\":\"@dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\\n@param node The parent node.\\n@param label The hash of the label specifying the subnode.\\n@param owner The address of the new owner.\",\"id\":607,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":578,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":571,\"src\":\"2427:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":579,\"modifierName\":{\"argumentTypes\":null,\"id\":577,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":485,\"src\":\"2416:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"2416:16:3\"}],\"name\":\"setSubnodeOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":576,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":571,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":607,\"src\":\"2365:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":570,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2365:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":573,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":607,\"src\":\"2379:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":572,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2379:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":575,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":607,\"src\":\"2394:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":574,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2394:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2364:44:3\"},\"returnParameters\":{\"id\":582,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":581,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":607,\"src\":\"2441:7:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":580,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2441:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2440:9:3\"},\"scope\":830,\"src\":\"2340:287:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":370,\"visibility\":\"public\"},{\"body\":{\"id\":629,\"nodeType\":\"Block\",\"src\":\"2879:92:3\",\"statements\":[{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":618,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":609,\"src\":\"2906:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":619,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":611,\"src\":\"2912:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":617,\"name\":\"NewResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":321,\"src\":\"2894:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":620,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2894:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":621,\"nodeType\":\"EmitStatement\",\"src\":\"2889:32:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":627,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":622,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"2931:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":624,\"indexExpression\":{\"argumentTypes\":null,\"id\":623,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":609,\"src\":\"2939:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2931:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":625,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":445,\"src\":\"2931:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":626,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":611,\"src\":\"2956:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2931:33:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":628,\"nodeType\":\"ExpressionStatement\",\"src\":\"2931:33:3\"}]},\"documentation\":\"@dev Sets the resolver address for the specified node.\\n@param node The node to update.\\n@param resolver The address of the resolver.\",\"id\":630,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":614,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":609,\"src\":\"2873:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":615,\"modifierName\":{\"argumentTypes\":null,\"id\":613,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":485,\"src\":\"2862:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"2862:16:3\"}],\"name\":\"setResolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":612,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":609,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":630,\"src\":\"2823:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":608,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2823:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":611,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":630,\"src\":\"2837:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":610,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2837:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2822:32:3\"},\"returnParameters\":{\"id\":616,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2879:0:3\"},\"scope\":830,\"src\":\"2802:169:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":377,\"visibility\":\"public\"},{\"body\":{\"id\":652,\"nodeType\":\"Block\",\"src\":\"3185:72:3\",\"statements\":[{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":641,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":632,\"src\":\"3207:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":642,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":634,\"src\":\"3213:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}],\"id\":640,\"name\":\"NewTTL\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":327,\"src\":\"3200:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$\",\"typeString\":\"function (bytes32,uint64)\"}},\"id\":643,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3200:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":644,\"nodeType\":\"EmitStatement\",\"src\":\"3195:22:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":650,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":645,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"3227:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":647,\"indexExpression\":{\"argumentTypes\":null,\"id\":646,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":632,\"src\":\"3235:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"3227:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":648,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"ttl\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":447,\"src\":\"3227:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":649,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":634,\"src\":\"3247:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"src\":\"3227:23:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"id\":651,\"nodeType\":\"ExpressionStatement\",\"src\":\"3227:23:3\"}]},\"documentation\":\"@dev Sets the TTL for the specified node.\\n@param node The node to update.\\n@param ttl The TTL in seconds.\",\"id\":653,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":637,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":632,\"src\":\"3179:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":638,\"modifierName\":{\"argumentTypes\":null,\"id\":636,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":485,\"src\":\"3168:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"3168:16:3\"}],\"name\":\"setTTL\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":635,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":632,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":653,\"src\":\"3135:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":631,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3135:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":634,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":653,\"src\":\"3149:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":633,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3149:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3134:26:3\"},\"returnParameters\":{\"id\":639,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"3185:0:3\"},\"scope\":830,\"src\":\"3119:138:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":391,\"visibility\":\"public\"},{\"body\":{\"id\":676,\"nodeType\":\"Block\",\"src\":\"3660:120:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":667,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":660,\"name\":\"operators\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":458,\"src\":\"3670:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":664,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":661,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"3680:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":662,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3680:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"3670:21:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":665,\"indexExpression\":{\"argumentTypes\":null,\"id\":663,\"name\":\"operator\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":655,\"src\":\"3692:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"3670:31:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":666,\"name\":\"approved\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":657,\"src\":\"3704:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"3670:42:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":668,\"nodeType\":\"ExpressionStatement\",\"src\":\"3670:42:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":670,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"3742:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":671,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3742:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":672,\"name\":\"operator\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":655,\"src\":\"3754:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":673,\"name\":\"approved\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":657,\"src\":\"3764:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":669,\"name\":\"ApprovalForAll\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":335,\"src\":\"3727:14:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$\",\"typeString\":\"function (address,address,bool)\"}},\"id\":674,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3727:46:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":675,\"nodeType\":\"EmitStatement\",\"src\":\"3722:51:3\"}]},\"documentation\":\"@dev Enable or disable approval for a third party (\\\"operator\\\") to manage\\n all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\\n@param operator Address to add to the set of authorized operators.\\n@param approved True if the operator is approved, false to revoke approval.\",\"id\":677,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setApprovalForAll\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":658,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":655,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":677,\"src\":\"3618:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":654,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3618:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":657,\"name\":\"approved\",\"nodeType\":\"VariableDeclaration\",\"scope\":677,\"src\":\"3636:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":656,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3636:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3617:33:3\"},\"returnParameters\":{\"id\":659,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"3660:0:3\"},\"scope\":830,\"src\":\"3591:189:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":398,\"visibility\":\"external\"},{\"body\":{\"id\":704,\"nodeType\":\"Block\",\"src\":\"3999:153:3\",\"statements\":[{\"assignments\":[685],\"declarations\":[{\"constant\":false,\"id\":685,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":704,\"src\":\"4009:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":684,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4009:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":690,\"initialValue\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":686,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"4024:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":688,\"indexExpression\":{\"argumentTypes\":null,\"id\":687,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":679,\"src\":\"4032:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4024:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":689,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"4024:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4009:34:3\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":695,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":691,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":685,\"src\":\"4057:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":693,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3051,\"src\":\"4073:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENSRegistry_$830\",\"typeString\":\"contract ENSRegistry\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ENSRegistry_$830\",\"typeString\":\"contract ENSRegistry\"}],\"id\":692,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4065:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":694,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4065:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"4057:21:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":701,\"nodeType\":\"IfStatement\",\"src\":\"4053:71:3\",\"trueBody\":{\"id\":700,\"nodeType\":\"Block\",\"src\":\"4080:44:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":697,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4109:3:3\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":696,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4101:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":698,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4101:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"functionReturnParameters\":683,\"id\":699,\"nodeType\":\"Return\",\"src\":\"4094:19:3\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":702,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":685,\"src\":\"4141:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"functionReturnParameters\":683,\"id\":703,\"nodeType\":\"Return\",\"src\":\"4134:11:3\"}]},\"documentation\":\"@dev Returns the address that owns the specified node.\\n@param node The specified node.\\n@return address of the owner.\",\"id\":705,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"owner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":680,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":679,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":705,\"src\":\"3955:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":678,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3955:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3954:14:3\"},\"returnParameters\":{\"id\":683,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":682,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":705,\"src\":\"3990:7:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":681,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3990:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3989:9:3\"},\"scope\":830,\"src\":\"3940:212:3\",\"stateMutability\":\"view\",\"superFunction\":405,\"visibility\":\"public\"},{\"body\":{\"id\":717,\"nodeType\":\"Block\",\"src\":\"4387:46:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":712,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"4404:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":714,\"indexExpression\":{\"argumentTypes\":null,\"id\":713,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":707,\"src\":\"4412:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4404:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":715,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":445,\"src\":\"4404:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"functionReturnParameters\":711,\"id\":716,\"nodeType\":\"Return\",\"src\":\"4397:29:3\"}]},\"documentation\":\"@dev Returns the address of the resolver for the specified node.\\n@param node The specified node.\\n@return address of the resolver.\",\"id\":718,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"resolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":708,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":707,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":718,\"src\":\"4343:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":706,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4343:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4342:14:3\"},\"returnParameters\":{\"id\":711,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":710,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":718,\"src\":\"4378:7:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":709,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4378:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4377:9:3\"},\"scope\":830,\"src\":\"4325:108:3\",\"stateMutability\":\"view\",\"superFunction\":412,\"visibility\":\"public\"},{\"body\":{\"id\":730,\"nodeType\":\"Block\",\"src\":\"4657:41:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":725,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"4674:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":727,\"indexExpression\":{\"argumentTypes\":null,\"id\":726,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":720,\"src\":\"4682:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4674:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":728,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"ttl\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":447,\"src\":\"4674:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"functionReturnParameters\":724,\"id\":729,\"nodeType\":\"Return\",\"src\":\"4667:24:3\"}]},\"documentation\":\"@dev Returns the TTL of a node, and any records associated with it.\\n@param node The specified node.\\n@return ttl of the node.\",\"id\":731,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"ttl\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":721,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":720,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":731,\"src\":\"4614:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":719,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4614:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4613:14:3\"},\"returnParameters\":{\"id\":724,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":723,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":731,\"src\":\"4649:6:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":722,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4649:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4648:8:3\"},\"scope\":830,\"src\":\"4601:97:3\",\"stateMutability\":\"view\",\"superFunction\":419,\"visibility\":\"public\"},{\"body\":{\"id\":747,\"nodeType\":\"Block\",\"src\":\"4931:59:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":745,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":738,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"4948:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":740,\"indexExpression\":{\"argumentTypes\":null,\"id\":739,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":733,\"src\":\"4956:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4948:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":741,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"4948:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":743,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4979:3:3\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":742,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4971:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":744,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4971:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"4948:35:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":737,\"id\":746,\"nodeType\":\"Return\",\"src\":\"4941:42:3\"}]},\"documentation\":\"@dev Returns whether a record has been imported to the registry.\\n@param node The specified node.\\n@return Bool if record exists\",\"id\":748,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"recordExists\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":734,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":733,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":748,\"src\":\"4890:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":732,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4890:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4889:14:3\"},\"returnParameters\":{\"id\":737,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":736,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":748,\"src\":\"4925:4:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":735,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4925:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4924:6:3\"},\"scope\":830,\"src\":\"4868:122:3\",\"stateMutability\":\"view\",\"superFunction\":426,\"visibility\":\"public\"},{\"body\":{\"id\":763,\"nodeType\":\"Block\",\"src\":\"5391:50:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":757,\"name\":\"operators\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":458,\"src\":\"5408:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":759,\"indexExpression\":{\"argumentTypes\":null,\"id\":758,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":750,\"src\":\"5418:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5408:16:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":761,\"indexExpression\":{\"argumentTypes\":null,\"id\":760,\"name\":\"operator\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":752,\"src\":\"5425:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5408:26:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":756,\"id\":762,\"nodeType\":\"Return\",\"src\":\"5401:33:3\"}]},\"documentation\":\"@dev Query if an address is an authorized operator for another address.\\n@param owner The address that owns the records.\\n@param operator The address that acts on behalf of the owner.\\n@return True if `operator` is an approved operator for `owner`, false otherwise.\",\"id\":764,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isApprovedForAll\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":753,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":750,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":764,\"src\":\"5329:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":749,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5329:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":752,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":764,\"src\":\"5344:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":751,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5344:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5328:33:3\"},\"returnParameters\":{\"id\":756,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":755,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":764,\"src\":\"5385:4:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":754,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5385:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5384:6:3\"},\"scope\":830,\"src\":\"5303:138:3\",\"stateMutability\":\"view\",\"superFunction\":435,\"visibility\":\"external\"},{\"body\":{\"id\":778,\"nodeType\":\"Block\",\"src\":\"5504:44:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":776,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":771,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5514:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":773,\"indexExpression\":{\"argumentTypes\":null,\"id\":772,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":766,\"src\":\"5522:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5514:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":774,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"5514:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":775,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":768,\"src\":\"5536:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"5514:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":777,\"nodeType\":\"ExpressionStatement\",\"src\":\"5514:27:3\"}]},\"documentation\":null,\"id\":779,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":769,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":766,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":779,\"src\":\"5466:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":765,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5466:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":768,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":779,\"src\":\"5480:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":767,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5480:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5465:29:3\"},\"returnParameters\":{\"id\":770,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"5504:0:3\"},\"scope\":830,\"src\":\"5447:101:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":828,\"nodeType\":\"Block\",\"src\":\"5635:282:3\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":793,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":788,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":783,\"src\":\"5648:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":789,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5660:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":791,\"indexExpression\":{\"argumentTypes\":null,\"id\":790,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5668:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5660:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":792,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":445,\"src\":\"5660:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"5648:34:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":807,\"nodeType\":\"IfStatement\",\"src\":\"5645:143:3\",\"trueBody\":{\"id\":806,\"nodeType\":\"Block\",\"src\":\"5684:104:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":799,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":794,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5698:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":796,\"indexExpression\":{\"argumentTypes\":null,\"id\":795,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5706:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5698:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":797,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":445,\"src\":\"5698:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":798,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":783,\"src\":\"5723:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"5698:33:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":800,\"nodeType\":\"ExpressionStatement\",\"src\":\"5698:33:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":802,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5762:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":803,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":783,\"src\":\"5768:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":801,\"name\":\"NewResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":321,\"src\":\"5750:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":804,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5750:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":805,\"nodeType\":\"EmitStatement\",\"src\":\"5745:32:3\"}]}},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"id\":813,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":808,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":785,\"src\":\"5801:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":809,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5808:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":811,\"indexExpression\":{\"argumentTypes\":null,\"id\":810,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5816:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5808:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":812,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"ttl\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":447,\"src\":\"5808:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"src\":\"5801:24:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":827,\"nodeType\":\"IfStatement\",\"src\":\"5798:113:3\",\"trueBody\":{\"id\":826,\"nodeType\":\"Block\",\"src\":\"5827:84:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":819,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":814,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5841:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":816,\"indexExpression\":{\"argumentTypes\":null,\"id\":815,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5849:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5841:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":817,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"ttl\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":447,\"src\":\"5841:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":818,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":785,\"src\":\"5861:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"src\":\"5841:23:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"id\":820,\"nodeType\":\"ExpressionStatement\",\"src\":\"5841:23:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":822,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5890:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":823,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":785,\"src\":\"5896:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}],\"id\":821,\"name\":\"NewTTL\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":327,\"src\":\"5883:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$\",\"typeString\":\"function (bytes32,uint64)\"}},\"id\":824,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5883:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":825,\"nodeType\":\"EmitStatement\",\"src\":\"5878:22:3\"}]}}]},\"documentation\":null,\"id\":829,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_setResolverAndTTL\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":786,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":781,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":829,\"src\":\"5582:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":780,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5582:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":783,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":829,\"src\":\"5596:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":782,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5596:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":785,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":829,\"src\":\"5614:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":784,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5614:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5581:44:3\"},\"returnParameters\":{\"id\":787,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"5635:0:3\"},\"scope\":830,\"src\":\"5554:363:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"}],\"scope\":831,\"src\":\"84:5835:3\"}],\"src\":\"0:5920:3\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENSRegistry.sol\",\"exportedSymbols\":{\"ENSRegistry\":[830]},\"id\":831,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":438,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:3\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":439,\"nodeType\":\"ImportDirective\",\"scope\":831,\"sourceUnit\":437,\"src\":\"25:19:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":440,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"108:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":441,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"108:3:3\"}],\"contractDependencies\":[436],\"contractKind\":\"contract\",\"documentation\":\"The ENS registry contract.\",\"fullyImplemented\":true,\"id\":830,\"linearizedBaseContracts\":[830,436],\"name\":\"ENSRegistry\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"canonicalName\":\"ENSRegistry.Record\",\"id\":448,\"members\":[{\"constant\":false,\"id\":443,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":448,\"src\":\"143:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":442,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"143:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":445,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":448,\"src\":\"166:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":444,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"166:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":447,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":448,\"src\":\"192:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":446,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"192:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"name\":\"Record\",\"nodeType\":\"StructDefinition\",\"scope\":830,\"src\":\"119:90:3\",\"visibility\":\"public\"},{\"constant\":false,\"id\":452,\"name\":\"records\",\"nodeType\":\"VariableDeclaration\",\"scope\":830,\"src\":\"215:35:3\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record)\"},\"typeName\":{\"id\":451,\"keyType\":{\"id\":449,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"224:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"215:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record)\"},\"valueType\":{\"contractScope\":null,\"id\":450,\"name\":\"Record\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":448,\"src\":\"235:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage_ptr\",\"typeString\":\"struct ENSRegistry.Record\"}}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":458,\"name\":\"operators\",\"nodeType\":\"VariableDeclaration\",\"scope\":830,\"src\":\"256:55:3\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"},\"typeName\":{\"id\":457,\"keyType\":{\"id\":453,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"265:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"256:45:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"},\"valueType\":{\"id\":456,\"keyType\":{\"id\":454,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"284:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"276:24:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"},\"valueType\":{\"id\":455,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"295:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}}},\"value\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":484,\"nodeType\":\"Block\",\"src\":\"422:133:3\",\"statements\":[{\"assignments\":[463],\"declarations\":[{\"constant\":false,\"id\":463,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":484,\"src\":\"432:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":462,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"432:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":468,\"initialValue\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":464,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"448:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":466,\"indexExpression\":{\"argumentTypes\":null,\"id\":465,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":460,\"src\":\"456:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"448:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":467,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"448:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"432:35:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":480,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":473,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":470,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":463,\"src\":\"485:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":471,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"494:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":472,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"494:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"485:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":474,\"name\":\"operators\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":458,\"src\":\"508:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":476,\"indexExpression\":{\"argumentTypes\":null,\"id\":475,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":463,\"src\":\"518:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"508:16:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":479,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":477,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"525:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":478,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"525:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"508:28:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"485:51:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":469,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"477:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":481,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"477:60:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":482,\"nodeType\":\"ExpressionStatement\",\"src\":\"477:60:3\"},{\"id\":483,\"nodeType\":\"PlaceholderStatement\",\"src\":\"547:1:3\"}]},\"documentation\":null,\"id\":485,\"name\":\"authorised\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":461,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":460,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":485,\"src\":\"408:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":459,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"408:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"407:14:3\"},\"src\":\"388:167:3\",\"visibility\":\"internal\"},{\"body\":{\"id\":496,\"nodeType\":\"Block\",\"src\":\"642:48:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":494,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":488,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"652:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":490,\"indexExpression\":{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":489,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"660:3:3\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"652:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":491,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"652:18:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":492,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"673:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":493,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"673:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"652:31:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":495,\"nodeType\":\"ExpressionStatement\",\"src\":\"652:31:3\"}]},\"documentation\":\"@dev Constructs a new ENS registrar.\",\"id\":497,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":486,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"632:2:3\"},\"returnParameters\":{\"id\":487,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"642:0:3\"},\"scope\":830,\"src\":\"621:69:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":519,\"nodeType\":\"Block\",\"src\":\"1018:87:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":509,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":499,\"src\":\"1037:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":510,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":501,\"src\":\"1043:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":508,\"name\":\"setOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":569,\"src\":\"1028:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":511,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1028:21:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":512,\"nodeType\":\"ExpressionStatement\",\"src\":\"1028:21:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":514,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":499,\"src\":\"1078:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":515,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":503,\"src\":\"1084:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":516,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":505,\"src\":\"1094:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}],\"id\":513,\"name\":\"_setResolverAndTTL\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":829,\"src\":\"1059:18:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$\",\"typeString\":\"function (bytes32,address,uint64)\"}},\"id\":517,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1059:39:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":518,\"nodeType\":\"ExpressionStatement\",\"src\":\"1059:39:3\"}]},\"documentation\":\"@dev Sets the record for a node.\\n@param node The node to update.\\n@param owner The address of the new owner.\\n@param resolver The address of the resolver.\\n@param ttl The TTL in seconds.\",\"id\":520,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":506,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":499,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":520,\"src\":\"950:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":498,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"950:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":501,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":520,\"src\":\"964:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":500,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"964:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":503,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":520,\"src\":\"979:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":502,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"979:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":505,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":520,\"src\":\"997:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":504,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"997:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"949:59:3\"},\"returnParameters\":{\"id\":507,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1018:0:3\"},\"scope\":830,\"src\":\"931:174:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":346,\"visibility\":\"external\"},{\"body\":{\"id\":547,\"nodeType\":\"Block\",\"src\":\"1521:122:3\",\"statements\":[{\"assignments\":[534],\"declarations\":[{\"constant\":false,\"id\":534,\"name\":\"subnode\",\"nodeType\":\"VariableDeclaration\",\"scope\":547,\"src\":\"1531:15:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":533,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1531:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":540,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":536,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":522,\"src\":\"1565:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":537,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":524,\"src\":\"1571:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":538,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":526,\"src\":\"1578:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":535,\"name\":\"setSubnodeOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":607,\"src\":\"1549:15:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) returns (bytes32)\"}},\"id\":539,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1549:35:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1531:53:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":542,\"name\":\"subnode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":534,\"src\":\"1613:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":543,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":528,\"src\":\"1622:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":544,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":530,\"src\":\"1632:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}],\"id\":541,\"name\":\"_setResolverAndTTL\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":829,\"src\":\"1594:18:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$_t_uint64_$returns$__$\",\"typeString\":\"function (bytes32,address,uint64)\"}},\"id\":545,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1594:42:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":546,\"nodeType\":\"ExpressionStatement\",\"src\":\"1594:42:3\"}]},\"documentation\":\"@dev Sets the record for a subnode.\\n@param node The parent node.\\n@param label The hash of the label specifying the subnode.\\n@param owner The address of the new owner.\\n@param resolver The address of the resolver.\\n@param ttl The TTL in seconds.\",\"id\":548,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setSubnodeRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":531,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":522,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1438:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":521,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1438:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":524,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1452:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":523,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1452:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":526,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1467:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":525,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1467:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":528,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1482:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":527,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1482:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":530,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1500:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":529,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1500:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1437:74:3\"},\"returnParameters\":{\"id\":532,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1521:0:3\"},\"scope\":830,\"src\":\"1412:231:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":359,\"visibility\":\"external\"},{\"body\":{\"id\":568,\"nodeType\":\"Block\",\"src\":\"1953:75:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":559,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":550,\"src\":\"1973:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":560,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":552,\"src\":\"1979:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":558,\"name\":\"_setOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":779,\"src\":\"1963:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":561,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1963:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":562,\"nodeType\":\"ExpressionStatement\",\"src\":\"1963:22:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":564,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":550,\"src\":\"2009:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":565,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":552,\"src\":\"2015:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":563,\"name\":\"Transfer\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":315,\"src\":\"2000:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":566,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2000:21:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":567,\"nodeType\":\"EmitStatement\",\"src\":\"1995:26:3\"}]},\"documentation\":\"@dev Transfers ownership of a node to a new address. May only be called by the current owner of the node.\\n@param node The node to transfer ownership of.\\n@param owner The address of the new owner.\",\"id\":569,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":555,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":550,\"src\":\"1947:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":556,\"modifierName\":{\"argumentTypes\":null,\"id\":554,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":485,\"src\":\"1936:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1936:16:3\"}],\"name\":\"setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":553,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":550,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":569,\"src\":\"1900:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":549,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1900:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":552,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":569,\"src\":\"1914:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":551,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1914:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1899:29:3\"},\"returnParameters\":{\"id\":557,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1953:0:3\"},\"scope\":830,\"src\":\"1882:146:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":384,\"visibility\":\"public\"},{\"body\":{\"id\":606,\"nodeType\":\"Block\",\"src\":\"2450:177:3\",\"statements\":[{\"assignments\":[584],\"declarations\":[{\"constant\":false,\"id\":584,\"name\":\"subnode\",\"nodeType\":\"VariableDeclaration\",\"scope\":606,\"src\":\"2460:15:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":583,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2460:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":592,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":588,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":571,\"src\":\"2505:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":589,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":573,\"src\":\"2511:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":586,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"2488:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":587,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2488:16:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":590,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2488:29:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":585,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"2478:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":591,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2478:40:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2460:58:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":594,\"name\":\"subnode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":584,\"src\":\"2538:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":595,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":575,\"src\":\"2547:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":593,\"name\":\"_setOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":779,\"src\":\"2528:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":596,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2528:25:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":597,\"nodeType\":\"ExpressionStatement\",\"src\":\"2528:25:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":599,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":571,\"src\":\"2577:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":600,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":573,\"src\":\"2583:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":601,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":575,\"src\":\"2590:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":598,\"name\":\"NewOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":309,\"src\":\"2568:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,bytes32,address)\"}},\"id\":602,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2568:28:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":603,\"nodeType\":\"EmitStatement\",\"src\":\"2563:33:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":604,\"name\":\"subnode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":584,\"src\":\"2613:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":582,\"id\":605,\"nodeType\":\"Return\",\"src\":\"2606:14:3\"}]},\"documentation\":\"@dev Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\\n@param node The parent node.\\n@param label The hash of the label specifying the subnode.\\n@param owner The address of the new owner.\",\"id\":607,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":578,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":571,\"src\":\"2427:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":579,\"modifierName\":{\"argumentTypes\":null,\"id\":577,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":485,\"src\":\"2416:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"2416:16:3\"}],\"name\":\"setSubnodeOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":576,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":571,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":607,\"src\":\"2365:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":570,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2365:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":573,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":607,\"src\":\"2379:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":572,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2379:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":575,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":607,\"src\":\"2394:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":574,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2394:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2364:44:3\"},\"returnParameters\":{\"id\":582,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":581,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":607,\"src\":\"2441:7:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":580,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2441:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2440:9:3\"},\"scope\":830,\"src\":\"2340:287:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":370,\"visibility\":\"public\"},{\"body\":{\"id\":629,\"nodeType\":\"Block\",\"src\":\"2879:92:3\",\"statements\":[{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":618,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":609,\"src\":\"2906:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":619,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":611,\"src\":\"2912:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":617,\"name\":\"NewResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":321,\"src\":\"2894:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":620,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2894:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":621,\"nodeType\":\"EmitStatement\",\"src\":\"2889:32:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":627,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":622,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"2931:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":624,\"indexExpression\":{\"argumentTypes\":null,\"id\":623,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":609,\"src\":\"2939:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2931:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":625,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":445,\"src\":\"2931:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":626,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":611,\"src\":\"2956:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2931:33:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":628,\"nodeType\":\"ExpressionStatement\",\"src\":\"2931:33:3\"}]},\"documentation\":\"@dev Sets the resolver address for the specified node.\\n@param node The node to update.\\n@param resolver The address of the resolver.\",\"id\":630,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":614,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":609,\"src\":\"2873:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":615,\"modifierName\":{\"argumentTypes\":null,\"id\":613,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":485,\"src\":\"2862:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"2862:16:3\"}],\"name\":\"setResolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":612,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":609,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":630,\"src\":\"2823:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":608,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2823:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":611,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":630,\"src\":\"2837:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":610,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2837:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2822:32:3\"},\"returnParameters\":{\"id\":616,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2879:0:3\"},\"scope\":830,\"src\":\"2802:169:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":377,\"visibility\":\"public\"},{\"body\":{\"id\":652,\"nodeType\":\"Block\",\"src\":\"3185:72:3\",\"statements\":[{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":641,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":632,\"src\":\"3207:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":642,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":634,\"src\":\"3213:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}],\"id\":640,\"name\":\"NewTTL\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":327,\"src\":\"3200:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$\",\"typeString\":\"function (bytes32,uint64)\"}},\"id\":643,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3200:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":644,\"nodeType\":\"EmitStatement\",\"src\":\"3195:22:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":650,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":645,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"3227:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":647,\"indexExpression\":{\"argumentTypes\":null,\"id\":646,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":632,\"src\":\"3235:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"3227:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":648,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"ttl\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":447,\"src\":\"3227:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":649,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":634,\"src\":\"3247:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"src\":\"3227:23:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"id\":651,\"nodeType\":\"ExpressionStatement\",\"src\":\"3227:23:3\"}]},\"documentation\":\"@dev Sets the TTL for the specified node.\\n@param node The node to update.\\n@param ttl The TTL in seconds.\",\"id\":653,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":637,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":632,\"src\":\"3179:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":638,\"modifierName\":{\"argumentTypes\":null,\"id\":636,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":485,\"src\":\"3168:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"3168:16:3\"}],\"name\":\"setTTL\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":635,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":632,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":653,\"src\":\"3135:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":631,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3135:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":634,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":653,\"src\":\"3149:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":633,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3149:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3134:26:3\"},\"returnParameters\":{\"id\":639,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"3185:0:3\"},\"scope\":830,\"src\":\"3119:138:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":391,\"visibility\":\"public\"},{\"body\":{\"id\":676,\"nodeType\":\"Block\",\"src\":\"3660:120:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":667,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":660,\"name\":\"operators\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":458,\"src\":\"3670:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":664,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":661,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"3680:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":662,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3680:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"3670:21:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":665,\"indexExpression\":{\"argumentTypes\":null,\"id\":663,\"name\":\"operator\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":655,\"src\":\"3692:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"3670:31:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":666,\"name\":\"approved\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":657,\"src\":\"3704:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"3670:42:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":668,\"nodeType\":\"ExpressionStatement\",\"src\":\"3670:42:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":670,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"3742:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":671,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3742:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":672,\"name\":\"operator\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":655,\"src\":\"3754:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":673,\"name\":\"approved\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":657,\"src\":\"3764:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":669,\"name\":\"ApprovalForAll\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":335,\"src\":\"3727:14:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_address_$_t_address_$_t_bool_$returns$__$\",\"typeString\":\"function (address,address,bool)\"}},\"id\":674,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3727:46:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":675,\"nodeType\":\"EmitStatement\",\"src\":\"3722:51:3\"}]},\"documentation\":\"@dev Enable or disable approval for a third party (\\\"operator\\\") to manage\\n all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\\n@param operator Address to add to the set of authorized operators.\\n@param approved True if the operator is approved, false to revoke approval.\",\"id\":677,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setApprovalForAll\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":658,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":655,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":677,\"src\":\"3618:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":654,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3618:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":657,\"name\":\"approved\",\"nodeType\":\"VariableDeclaration\",\"scope\":677,\"src\":\"3636:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":656,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3636:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3617:33:3\"},\"returnParameters\":{\"id\":659,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"3660:0:3\"},\"scope\":830,\"src\":\"3591:189:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":398,\"visibility\":\"external\"},{\"body\":{\"id\":704,\"nodeType\":\"Block\",\"src\":\"3999:153:3\",\"statements\":[{\"assignments\":[685],\"declarations\":[{\"constant\":false,\"id\":685,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":704,\"src\":\"4009:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":684,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4009:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":690,\"initialValue\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":686,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"4024:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":688,\"indexExpression\":{\"argumentTypes\":null,\"id\":687,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":679,\"src\":\"4032:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4024:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":689,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"4024:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4009:34:3\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":695,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":691,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":685,\"src\":\"4057:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":693,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3051,\"src\":\"4073:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENSRegistry_$830\",\"typeString\":\"contract ENSRegistry\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ENSRegistry_$830\",\"typeString\":\"contract ENSRegistry\"}],\"id\":692,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4065:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":694,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4065:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"4057:21:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":701,\"nodeType\":\"IfStatement\",\"src\":\"4053:71:3\",\"trueBody\":{\"id\":700,\"nodeType\":\"Block\",\"src\":\"4080:44:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":697,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4109:3:3\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":696,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4101:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":698,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4101:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"functionReturnParameters\":683,\"id\":699,\"nodeType\":\"Return\",\"src\":\"4094:19:3\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":702,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":685,\"src\":\"4141:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"functionReturnParameters\":683,\"id\":703,\"nodeType\":\"Return\",\"src\":\"4134:11:3\"}]},\"documentation\":\"@dev Returns the address that owns the specified node.\\n@param node The specified node.\\n@return address of the owner.\",\"id\":705,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"owner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":680,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":679,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":705,\"src\":\"3955:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":678,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3955:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3954:14:3\"},\"returnParameters\":{\"id\":683,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":682,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":705,\"src\":\"3990:7:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":681,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3990:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3989:9:3\"},\"scope\":830,\"src\":\"3940:212:3\",\"stateMutability\":\"view\",\"superFunction\":405,\"visibility\":\"public\"},{\"body\":{\"id\":717,\"nodeType\":\"Block\",\"src\":\"4387:46:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":712,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"4404:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":714,\"indexExpression\":{\"argumentTypes\":null,\"id\":713,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":707,\"src\":\"4412:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4404:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":715,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":445,\"src\":\"4404:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"functionReturnParameters\":711,\"id\":716,\"nodeType\":\"Return\",\"src\":\"4397:29:3\"}]},\"documentation\":\"@dev Returns the address of the resolver for the specified node.\\n@param node The specified node.\\n@return address of the resolver.\",\"id\":718,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"resolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":708,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":707,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":718,\"src\":\"4343:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":706,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4343:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4342:14:3\"},\"returnParameters\":{\"id\":711,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":710,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":718,\"src\":\"4378:7:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":709,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4378:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4377:9:3\"},\"scope\":830,\"src\":\"4325:108:3\",\"stateMutability\":\"view\",\"superFunction\":412,\"visibility\":\"public\"},{\"body\":{\"id\":730,\"nodeType\":\"Block\",\"src\":\"4657:41:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":725,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"4674:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":727,\"indexExpression\":{\"argumentTypes\":null,\"id\":726,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":720,\"src\":\"4682:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4674:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":728,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"ttl\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":447,\"src\":\"4674:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"functionReturnParameters\":724,\"id\":729,\"nodeType\":\"Return\",\"src\":\"4667:24:3\"}]},\"documentation\":\"@dev Returns the TTL of a node, and any records associated with it.\\n@param node The specified node.\\n@return ttl of the node.\",\"id\":731,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"ttl\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":721,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":720,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":731,\"src\":\"4614:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":719,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4614:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4613:14:3\"},\"returnParameters\":{\"id\":724,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":723,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":731,\"src\":\"4649:6:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":722,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4649:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4648:8:3\"},\"scope\":830,\"src\":\"4601:97:3\",\"stateMutability\":\"view\",\"superFunction\":419,\"visibility\":\"public\"},{\"body\":{\"id\":747,\"nodeType\":\"Block\",\"src\":\"4931:59:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":745,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":738,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"4948:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":740,\"indexExpression\":{\"argumentTypes\":null,\"id\":739,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":733,\"src\":\"4956:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4948:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":741,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"4948:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":743,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4979:3:3\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":742,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4971:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":744,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4971:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"4948:35:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":737,\"id\":746,\"nodeType\":\"Return\",\"src\":\"4941:42:3\"}]},\"documentation\":\"@dev Returns whether a record has been imported to the registry.\\n@param node The specified node.\\n@return Bool if record exists\",\"id\":748,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"recordExists\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":734,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":733,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":748,\"src\":\"4890:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":732,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4890:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4889:14:3\"},\"returnParameters\":{\"id\":737,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":736,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":748,\"src\":\"4925:4:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":735,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4925:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4924:6:3\"},\"scope\":830,\"src\":\"4868:122:3\",\"stateMutability\":\"view\",\"superFunction\":426,\"visibility\":\"public\"},{\"body\":{\"id\":763,\"nodeType\":\"Block\",\"src\":\"5391:50:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":757,\"name\":\"operators\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":458,\"src\":\"5408:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":759,\"indexExpression\":{\"argumentTypes\":null,\"id\":758,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":750,\"src\":\"5418:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5408:16:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":761,\"indexExpression\":{\"argumentTypes\":null,\"id\":760,\"name\":\"operator\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":752,\"src\":\"5425:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5408:26:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":756,\"id\":762,\"nodeType\":\"Return\",\"src\":\"5401:33:3\"}]},\"documentation\":\"@dev Query if an address is an authorized operator for another address.\\n@param owner The address that owns the records.\\n@param operator The address that acts on behalf of the owner.\\n@return True if `operator` is an approved operator for `owner`, false otherwise.\",\"id\":764,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isApprovedForAll\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":753,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":750,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":764,\"src\":\"5329:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":749,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5329:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":752,\"name\":\"operator\",\"nodeType\":\"VariableDeclaration\",\"scope\":764,\"src\":\"5344:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":751,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5344:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5328:33:3\"},\"returnParameters\":{\"id\":756,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":755,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":764,\"src\":\"5385:4:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":754,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5385:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5384:6:3\"},\"scope\":830,\"src\":\"5303:138:3\",\"stateMutability\":\"view\",\"superFunction\":435,\"visibility\":\"external\"},{\"body\":{\"id\":778,\"nodeType\":\"Block\",\"src\":\"5504:44:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":776,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":771,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5514:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":773,\"indexExpression\":{\"argumentTypes\":null,\"id\":772,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":766,\"src\":\"5522:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5514:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":774,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":443,\"src\":\"5514:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":775,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":768,\"src\":\"5536:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"5514:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":777,\"nodeType\":\"ExpressionStatement\",\"src\":\"5514:27:3\"}]},\"documentation\":null,\"id\":779,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_setOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":769,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":766,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":779,\"src\":\"5466:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":765,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5466:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":768,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":779,\"src\":\"5480:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":767,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5480:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5465:29:3\"},\"returnParameters\":{\"id\":770,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"5504:0:3\"},\"scope\":830,\"src\":\"5447:101:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":828,\"nodeType\":\"Block\",\"src\":\"5635:282:3\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":793,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":788,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":783,\"src\":\"5648:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":789,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5660:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":791,\"indexExpression\":{\"argumentTypes\":null,\"id\":790,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5668:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5660:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":792,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":445,\"src\":\"5660:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"5648:34:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":807,\"nodeType\":\"IfStatement\",\"src\":\"5645:143:3\",\"trueBody\":{\"id\":806,\"nodeType\":\"Block\",\"src\":\"5684:104:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":799,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":794,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5698:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":796,\"indexExpression\":{\"argumentTypes\":null,\"id\":795,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5706:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5698:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":797,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":445,\"src\":\"5698:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":798,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":783,\"src\":\"5723:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"5698:33:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":800,\"nodeType\":\"ExpressionStatement\",\"src\":\"5698:33:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":802,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5762:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":803,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":783,\"src\":\"5768:8:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":801,\"name\":\"NewResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":321,\"src\":\"5750:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":804,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5750:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":805,\"nodeType\":\"EmitStatement\",\"src\":\"5745:32:3\"}]}},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"id\":813,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":808,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":785,\"src\":\"5801:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":809,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5808:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":811,\"indexExpression\":{\"argumentTypes\":null,\"id\":810,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5816:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5808:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":812,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"ttl\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":447,\"src\":\"5808:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"src\":\"5801:24:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":827,\"nodeType\":\"IfStatement\",\"src\":\"5798:113:3\",\"trueBody\":{\"id\":826,\"nodeType\":\"Block\",\"src\":\"5827:84:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":819,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":814,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":452,\"src\":\"5841:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Record_$448_storage_$\",\"typeString\":\"mapping(bytes32 => struct ENSRegistry.Record storage ref)\"}},\"id\":816,\"indexExpression\":{\"argumentTypes\":null,\"id\":815,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5849:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5841:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Record_$448_storage\",\"typeString\":\"struct ENSRegistry.Record storage ref\"}},\"id\":817,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"ttl\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":447,\"src\":\"5841:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":818,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":785,\"src\":\"5861:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"src\":\"5841:23:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"id\":820,\"nodeType\":\"ExpressionStatement\",\"src\":\"5841:23:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":822,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":781,\"src\":\"5890:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":823,\"name\":\"ttl\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":785,\"src\":\"5896:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}],\"id\":821,\"name\":\"NewTTL\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":327,\"src\":\"5883:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_uint64_$returns$__$\",\"typeString\":\"function (bytes32,uint64)\"}},\"id\":824,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5883:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":825,\"nodeType\":\"EmitStatement\",\"src\":\"5878:22:3\"}]}}]},\"documentation\":null,\"id\":829,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_setResolverAndTTL\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":786,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":781,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":829,\"src\":\"5582:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":780,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5582:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":783,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":829,\"src\":\"5596:16:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":782,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5596:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":785,\"name\":\"ttl\",\"nodeType\":\"VariableDeclaration\",\"scope\":829,\"src\":\"5614:10:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"},\"typeName\":{\"id\":784,\"name\":\"uint64\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5614:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint64\",\"typeString\":\"uint64\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5581:44:3\"},\"returnParameters\":{\"id\":787,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"5635:0:3\"},\"scope\":830,\"src\":\"5554:363:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"}],\"scope\":831,\"src\":\"84:5835:3\"}],\"src\":\"0:5920:3\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.079Z\",\"devdoc\":{\"methods\":{\"constructor\":{\"details\":\"Constructs a new ENS registrar.\"},\"isApprovedForAll(address,address)\":{\"details\":\"Query if an address is an authorized operator for another address.\",\"params\":{\"operator\":\"The address that acts on behalf of the owner.\",\"owner\":\"The address that owns the records.\"},\"return\":\"True if `operator` is an approved operator for `owner`, false otherwise.\"},\"owner(bytes32)\":{\"details\":\"Returns the address that owns the specified node.\",\"params\":{\"node\":\"The specified node.\"},\"return\":\"address of the owner.\"},\"recordExists(bytes32)\":{\"details\":\"Returns whether a record has been imported to the registry.\",\"params\":{\"node\":\"The specified node.\"},\"return\":\"Bool if record exists\"},\"resolver(bytes32)\":{\"details\":\"Returns the address of the resolver for the specified node.\",\"params\":{\"node\":\"The specified node.\"},\"return\":\"address of the resolver.\"},\"setApprovalForAll(address,bool)\":{\"details\":\"Enable or disable approval for a third party (\\\"operator\\\") to manage all of `msg.sender`'s ENS records. Emits the ApprovalForAll event.\",\"params\":{\"approved\":\"True if the operator is approved, false to revoke approval.\",\"operator\":\"Address to add to the set of authorized operators.\"}},\"setOwner(bytes32,address)\":{\"details\":\"Transfers ownership of a node to a new address. May only be called by the current owner of the node.\",\"params\":{\"node\":\"The node to transfer ownership of.\",\"owner\":\"The address of the new owner.\"}},\"setRecord(bytes32,address,address,uint64)\":{\"details\":\"Sets the record for a node.\",\"params\":{\"node\":\"The node to update.\",\"owner\":\"The address of the new owner.\",\"resolver\":\"The address of the resolver.\",\"ttl\":\"The TTL in seconds.\"}},\"setResolver(bytes32,address)\":{\"details\":\"Sets the resolver address for the specified node.\",\"params\":{\"node\":\"The node to update.\",\"resolver\":\"The address of the resolver.\"}},\"setSubnodeOwner(bytes32,bytes32,address)\":{\"details\":\"Transfers ownership of a subnode keccak256(node, label) to a new address. May only be called by the owner of the parent node.\",\"params\":{\"label\":\"The hash of the label specifying the subnode.\",\"node\":\"The parent node.\",\"owner\":\"The address of the new owner.\"}},\"setSubnodeRecord(bytes32,bytes32,address,address,uint64)\":{\"details\":\"Sets the record for a subnode.\",\"params\":{\"label\":\"The hash of the label specifying the subnode.\",\"node\":\"The parent node.\",\"owner\":\"The address of the new owner.\",\"resolver\":\"The address of the resolver.\",\"ttl\":\"The TTL in seconds.\"}},\"setTTL(bytes32,uint64)\":{\"details\":\"Sets the TTL for the specified node.\",\"params\":{\"node\":\"The node to update.\",\"ttl\":\"The TTL in seconds.\"}},\"ttl(bytes32)\":{\"details\":\"Returns the TTL of a node, and any records associated with it.\",\"params\":{\"node\":\"The specified node.\"},\"return\":\"ttl of the node.\"}}},\"userdoc\":{\"methods\":{},\"notice\":\"The ENS registry contract.\"}}");

/***/ }),

/***/ 366240:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"FIFSRegistrar\",\"abi\":[{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":false,\"inputs\":[{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.0+commit.1d4f565a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"label\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"name\\\":\\\"ensAddr\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"constructor\\\":{\\\"params\\\":{\\\"ensAddr\\\":\\\"The address of the ENS registry.\\\",\\\"node\\\":\\\"The node that this registrar administers.\\\"}},\\\"register(bytes32,address)\\\":{\\\"params\\\":{\\\"label\\\":\\\"The hash of the label to register.\\\",\\\"owner\\\":\\\"The address of the new owner.\\\"}}}},\\\"userdoc\\\":{\\\"methods\\\":{\\\"constructor\\\":\\\"Constructor.\\\",\\\"register(bytes32,address)\\\":{\\\"notice\\\":\\\"Register a name, or change the owner of an existing registration.\\\"}},\\\"notice\\\":\\\"A registrar that allocates subdomains to the first person to claim them.\\\"}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/FIFSRegistrar.sol\\\":\\\"FIFSRegistrar\\\"},\\\"evmVersion\\\":\\\"byzantium\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\\\":{\\\"keccak256\\\":\\\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\\\",\\\"urls\\\":[\\\"bzzr://8e5a54eed92d9bf8824175cf337e0df46e647deb0864eb5f091ea0b8132568f6\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/FIFSRegistrar.sol\\\":{\\\"keccak256\\\":\\\"0xee608fdeeea6d7c0e6cb5d69b27a0e6c0658fad024c31ab56d52ccd8c7c0fcd5\\\",\\\"urls\\\":[\\\"bzzr://281dabe7be2cdf4f293d28d46bded12903b7a204ef3bfb91d5000cac8dbe2224\\\"]}},\\\"version\\\":1}\",\"bytecode\":\"0x608060405234801561001057600080fd5b506040516040806103ef8339810180604052604081101561003057600080fd5b810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600181905550505061034c806100a36000396000f3fe608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063d22057a914610046575b600080fd5b34801561005257600080fd5b5061009f6004803603604081101561006957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100a1565b005b8160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3600154846040516020018083815260200182815260200192505050604051602081830303815290604052805190602001206040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561016257600080fd5b505afa158015610176573d6000803e3d6000fd5b505050506040513d602081101561018c57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061020557503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561021057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015486866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156102de57600080fd5b505af11580156102f2573d6000803e3d6000fd5b505050506040513d602081101561030857600080fd5b8101908080519060200190929190505050505050505056fea165627a7a72305820c84baf02e1b7586052585f49f8cdab63bd809bb964feb2ad9c2aad1f003bc1690029\",\"deployedBytecode\":\"0x608060405260043610610041576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063d22057a914610046575b600080fd5b34801561005257600080fd5b5061009f6004803603604081101561006957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506100a1565b005b8160008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3600154846040516020018083815260200182815260200192505050604051602081830303815290604052805190602001206040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561016257600080fd5b505afa158015610176573d6000803e3d6000fd5b505050506040513d602081101561018c57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061020557503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b151561021057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015486866040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156102de57600080fd5b505af11580156102f2573d6000803e3d6000fd5b505050506040513d602081101561030857600080fd5b8101908080519060200190929190505050505050505056fea165627a7a72305820c84baf02e1b7586052585f49f8cdab63bd809bb964feb2ad9c2aad1f003bc1690029\",\"sourceMap\":\"130:877:5:-;;;571:101;8:9:-1;5:2;;;30:1;27;20:12;5:2;571:101:5;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;571:101:5;;;;;;;;;;;;;;;;;;;;;;;;;633:7;627:3;;:13;;;;;;;;;;;;;;;;;;661:4;650:8;:15;;;;571:101;;130:877;;;;;;\",\"deployedSourceMap\":\"130:877:5:-;;;;;;;;;;;;;;;;;;;;;;;;872:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;872:133:5;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;872:133:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;938:5;240:20;263:3;;;;;;;;;;;:9;;;300:8;;310:5;283:33;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;283:33:5;;;273:44;;;;;;263:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;263:55:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;263:55:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;263:55:5;;;;;;;;;;;;;;;;240:78;;360:3;336:28;;:12;:28;;;:58;;;;384:10;368:26;;:12;:26;;;336:58;328:67;;;;;;;;955:3;;;;;;;;;;;:19;;;975:8;;985:5;992;955:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;955:43:5;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;955:43:5;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;955:43:5;;;;;;;;;;;;;;;;;872:133;;;;:::o\",\"source\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"./ENS.sol\\\";\\n\\n/**\\n * A registrar that allocates subdomains to the first person to claim them.\\n */\\ncontract FIFSRegistrar {\\n    ENS ens;\\n    bytes32 rootNode;\\n\\n    modifier only_owner(bytes32 label) {\\n        address currentOwner = ens.owner(keccak256(abi.encodePacked(rootNode, label)));\\n        require(currentOwner == address(0x0) || currentOwner == msg.sender);\\n        _;\\n    }\\n\\n    /**\\n     * Constructor.\\n     * @param ensAddr The address of the ENS registry.\\n     * @param node The node that this registrar administers.\\n     */\\n    constructor(ENS ensAddr, bytes32 node) public {\\n        ens = ensAddr;\\n        rootNode = node;\\n    }\\n\\n    /**\\n     * Register a name, or change the owner of an existing registration.\\n     * @param label The hash of the label to register.\\n     * @param owner The address of the new owner.\\n     */\\n    function register(bytes32 label, address owner) public only_owner(label) {\\n        ens.setSubnodeOwner(rootNode, label, owner);\\n    }\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/FIFSRegistrar.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/FIFSRegistrar.sol\",\"exportedSymbols\":{\"FIFSRegistrar\":[1030]},\"id\":1031,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":957,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:5\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":958,\"nodeType\":\"ImportDirective\",\"scope\":1031,\"sourceUnit\":437,\"src\":\"25:19:5\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":\"A registrar that allocates subdomains to the first person to claim them.\",\"fullyImplemented\":true,\"id\":1030,\"linearizedBaseContracts\":[1030],\"name\":\"FIFSRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":false,\"id\":960,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":1030,\"src\":\"159:7:5\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":959,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"159:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":962,\"name\":\"rootNode\",\"nodeType\":\"VariableDeclaration\",\"scope\":1030,\"src\":\"172:16:5\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":961,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"172:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":993,\"nodeType\":\"Block\",\"src\":\"230:183:5\",\"statements\":[{\"assignments\":[967],\"declarations\":[{\"constant\":false,\"id\":967,\"name\":\"currentOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":993,\"src\":\"240:20:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":966,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"240:7:5\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":978,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":973,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":962,\"src\":\"300:8:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":974,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":964,\"src\":\"310:5:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":971,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"283:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":972,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"283:16:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":975,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"283:33:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":970,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"273:9:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":976,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"273:44:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":968,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":960,\"src\":\"263:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":969,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"263:9:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":977,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"263:55:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"240:78:5\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":989,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":984,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":980,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":967,\"src\":\"336:12:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":982,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"360:3:5\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":981,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"352:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":983,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"352:12:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"336:28:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":988,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":985,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":967,\"src\":\"368:12:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":986,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"384:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":987,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"384:10:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"368:26:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"336:58:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":979,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"328:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":990,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"328:67:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":991,\"nodeType\":\"ExpressionStatement\",\"src\":\"328:67:5\"},{\"id\":992,\"nodeType\":\"PlaceholderStatement\",\"src\":\"405:1:5\"}]},\"documentation\":null,\"id\":994,\"name\":\"only_owner\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":965,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":964,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":994,\"src\":\"215:13:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":963,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"215:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"214:15:5\"},\"src\":\"195:218:5\",\"visibility\":\"internal\"},{\"body\":{\"id\":1009,\"nodeType\":\"Block\",\"src\":\"617:55:5\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1003,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1001,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":960,\"src\":\"627:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1002,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":996,\"src\":\"633:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"627:13:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1004,\"nodeType\":\"ExpressionStatement\",\"src\":\"627:13:5\"},{\"expression\":{\"argumentTypes\":null,\"id\":1007,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1005,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":962,\"src\":\"650:8:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1006,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":998,\"src\":\"661:4:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"650:15:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1008,\"nodeType\":\"ExpressionStatement\",\"src\":\"650:15:5\"}]},\"documentation\":\"Constructor.\\n@param ensAddr The address of the ENS registry.\\n@param node The node that this registrar administers.\",\"id\":1010,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":999,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":996,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":1010,\"src\":\"583:11:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":995,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"583:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":998,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1010,\"src\":\"596:12:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":997,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"596:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"582:27:5\"},\"returnParameters\":{\"id\":1000,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"617:0:5\"},\"scope\":1030,\"src\":\"571:101:5\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1028,\"nodeType\":\"Block\",\"src\":\"945:60:5\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1023,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":962,\"src\":\"975:8:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1024,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1012,\"src\":\"985:5:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1025,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1014,\"src\":\"992:5:5\",\"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\":1020,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":960,\"src\":\"955:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1022,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"955:19:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":1026,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"955:43:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1027,\"nodeType\":\"ExpressionStatement\",\"src\":\"955:43:5\"}]},\"documentation\":\"Register a name, or change the owner of an existing registration.\\n@param label The hash of the label to register.\\n@param owner The address of the new owner.\",\"id\":1029,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1017,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1012,\"src\":\"938:5:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1018,\"modifierName\":{\"argumentTypes\":null,\"id\":1016,\"name\":\"only_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":994,\"src\":\"927:10:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"927:17:5\"}],\"name\":\"register\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1015,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1012,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":1029,\"src\":\"890:13:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1011,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"890:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1014,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":1029,\"src\":\"905:13:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":1013,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"905:7:5\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"889:30:5\"},\"returnParameters\":{\"id\":1019,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"945:0:5\"},\"scope\":1030,\"src\":\"872:133:5\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":1031,\"src\":\"130:877:5\"}],\"src\":\"0:1008:5\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/FIFSRegistrar.sol\",\"exportedSymbols\":{\"FIFSRegistrar\":[1030]},\"id\":1031,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":957,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:5\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":958,\"nodeType\":\"ImportDirective\",\"scope\":1031,\"sourceUnit\":437,\"src\":\"25:19:5\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":\"A registrar that allocates subdomains to the first person to claim them.\",\"fullyImplemented\":true,\"id\":1030,\"linearizedBaseContracts\":[1030],\"name\":\"FIFSRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":false,\"id\":960,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":1030,\"src\":\"159:7:5\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":959,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"159:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":962,\"name\":\"rootNode\",\"nodeType\":\"VariableDeclaration\",\"scope\":1030,\"src\":\"172:16:5\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":961,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"172:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":993,\"nodeType\":\"Block\",\"src\":\"230:183:5\",\"statements\":[{\"assignments\":[967],\"declarations\":[{\"constant\":false,\"id\":967,\"name\":\"currentOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":993,\"src\":\"240:20:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":966,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"240:7:5\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":978,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":973,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":962,\"src\":\"300:8:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":974,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":964,\"src\":\"310:5:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":971,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"283:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":972,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"283:16:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":975,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"283:33:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":970,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"273:9:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":976,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"273:44:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":968,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":960,\"src\":\"263:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":969,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"263:9:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":977,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"263:55:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"240:78:5\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":989,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":984,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":980,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":967,\"src\":\"336:12:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":982,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"360:3:5\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":981,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"352:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":983,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"352:12:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"336:28:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":988,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":985,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":967,\"src\":\"368:12:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":986,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"384:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":987,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"384:10:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"368:26:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"336:58:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":979,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"328:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":990,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"328:67:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":991,\"nodeType\":\"ExpressionStatement\",\"src\":\"328:67:5\"},{\"id\":992,\"nodeType\":\"PlaceholderStatement\",\"src\":\"405:1:5\"}]},\"documentation\":null,\"id\":994,\"name\":\"only_owner\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":965,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":964,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":994,\"src\":\"215:13:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":963,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"215:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"214:15:5\"},\"src\":\"195:218:5\",\"visibility\":\"internal\"},{\"body\":{\"id\":1009,\"nodeType\":\"Block\",\"src\":\"617:55:5\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1003,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1001,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":960,\"src\":\"627:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1002,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":996,\"src\":\"633:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"627:13:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1004,\"nodeType\":\"ExpressionStatement\",\"src\":\"627:13:5\"},{\"expression\":{\"argumentTypes\":null,\"id\":1007,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1005,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":962,\"src\":\"650:8:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1006,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":998,\"src\":\"661:4:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"650:15:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1008,\"nodeType\":\"ExpressionStatement\",\"src\":\"650:15:5\"}]},\"documentation\":\"Constructor.\\n@param ensAddr The address of the ENS registry.\\n@param node The node that this registrar administers.\",\"id\":1010,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":999,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":996,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":1010,\"src\":\"583:11:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":995,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"583:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":998,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1010,\"src\":\"596:12:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":997,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"596:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"582:27:5\"},\"returnParameters\":{\"id\":1000,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"617:0:5\"},\"scope\":1030,\"src\":\"571:101:5\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1028,\"nodeType\":\"Block\",\"src\":\"945:60:5\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1023,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":962,\"src\":\"975:8:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1024,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1012,\"src\":\"985:5:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1025,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1014,\"src\":\"992:5:5\",\"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\":1020,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":960,\"src\":\"955:3:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1022,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"955:19:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":1026,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"955:43:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1027,\"nodeType\":\"ExpressionStatement\",\"src\":\"955:43:5\"}]},\"documentation\":\"Register a name, or change the owner of an existing registration.\\n@param label The hash of the label to register.\\n@param owner The address of the new owner.\",\"id\":1029,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1017,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1012,\"src\":\"938:5:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1018,\"modifierName\":{\"argumentTypes\":null,\"id\":1016,\"name\":\"only_owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":994,\"src\":\"927:10:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"927:17:5\"}],\"name\":\"register\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1015,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1012,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":1029,\"src\":\"890:13:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1011,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"890:7:5\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1014,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":1029,\"src\":\"905:13:5\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":1013,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"905:7:5\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"889:30:5\"},\"returnParameters\":{\"id\":1019,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"945:0:5\"},\"scope\":1030,\"src\":\"872:133:5\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":1031,\"src\":\"130:877:5\"}],\"src\":\"0:1008:5\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.084Z\",\"devdoc\":{\"methods\":{\"constructor\":{\"params\":{\"ensAddr\":\"The address of the ENS registry.\",\"node\":\"The node that this registrar administers.\"}},\"register(bytes32,address)\":{\"params\":{\"label\":\"The hash of the label to register.\",\"owner\":\"The address of the new owner.\"}}}},\"userdoc\":{\"methods\":{\"constructor\":\"Constructor.\",\"register(bytes32,address)\":{\"notice\":\"Register a name, or change the owner of an existing registration.\"}},\"notice\":\"A registrar that allocates subdomains to the first person to claim them.\"}}");

/***/ }),

/***/ 137874:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"HashRegistrar\",\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"sealedBids\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"registryStarted\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"launchLength\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rootNode\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"_ens\",\"type\":\"address\"},{\"name\":\"_rootNode\",\"type\":\"bytes32\"},{\"name\":\"_startDate\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"AuctionStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"bidder\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"deposit\",\"type\":\"uint256\"}],\"name\":\"NewBid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"BidRevealed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"HashRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"HashReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"HashInvalidated\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"startAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hashes\",\"type\":\"bytes32[]\"}],\"name\":\"startAuctions\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sealedBid\",\"type\":\"bytes32\"}],\"name\":\"newBid\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"hashes\",\"type\":\"bytes32[]\"},{\"name\":\"sealedBid\",\"type\":\"bytes32\"}],\"name\":\"startAuctionsAndBid\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"unsealBid\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bidder\",\"type\":\"address\"},{\"name\":\"seal\",\"type\":\"bytes32\"}],\"name\":\"cancelBid\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"finalizeAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"releaseDeed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"unhashedName\",\"type\":\"string\"}],\"name\":\"invalidateName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"labels\",\"type\":\"bytes32[]\"}],\"name\":\"eraseNode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"transferRegistrars\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"hash\",\"type\":\"bytes32\"},{\"name\":\"deed\",\"type\":\"address\"},{\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"acceptRegistrarTransfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"entries\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"state\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"_timestamp\",\"type\":\"uint256\"}],\"name\":\"isAllowed\",\"outputs\":[{\"name\":\"allowed\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"getAllowedTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"hash\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"value\",\"type\":\"uint256\"},{\"name\":\"salt\",\"type\":\"bytes32\"}],\"name\":\"shaBid\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.0+commit.1d4f565a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"releaseDeed\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"getAllowedTime\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"unhashedName\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"invalidateName\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"salt\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"shaBid\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"bidder\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"seal\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"cancelBid\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"entries\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"ens\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"_value\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"_salt\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"unsealBid\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"transferRegistrars\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"sealedBids\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"state\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transfer\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"_timestamp\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"isAllowed\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"allowed\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"finalizeAuction\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"registryStarted\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"launchLength\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"sealedBid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"newBid\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"labels\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"eraseNode\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"_hashes\\\",\\\"type\\\":\\\"bytes32[]\\\"}],\\\"name\\\":\\\"startAuctions\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"deed\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"registrationDate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"acceptRegistrarTransfer\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"_hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"startAuction\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"rootNode\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"hashes\\\",\\\"type\\\":\\\"bytes32[]\\\"},{\\\"name\\\":\\\"sealedBid\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"startAuctionsAndBid\\\",\\\"outputs\\\":[],\\\"payable\\\":true,\\\"stateMutability\\\":\\\"payable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"name\\\":\\\"_ens\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"_rootNode\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"_startDate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"registrationDate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"AuctionStarted\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"bidder\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"deposit\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"NewBid\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"status\\\",\\\"type\\\":\\\"uint8\\\"}],\\\"name\\\":\\\"BidRevealed\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"registrationDate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"HashRegistered\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"HashReleased\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"registrationDate\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"HashInvalidated\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"details\\\":\\\"The registrar handles the auction process for each subnode of the node it owns.\\\",\\\"methods\\\":{\\\"acceptRegistrarTransfer(bytes32,address,uint256)\\\":{\\\"details\\\":\\\"Accepts a transfer from a previous registrar; stubbed out here since there     is no previous registrar implementing this interface.\\\",\\\"params\\\":{\\\"deed\\\":\\\"The Deed object for the name being transferred in.\\\",\\\"hash\\\":\\\"The sha3 hash of the label to transfer.\\\",\\\"registrationDate\\\":\\\"The date at which the name was originally registered.\\\"}},\\\"cancelBid(address,bytes32)\\\":{\\\"details\\\":\\\"Cancel a bid\\\",\\\"params\\\":{\\\"seal\\\":\\\"The value returned by the shaBid function\\\"}},\\\"constructor\\\":{\\\"details\\\":\\\"Constructs a new Registrar, with the provided address as the owner of the root node.\\\",\\\"params\\\":{\\\"_ens\\\":\\\"The address of the ENS\\\",\\\"_rootNode\\\":\\\"The hash of the rootnode.\\\"}},\\\"eraseNode(bytes32[])\\\":{\\\"details\\\":\\\"Allows anyone to delete the owner and resolver records for a (subdomain of) a     name that is not currently owned in the registrar. If passing, eg, 'foo.bar.eth',     the owner and resolver fields on 'foo.bar.eth' and 'bar.eth' will all be cleared.\\\",\\\"params\\\":{\\\"labels\\\":\\\"A series of label hashes identifying the name to zero out, rooted at the       registrar's root. Must contain at least one element. For instance, to zero        'foo.bar.eth' on a registrar that owns '.eth', pass an array containing       [keccak256('foo'), keccak256('bar')].\\\"}},\\\"finalizeAuction(bytes32)\\\":{\\\"details\\\":\\\"Finalize an auction after the registration date has passed\\\",\\\"params\\\":{\\\"_hash\\\":\\\"The hash of the name the auction is for\\\"}},\\\"getAllowedTime(bytes32)\\\":{\\\"details\\\":\\\"Returns available date for hash     * The available time from the `registryStarted` for a hash is proportional to its numeric value.\\\",\\\"params\\\":{\\\"_hash\\\":\\\"The hash to start an auction on\\\"}},\\\"invalidateName(string)\\\":{\\\"details\\\":\\\"Submit a name 6 characters long or less. If it has been registered,     the submitter will earn 50% of the deed value.       * We are purposefully handicapping the simplified registrar as a way  to force it into being restructured in a few years.\\\",\\\"params\\\":{\\\"unhashedName\\\":\\\"An invalid name to search for in the registry.\\\"}},\\\"isAllowed(bytes32,uint256)\\\":{\\\"details\\\":\\\"Determines if a name is available for registration yet     * Each name will be assigned a random date in which its auction can be started, from 0 to 8 weeks\\\",\\\"params\\\":{\\\"_hash\\\":\\\"The hash to start an auction on\\\",\\\"_timestamp\\\":\\\"The timestamp to query about\\\"}},\\\"newBid(bytes32)\\\":{\\\"details\\\":\\\"Submit a new sealed bid on a desired hash in a blind auction     * Bids are sent by sending a message to the main contract with a hash and an amount. The hash contains information about the bid, including the bidded hash, the bid amount, and a random salt. Bids are not tied to any one auction until they are revealed. The value of the bid itself can be masqueraded by sending more than the value of your actual bid. This is followed by a 48h reveal period. Bids revealed after this period will be burned and the ether unrecoverable. Since this is an auction, it is expected that most public hashes, like known domains and common dictionary words, will have multiple bidders pushing the price up.\\\",\\\"params\\\":{\\\"sealedBid\\\":\\\"A sealedBid, created by the shaBid function\\\"}},\\\"releaseDeed(bytes32)\\\":{\\\"details\\\":\\\"After some time, or if we're no longer the registrar, the owner can release     the name and get their ether back.\\\",\\\"params\\\":{\\\"_hash\\\":\\\"The node to release\\\"}},\\\"shaBid(bytes32,address,uint256,bytes32)\\\":{\\\"details\\\":\\\"Hash the values required for a secret bid\\\",\\\"params\\\":{\\\"hash\\\":\\\"The node corresponding to the desired namehash\\\",\\\"salt\\\":\\\"A random value to ensure secrecy of the bid\\\",\\\"value\\\":\\\"The bid amount\\\"},\\\"return\\\":\\\"The hash of the bid values\\\"},\\\"startAuction(bytes32)\\\":{\\\"details\\\":\\\"Start an auction for an available hash\\\",\\\"params\\\":{\\\"_hash\\\":\\\"The hash to start an auction on\\\"}},\\\"startAuctions(bytes32[])\\\":{\\\"details\\\":\\\"Start multiple auctions for better anonymity     * Anyone can start an auction by sending an array of hashes that they want to bid for. Arrays are sent so that someone can open up an auction for X dummy hashes when they are only really interested in bidding for one. This will increase the cost for an attacker to simply bid blindly on all new auctions. Dummy auctions that are open but not bid on are closed after a week.\\\",\\\"params\\\":{\\\"_hashes\\\":\\\"An array of hashes, at least one of which you presumably want to bid on\\\"}},\\\"startAuctionsAndBid(bytes32[],bytes32)\\\":{\\\"details\\\":\\\"Start a set of auctions and bid on one of them     * This method functions identically to calling `startAuctions` followed by `newBid`, but all in one transaction.\\\",\\\"params\\\":{\\\"hashes\\\":\\\"A list of hashes to start auctions on.\\\",\\\"sealedBid\\\":\\\"A sealed bid for one of the auctions.\\\"}},\\\"transfer(bytes32,address)\\\":{\\\"details\\\":\\\"The owner of a domain may transfer it to someone else at any time.\\\",\\\"params\\\":{\\\"_hash\\\":\\\"The node to transfer\\\",\\\"newOwner\\\":\\\"The address to transfer ownership to\\\"}},\\\"transferRegistrars(bytes32)\\\":{\\\"details\\\":\\\"Transfers the deed to the current registrar, if different from this one.     * Used during the upgrade process to a permanent registrar.\\\",\\\"params\\\":{\\\"_hash\\\":\\\"The name hash to transfer.\\\"}},\\\"unsealBid(bytes32,uint256,bytes32)\\\":{\\\"details\\\":\\\"Submit the properties of a bid to reveal them\\\",\\\"params\\\":{\\\"_hash\\\":\\\"The node in the sealedBid\\\",\\\"_salt\\\":\\\"The sale in the sealedBid\\\",\\\"_value\\\":\\\"The bid amount in the sealedBid\\\"}}},\\\"title\\\":\\\"Registrar\\\"},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/HashRegistrar.sol\\\":\\\"HashRegistrar\\\"},\\\"evmVersion\\\":\\\"byzantium\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\\\":{\\\"keccak256\\\":\\\"0x7b4abd2f65e2e093743077b899d0fb4952627ad7ff6104b840f9869f5baa5e96\\\",\\\"urls\\\":[\\\"bzzr://5b8d57c40a5f830516a6fb6d5e03a9293b0129a3bf49b8d48f69c2ec91f90a45\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/DeedImplementation.sol\\\":{\\\"keccak256\\\":\\\"0x91242ba8032d5e01a8a59da84afb4d0d5b1007d4257bde8e6caa20fbc700cdc7\\\",\\\"urls\\\":[\\\"bzzr://b3c449a5f75a92026469cdd531b431c0f0f1cc83f3fc7fc2ef65342176d436e4\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\\\":{\\\"keccak256\\\":\\\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\\\",\\\"urls\\\":[\\\"bzzr://8e5a54eed92d9bf8824175cf337e0df46e647deb0864eb5f091ea0b8132568f6\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/HashRegistrar.sol\\\":{\\\"keccak256\\\":\\\"0xfa35370373bb3f4393d2b32908c526651fbc46cad2e313c9c8b2e6d051083b11\\\",\\\"urls\\\":[\\\"bzzr://702a2eda197bd2740cedfd4ed5c39e835561aa046b4c325860183dc5ec9fb89a\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/Registrar.sol\\\":{\\\"keccak256\\\":\\\"0xaef3f85ba0cf0544485d506a3f93719a90f8f28ef6c59f7175955768bec719bb\\\",\\\"urls\\\":[\\\"bzzr://3a050fc49ad88188f879d99ec1476383531ab62536c69babc22e2896908734ae\\\"]}},\\\"version\\\":1}\",\"bytecode\":\" \",\"deployedBytecode\":\" \",\"sourceMap\":\"586:18452:6:-;;;1779:183;8:9:-1;5:2;;;30:1;27;20:12;5:2;1779:183:6;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1779:183:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1860:4;1854:3;;:10;;;;;;;;;;;;;;;;;;1885:9;1874:8;:20;;;;1935:1;1922:10;:14;:33;;1952:3;1922:33;;;1939:10;1922:33;1904:15;:51;;;;1779:183;;;586:18452;;;;;;\",\"deployedSourceMap\":\"586:18452:6:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8735:444;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8735:444:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8735:444:6;;;;;;;;;;;;;;;;;;;;14358:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14358:206:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14358:206:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9564:815;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9564:815:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9564:815:6;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;9564:815:6;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9564:815:6;;;;;;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;9564:815:6;;;;;;;;;;;;;;;14853:178;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14853:178:6;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;14853:178:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6637:844;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6637:844:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6637:844:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12611:229;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12611:229:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12611:229:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;628:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;628:14:6;;;;;;;;;;;;;;;;;;;;;;;;;;;4547:1975;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4547:1975:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4547:1975:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11472:565;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11472:565:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11472:565:6;;;;;;;;;;;;;;;;;;;;719:64;;8:9:-1;5:2;;;30:1;27;20:12;5:2;719:64:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;719:64:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13069:585;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13069:585:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13069:585:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8272:259;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8272:259:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8272:259:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13973:144;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13973:144:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13973:144:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7641:422;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7641:422:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7641:422:6;;;;;;;;;;;;;;;;;;;;977:27;;8:9:-1;5:2;;;30:1;27;20:12;5:2;977:27:6;;;;;;;;;;;;;;;;;;;;;;;884:45;;8:9:-1;5:2;;;30:1;27;20:12;5:2;884:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;3727:87;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3727:87:6;;;;;;;;;;;;;;;;;;;;11008:231;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11008:231:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11008:231:6;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;11008:231:6;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;11008:231:6;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;11008:231:6;;;;;;;;;;;;;;;2771:100;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2771:100:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2771:100:6;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2771:100:6;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2771:100:6;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;2771:100:6;;;;;;;;;;;;;;;12433:172;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12433:172:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12433:172:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2094:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2094:83:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2094:83:6;;;;;;;;;;;;;;;;;;;;648:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;648:23:6;;;;;;;;;;;;;;;;;;;;;;;4156:159;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4156:159:6;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;4156:159:6;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;4156:159:6;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;4156:159:6;;;;;;;;;;;;;;;;;;;;;;;;8735:444;8790:5;1310:10;1294:26;;;;;;;;:12;1300:5;1294;:12::i;:::-;:26;;;;;;;;;:72;;;;;1338:8;:15;1347:5;1338:15;;;;;;;;;;;:20;;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1338:28:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1338:28:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1338:28:6;;;;;;;;;;;;;;;;1324:42;;:10;:42;;;1294:72;1286:81;;;;;;;;8807:15;8825:8;:15;8834:5;8825:15;;;;;;;;;;;8807:33;;8850:17;8870:1;:6;;;;;;;;;;;;8850:26;;8923:8;8902:1;:18;;;:29;8895:3;:36;;:76;;;;8966:4;8935:36;;:3;;;;;;;;;;;:9;;;8945:8;;8935:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8935:19:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8935:19:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8935:19:6;;;;;;;;;;;;;;;;:36;;;;8895:76;8887:85;;;;;;;;8993:1;8983;:7;;:11;;;;9019:1;9004;:12;;:16;;;;9044:1;9030;:6;;;:16;;;;;;;;;;;;;;;;;;9057:26;9077:5;9057:19;:26::i;:::-;9093:12;:22;;;9116:4;9093:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9093:28:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9093:28:6;;;;9149:5;9136:28;9156:1;:7;;;9136:28;;;;;;;;;;;;;;;;;;1377:1;;8735:444;;:::o;14358:206::-;14418:4;14501:3;14492;14482:5;14477:11;;;:18;52:12:-1;49:1;45:20;29:14;25:41;7:59;;14477:18:6;922:7;14461:35;;;14460:44;52:12:-1;49:1;45:20;29:14;25:41;7:59;;14460:44:6;14441:15;;:64;14434:71;;14358:206;;;:::o;9564:815::-;9672:12;;9661:24;;;;;;;;;;;;;;;;;;;;;;;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;;9661:24:6;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9661:24:6;;;9651:35;;;;;;9688:10;1211:6;1195:22;;;;;;;;:12;1201:5;1195;:12::i;:::-;:22;;;;;;;;;1187:31;;;;;;;;9746:1;9722:20;9729:12;;9722:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;9722:20:6;;;;;;:6;:20::i;:::-;:25;;9714:34;;;;;;;;9758:12;9794;;9783:24;;;;;;;;;;;;;;;;;;;;;;;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;;9783:24:6;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;9783:24:6;;;9773:35;;;;;;9758:50;;9819:15;9837:8;:14;9846:4;9837:14;;;;;;;;;;;9819:32;;9862:25;9882:4;9862:19;:25::i;:::-;9929:3;9902:31;;9910:1;:6;;;;;;;;;;;;9902:31;;;;9898:321;;;10060:22;10064:1;:7;;;961:10;10060:3;:22::i;:::-;10050:1;:7;;:32;;;;10096:1;:6;;;;;;;;;;;;:17;;;10122:1;10114;:7;;;:9;;;;;;;;10125:5;10096:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10096:35:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10096:35:6;;;;10145:1;:6;;;;;;;;;;;;:15;;;10161:10;10145:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10145:27:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10145:27:6;;;;10186:1;:6;;;;;;;;;;;;:16;;;10203:4;10186:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10186:22:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10186:22:6;;;;9898:321;10256:12;;10234:64;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;10234:64:6;;;;;;;;;;;;;10250:4;10234:64;10270:1;:7;;;10279:1;:18;;;10234:64;;;;;;;;;;;;;;;;;;;;;;;;10319:1;10309;:7;;:11;;;;10345:1;10330;:12;;:16;;;;10370:1;10356;:6;;;:16;;;;;;;;;;;;;;;;;;1228:1;;9564:815;;;;:::o;14853:178::-;14945:7;14998:4;15004:5;15011;15018:4;14981:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;14981:42:6;;;14971:53;;;;;;14964:60;;14853:178;;;;;;:::o;6637:844::-;6705:8;6716:10;:18;6727:6;6716:18;;;;;;;;;;;;;;;:24;6735:4;6716:24;;;;;;;;;;;;;;;;;;;;;6705:35;;7192:3;7168:28;;7176:3;7168:28;;;;:88;;;;;7249:7;827:6;7207:39;;:3;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7207:18:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7207:18:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7207:18:6;;;;;;;;;;;;;;;;:39;:49;7200:3;:56;;7168:88;7160:97;;;;;;;;7334:3;:12;;;7347:10;7334:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7334:24:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7334:24:6;;;;7368:3;:13;;;7382:1;7368:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7368:16:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7368:16:6;;;;7426:1;7394:10;:18;7405:6;7394:18;;;;;;;;;;;;;;;:24;7413:4;7394:24;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;7461:6;7443:31;;7455:4;7443:31;7469:1;7472;7443:31;;;;;;;;;;;;;;;;;;;;;;;;;;6637:844;;;:::o;12611:229::-;12666:4;12672:7;12681:4;12687;12693;12709:15;12727:8;:15;12736:5;12727:15;;;;;;;;;;;12709:33;;12760:12;12766:5;12760;:12::i;:::-;12782:1;:6;;;;;;;;;;;;12791:1;:18;;;12811:1;:7;;;12820:1;:12;;;12752:81;;;;;;;;;;;12611:229;;;;;;;:::o;628:14::-;;;;;;;;;;;;;:::o;4547:1975::-;4628:12;4643:40;4650:5;4657:10;4669:6;4677:5;4643:6;:40::i;:::-;4628:55;;4693:8;4704:10;:22;4715:10;4704:22;;;;;;;;;;;;;;;:28;4727:4;4704:28;;;;;;;;;;;;;;;;;;;;;4693:39;;4774:3;4750:28;;4758:3;4750:28;;;;4742:37;;;;;;;;4834:3;4790:10;:22;4801:10;4790:22;;;;;;;;;;;;;;;:28;4813:4;4790:28;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;4849:15;4867:8;:15;4876:5;4867:15;;;;;;;;;;;4849:33;;4892:10;4905:24;4909:6;4917:3;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4917:11:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4917:11:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4917:11:6;;;;;;;;;;;;;;;;4905:3;:24::i;:::-;4892:37;;4939:3;:14;;;4954:5;4961:4;4939:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4939:27:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;4939:27:6;;;;4977:17;4997:12;5003:5;4997;:12::i;:::-;4977:32;;5039:10;5023:26;;;;;;;;:12;:26;;;;;;;;;5019:1497;;;5130:3;:13;;;5144:1;5130:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5130:16:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5130:16:6;;;;5184:10;5165:40;;5177:5;5165:40;5196:5;5203:1;5165:40;;;;;;;;;;;;;;;;;;;;;;;;;;5019:1497;;;5242:11;5226:27;;;;;;;;:12;:27;;;;;;;;;;5222:1294;;;5298:8;;;5222:1294;961:10;5327:5;:16;:74;;;;870:8;5368:33;;:1;:18;;;:33;5347:3;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5347:18:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5347:18:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5347:18:6;;;;;;;;;;;;;;;;:54;5327:74;5323:1193;;;5470:3;:13;;;5484:3;5470:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5470:18:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5470:18:6;;;;5526:10;5507:40;;5519:5;5507:40;5538:5;5545:1;5507:40;;;;;;;;;;;;;;;;;;;;;;;;;;5323:1193;;;5576:1;:12;;;5568:5;:20;5564:952;;;5711:3;5684:31;;5692:1;:6;;;;;;;;;;;;5684:31;;;;5680:145;;;5735:19;5757:1;:6;;;;;;;;;;;;5735:28;;5781:14;:24;;;5806:3;5781:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5781:29:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;5781:29:6;;;;5680:145;;5972:1;:12;;;5962:1;:7;;:22;;;;6055:5;6040:1;:12;;:20;;;;6083:3;6074:1;:6;;;:12;;;;;;;;;;;;;;;;;;6124:10;6105:40;;6117:5;6105:40;6136:5;6143:1;6105:40;;;;;;;;;;;;;;;;;;;;;;;;;;5564:952;;;6174:1;:7;;;6166:5;:15;6162:354;;;6259:5;6249:1;:7;;:15;;;;6278:3;:13;;;6292:3;6278:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6278:18:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6278:18:6;;;;6334:10;6315:40;;6327:5;6315:40;6346:5;6353:1;6315:40;;;;;;;;;;;;;;;;;;;;;;;;;;6162:354;;;6428:3;:13;;;6442:3;6428:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6428:18:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6428:18:6;;;;6484:10;6465:40;;6477:5;6465:40;6496:5;6503:1;6465:40;;;;;;;;;;;;;;;;;;;;;;;;;;6162:354;5564:952;5323:1193;5019:1497;4547:1975;;;;;;;;:::o;11472:565::-;11534:5;1310:10;1294:26;;;;;;;;:12;1300:5;1294;:12::i;:::-;:26;;;;;;;;;:72;;;;;1338:8;:15;1347:5;1338:15;;;;;;;;;;;:20;;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1338:28:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1338:28:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1338:28:6;;;;;;;;;;;;;;;;1324:42;;:10;:42;;;1294:72;1286:81;;;;;;;;11551:17;11571:3;;;;;;;;;;;:9;;;11581:8;;11571:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11571:19:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11571:19:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11571:19:6;;;;;;;;;;;;;;;;11551:39;;11629:4;11608:26;;:9;:26;;;;11600:35;;;;;;;;11674:15;11692:8;:15;11701:5;11692:15;;;;;;;;;;;11674:33;;11717:1;:6;;;;;;;;;;;;:19;;;11737:9;11717:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11717:30:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11717:30:6;;;;11825:9;11815:44;;;11860:5;11867:1;:6;;;;;;;;;;;;11875:1;:18;;;11815:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11815:79:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11815:79:6;;;;11949:1;11935;:6;;;:16;;;;;;;;;;;;;;;;;;11982:1;11961;:18;;:22;;;;12003:1;11993;:7;;:11;;;;12029:1;12014;:12;;:16;;;;1377:1;;11472:565;;:::o;719:64::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13069:585::-;13120:4;13136:19;13158:8;:15;13167:5;13158:15;;;;;;;;;;;13136:37;;13189:21;13199:5;13206:3;13189:9;:21::i;:::-;13188:22;13184:464;;;13233:20;13226:27;;;;;13184:464;13280:5;:22;;;13274:3;:28;13270:378;;;870:8;13328:37;;:5;:22;;;:37;13322:3;:43;13318:158;;;13392:12;13385:19;;;;;13318:158;13450:11;13443:18;;;;;13270:378;13530:1;13510:5;:16;;;:21;13506:132;;;13558:9;13551:16;;;;;13506:132;13613:10;13606:17;;;13069:585;;;;:::o;8272:259::-;8350:5;1310:10;1294:26;;;;;;;;:12;1300:5;1294;:12::i;:::-;:26;;;;;;;;;:72;;;;;1338:8;:15;1347:5;1338:15;;;;;;;;;;;:20;;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1338:28:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1338:28:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1338:28:6;;;;;;;;;;;;;;;;1324:42;;:10;:42;;;1294:72;1286:81;;;;;;;;8395:3;8375:24;;:8;:24;;;;8367:33;;;;;;;;8411:15;8429:8;:15;8438:5;8429:15;;;;;;;;;;;8411:33;;8454:1;:6;;;;;;;;;;;;:15;;;8470:8;8454:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8454:25:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8454:25:6;;;;8489:35;8508:5;8515:8;8489:18;:35::i;:::-;1377:1;8272:259;;;:::o;13973:144::-;14045:12;14089:21;14104:5;14089:14;:21::i;:::-;14076:10;:34;14069:41;;13973:144;;;;:::o;7641:422::-;7700:5;1310:10;1294:26;;;;;;;;:12;1300:5;1294;:12::i;:::-;:26;;;;;;;;;:72;;;;;1338:8;:15;1347:5;1338:15;;;;;;;;;;;:20;;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1338:28:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1338:28:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1338:28:6;;;;;;;;;;;;;;;;1324:42;;:10;:42;;;1294:72;1286:81;;;;;;;;7717:15;7735:8;:15;7744:5;7735:15;;;;;;;;;;;7717:33;;7859:22;7863:1;:7;;;961:10;7859:3;:22::i;:::-;7849:1;:7;;:32;;;;7891:1;:6;;;;;;;;;;;;:17;;;7909:1;:7;;;7918:4;7891:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7891:32:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7891:32:6;;;;7934:41;7953:5;7960:1;:6;;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7960:14:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7960:14:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7960:14:6;;;;;;;;;;;;;;;;7934:18;:41::i;:::-;8012:1;:6;;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8012:14:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8012:14:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8012:14:6;;;;;;;;;;;;;;;;7990:66;;8005:5;7990:66;8028:1;:7;;;8037:1;:18;;;7990:66;;;;;;;;;;;;;;;;;;;;;;;;1377:1;7641:422;;:::o;977:27::-;;;;:::o;884:45::-;922:7;884:45;:::o;3727:87::-;3789:18;3797:9;3789:7;:18::i;:::-;3727:87;:::o;11008:231::-;11098:1;11081:6;;:13;;:18;;11073:27;;;;;;;;11154:10;11118:46;;;;;;;;:32;11124:6;;11147:1;11131:6;;:13;;:17;11124:25;;;;;;;;;;;;;;;11118:5;:32::i;:::-;:46;;;;;;;;;;11110:55;;;;;;;;11176:56;11212:1;11196:6;;:13;;:17;11215:6;;11176:56;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;11176:56:6;;;;;;11223:8;;11176:19;:56::i;:::-;11008:231;;:::o;2771:100::-;2841:23;2856:7;;2841:23;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;2841:23:6;;;;;;:14;:23::i;:::-;2771:100;;:::o;12433:172::-;;;;:::o;2094:83::-;2150:20;2164:5;2150:13;:20::i;:::-;2094:83;:::o;648:23::-;;;;:::o;4156:159::-;4258:22;4273:6;;4258:22;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;4258:22:6;;;;;;:14;:22::i;:::-;4290:18;4298:9;4290:7;:18::i;:::-;4156:159;;;:::o;15037:355::-;15135:4;15104:36;;:3;;;;;;;;;;;:9;;;15114:8;;15104:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15104:19:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15104:19:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15104:19:6;;;;;;;;;;;;;;;;:36;;;15100:286;;;15156:3;;;;;;;;;;;:19;;;15176:8;;15186:5;15201:4;15156:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15156:51:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15156:51:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15156:51:6;;;;;;;;;;;;;;;;;15221:12;15263:8;;15273:5;15246:33;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;15246:33:6;;;15236:44;;;;;;15221:59;;15294:3;;;;;;;;;;;:15;;;15310:4;15324:3;15294:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15294:35:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15294:35:6;;;;15343:3;;;;;;;;;;;:12;;;15356:4;15370:3;15343:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15343:32:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15343:32:6;;;;15100:286;;15037:355;:::o;18194:841::-;18250:4;18384:8;18402;18457:1;18454;18450:9;18443:16;;18493:3;18489:1;18483:8;18479:18;18472:25;;18516:8;18527:1;18516:12;;18538:471;18554:3;18548;:9;18538:471;;;18580:7;18633:4;18627:3;18621:10;18617:21;18612:26;;18661:4;18657:1;:8;;;18653:346;;;18692:1;18685:8;;;;18653:346;;;18722:4;18718:1;:8;;;18714:285;;;18753:1;18746:8;;;;18714:285;;;18783:4;18779:1;:8;;;18775:224;;;18814:1;18807:8;;;;18775:224;;;18844:4;18840:1;:8;;;18836:163;;;18875:1;18868:8;;;;18836:163;;;18905:4;18901:1;:8;;;18897:102;;;18936:1;18929:8;;;;18897:102;;;18983:1;18976:8;;;;18897:102;18836:163;18775:224;18714:285;18653:346;18538:471;18559:5;;;;;;;18538:471;;;19025:3;19018:10;;;;;18194:841;;;:::o;17526:141::-;17578:4;17602:1;17598;:5;17594:66;;;17624:1;17617:8;;;;17594:66;17659:1;17652:8;;17526:141;;;;;:::o;17877:::-;17929:4;17953:1;17949;:5;17945:66;;;17975:1;17968:8;;;;17945:66;18010:1;18003:8;;17877:141;;;;;:::o;17127:189::-;17243:4;17212:36;;:3;;;;;;;;;;;:9;;;17222:8;;17212:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17212:19:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17212:19:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17212:19:6;;;;;;;;;;;;;;;;:36;;;17208:101;;;17262:3;;;;;;;;;;;:19;;;17282:8;;17292:5;17299:9;17262:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17262:47:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17262:47:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17262:47:6;;;;;;;;;;;;;;;;;17208:101;17127:189;;:::o;16006:402::-;16123:3;16069:58;;16077:10;:22;16088:10;16077:22;;;;;;;;;;;;;;;:33;16100:9;16077:33;;;;;;;;;;;;;;;;;;;;;16069:58;;;16061:67;;;;;;;;961:10;16146:9;:21;;16138:30;;;;;;;;16233:8;16275:9;16286:10;16244:53;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16244:53:6;;;16233:64;;16343:3;16307:10;:22;16318:10;16307:22;;;;;;;;;;;;;;;:33;16330:9;16307:33;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;16379:10;16361:40;;16368:9;16361:40;16391:9;16361:40;;;;;;;;;;;;;;;;;;16006:402;;:::o;16414:528::-;16549:3;;;;;;;;;;;:19;;;16569:4;16575:6;16582:3;16575:11;;;;;;;;;;;;;;;;;;16596:4;16549:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16549:53:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16549:53:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16549:53:6;;;;;;;;;;;;;;;;;16646:4;16652:6;16659:3;16652:11;;;;;;;;;;;;;;;;;;16629:35;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;16629:35:6;;;16619:46;;;;;;16612:53;;16730:1;16724:3;:7;16720:80;;;16747:42;16773:1;16767:3;:7;16776:6;16784:4;16747:19;:42::i;:::-;16720:80;16858:3;;;;;;;;;;;:15;;;16874:4;16888:3;16858:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16858:35:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16858:35:6;;;;16903:3;;;;;;;;;;;:12;;;16916:4;16930:3;16903:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16903:32:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16903:32:6;;;;16414:528;;;:::o;15832:168::-;15906:6;15915:1;15906:10;;15901:93;15922:7;:14;15918:1;:18;15901:93;;;15958:25;15972:7;15980:1;15972:10;;;;;;;;;;;;;;;;;;15958:13;:25::i;:::-;15938:4;;;;;;;15901:93;;;;15832:168;:::o;15398:428::-;1440:15;;1433:3;:22;;:69;;;;;1484:18;1466:15;;:36;1459:3;:43;;1433:69;:109;;;;;1537:4;1506:36;;:3;;;;;;;;;;;:9;;;1516:8;;1506:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1506:19:6;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1506:19:6;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1506:19:6;;;;;;;;;;;;;;;;:36;;;1433:109;1425:118;;;;;;;;15470:9;15482:12;15488:5;15482;:12::i;:::-;15470:24;;15516:12;15508:20;;;;;;;;:4;:20;;;;;;;;;15504:33;;;15530:7;;;15504:33;15562:9;15554:17;;;;;;;;:4;:17;;;;;;;;;15546:26;;;;;;;;15583:24;15610:8;:15;15619:5;15610:15;;;;;;;;;;;15583:42;;827:6;15665:24;;:3;:24;15635:10;:27;;:54;;;;15718:1;15699:10;:16;;:20;;;;15753:1;15729:10;:21;;:25;;;;15784:5;15769:50;15791:10;:27;;;15769:50;;;;;;;;;;;;;;;;;;1553:1;;;15398:428;:::o;586:18452::-;;;;;;;;;;:::o\",\"source\":\"pragma solidity ^0.5.0;\\n\\n\\n/*\\n\\nTemporary Hash Registrar\\n========================\\n\\nThis is a simplified version of a hash registrar. It is purporsefully limited:\\nnames cannot be six letters or shorter, new auctions will stop after 4 years.\\n\\nThe plan is to test the basic features and then move to a new contract in at most\\n2 years, when some sort of renewal mechanism will be enabled.\\n*/\\n\\n\\nimport \\\"./ENS.sol\\\";\\nimport \\\"./DeedImplementation.sol\\\";\\nimport \\\"./Registrar.sol\\\";\\n\\n/**\\n * @title Registrar\\n * @dev The registrar handles the auction process for each subnode of the node it owns.\\n */\\ncontract HashRegistrar is Registrar {\\n    ENS public ens;\\n    bytes32 public rootNode;\\n\\n    mapping (bytes32 => Entry) _entries;\\n    mapping (address => mapping (bytes32 => Deed)) public sealedBids;\\n\\n    uint32 constant totalAuctionLength = 5 days;\\n    uint32 constant revealPeriod = 48 hours;\\n    uint32 public constant launchLength = 8 weeks;\\n\\n    uint constant minPrice = 0.01 ether;\\n    uint public registryStarted;\\n\\n    struct Entry {\\n        Deed deed;\\n        uint registrationDate;\\n        uint value;\\n        uint highestBid;\\n    }\\n\\n    modifier inState(bytes32 _hash, Mode _state) {\\n        require(state(_hash) == _state);\\n        _;\\n    }\\n\\n    modifier onlyOwner(bytes32 _hash) {\\n        require(state(_hash) == Mode.Owned && msg.sender == _entries[_hash].deed.owner());\\n        _;\\n    }\\n\\n    modifier registryOpen() {\\n        require(now >= registryStarted && now <= registryStarted + (365 * 4) * 1 days && ens.owner(rootNode) == address(this));\\n        _;\\n    }\\n\\n    /**\\n     * @dev Constructs a new Registrar, with the provided address as the owner of the root node.\\n     *\\n     * @param _ens The address of the ENS\\n     * @param _rootNode The hash of the rootnode.\\n     */\\n    constructor(ENS _ens, bytes32 _rootNode, uint _startDate) public {\\n        ens = _ens;\\n        rootNode = _rootNode;\\n        registryStarted = _startDate > 0 ? _startDate : now;\\n    }\\n\\n    /**\\n     * @dev Start an auction for an available hash\\n     *\\n     * @param _hash The hash to start an auction on\\n     */\\n    function startAuction(bytes32 _hash) external {\\n        _startAuction(_hash);\\n    }\\n\\n    /**\\n     * @dev Start multiple auctions for better anonymity\\n     *\\n     * Anyone can start an auction by sending an array of hashes that they want to bid for.\\n     * Arrays are sent so that someone can open up an auction for X dummy hashes when they\\n     * are only really interested in bidding for one. This will increase the cost for an\\n     * attacker to simply bid blindly on all new auctions. Dummy auctions that are\\n     * open but not bid on are closed after a week.\\n     *\\n     * @param _hashes An array of hashes, at least one of which you presumably want to bid on\\n     */\\n    function startAuctions(bytes32[] calldata _hashes) external {\\n        _startAuctions(_hashes);\\n    }\\n\\n    /**\\n     * @dev Submit a new sealed bid on a desired hash in a blind auction\\n     *\\n     * Bids are sent by sending a message to the main contract with a hash and an amount. The hash\\n     * contains information about the bid, including the bidded hash, the bid amount, and a random\\n     * salt. Bids are not tied to any one auction until they are revealed. The value of the bid\\n     * itself can be masqueraded by sending more than the value of your actual bid. This is\\n     * followed by a 48h reveal period. Bids revealed after this period will be burned and the ether unrecoverable.\\n     * Since this is an auction, it is expected that most public hashes, like known domains and common dictionary\\n     * words, will have multiple bidders pushing the price up.\\n     *\\n     * @param sealedBid A sealedBid, created by the shaBid function\\n     */\\n    function newBid(bytes32 sealedBid) external payable {\\n        _newBid(sealedBid);\\n    }\\n\\n    /**\\n     * @dev Start a set of auctions and bid on one of them\\n     *\\n     * This method functions identically to calling `startAuctions` followed by `newBid`,\\n     * but all in one transaction.\\n     *\\n     * @param hashes A list of hashes to start auctions on.\\n     * @param sealedBid A sealed bid for one of the auctions.\\n     */\\n    function startAuctionsAndBid(bytes32[] calldata hashes, bytes32 sealedBid) external payable {\\n        _startAuctions(hashes);\\n        _newBid(sealedBid);\\n    }\\n\\n    /**\\n     * @dev Submit the properties of a bid to reveal them\\n     *\\n     * @param _hash The node in the sealedBid\\n     * @param _value The bid amount in the sealedBid\\n     * @param _salt The sale in the sealedBid\\n     */\\n    function unsealBid(bytes32 _hash, uint _value, bytes32 _salt) external {\\n        bytes32 seal = shaBid(_hash, msg.sender, _value, _salt);\\n        Deed bid = sealedBids[msg.sender][seal];\\n        require(address(bid) != address(0x0));\\n\\n        sealedBids[msg.sender][seal] = Deed(address(0x0));\\n        Entry storage h = _entries[_hash];\\n        uint value = min(_value, bid.value());\\n        bid.setBalance(value, true);\\n\\n        Mode auctionState = state(_hash);\\n        if (auctionState == Mode.Owned) {\\n            // Too late! Bidder loses their bid. Gets 0.5% back.\\n            bid.closeDeed(5);\\n            emit BidRevealed(_hash, msg.sender, value, 1);\\n        } else if (auctionState != Mode.Reveal) {\\n            // Invalid phase\\n            revert();\\n        } else if (value < minPrice || bid.creationDate() > h.registrationDate - revealPeriod) {\\n            // Bid too low or too late, refund 99.5%\\n            bid.closeDeed(995);\\n            emit BidRevealed(_hash, msg.sender, value, 0);\\n        } else if (value > h.highestBid) {\\n            // New winner\\n            // Cancel the other bid, refund 99.5%\\n            if (address(h.deed) != address(0x0)) {\\n                Deed previousWinner = h.deed;\\n                previousWinner.closeDeed(995);\\n            }\\n\\n            // Set new winner\\n            // Per the rules of a vickery auction, the value becomes the previous highestBid\\n            h.value = h.highestBid;  // will be zero if there's only 1 bidder\\n            h.highestBid = value;\\n            h.deed = bid;\\n            emit BidRevealed(_hash, msg.sender, value, 2);\\n        } else if (value > h.value) {\\n            // Not winner, but affects second place\\n            h.value = value;\\n            bid.closeDeed(995);\\n            emit BidRevealed(_hash, msg.sender, value, 3);\\n        } else {\\n            // Bid doesn't affect auction\\n            bid.closeDeed(995);\\n            emit BidRevealed(_hash, msg.sender, value, 4);\\n        }\\n    }\\n\\n    /**\\n     * @dev Cancel a bid\\n     *\\n     * @param seal The value returned by the shaBid function\\n     */\\n    function cancelBid(address bidder, bytes32 seal) external {\\n        Deed bid = sealedBids[bidder][seal];\\n        \\n        // If a sole bidder does not `unsealBid` in time, they have a few more days\\n        // where they can call `startAuction` (again) and then `unsealBid` during\\n        // the revealPeriod to get back their bid value.\\n        // For simplicity, they should call `startAuction` within\\n        // 9 days (2 weeks - totalAuctionLength), otherwise their bid will be\\n        // cancellable by anyone.\\n        require(address(bid) != address(0x0) && now >= bid.creationDate() + totalAuctionLength + 2 weeks);\\n\\n        // Send the canceller 0.5% of the bid, and burn the rest.\\n        bid.setOwner(msg.sender);\\n        bid.closeDeed(5);\\n        sealedBids[bidder][seal] = Deed(0);\\n        emit BidRevealed(seal, bidder, 0, 5);\\n    }\\n\\n    /**\\n     * @dev Finalize an auction after the registration date has passed\\n     *\\n     * @param _hash The hash of the name the auction is for\\n     */\\n    function finalizeAuction(bytes32 _hash) external onlyOwner(_hash) {\\n        Entry storage h = _entries[_hash];\\n        \\n        // Handles the case when there's only a single bidder (h.value is zero)\\n        h.value = max(h.value, minPrice);\\n        h.deed.setBalance(h.value, true);\\n\\n        trySetSubnodeOwner(_hash, h.deed.owner());\\n        emit HashRegistered(_hash, h.deed.owner(), h.value, h.registrationDate);\\n    }\\n\\n    /**\\n     * @dev The owner of a domain may transfer it to someone else at any time.\\n     *\\n     * @param _hash The node to transfer\\n     * @param newOwner The address to transfer ownership to\\n     */\\n    function transfer(bytes32 _hash, address payable newOwner) external onlyOwner(_hash) {\\n        require(newOwner != address(0x0));\\n\\n        Entry storage h = _entries[_hash];\\n        h.deed.setOwner(newOwner);\\n        trySetSubnodeOwner(_hash, newOwner);\\n    }\\n\\n    /**\\n     * @dev After some time, or if we're no longer the registrar, the owner can release\\n     *      the name and get their ether back.\\n     *\\n     * @param _hash The node to release\\n     */\\n    function releaseDeed(bytes32 _hash) external onlyOwner(_hash) {\\n        Entry storage h = _entries[_hash];\\n        Deed deedContract = h.deed;\\n\\n        require(now >= h.registrationDate + 365 days || ens.owner(rootNode) != address(this));\\n\\n        h.value = 0;\\n        h.highestBid = 0;\\n        h.deed = Deed(0);\\n\\n        _tryEraseSingleNode(_hash);\\n        deedContract.closeDeed(1000);\\n        emit HashReleased(_hash, h.value);        \\n    }\\n\\n    /**\\n     * @dev Submit a name 6 characters long or less. If it has been registered,\\n     *      the submitter will earn 50% of the deed value. \\n     * \\n     * We are purposefully handicapping the simplified registrar as a way \\n     * to force it into being restructured in a few years.\\n     *\\n     * @param unhashedName An invalid name to search for in the registry.\\n     */\\n    function invalidateName(string calldata unhashedName)\\n        external\\n        inState(keccak256(abi.encode(unhashedName)), Mode.Owned)\\n    {\\n        require(strlen(unhashedName) <= 6);\\n        bytes32 hash = keccak256(abi.encode(unhashedName));\\n\\n        Entry storage h = _entries[hash];\\n\\n        _tryEraseSingleNode(hash);\\n\\n        if (address(h.deed) != address(0x0)) {\\n            // Reward the discoverer with 50% of the deed\\n            // The previous owner gets 50%\\n            h.value = max(h.value, minPrice);\\n            h.deed.setBalance(h.value/2, false);\\n            h.deed.setOwner(msg.sender);\\n            h.deed.closeDeed(1000);\\n        }\\n\\n        emit HashInvalidated(hash, unhashedName, h.value, h.registrationDate);\\n\\n        h.value = 0;\\n        h.highestBid = 0;\\n        h.deed = Deed(0);\\n    }\\n\\n    /**\\n     * @dev Allows anyone to delete the owner and resolver records for a (subdomain of) a\\n     *      name that is not currently owned in the registrar. If passing, eg, 'foo.bar.eth',\\n     *      the owner and resolver fields on 'foo.bar.eth' and 'bar.eth' will all be cleared.\\n     *\\n     * @param labels A series of label hashes identifying the name to zero out, rooted at the\\n     *        registrar's root. Must contain at least one element. For instance, to zero \\n     *        'foo.bar.eth' on a registrar that owns '.eth', pass an array containing\\n     *        [keccak256('foo'), keccak256('bar')].\\n     */\\n    function eraseNode(bytes32[] calldata labels) external {\\n        require(labels.length != 0);\\n        require(state(labels[labels.length - 1]) != Mode.Owned);\\n\\n        _eraseNodeHierarchy(labels.length - 1, labels, rootNode);\\n    }\\n\\n    /**\\n     * @dev Transfers the deed to the current registrar, if different from this one.\\n     *\\n     * Used during the upgrade process to a permanent registrar.\\n     *\\n     * @param _hash The name hash to transfer.\\n     */\\n    function transferRegistrars(bytes32 _hash) external onlyOwner(_hash) {\\n        address registrar = ens.owner(rootNode);\\n        require(registrar != address(this));\\n\\n        // Migrate the deed\\n        Entry storage h = _entries[_hash];\\n        h.deed.setRegistrar(registrar);\\n\\n        // Call the new registrar to accept the transfer\\n        Registrar(registrar).acceptRegistrarTransfer(_hash, h.deed, h.registrationDate);\\n\\n        // Zero out the Entry\\n        h.deed = Deed(0);\\n        h.registrationDate = 0;\\n        h.value = 0;\\n        h.highestBid = 0;\\n    }\\n\\n    /**\\n     * @dev Accepts a transfer from a previous registrar; stubbed out here since there\\n     *      is no previous registrar implementing this interface.\\n     *\\n     * @param hash The sha3 hash of the label to transfer.\\n     * @param deed The Deed object for the name being transferred in.\\n     * @param registrationDate The date at which the name was originally registered.\\n     */\\n    function acceptRegistrarTransfer(bytes32 hash, Deed deed, uint registrationDate) external {\\n        hash; deed; registrationDate; // Don't warn about unused variables\\n    }\\n\\n    function entries(bytes32 _hash) external view returns (Mode, address, uint, uint, uint) {\\n        Entry storage h = _entries[_hash];\\n        return (state(_hash), address(h.deed), h.registrationDate, h.value, h.highestBid);\\n    }\\n\\n    // State transitions for names:\\n    //   Open -> Auction (startAuction)\\n    //   Auction -> Reveal\\n    //   Reveal -> Owned\\n    //   Reveal -> Open (if nobody bid)\\n    //   Owned -> Open (releaseDeed or invalidateName)\\n    function state(bytes32 _hash) public view returns (Mode) {\\n        Entry storage entry = _entries[_hash];\\n\\n        if (!isAllowed(_hash, now)) {\\n            return Mode.NotYetAvailable;\\n        } else if (now < entry.registrationDate) {\\n            if (now < entry.registrationDate - revealPeriod) {\\n                return Mode.Auction;\\n            } else {\\n                return Mode.Reveal;\\n            }\\n        } else {\\n            if (entry.highestBid == 0) {\\n                return Mode.Open;\\n            } else {\\n                return Mode.Owned;\\n            }\\n        }\\n    }\\n\\n    /**\\n     * @dev Determines if a name is available for registration yet\\n     *\\n     * Each name will be assigned a random date in which its auction\\n     * can be started, from 0 to 8 weeks\\n     *\\n     * @param _hash The hash to start an auction on\\n     * @param _timestamp The timestamp to query about\\n     */\\n    function isAllowed(bytes32 _hash, uint _timestamp) public view returns (bool allowed) {\\n        return _timestamp > getAllowedTime(_hash);\\n    }\\n\\n    /**\\n     * @dev Returns available date for hash\\n     *\\n     * The available time from the `registryStarted` for a hash is proportional\\n     * to its numeric value.\\n     *\\n     * @param _hash The hash to start an auction on\\n     */\\n    function getAllowedTime(bytes32 _hash) public view returns (uint) {\\n        return registryStarted + ((launchLength * (uint(_hash) >> 128)) >> 128);\\n        // Right shift operator: a >> b == a / 2**b\\n    }\\n\\n    /**\\n     * @dev Hash the values required for a secret bid\\n     *\\n     * @param hash The node corresponding to the desired namehash\\n     * @param value The bid amount\\n     * @param salt A random value to ensure secrecy of the bid\\n     * @return The hash of the bid values\\n     */\\n    function shaBid(bytes32 hash, address owner, uint value, bytes32 salt) public pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(hash, owner, value, salt));\\n    }\\n\\n    function _tryEraseSingleNode(bytes32 label) internal {\\n        if (ens.owner(rootNode) == address(this)) {\\n            ens.setSubnodeOwner(rootNode, label, address(this));\\n            bytes32 node = keccak256(abi.encodePacked(rootNode, label));\\n            ens.setResolver(node, address(0x0));\\n            ens.setOwner(node, address(0x0));\\n        }\\n    }\\n\\n    function _startAuction(bytes32 _hash) internal registryOpen() {\\n        Mode mode = state(_hash);\\n        if (mode == Mode.Auction) return;\\n        require(mode == Mode.Open);\\n\\n        Entry storage newAuction = _entries[_hash];\\n        newAuction.registrationDate = now + totalAuctionLength;\\n        newAuction.value = 0;\\n        newAuction.highestBid = 0;\\n        emit AuctionStarted(_hash, newAuction.registrationDate);\\n    }\\n\\n    function _startAuctions(bytes32[] memory _hashes) internal {\\n        for (uint i = 0; i < _hashes.length; i ++) {\\n            _startAuction(_hashes[i]);\\n        }\\n    }\\n\\n    function _newBid(bytes32 sealedBid) internal {\\n        require(address(sealedBids[msg.sender][sealedBid]) == address(0x0));\\n        require(msg.value >= minPrice);\\n\\n        // Creates a new hash contract with the owner\\n        Deed bid = (new DeedImplementation).value(msg.value)(msg.sender);\\n        sealedBids[msg.sender][sealedBid] = bid;\\n        emit NewBid(sealedBid, msg.sender, msg.value);\\n    }\\n\\n    function _eraseNodeHierarchy(uint idx, bytes32[] memory labels, bytes32 node) internal {\\n        // Take ownership of the node\\n        ens.setSubnodeOwner(node, labels[idx], address(this));\\n        node = keccak256(abi.encodePacked(node, labels[idx]));\\n\\n        // Recurse if there are more labels\\n        if (idx > 0) {\\n            _eraseNodeHierarchy(idx - 1, labels, node);\\n        }\\n\\n        // Erase the resolver and owner records\\n        ens.setResolver(node, address(0x0));\\n        ens.setOwner(node, address(0x0));\\n    }\\n\\n    /**\\n     * @dev Assign the owner in ENS, if we're still the registrar\\n     *\\n     * @param _hash hash to change owner\\n     * @param _newOwner new owner to transfer to\\n     */\\n    function trySetSubnodeOwner(bytes32 _hash, address _newOwner) internal {\\n        if (ens.owner(rootNode) == address(this))\\n            ens.setSubnodeOwner(rootNode, _hash, _newOwner);\\n    }\\n\\n    /**\\n     * @dev Returns the maximum of two unsigned integers\\n     *\\n     * @param a A number to compare\\n     * @param b A number to compare\\n     * @return The maximum of two unsigned integers\\n     */\\n    function max(uint a, uint b) internal pure returns (uint) {\\n        if (a > b)\\n            return a;\\n        else\\n            return b;\\n    }\\n\\n    /**\\n     * @dev Returns the minimum of two unsigned integers\\n     *\\n     * @param a A number to compare\\n     * @param b A number to compare\\n     * @return The minimum of two unsigned integers\\n     */\\n    function min(uint a, uint b) internal pure returns (uint) {\\n        if (a < b)\\n            return a;\\n        else\\n            return b;\\n    }\\n\\n    /**\\n     * @dev Returns the length of a given string\\n     *\\n     * @param s The string to measure the length of\\n     * @return The length of the input string\\n     */\\n    function strlen(string memory s) internal pure returns (uint) {\\n        s; // Don't warn about unused variables\\n        // Starting here means the LSB will be the byte we care about\\n        uint ptr;\\n        uint end;\\n        assembly {\\n            ptr := add(s, 1)\\n            end := add(mload(s), ptr)\\n        }\\n        uint len = 0;\\n        for (len; ptr < end; len++) {\\n            uint8 b;\\n            assembly { b := and(mload(ptr), 0xFF) }\\n            if (b < 0x80) {\\n                ptr += 1;\\n            } else if (b < 0xE0) {\\n                ptr += 2;\\n            } else if (b < 0xF0) {\\n                ptr += 3;\\n            } else if (b < 0xF8) {\\n                ptr += 4;\\n            } else if (b < 0xFC) {\\n                ptr += 5;\\n            } else {\\n                ptr += 6;\\n            }\\n        }\\n        return len;\\n    }\\n\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/HashRegistrar.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/HashRegistrar.sol\",\"exportedSymbols\":{\"HashRegistrar\":[2505]},\"id\":2506,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":1032,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:6\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":1033,\"nodeType\":\"ImportDirective\",\"scope\":2506,\"sourceUnit\":437,\"src\":\"388:19:6\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/DeedImplementation.sol\",\"file\":\"./DeedImplementation.sol\",\"id\":1034,\"nodeType\":\"ImportDirective\",\"scope\":2506,\"sourceUnit\":300,\"src\":\"408:34:6\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Registrar.sol\",\"file\":\"./Registrar.sol\",\"id\":1035,\"nodeType\":\"ImportDirective\",\"scope\":2506,\"sourceUnit\":2728,\"src\":\"443:25:6\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":1036,\"name\":\"Registrar\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2727,\"src\":\"612:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Registrar_$2727\",\"typeString\":\"contract Registrar\"}},\"id\":1037,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"612:9:6\"}],\"contractDependencies\":[299,2727],\"contractKind\":\"contract\",\"documentation\":\"@title Registrar\\n@dev The registrar handles the auction process for each subnode of the node it owns.\",\"fullyImplemented\":true,\"id\":2505,\"linearizedBaseContracts\":[2505,2727],\"name\":\"HashRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":false,\"id\":1039,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"628:14:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":1038,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"628:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":1041,\"name\":\"rootNode\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"648:23:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1040,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"648:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":1045,\"name\":\"_entries\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"678:35:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry)\"},\"typeName\":{\"id\":1044,\"keyType\":{\"id\":1042,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"687:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"678:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry)\"},\"valueType\":{\"contractScope\":null,\"id\":1043,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"698:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1051,\"name\":\"sealedBids\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"719:64:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"},\"typeName\":{\"id\":1050,\"keyType\":{\"id\":1046,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"728:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"719:46:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"},\"valueType\":{\"id\":1049,\"keyType\":{\"id\":1047,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"748:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"739:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"},\"valueType\":{\"contractScope\":null,\"id\":1048,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"759:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}}},\"value\":null,\"visibility\":\"public\"},{\"constant\":true,\"id\":1054,\"name\":\"totalAuctionLength\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"790:43:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"},\"typeName\":{\"id\":1052,\"name\":\"uint32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"790:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":1053,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"827:6:6\",\"subdenomination\":\"days\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_432000_by_1\",\"typeString\":\"int_const 432000\"},\"value\":\"5\"},\"visibility\":\"internal\"},{\"constant\":true,\"id\":1057,\"name\":\"revealPeriod\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"839:39:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"},\"typeName\":{\"id\":1055,\"name\":\"uint32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"839:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"3438\",\"id\":1056,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"870:8:6\",\"subdenomination\":\"hours\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_172800_by_1\",\"typeString\":\"int_const 172800\"},\"value\":\"48\"},\"visibility\":\"internal\"},{\"constant\":true,\"id\":1060,\"name\":\"launchLength\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"884:45:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"},\"typeName\":{\"id\":1058,\"name\":\"uint32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"884:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"38\",\"id\":1059,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"922:7:6\",\"subdenomination\":\"weeks\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_4838400_by_1\",\"typeString\":\"int_const 4838400\"},\"value\":\"8\"},\"visibility\":\"public\"},{\"constant\":true,\"id\":1063,\"name\":\"minPrice\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"936:35:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1061,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"936:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"302e3031\",\"id\":1062,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"961:10:6\",\"subdenomination\":\"ether\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_10000000000000000_by_1\",\"typeString\":\"int_const 10000000000000000\"},\"value\":\"0.01\"},\"visibility\":\"internal\"},{\"constant\":false,\"id\":1065,\"name\":\"registryStarted\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"977:27:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1064,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"977:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"public\"},{\"canonicalName\":\"HashRegistrar.Entry\",\"id\":1074,\"members\":[{\"constant\":false,\"id\":1067,\"name\":\"deed\",\"nodeType\":\"VariableDeclaration\",\"scope\":1074,\"src\":\"1034:9:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1066,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"1034:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1069,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":1074,\"src\":\"1053:21:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1068,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1053:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1071,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":1074,\"src\":\"1084:10:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1070,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1084:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1073,\"name\":\"highestBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1074,\"src\":\"1104:15:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1072,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1104:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"name\":\"Entry\",\"nodeType\":\"StructDefinition\",\"scope\":2505,\"src\":\"1011:115:6\",\"visibility\":\"public\"},{\"body\":{\"id\":1089,\"nodeType\":\"Block\",\"src\":\"1177:59:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1085,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1082,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1076,\"src\":\"1201:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1081,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"1195:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1083,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1195:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1084,\"name\":\"_state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1078,\"src\":\"1211:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"1195:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1080,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1187:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1086,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1187:31:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1087,\"nodeType\":\"ExpressionStatement\",\"src\":\"1187:31:6\"},{\"id\":1088,\"nodeType\":\"PlaceholderStatement\",\"src\":\"1228:1:6\"}]},\"documentation\":null,\"id\":1090,\"name\":\"inState\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":1079,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1076,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1090,\"src\":\"1149:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1075,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1149:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1078,\"name\":\"_state\",\"nodeType\":\"VariableDeclaration\",\"scope\":1090,\"src\":\"1164:11:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":1077,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"1164:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1148:28:6\"},\"src\":\"1132:104:6\",\"visibility\":\"internal\"},{\"body\":{\"id\":1114,\"nodeType\":\"Block\",\"src\":\"1276:109:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1110,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1100,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1096,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1092,\"src\":\"1300:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1095,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"1294:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1097,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1294:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1098,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"1310:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1099,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1310:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"1294:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1109,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1101,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"1324:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1102,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1324:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1103,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"1338:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1105,\"indexExpression\":{\"argumentTypes\":null,\"id\":1104,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1092,\"src\":\"1347:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"1338:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"id\":1106,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"1338:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1107,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":31,\"src\":\"1338:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_address_$\",\"typeString\":\"function () view external returns (address)\"}},\"id\":1108,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1338:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"1324:42:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1294:72:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1094,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1286:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1111,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1286:81:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1112,\"nodeType\":\"ExpressionStatement\",\"src\":\"1286:81:6\"},{\"id\":1113,\"nodeType\":\"PlaceholderStatement\",\"src\":\"1377:1:6\"}]},\"documentation\":null,\"id\":1115,\"name\":\"onlyOwner\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":1093,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1092,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1115,\"src\":\"1261:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1091,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1261:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1260:15:6\"},\"src\":\"1242:143:6\",\"visibility\":\"internal\"},{\"body\":{\"id\":1144,\"nodeType\":\"Block\",\"src\":\"1415:146:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1140,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1131,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1120,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1118,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"1433:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1119,\"name\":\"registryStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1065,\"src\":\"1440:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1433:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1130,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1121,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"1459:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<=\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1129,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1122,\"name\":\"registryStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1065,\"src\":\"1466:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_rational_126144000_by_1\",\"typeString\":\"int_const 126144000\"},\"id\":1128,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_rational_1460_by_1\",\"typeString\":\"int_const 1460\"},\"id\":1125,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"hexValue\":\"333635\",\"id\":1123,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1485:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_365_by_1\",\"typeString\":\"int_const 365\"},\"value\":\"365\"},\"nodeType\":\"BinaryOperation\",\"operator\":\"*\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"34\",\"id\":1124,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1491:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_4_by_1\",\"typeString\":\"int_const 4\"},\"value\":\"4\"},\"src\":\"1485:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1460_by_1\",\"typeString\":\"int_const 1460\"}}],\"id\":1126,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"1484:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1460_by_1\",\"typeString\":\"int_const 1460\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"*\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":1127,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1496:6:6\",\"subdenomination\":\"days\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_86400_by_1\",\"typeString\":\"int_const 86400\"},\"value\":\"1\"},\"src\":\"1484:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_126144000_by_1\",\"typeString\":\"int_const 126144000\"}},\"src\":\"1466:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1459:43:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1433:69:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1139,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1134,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"1516:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":1132,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"1506:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1133,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"1506:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":1135,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1506:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1137,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"1537:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":1136,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1529:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1138,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1529:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"1506:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1433:109:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1117,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1425:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1141,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1425:118:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1142,\"nodeType\":\"ExpressionStatement\",\"src\":\"1425:118:6\"},{\"id\":1143,\"nodeType\":\"PlaceholderStatement\",\"src\":\"1553:1:6\"}]},\"documentation\":null,\"id\":1145,\"name\":\"registryOpen\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":1116,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1412:2:6\"},\"src\":\"1391:170:6\",\"visibility\":\"internal\"},{\"body\":{\"id\":1171,\"nodeType\":\"Block\",\"src\":\"1844:118:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1156,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1154,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"1854:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1155,\"name\":\"_ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1147,\"src\":\"1860:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"1854:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1157,\"nodeType\":\"ExpressionStatement\",\"src\":\"1854:10:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1160,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1158,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"1874:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1159,\"name\":\"_rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1149,\"src\":\"1885:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"1874:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1161,\"nodeType\":\"ExpressionStatement\",\"src\":\"1874:20:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1169,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1162,\"name\":\"registryStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1065,\"src\":\"1904:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1165,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1163,\"name\":\"_startDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1151,\"src\":\"1922:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1164,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1935:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"1922:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseExpression\":{\"argumentTypes\":null,\"id\":1167,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"1952:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1168,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"Conditional\",\"src\":\"1922:33:6\",\"trueExpression\":{\"argumentTypes\":null,\"id\":1166,\"name\":\"_startDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1151,\"src\":\"1939:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1904:51:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1170,\"nodeType\":\"ExpressionStatement\",\"src\":\"1904:51:6\"}]},\"documentation\":\"@dev Constructs a new Registrar, with the provided address as the owner of the root node.\\n     * @param _ens The address of the ENS\\n@param _rootNode The hash of the rootnode.\",\"id\":1172,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1152,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1147,\"name\":\"_ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":1172,\"src\":\"1791:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":1146,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"1791:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1149,\"name\":\"_rootNode\",\"nodeType\":\"VariableDeclaration\",\"scope\":1172,\"src\":\"1801:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1148,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1801:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1151,\"name\":\"_startDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":1172,\"src\":\"1820:15:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1150,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1820:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1790:46:6\"},\"returnParameters\":{\"id\":1153,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1844:0:6\"},\"scope\":2505,\"src\":\"1779:183:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1181,\"nodeType\":\"Block\",\"src\":\"2140:37:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1178,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1174,\"src\":\"2164:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1177,\"name\":\"_startAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2206,\"src\":\"2150:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1179,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2150:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1180,\"nodeType\":\"ExpressionStatement\",\"src\":\"2150:20:6\"}]},\"documentation\":\"@dev Start an auction for an available hash\\n     * @param _hash The hash to start an auction on\",\"id\":1182,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1175,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1174,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1182,\"src\":\"2116:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1173,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2116:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2115:15:6\"},\"returnParameters\":{\"id\":1176,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2140:0:6\"},\"scope\":2505,\"src\":\"2094:83:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2634,\"visibility\":\"external\"},{\"body\":{\"id\":1192,\"nodeType\":\"Block\",\"src\":\"2831:40:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1189,\"name\":\"_hashes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1185,\"src\":\"2856:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}],\"id\":1188,\"name\":\"_startAuctions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2232,\"src\":\"2841:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32[] memory)\"}},\"id\":1190,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2841:23:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1191,\"nodeType\":\"ExpressionStatement\",\"src\":\"2841:23:6\"}]},\"documentation\":\"@dev Start multiple auctions for better anonymity\\n     * Anyone can start an auction by sending an array of hashes that they want to bid for.\\nArrays are sent so that someone can open up an auction for X dummy hashes when they\\nare only really interested in bidding for one. This will increase the cost for an\\nattacker to simply bid blindly on all new auctions. Dummy auctions that are\\nopen but not bid on are closed after a week.\\n     * @param _hashes An array of hashes, at least one of which you presumably want to bid on\",\"id\":1193,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuctions\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1186,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1185,\"name\":\"_hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":1193,\"src\":\"2794:26:6\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":1183,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2794:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1184,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"2794:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2793:28:6\"},\"returnParameters\":{\"id\":1187,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2831:0:6\"},\"scope\":2505,\"src\":\"2771:100:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2640,\"visibility\":\"external\"},{\"body\":{\"id\":1202,\"nodeType\":\"Block\",\"src\":\"3779:35:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1199,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1195,\"src\":\"3797:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1198,\"name\":\"_newBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2290,\"src\":\"3789:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1200,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3789:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1201,\"nodeType\":\"ExpressionStatement\",\"src\":\"3789:18:6\"}]},\"documentation\":\"@dev Submit a new sealed bid on a desired hash in a blind auction\\n     * Bids are sent by sending a message to the main contract with a hash and an amount. The hash\\ncontains information about the bid, including the bidded hash, the bid amount, and a random\\nsalt. Bids are not tied to any one auction until they are revealed. The value of the bid\\nitself can be masqueraded by sending more than the value of your actual bid. This is\\nfollowed by a 48h reveal period. Bids revealed after this period will be burned and the ether unrecoverable.\\nSince this is an auction, it is expected that most public hashes, like known domains and common dictionary\\nwords, will have multiple bidders pushing the price up.\\n     * @param sealedBid A sealedBid, created by the shaBid function\",\"id\":1203,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"newBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1196,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1195,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1203,\"src\":\"3743:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1194,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3743:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3742:19:6\"},\"returnParameters\":{\"id\":1197,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"3779:0:6\"},\"scope\":2505,\"src\":\"3727:87:6\",\"stateMutability\":\"payable\",\"superFunction\":2645,\"visibility\":\"external\"},{\"body\":{\"id\":1219,\"nodeType\":\"Block\",\"src\":\"4248:67:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1212,\"name\":\"hashes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1206,\"src\":\"4273:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}],\"id\":1211,\"name\":\"_startAuctions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2232,\"src\":\"4258:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32[] memory)\"}},\"id\":1213,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4258:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1214,\"nodeType\":\"ExpressionStatement\",\"src\":\"4258:22:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1216,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1208,\"src\":\"4298:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1215,\"name\":\"_newBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2290,\"src\":\"4290:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1217,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4290:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1218,\"nodeType\":\"ExpressionStatement\",\"src\":\"4290:18:6\"}]},\"documentation\":\"@dev Start a set of auctions and bid on one of them\\n     * This method functions identically to calling `startAuctions` followed by `newBid`,\\nbut all in one transaction.\\n     * @param hashes A list of hashes to start auctions on.\\n@param sealedBid A sealed bid for one of the auctions.\",\"id\":1220,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuctionsAndBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1209,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1206,\"name\":\"hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":1220,\"src\":\"4185:25:6\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":1204,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4185:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1205,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"4185:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1208,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1220,\"src\":\"4212:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1207,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4212:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4184:46:6\"},\"returnParameters\":{\"id\":1210,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"4248:0:6\"},\"scope\":2505,\"src\":\"4156:159:6\",\"stateMutability\":\"payable\",\"superFunction\":2653,\"visibility\":\"external\"},{\"body\":{\"id\":1451,\"nodeType\":\"Block\",\"src\":\"4618:1904:6\",\"statements\":[{\"assignments\":[1230],\"declarations\":[{\"constant\":false,\"id\":1230,\"name\":\"seal\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4628:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1229,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4628:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1238,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1232,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"4650:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1233,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"4657:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1234,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"4657:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1235,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1224,\"src\":\"4669:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1236,\"name\":\"_salt\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1226,\"src\":\"4677:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1231,\"name\":\"shaBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2093,\"src\":\"4643:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes32_$_t_address_$_t_uint256_$_t_bytes32_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,address,uint256,bytes32) pure returns (bytes32)\"}},\"id\":1237,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4643:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4628:55:6\"},{\"assignments\":[1240],\"declarations\":[{\"constant\":false,\"id\":1240,\"name\":\"bid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4693:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1239,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"4693:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1247,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1241,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"4704:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":1244,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1242,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"4715:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1243,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"4715:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4704:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":1246,\"indexExpression\":{\"argumentTypes\":null,\"id\":1245,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1230,\"src\":\"4727:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4704:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4693:39:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1255,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1250,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"4758:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1249,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4750:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1251,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4750:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1253,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4774:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1252,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4766:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1254,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4766:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"4750:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1248,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"4742:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1256,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4742:37:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1257,\"nodeType\":\"ExpressionStatement\",\"src\":\"4742:37:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1269,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1258,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"4790:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":1262,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1259,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"4801:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1260,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"4801:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4790:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":1263,\"indexExpression\":{\"argumentTypes\":null,\"id\":1261,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1230,\"src\":\"4813:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"4790:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1266,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4834:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1265,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4826:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1267,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4826:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":1264,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"4821:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1268,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4821:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"4790:49:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1270,\"nodeType\":\"ExpressionStatement\",\"src\":\"4790:49:6\"},{\"assignments\":[1272],\"declarations\":[{\"constant\":false,\"id\":1272,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4849:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1271,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"4849:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1276,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1273,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"4867:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1275,\"indexExpression\":{\"argumentTypes\":null,\"id\":1274,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"4876:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4867:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4849:33:6\"},{\"assignments\":[1278],\"declarations\":[{\"constant\":false,\"id\":1278,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4892:10:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1277,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4892:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1285,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1280,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1224,\"src\":\"4909:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1281,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"4917:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1282,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":41,\"src\":\"4917:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_uint256_$\",\"typeString\":\"function () view external returns (uint256)\"}},\"id\":1283,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4917:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1279,\"name\":\"min\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2417,\"src\":\"4905:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\"typeString\":\"function (uint256,uint256) pure returns (uint256)\"}},\"id\":1284,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4905:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4892:37:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1289,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"4954:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"74727565\",\"id\":1290,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4961:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"true\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"expression\":{\"argumentTypes\":null,\"id\":1286,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"4939:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1288,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setBalance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":18,\"src\":\"4939:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (uint256,bool) external\"}},\"id\":1291,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4939:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1292,\"nodeType\":\"ExpressionStatement\",\"src\":\"4939:27:6\"},{\"assignments\":[1294],\"declarations\":[{\"constant\":false,\"id\":1294,\"name\":\"auctionState\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4977:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":1293,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"4977:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1298,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1296,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"5003:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1295,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"4997:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1297,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4997:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4977:32:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1302,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1299,\"name\":\"auctionState\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1294,\"src\":\"5023:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1300,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"5039:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1301,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5039:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"5023:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1321,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1318,\"name\":\"auctionState\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1294,\"src\":\"5226:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1319,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"5242:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1320,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Reveal\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5242:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"5226:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1337,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1328,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1326,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"5327:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1327,\"name\":\"minPrice\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"5335:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"5327:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1336,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1329,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"5347:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1330,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"creationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":46,\"src\":\"5347:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_uint256_$\",\"typeString\":\"function () view external returns (uint256)\"}},\"id\":1331,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5347:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1335,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1332,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5368:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1333,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"5368:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1334,\"name\":\"revealPeriod\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1057,\"src\":\"5389:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"src\":\"5368:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"5347:54:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"5327:74:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1356,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1353,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"5568:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1354,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5576:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1355,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"5576:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"5568:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1409,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1406,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6166:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1407,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"6174:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1408,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"6174:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"6166:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":1445,\"nodeType\":\"Block\",\"src\":\"6372:144:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"393935\",\"id\":1434,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6442:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"},\"value\":\"995\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"}],\"expression\":{\"argumentTypes\":null,\"id\":1431,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"6428:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1433,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"6428:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1435,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6428:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1436,\"nodeType\":\"ExpressionStatement\",\"src\":\"6428:18:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1438,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"6477:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1439,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"6484:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1440,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"6484:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1441,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6496:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"34\",\"id\":1442,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6503:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_4_by_1\",\"typeString\":\"int_const 4\"},\"value\":\"4\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_4_by_1\",\"typeString\":\"int_const 4\"}],\"id\":1437,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"6465:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1443,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6465:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1444,\"nodeType\":\"EmitStatement\",\"src\":\"6460:45:6\"}]},\"id\":1446,\"nodeType\":\"IfStatement\",\"src\":\"6162:354:6\",\"trueBody\":{\"id\":1430,\"nodeType\":\"Block\",\"src\":\"6183:183:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1414,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1410,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"6249:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1412,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"6249:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1413,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6259:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"6249:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1415,\"nodeType\":\"ExpressionStatement\",\"src\":\"6249:15:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"393935\",\"id\":1419,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6292:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"},\"value\":\"995\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"}],\"expression\":{\"argumentTypes\":null,\"id\":1416,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"6278:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1418,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"6278:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1420,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6278:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1421,\"nodeType\":\"ExpressionStatement\",\"src\":\"6278:18:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1423,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"6327:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1424,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"6334:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1425,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"6334:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1426,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6346:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"33\",\"id\":1427,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6353:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_3_by_1\",\"typeString\":\"int_const 3\"},\"value\":\"3\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_3_by_1\",\"typeString\":\"int_const 3\"}],\"id\":1422,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"6315:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1428,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6315:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1429,\"nodeType\":\"EmitStatement\",\"src\":\"6310:45:6\"}]}},\"id\":1447,\"nodeType\":\"IfStatement\",\"src\":\"5564:952:6\",\"trueBody\":{\"id\":1405,\"nodeType\":\"Block\",\"src\":\"5590:566:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1364,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1358,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5692:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1359,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"5692:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1357,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"5684:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1360,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5684:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1362,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5711:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1361,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"5703:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1363,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5703:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"5684:31:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1377,\"nodeType\":\"IfStatement\",\"src\":\"5680:145:6\",\"trueBody\":{\"id\":1376,\"nodeType\":\"Block\",\"src\":\"5717:108:6\",\"statements\":[{\"assignments\":[1366],\"declarations\":[{\"constant\":false,\"id\":1366,\"name\":\"previousWinner\",\"nodeType\":\"VariableDeclaration\",\"scope\":1376,\"src\":\"5735:19:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1365,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"5735:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1369,\"initialValue\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1367,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5757:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1368,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"5757:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"5735:28:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"393935\",\"id\":1373,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5806:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"},\"value\":\"995\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"}],\"expression\":{\"argumentTypes\":null,\"id\":1370,\"name\":\"previousWinner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1366,\"src\":\"5781:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1372,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"5781:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1374,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5781:29:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1375,\"nodeType\":\"ExpressionStatement\",\"src\":\"5781:29:6\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":1383,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1378,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5962:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1380,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"5962:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1381,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5972:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1382,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"5972:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"5962:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1384,\"nodeType\":\"ExpressionStatement\",\"src\":\"5962:22:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1389,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1385,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"6040:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1387,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"6040:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1388,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6055:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"6040:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1390,\"nodeType\":\"ExpressionStatement\",\"src\":\"6040:20:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1395,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1391,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"6074:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1393,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"6074:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1394,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"6083:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"6074:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1396,\"nodeType\":\"ExpressionStatement\",\"src\":\"6074:12:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1398,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"6117:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1399,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"6124:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1400,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"6124:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1401,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6136:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"32\",\"id\":1402,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6143:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2_by_1\",\"typeString\":\"int_const 2\"},\"value\":\"2\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_2_by_1\",\"typeString\":\"int_const 2\"}],\"id\":1397,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"6105:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1403,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6105:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1404,\"nodeType\":\"EmitStatement\",\"src\":\"6100:45:6\"}]}},\"id\":1448,\"nodeType\":\"IfStatement\",\"src\":\"5323:1193:6\",\"trueBody\":{\"id\":1352,\"nodeType\":\"Block\",\"src\":\"5403:155:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"393935\",\"id\":1341,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5484:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"},\"value\":\"995\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"}],\"expression\":{\"argumentTypes\":null,\"id\":1338,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"5470:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1340,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"5470:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1342,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5470:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1343,\"nodeType\":\"ExpressionStatement\",\"src\":\"5470:18:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1345,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"5519:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1346,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"5526:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1347,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5526:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1348,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"5538:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1349,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5545:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1344,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"5507:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1350,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5507:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1351,\"nodeType\":\"EmitStatement\",\"src\":\"5502:45:6\"}]}},\"id\":1449,\"nodeType\":\"IfStatement\",\"src\":\"5222:1294:6\",\"trueBody\":{\"id\":1325,\"nodeType\":\"Block\",\"src\":\"5255:62:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":1322,\"name\":\"revert\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3037,3038],\"referencedDeclaration\":3037,\"src\":\"5298:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_revert_pure$__$returns$__$\",\"typeString\":\"function () pure\"}},\"id\":1323,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5298:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1324,\"nodeType\":\"ExpressionStatement\",\"src\":\"5298:8:6\"}]}},\"id\":1450,\"nodeType\":\"IfStatement\",\"src\":\"5019:1497:6\",\"trueBody\":{\"id\":1317,\"nodeType\":\"Block\",\"src\":\"5051:165:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":1306,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5144:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"},\"value\":\"5\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"}],\"expression\":{\"argumentTypes\":null,\"id\":1303,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"5130:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1305,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"5130:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1307,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5130:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1308,\"nodeType\":\"ExpressionStatement\",\"src\":\"5130:16:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1310,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"5177:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1311,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"5184:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1312,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5184:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1313,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"5196:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":1314,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5203:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"}],\"id\":1309,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"5165:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1315,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5165:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1316,\"nodeType\":\"EmitStatement\",\"src\":\"5160:45:6\"}]}}]},\"documentation\":\"@dev Submit the properties of a bid to reveal them\\n     * @param _hash The node in the sealedBid\\n@param _value The bid amount in the sealedBid\\n@param _salt The sale in the sealedBid\",\"id\":1452,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"unsealBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1227,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1222,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1452,\"src\":\"4566:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1221,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4566:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1224,\"name\":\"_value\",\"nodeType\":\"VariableDeclaration\",\"scope\":1452,\"src\":\"4581:11:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1223,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4581:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1226,\"name\":\"_salt\",\"nodeType\":\"VariableDeclaration\",\"scope\":1452,\"src\":\"4594:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1225,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4594:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4565:43:6\"},\"returnParameters\":{\"id\":1228,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"4618:0:6\"},\"scope\":2505,\"src\":\"4547:1975:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2662,\"visibility\":\"external\"},{\"body\":{\"id\":1517,\"nodeType\":\"Block\",\"src\":\"6695:786:6\",\"statements\":[{\"assignments\":[1460],\"declarations\":[{\"constant\":false,\"id\":1460,\"name\":\"bid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1517,\"src\":\"6705:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1459,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"6705:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1466,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1461,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"6716:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":1463,\"indexExpression\":{\"argumentTypes\":null,\"id\":1462,\"name\":\"bidder\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1454,\"src\":\"6727:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"6716:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":1465,\"indexExpression\":{\"argumentTypes\":null,\"id\":1464,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1456,\"src\":\"6735:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"6716:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"6705:35:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1484,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1474,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1469,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1460,\"src\":\"7176:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1468,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"7168:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1470,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7168:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1472,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7192:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1471,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"7184:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1473,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7184:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"7168:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1483,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1475,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"7200:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1482,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1480,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1476,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1460,\"src\":\"7207:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1477,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"creationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":46,\"src\":\"7207:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_uint256_$\",\"typeString\":\"function () view external returns (uint256)\"}},\"id\":1478,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7207:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1479,\"name\":\"totalAuctionLength\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1054,\"src\":\"7228:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"src\":\"7207:39:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"32\",\"id\":1481,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7249:7:6\",\"subdenomination\":\"weeks\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1209600_by_1\",\"typeString\":\"int_const 1209600\"},\"value\":\"2\"},\"src\":\"7207:49:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"7200:56:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"7168:88:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1467,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"7160:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1485,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7160:97:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1486,\"nodeType\":\"ExpressionStatement\",\"src\":\"7160:97:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1490,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"7347:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1491,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"7347:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":1487,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1460,\"src\":\"7334:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1489,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":6,\"src\":\"7334:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_payable_$returns$__$\",\"typeString\":\"function (address payable) external\"}},\"id\":1492,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7334:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1493,\"nodeType\":\"ExpressionStatement\",\"src\":\"7334:24:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":1497,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7382:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"},\"value\":\"5\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"}],\"expression\":{\"argumentTypes\":null,\"id\":1494,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1460,\"src\":\"7368:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1496,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"7368:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1498,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7368:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1499,\"nodeType\":\"ExpressionStatement\",\"src\":\"7368:16:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1508,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1500,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"7394:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":1503,\"indexExpression\":{\"argumentTypes\":null,\"id\":1501,\"name\":\"bidder\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1454,\"src\":\"7405:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"7394:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":1504,\"indexExpression\":{\"argumentTypes\":null,\"id\":1502,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1456,\"src\":\"7413:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"7394:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1506,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7426:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1505,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"7421:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1507,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7421:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"7394:34:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1509,\"nodeType\":\"ExpressionStatement\",\"src\":\"7394:34:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1511,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1456,\"src\":\"7455:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1512,\"name\":\"bidder\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1454,\"src\":\"7461:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1513,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7469:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":1514,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7472:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"},\"value\":\"5\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"}],\"id\":1510,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"7443:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1515,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7443:31:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1516,\"nodeType\":\"EmitStatement\",\"src\":\"7438:36:6\"}]},\"documentation\":\"@dev Cancel a bid\\n     * @param seal The value returned by the shaBid function\",\"id\":1518,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"cancelBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1457,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1454,\"name\":\"bidder\",\"nodeType\":\"VariableDeclaration\",\"scope\":1518,\"src\":\"6656:14:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":1453,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"6656:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1456,\"name\":\"seal\",\"nodeType\":\"VariableDeclaration\",\"scope\":1518,\"src\":\"6672:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1455,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"6672:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"6655:30:6\"},\"returnParameters\":{\"id\":1458,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"6695:0:6\"},\"scope\":2505,\"src\":\"6637:844:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2669,\"visibility\":\"external\"},{\"body\":{\"id\":1572,\"nodeType\":\"Block\",\"src\":\"7707:356:6\",\"statements\":[{\"assignments\":[1527],\"declarations\":[{\"constant\":false,\"id\":1527,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1572,\"src\":\"7717:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1526,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"7717:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1531,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1528,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"7735:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1530,\"indexExpression\":{\"argumentTypes\":null,\"id\":1529,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1520,\"src\":\"7744:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"7735:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"7717:33:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1540,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1532,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7849:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1534,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"7849:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1536,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7863:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1537,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"7863:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1538,\"name\":\"minPrice\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"7872:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1535,\"name\":\"max\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2399,\"src\":\"7859:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\"typeString\":\"function (uint256,uint256) pure returns (uint256)\"}},\"id\":1539,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7859:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"7849:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1541,\"nodeType\":\"ExpressionStatement\",\"src\":\"7849:32:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1547,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7909:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1548,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"7909:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"74727565\",\"id\":1549,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7918:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"true\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1542,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7891:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1545,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"7891:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1546,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setBalance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":18,\"src\":\"7891:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (uint256,bool) external\"}},\"id\":1550,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7891:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1551,\"nodeType\":\"ExpressionStatement\",\"src\":\"7891:32:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1553,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1520,\"src\":\"7953:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1554,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7960:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1555,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"7960:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1556,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":31,\"src\":\"7960:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_address_$\",\"typeString\":\"function () view external returns (address)\"}},\"id\":1557,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7960:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":1552,\"name\":\"trySetSubnodeOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2381,\"src\":\"7934:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":1558,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7934:41:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1559,\"nodeType\":\"ExpressionStatement\",\"src\":\"7934:41:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1561,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1520,\"src\":\"8005:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1562,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"8012:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1563,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"8012:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1564,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":31,\"src\":\"8012:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_address_$\",\"typeString\":\"function () view external returns (address)\"}},\"id\":1565,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8012:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1566,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"8028:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1567,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"8028:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1568,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"8037:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1569,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"8037:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1560,\"name\":\"HashRegistered\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2606,\"src\":\"7990:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint256)\"}},\"id\":1570,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7990:66:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1571,\"nodeType\":\"EmitStatement\",\"src\":\"7985:71:6\"}]},\"documentation\":\"@dev Finalize an auction after the registration date has passed\\n     * @param _hash The hash of the name the auction is for\",\"id\":1573,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1523,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1520,\"src\":\"7700:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1524,\"modifierName\":{\"argumentTypes\":null,\"id\":1522,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"7690:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"7690:16:6\"}],\"name\":\"finalizeAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1521,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1520,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1573,\"src\":\"7666:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1519,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"7666:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"7665:15:6\"},\"returnParameters\":{\"id\":1525,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"7707:0:6\"},\"scope\":2505,\"src\":\"7641:422:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2674,\"visibility\":\"external\"},{\"body\":{\"id\":1610,\"nodeType\":\"Block\",\"src\":\"8357:174:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"id\":1588,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1584,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1577,\"src\":\"8375:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1586,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"8395:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1585,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"8387:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1587,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8387:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"8375:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1583,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"8367:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1589,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8367:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1590,\"nodeType\":\"ExpressionStatement\",\"src\":\"8367:33:6\"},{\"assignments\":[1592],\"declarations\":[{\"constant\":false,\"id\":1592,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1610,\"src\":\"8411:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1591,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"8411:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1596,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1593,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"8429:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1595,\"indexExpression\":{\"argumentTypes\":null,\"id\":1594,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1575,\"src\":\"8438:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"8429:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"8411:33:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1602,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1577,\"src\":\"8470:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1597,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1592,\"src\":\"8454:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1600,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"8454:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1601,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":6,\"src\":\"8454:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_payable_$returns$__$\",\"typeString\":\"function (address payable) external\"}},\"id\":1603,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8454:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1604,\"nodeType\":\"ExpressionStatement\",\"src\":\"8454:25:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1606,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1575,\"src\":\"8508:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1607,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1577,\"src\":\"8515:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":1605,\"name\":\"trySetSubnodeOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2381,\"src\":\"8489:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":1608,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8489:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1609,\"nodeType\":\"ExpressionStatement\",\"src\":\"8489:35:6\"}]},\"documentation\":\"@dev The owner of a domain may transfer it to someone else at any time.\\n     * @param _hash The node to transfer\\n@param newOwner The address to transfer ownership to\",\"id\":1611,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1580,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1575,\"src\":\"8350:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1581,\"modifierName\":{\"argumentTypes\":null,\"id\":1579,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"8340:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"8340:16:6\"}],\"name\":\"transfer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1578,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1575,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1611,\"src\":\"8290:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1574,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"8290:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1577,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":1611,\"src\":\"8305:24:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":1576,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"8305:15:6\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"8289:41:6\"},\"returnParameters\":{\"id\":1582,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"8357:0:6\"},\"scope\":2505,\"src\":\"8272:259:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2681,\"visibility\":\"external\"},{\"body\":{\"id\":1684,\"nodeType\":\"Block\",\"src\":\"8797:382:6\",\"statements\":[{\"assignments\":[1620],\"declarations\":[{\"constant\":false,\"id\":1620,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1684,\"src\":\"8807:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1619,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"8807:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1624,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1621,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"8825:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1623,\"indexExpression\":{\"argumentTypes\":null,\"id\":1622,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1613,\"src\":\"8834:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"8825:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"8807:33:6\"},{\"assignments\":[1626],\"declarations\":[{\"constant\":false,\"id\":1626,\"name\":\"deedContract\",\"nodeType\":\"VariableDeclaration\",\"scope\":1684,\"src\":\"8850:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1625,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"8850:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1629,\"initialValue\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1627,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"8870:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1628,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"8870:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"8850:26:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1645,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1636,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1631,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"8895:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1635,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1632,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"8902:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1633,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"8902:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"333635\",\"id\":1634,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"8923:8:6\",\"subdenomination\":\"days\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_31536000_by_1\",\"typeString\":\"int_const 31536000\"},\"value\":\"365\"},\"src\":\"8902:29:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"8895:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1644,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1639,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"8945:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":1637,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"8935:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1638,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"8935:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":1640,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8935:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1642,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"8966:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":1641,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"8958:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1643,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8958:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"8935:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"8895:76:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1630,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"8887:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1646,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8887:85:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1647,\"nodeType\":\"ExpressionStatement\",\"src\":\"8887:85:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1652,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1648,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"8983:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1650,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"8983:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1651,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"8993:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"8983:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1653,\"nodeType\":\"ExpressionStatement\",\"src\":\"8983:11:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1658,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1654,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"9004:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1656,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"9004:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1657,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9019:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"9004:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1659,\"nodeType\":\"ExpressionStatement\",\"src\":\"9004:16:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1666,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1660,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"9030:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1662,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"9030:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1664,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9044:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1663,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"9039:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1665,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9039:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"9030:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1667,\"nodeType\":\"ExpressionStatement\",\"src\":\"9030:16:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1669,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1613,\"src\":\"9077:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1668,\"name\":\"_tryEraseSingleNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2147,\"src\":\"9057:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1670,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9057:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1671,\"nodeType\":\"ExpressionStatement\",\"src\":\"9057:26:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"31303030\",\"id\":1675,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9116:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"},\"value\":\"1000\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"}],\"expression\":{\"argumentTypes\":null,\"id\":1672,\"name\":\"deedContract\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1626,\"src\":\"9093:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1674,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"9093:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1676,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9093:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1677,\"nodeType\":\"ExpressionStatement\",\"src\":\"9093:28:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1679,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1613,\"src\":\"9149:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1680,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"9156:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1681,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"9156:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1678,\"name\":\"HashReleased\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2612,\"src\":\"9136:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,uint256)\"}},\"id\":1682,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9136:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1683,\"nodeType\":\"EmitStatement\",\"src\":\"9131:33:6\"}]},\"documentation\":\"@dev After some time, or if we're no longer the registrar, the owner can release\\n     the name and get their ether back.\\n     * @param _hash The node to release\",\"id\":1685,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1616,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1613,\"src\":\"8790:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1617,\"modifierName\":{\"argumentTypes\":null,\"id\":1615,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"8780:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"8780:16:6\"}],\"name\":\"releaseDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1614,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1613,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1685,\"src\":\"8756:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1612,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"8756:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"8755:15:6\"},\"returnParameters\":{\"id\":1618,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"8797:0:6\"},\"scope\":2505,\"src\":\"8735:444:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2686,\"visibility\":\"external\"},{\"body\":{\"id\":1805,\"nodeType\":\"Block\",\"src\":\"9704:675:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1705,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1702,\"name\":\"unhashedName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1687,\"src\":\"9729:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}],\"id\":1701,\"name\":\"strlen\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2504,\"src\":\"9722:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$\",\"typeString\":\"function (string memory) pure returns (uint256)\"}},\"id\":1703,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9722:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<=\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"36\",\"id\":1704,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9746:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_6_by_1\",\"typeString\":\"int_const 6\"},\"value\":\"6\"},\"src\":\"9722:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1700,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"9714:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1706,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9714:34:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1707,\"nodeType\":\"ExpressionStatement\",\"src\":\"9714:34:6\"},{\"assignments\":[1709],\"declarations\":[{\"constant\":false,\"id\":1709,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1805,\"src\":\"9758:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1708,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"9758:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1716,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1713,\"name\":\"unhashedName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1687,\"src\":\"9794:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}],\"expression\":{\"argumentTypes\":null,\"id\":1711,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"9783:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":1712,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encode\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"9783:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":1714,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9783:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1710,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"9773:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1715,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9773:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"9758:50:6\"},{\"assignments\":[1718],\"declarations\":[{\"constant\":false,\"id\":1718,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1805,\"src\":\"9819:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1717,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"9819:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1722,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1719,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"9837:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1721,\"indexExpression\":{\"argumentTypes\":null,\"id\":1720,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1709,\"src\":\"9846:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"9837:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"9819:32:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1724,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1709,\"src\":\"9882:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1723,\"name\":\"_tryEraseSingleNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2147,\"src\":\"9862:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1725,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9862:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1726,\"nodeType\":\"ExpressionStatement\",\"src\":\"9862:25:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1734,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1728,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"9910:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1729,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"9910:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1727,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"9902:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1730,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9902:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1732,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9929:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1731,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"9921:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1733,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9921:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"9902:31:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1775,\"nodeType\":\"IfStatement\",\"src\":\"9898:321:6\",\"trueBody\":{\"id\":1774,\"nodeType\":\"Block\",\"src\":\"9935:284:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1743,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1735,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10050:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1737,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10050:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1739,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10064:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1740,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10064:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1741,\"name\":\"minPrice\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"10073:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1738,\"name\":\"max\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2399,\"src\":\"10060:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\"typeString\":\"function (uint256,uint256) pure returns (uint256)\"}},\"id\":1742,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10060:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"10050:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1744,\"nodeType\":\"ExpressionStatement\",\"src\":\"10050:32:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1753,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1750,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10114:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1751,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10114:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"/\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"32\",\"id\":1752,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10122:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2_by_1\",\"typeString\":\"int_const 2\"},\"value\":\"2\"},\"src\":\"10114:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"66616c7365\",\"id\":1754,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10125:5:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"false\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1745,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10096:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1748,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"10096:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1749,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setBalance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":18,\"src\":\"10096:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (uint256,bool) external\"}},\"id\":1755,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10096:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1756,\"nodeType\":\"ExpressionStatement\",\"src\":\"10096:35:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1762,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"10161:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1763,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"10161:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1757,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10145:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1760,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"10145:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1761,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":6,\"src\":\"10145:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_payable_$returns$__$\",\"typeString\":\"function (address payable) external\"}},\"id\":1764,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10145:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1765,\"nodeType\":\"ExpressionStatement\",\"src\":\"10145:27:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"31303030\",\"id\":1771,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10203:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"},\"value\":\"1000\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1766,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10186:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1769,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"10186:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1770,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"10186:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1772,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10186:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1773,\"nodeType\":\"ExpressionStatement\",\"src\":\"10186:22:6\"}]}},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1777,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1709,\"src\":\"10250:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1778,\"name\":\"unhashedName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1687,\"src\":\"10256:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1779,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10270:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1780,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10270:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1781,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10279:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1782,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"10279:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1776,\"name\":\"HashInvalidated\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2622,\"src\":\"10234:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,string memory,uint256,uint256)\"}},\"id\":1783,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10234:64:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1784,\"nodeType\":\"EmitStatement\",\"src\":\"10229:69:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1789,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1785,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10309:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1787,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10309:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1788,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10319:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"10309:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1790,\"nodeType\":\"ExpressionStatement\",\"src\":\"10309:11:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1795,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1791,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10330:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1793,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"10330:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1794,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10345:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"10330:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1796,\"nodeType\":\"ExpressionStatement\",\"src\":\"10330:16:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1803,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1797,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10356:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1799,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"10356:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1801,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10370:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1800,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"10365:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1802,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10365:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"10356:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1804,\"nodeType\":\"ExpressionStatement\",\"src\":\"10356:16:6\"}]},\"documentation\":\"@dev Submit a name 6 characters long or less. If it has been registered,\\n     the submitter will earn 50% of the deed value. \\n\\n     * We are purposefully handicapping the simplified registrar as a way \\nto force it into being restructured in a few years.\\n     * @param unhashedName An invalid name to search for in the registry.\",\"id\":1806,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1693,\"name\":\"unhashedName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1687,\"src\":\"9672:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}],\"expression\":{\"argumentTypes\":null,\"id\":1691,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"9661:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":1692,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encode\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"9661:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":1694,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9661:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1690,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"9651:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1695,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9651:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1696,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"9688:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1697,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"9688:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}}],\"id\":1698,\"modifierName\":{\"argumentTypes\":null,\"id\":1689,\"name\":\"inState\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1090,\"src\":\"9643:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$_t_enum$_Mode_$2572_$\",\"typeString\":\"modifier (bytes32,enum Registrar.Mode)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"9643:56:6\"}],\"name\":\"invalidateName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1688,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1687,\"name\":\"unhashedName\",\"nodeType\":\"VariableDeclaration\",\"scope\":1806,\"src\":\"9588:28:6\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":1686,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"9588:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"9587:30:6\"},\"returnParameters\":{\"id\":1699,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"9704:0:6\"},\"scope\":2505,\"src\":\"9564:815:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2691,\"visibility\":\"external\"},{\"body\":{\"id\":1842,\"nodeType\":\"Block\",\"src\":\"11063:176:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1816,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1813,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11081:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},\"id\":1814,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"11081:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1815,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11098:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"11081:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1812,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"11073:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1817,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11073:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1818,\"nodeType\":\"ExpressionStatement\",\"src\":\"11073:27:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1830,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1821,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11124:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},\"id\":1826,\"indexExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1825,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1822,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11131:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},\"id\":1823,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"11131:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":1824,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11147:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"},\"src\":\"11131:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"11124:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1820,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"11118:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1827,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11118:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1828,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"11154:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1829,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"11154:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"11118:46:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1819,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"11110:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1831,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11110:55:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1832,\"nodeType\":\"ExpressionStatement\",\"src\":\"11110:55:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1837,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1834,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11196:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},\"id\":1835,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"11196:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":1836,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11212:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"},\"src\":\"11196:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1838,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11215:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},{\"argumentTypes\":null,\"id\":1839,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"11223:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1833,\"name\":\"_eraseNodeHierarchy\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2356,\"src\":\"11176:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$returns$__$\",\"typeString\":\"function (uint256,bytes32[] memory,bytes32)\"}},\"id\":1840,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11176:56:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1841,\"nodeType\":\"ExpressionStatement\",\"src\":\"11176:56:6\"}]},\"documentation\":\"@dev Allows anyone to delete the owner and resolver records for a (subdomain of) a\\n     name that is not currently owned in the registrar. If passing, eg, 'foo.bar.eth',\\n     the owner and resolver fields on 'foo.bar.eth' and 'bar.eth' will all be cleared.\\n     * @param labels A series of label hashes identifying the name to zero out, rooted at the\\n       registrar's root. Must contain at least one element. For instance, to zero \\n       'foo.bar.eth' on a registrar that owns '.eth', pass an array containing\\n       [keccak256('foo'), keccak256('bar')].\",\"id\":1843,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"eraseNode\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1810,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1809,\"name\":\"labels\",\"nodeType\":\"VariableDeclaration\",\"scope\":1843,\"src\":\"11027:25:6\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":1807,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"11027:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1808,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"11027:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"11026:27:6\"},\"returnParameters\":{\"id\":1811,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"11063:0:6\"},\"scope\":2505,\"src\":\"11008:231:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2697,\"visibility\":\"external\"},{\"body\":{\"id\":1917,\"nodeType\":\"Block\",\"src\":\"11541:496:6\",\"statements\":[{\"assignments\":[1852],\"declarations\":[{\"constant\":false,\"id\":1852,\"name\":\"registrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":1917,\"src\":\"11551:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":1851,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"11551:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1857,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1855,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"11581:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":1853,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"11571:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1854,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"11571:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":1856,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11571:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"11551:39:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1863,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1859,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1852,\"src\":\"11608:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1861,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"11629:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":1860,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"11621:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1862,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11621:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"11608:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1858,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"11600:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1864,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11600:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1865,\"nodeType\":\"ExpressionStatement\",\"src\":\"11600:35:6\"},{\"assignments\":[1867],\"declarations\":[{\"constant\":false,\"id\":1867,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1917,\"src\":\"11674:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1866,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"11674:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1871,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1868,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"11692:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1870,\"indexExpression\":{\"argumentTypes\":null,\"id\":1869,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1845,\"src\":\"11701:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"11692:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"11674:33:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1877,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1852,\"src\":\"11737:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1872,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11717:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1875,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"11717:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1876,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setRegistrar\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":11,\"src\":\"11717:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_$returns$__$\",\"typeString\":\"function (address) external\"}},\"id\":1878,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11717:30:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1879,\"nodeType\":\"ExpressionStatement\",\"src\":\"11717:30:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1884,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1845,\"src\":\"11860:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1885,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11867:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1886,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"11867:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1887,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11875:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1888,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"11875:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1881,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1852,\"src\":\"11825:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":1880,\"name\":\"Registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2727,\"src\":\"11815:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Registrar_$2727_$\",\"typeString\":\"type(contract Registrar)\"}},\"id\":1882,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11815:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Registrar_$2727\",\"typeString\":\"contract Registrar\"}},\"id\":1883,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"acceptRegistrarTransfer\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2711,\"src\":\"11815:44:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_contract$_Deed_$47_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,contract Deed,uint256) external\"}},\"id\":1889,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11815:79:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1890,\"nodeType\":\"ExpressionStatement\",\"src\":\"11815:79:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1897,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1891,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11935:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1893,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"11935:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1895,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11949:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1894,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"11944:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1896,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11944:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"11935:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1898,\"nodeType\":\"ExpressionStatement\",\"src\":\"11935:16:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1903,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1899,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11961:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1901,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"11961:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1902,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11982:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"11961:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1904,\"nodeType\":\"ExpressionStatement\",\"src\":\"11961:22:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1909,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1905,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11993:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1907,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"11993:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1908,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"12003:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"11993:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1910,\"nodeType\":\"ExpressionStatement\",\"src\":\"11993:11:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1915,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1911,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"12014:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1913,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"12014:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1914,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"12029:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"12014:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1916,\"nodeType\":\"ExpressionStatement\",\"src\":\"12014:16:6\"}]},\"documentation\":\"@dev Transfers the deed to the current registrar, if different from this one.\\n     * Used during the upgrade process to a permanent registrar.\\n     * @param _hash The name hash to transfer.\",\"id\":1918,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1848,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1845,\"src\":\"11534:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1849,\"modifierName\":{\"argumentTypes\":null,\"id\":1847,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"11524:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"11524:16:6\"}],\"name\":\"transferRegistrars\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1846,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1845,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1918,\"src\":\"11500:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1844,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"11500:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"11499:15:6\"},\"returnParameters\":{\"id\":1850,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"11541:0:6\"},\"scope\":2505,\"src\":\"11472:565:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2702,\"visibility\":\"external\"},{\"body\":{\"id\":1933,\"nodeType\":\"Block\",\"src\":\"12523:82:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1927,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1920,\"src\":\"12533:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1928,\"nodeType\":\"ExpressionStatement\",\"src\":\"12533:4:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1929,\"name\":\"deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1922,\"src\":\"12539:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1930,\"nodeType\":\"ExpressionStatement\",\"src\":\"12539:4:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1931,\"name\":\"registrationDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1924,\"src\":\"12545:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1932,\"nodeType\":\"ExpressionStatement\",\"src\":\"12545:16:6\"}]},\"documentation\":\"@dev Accepts a transfer from a previous registrar; stubbed out here since there\\n     is no previous registrar implementing this interface.\\n     * @param hash The sha3 hash of the label to transfer.\\n@param deed The Deed object for the name being transferred in.\\n@param registrationDate The date at which the name was originally registered.\",\"id\":1934,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"acceptRegistrarTransfer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1925,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1920,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1934,\"src\":\"12466:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1919,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12466:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1922,\"name\":\"deed\",\"nodeType\":\"VariableDeclaration\",\"scope\":1934,\"src\":\"12480:9:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1921,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"12480:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1924,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":1934,\"src\":\"12491:21:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1923,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12491:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"12465:48:6\"},\"returnParameters\":{\"id\":1926,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"12523:0:6\"},\"scope\":2505,\"src\":\"12433:172:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2711,\"visibility\":\"external\"},{\"body\":{\"id\":1970,\"nodeType\":\"Block\",\"src\":\"12699:141:6\",\"statements\":[{\"assignments\":[1950],\"declarations\":[{\"constant\":false,\"id\":1950,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1970,\"src\":\"12709:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1949,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"12709:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1954,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1951,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"12727:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1953,\"indexExpression\":{\"argumentTypes\":null,\"id\":1952,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1936,\"src\":\"12736:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"12727:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"12709:33:6\"},{\"expression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1956,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1936,\"src\":\"12766:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1955,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"12760:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1957,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"12760:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1959,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1950,\"src\":\"12782:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1960,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"12782:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1958,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"12774:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1961,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"12774:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1962,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1950,\"src\":\"12791:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1963,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"12791:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1964,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1950,\"src\":\"12811:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1965,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"12811:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1966,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1950,\"src\":\"12820:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1967,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"12820:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":1968,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"12759:74:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$_t_enum$_Mode_$2572_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$\",\"typeString\":\"tuple(enum Registrar.Mode,address,uint256,uint256,uint256)\"}},\"functionReturnParameters\":1948,\"id\":1969,\"nodeType\":\"Return\",\"src\":\"12752:81:6\"}]},\"documentation\":null,\"id\":1971,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"entries\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1937,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1936,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12628:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1935,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12628:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"12627:15:6\"},\"returnParameters\":{\"id\":1948,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1939,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12666:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":1938,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"12666:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1941,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12672:7:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":1940,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12672:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1943,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12681:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1942,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12681:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1945,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12687:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1944,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12687:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1947,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12693:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1946,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12693:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"12665:33:6\"},\"scope\":2505,\"src\":\"12611:229:6\",\"stateMutability\":\"view\",\"superFunction\":2726,\"visibility\":\"external\"},{\"body\":{\"id\":2029,\"nodeType\":\"Block\",\"src\":\"13126:528:6\",\"statements\":[{\"assignments\":[1979],\"declarations\":[{\"constant\":false,\"id\":1979,\"name\":\"entry\",\"nodeType\":\"VariableDeclaration\",\"scope\":2029,\"src\":\"13136:19:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1978,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"13136:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1983,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1980,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"13158:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1982,\"indexExpression\":{\"argumentTypes\":null,\"id\":1981,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1973,\"src\":\"13167:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"13158:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"13136:37:6\"},{\"condition\":{\"argumentTypes\":null,\"id\":1988,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"13188:22:6\",\"subExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1985,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1973,\"src\":\"13199:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1986,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"13206:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1984,\"name\":\"isAllowed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2046,\"src\":\"13189:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$\",\"typeString\":\"function (bytes32,uint256) view returns (bool)\"}},\"id\":1987,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"13189:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1996,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1993,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"13274:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1994,\"name\":\"entry\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1979,\"src\":\"13280:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1995,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"13280:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"13274:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":2026,\"nodeType\":\"Block\",\"src\":\"13492:156:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2016,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2013,\"name\":\"entry\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1979,\"src\":\"13510:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2014,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"13510:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2015,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"13530:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"13510:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":2024,\"nodeType\":\"Block\",\"src\":\"13588:50:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2021,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13613:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2022,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13613:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":2023,\"nodeType\":\"Return\",\"src\":\"13606:17:6\"}]},\"id\":2025,\"nodeType\":\"IfStatement\",\"src\":\"13506:132:6\",\"trueBody\":{\"id\":2020,\"nodeType\":\"Block\",\"src\":\"13533:49:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2017,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13558:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2018,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Open\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13558:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":2019,\"nodeType\":\"Return\",\"src\":\"13551:16:6\"}]}}]},\"id\":2027,\"nodeType\":\"IfStatement\",\"src\":\"13270:378:6\",\"trueBody\":{\"id\":2012,\"nodeType\":\"Block\",\"src\":\"13304:182:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2002,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1997,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"13322:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2001,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1998,\"name\":\"entry\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1979,\"src\":\"13328:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1999,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"13328:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2000,\"name\":\"revealPeriod\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1057,\"src\":\"13353:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"src\":\"13328:37:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"13322:43:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":2010,\"nodeType\":\"Block\",\"src\":\"13425:51:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2007,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13450:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2008,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Reveal\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13450:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":2009,\"nodeType\":\"Return\",\"src\":\"13443:18:6\"}]},\"id\":2011,\"nodeType\":\"IfStatement\",\"src\":\"13318:158:6\",\"trueBody\":{\"id\":2006,\"nodeType\":\"Block\",\"src\":\"13367:52:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2003,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13392:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2004,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Auction\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13392:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":2005,\"nodeType\":\"Return\",\"src\":\"13385:19:6\"}]}}]}},\"id\":2028,\"nodeType\":\"IfStatement\",\"src\":\"13184:464:6\",\"trueBody\":{\"id\":1992,\"nodeType\":\"Block\",\"src\":\"13212:52:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1989,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13233:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1990,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"NotYetAvailable\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13233:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":1991,\"nodeType\":\"Return\",\"src\":\"13226:27:6\"}]}}]},\"documentation\":null,\"id\":2030,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"state\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1974,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1973,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2030,\"src\":\"13084:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1972,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"13084:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"13083:15:6\"},\"returnParameters\":{\"id\":1977,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1976,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2030,\"src\":\"13120:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":1975,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"13120:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"13119:6:6\"},\"scope\":2505,\"src\":\"13069:585:6\",\"stateMutability\":\"view\",\"superFunction\":2629,\"visibility\":\"public\"},{\"body\":{\"id\":2045,\"nodeType\":\"Block\",\"src\":\"14059:58:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2043,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2039,\"name\":\"_timestamp\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2034,\"src\":\"14076:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2041,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2032,\"src\":\"14104:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2040,\"name\":\"getAllowedTime\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2069,\"src\":\"14089:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_uint256_$\",\"typeString\":\"function (bytes32) view returns (uint256)\"}},\"id\":2042,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"14089:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"14076:34:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":2038,\"id\":2044,\"nodeType\":\"Return\",\"src\":\"14069:41:6\"}]},\"documentation\":\"@dev Determines if a name is available for registration yet\\n     * Each name will be assigned a random date in which its auction\\ncan be started, from 0 to 8 weeks\\n     * @param _hash The hash to start an auction on\\n@param _timestamp The timestamp to query about\",\"id\":2046,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isAllowed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2035,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2032,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2046,\"src\":\"13992:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2031,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"13992:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2034,\"name\":\"_timestamp\",\"nodeType\":\"VariableDeclaration\",\"scope\":2046,\"src\":\"14007:15:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2033,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14007:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"13991:32:6\"},\"returnParameters\":{\"id\":2038,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2037,\"name\":\"allowed\",\"nodeType\":\"VariableDeclaration\",\"scope\":2046,\"src\":\"14045:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":2036,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14045:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14044:14:6\"},\"scope\":2505,\"src\":\"13973:144:6\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2068,\"nodeType\":\"Block\",\"src\":\"14424:140:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2066,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2053,\"name\":\"registryStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1065,\"src\":\"14441:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2064,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2061,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2054,\"name\":\"launchLength\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1060,\"src\":\"14461:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"*\",\"rightExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2059,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2056,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2048,\"src\":\"14482:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2055,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"14477:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_uint256_$\",\"typeString\":\"type(uint256)\"},\"typeName\":\"uint\"},\"id\":2057,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"14477:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">>\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"313238\",\"id\":2058,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"14492:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_128_by_1\",\"typeString\":\"int_const 128\"},\"value\":\"128\"},\"src\":\"14477:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":2060,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"14476:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"14461:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":2062,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"14460:37:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">>\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"313238\",\"id\":2063,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"14501:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_128_by_1\",\"typeString\":\"int_const 128\"},\"value\":\"128\"},\"src\":\"14460:44:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":2065,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"14459:46:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"14441:64:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2052,\"id\":2067,\"nodeType\":\"Return\",\"src\":\"14434:71:6\"}]},\"documentation\":\"@dev Returns available date for hash\\n     * The available time from the `registryStarted` for a hash is proportional\\nto its numeric value.\\n     * @param _hash The hash to start an auction on\",\"id\":2069,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"getAllowedTime\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2049,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2048,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2069,\"src\":\"14382:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2047,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14382:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14381:15:6\"},\"returnParameters\":{\"id\":2052,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2051,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2069,\"src\":\"14418:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2050,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14418:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14417:6:6\"},\"scope\":2505,\"src\":\"14358:206:6\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2092,\"nodeType\":\"Block\",\"src\":\"14954:77:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2085,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2071,\"src\":\"14998:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2086,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2073,\"src\":\"15004:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":2087,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2075,\"src\":\"15011:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":2088,\"name\":\"salt\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2077,\"src\":\"15018:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2083,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"14981:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2084,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"14981:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2089,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"14981:42:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2082,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"14971:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2090,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"14971:53:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2081,\"id\":2091,\"nodeType\":\"Return\",\"src\":\"14964:60:6\"}]},\"documentation\":\"@dev Hash the values required for a secret bid\\n     * @param hash The node corresponding to the desired namehash\\n@param value The bid amount\\n@param salt A random value to ensure secrecy of the bid\\n@return The hash of the bid values\",\"id\":2093,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"shaBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2078,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2071,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14869:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2070,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14869:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2073,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14883:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2072,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14883:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2075,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14898:10:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2074,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14898:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2077,\"name\":\"salt\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14910:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2076,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14910:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14868:55:6\"},\"returnParameters\":{\"id\":2081,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2080,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14945:7:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2079,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14945:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14944:9:6\"},\"scope\":2505,\"src\":\"14853:178:6\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2146,\"nodeType\":\"Block\",\"src\":\"15090:302:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2105,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2100,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"15114:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2098,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"15104:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2099,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"15104:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2101,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15104:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2103,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"15135:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":2102,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"15127:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2104,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15127:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"15104:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2145,\"nodeType\":\"IfStatement\",\"src\":\"15100:286:6\",\"trueBody\":{\"id\":2144,\"nodeType\":\"Block\",\"src\":\"15142:244:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2109,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"15176:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2110,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2095,\"src\":\"15186:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2112,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"15201:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":2111,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"15193:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2113,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15193:13:6\",\"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\":2106,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"15156:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2108,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"15156:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2114,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15156:51:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2115,\"nodeType\":\"ExpressionStatement\",\"src\":\"15156:51:6\"},{\"assignments\":[2117],\"declarations\":[{\"constant\":false,\"id\":2117,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2144,\"src\":\"15221:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2116,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15221:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2125,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2121,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"15263:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2122,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2095,\"src\":\"15273:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2119,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"15246:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2120,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"15246:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2123,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15246:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2118,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"15236:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2124,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15236:44:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"15221:59:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2129,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2117,\"src\":\"15310:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2131,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15324:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2130,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"15316:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2132,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15316:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2126,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"15294:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2128,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setResolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":377,\"src\":\"15294:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2133,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15294:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2134,\"nodeType\":\"ExpressionStatement\",\"src\":\"15294:35:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2138,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2117,\"src\":\"15356:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2140,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15370:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2139,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"15362:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2141,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15362:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2135,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"15343:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2137,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":384,\"src\":\"15343:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2142,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15343:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2143,\"nodeType\":\"ExpressionStatement\",\"src\":\"15343:32:6\"}]}}]},\"documentation\":null,\"id\":2147,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_tryEraseSingleNode\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2096,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2095,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":2147,\"src\":\"15066:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2094,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15066:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"15065:15:6\"},\"returnParameters\":{\"id\":2097,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"15090:0:6\"},\"scope\":2505,\"src\":\"15037:355:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2205,\"nodeType\":\"Block\",\"src\":\"15460:366:6\",\"statements\":[{\"assignments\":[2155],\"declarations\":[{\"constant\":false,\"id\":2155,\"name\":\"mode\",\"nodeType\":\"VariableDeclaration\",\"scope\":2205,\"src\":\"15470:9:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":2154,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"15470:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2159,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2157,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2149,\"src\":\"15488:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2156,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"15482:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":2158,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15482:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"15470:24:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":2163,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2160,\"name\":\"mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2155,\"src\":\"15508:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2161,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"15516:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2162,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Auction\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"15516:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"15508:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2165,\"nodeType\":\"IfStatement\",\"src\":\"15504:33:6\",\"trueBody\":{\"expression\":null,\"functionReturnParameters\":2153,\"id\":2164,\"nodeType\":\"Return\",\"src\":\"15530:7:6\"}},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":2170,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2167,\"name\":\"mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2155,\"src\":\"15554:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2168,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"15562:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2169,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Open\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"15562:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"15554:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":2166,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"15546:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":2171,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15546:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2172,\"nodeType\":\"ExpressionStatement\",\"src\":\"15546:26:6\"},{\"assignments\":[2174],\"declarations\":[{\"constant\":false,\"id\":2174,\"name\":\"newAuction\",\"nodeType\":\"VariableDeclaration\",\"scope\":2205,\"src\":\"15583:24:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":2173,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"15583:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2178,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2175,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"15610:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":2177,\"indexExpression\":{\"argumentTypes\":null,\"id\":2176,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2149,\"src\":\"15619:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"15610:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"15583:42:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2185,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2179,\"name\":\"newAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2174,\"src\":\"15635:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2181,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"15635:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2184,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2182,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"15665:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2183,\"name\":\"totalAuctionLength\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1054,\"src\":\"15671:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"src\":\"15665:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"15635:54:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2186,\"nodeType\":\"ExpressionStatement\",\"src\":\"15635:54:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2191,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2187,\"name\":\"newAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2174,\"src\":\"15699:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2189,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"15699:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2190,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15718:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"15699:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2192,\"nodeType\":\"ExpressionStatement\",\"src\":\"15699:20:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2197,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2193,\"name\":\"newAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2174,\"src\":\"15729:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2195,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"15729:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2196,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15753:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"15729:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2198,\"nodeType\":\"ExpressionStatement\",\"src\":\"15729:25:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2200,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2149,\"src\":\"15784:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2201,\"name\":\"newAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2174,\"src\":\"15791:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2202,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"15791:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":2199,\"name\":\"AuctionStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2578,\"src\":\"15769:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,uint256)\"}},\"id\":2203,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15769:50:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2204,\"nodeType\":\"EmitStatement\",\"src\":\"15764:55:6\"}]},\"documentation\":null,\"id\":2206,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[],\"id\":2152,\"modifierName\":{\"argumentTypes\":null,\"id\":2151,\"name\":\"registryOpen\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1145,\"src\":\"15445:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"15445:14:6\"}],\"name\":\"_startAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2150,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2149,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2206,\"src\":\"15421:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2148,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15421:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"15420:15:6\"},\"returnParameters\":{\"id\":2153,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"15460:0:6\"},\"scope\":2505,\"src\":\"15398:428:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2231,\"nodeType\":\"Block\",\"src\":\"15891:109:6\",\"statements\":[{\"body\":{\"id\":2229,\"nodeType\":\"Block\",\"src\":\"15944:50:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2224,\"name\":\"_hashes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2209,\"src\":\"15972:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},\"id\":2226,\"indexExpression\":{\"argumentTypes\":null,\"id\":2225,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2213,\"src\":\"15980:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"15972:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2223,\"name\":\"_startAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2206,\"src\":\"15958:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":2227,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15958:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2228,\"nodeType\":\"ExpressionStatement\",\"src\":\"15958:25:6\"}]},\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2219,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2216,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2213,\"src\":\"15918:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2217,\"name\":\"_hashes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2209,\"src\":\"15922:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},\"id\":2218,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"15922:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"15918:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":2230,\"initializationExpression\":{\"assignments\":[2213],\"declarations\":[{\"constant\":false,\"id\":2213,\"name\":\"i\",\"nodeType\":\"VariableDeclaration\",\"scope\":2230,\"src\":\"15906:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2212,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15906:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2215,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2214,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15915:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"15906:10:6\"},\"loopExpression\":{\"expression\":{\"argumentTypes\":null,\"id\":2221,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"15938:4:6\",\"subExpression\":{\"argumentTypes\":null,\"id\":2220,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2213,\"src\":\"15938:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2222,\"nodeType\":\"ExpressionStatement\",\"src\":\"15938:4:6\"},\"nodeType\":\"ForStatement\",\"src\":\"15901:93:6\"}]},\"documentation\":null,\"id\":2232,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_startAuctions\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2210,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2209,\"name\":\"_hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":2232,\"src\":\"15856:24:6\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2207,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15856:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2208,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"15856:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"15855:26:6\"},\"returnParameters\":{\"id\":2211,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"15891:0:6\"},\"scope\":2505,\"src\":\"15832:168:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2289,\"nodeType\":\"Block\",\"src\":\"16051:357:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2249,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2239,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"16077:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":2242,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2240,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16088:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2241,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16088:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16077:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":2244,\"indexExpression\":{\"argumentTypes\":null,\"id\":2243,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2234,\"src\":\"16100:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16077:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":2238,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16069:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2245,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16069:42:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2247,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16123:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2246,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16115:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2248,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16115:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"16069:58:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":2237,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"16061:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":2250,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16061:67:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2251,\"nodeType\":\"ExpressionStatement\",\"src\":\"16061:67:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2256,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2253,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16146:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2254,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16146:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2255,\"name\":\"minPrice\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"16159:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"16146:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":2252,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"16138:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":2257,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16138:30:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2258,\"nodeType\":\"ExpressionStatement\",\"src\":\"16138:30:6\"},{\"assignments\":[2260],\"declarations\":[{\"constant\":false,\"id\":2260,\"name\":\"bid\",\"nodeType\":\"VariableDeclaration\",\"scope\":2289,\"src\":\"16233:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":2259,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"16233:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2271,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2268,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16286:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2269,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16286:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2265,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16275:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2266,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16275:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"id\":2262,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"NewExpression\",\"src\":\"16245:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_creation_payable$_t_address_payable_$returns$_t_contract$_DeedImplementation_$299_$\",\"typeString\":\"function (address payable) payable returns (contract DeedImplementation)\"},\"typeName\":{\"contractScope\":null,\"id\":2261,\"name\":\"DeedImplementation\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":299,\"src\":\"16249:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}}}],\"id\":2263,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"16244:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_creation_payable$_t_address_payable_$returns$_t_contract$_DeedImplementation_$299_$\",\"typeString\":\"function (address payable) payable returns (contract DeedImplementation)\"}},\"id\":2264,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16244:30:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_creation_payable$_t_address_payable_$returns$_t_contract$_DeedImplementation_$299_$value_$\",\"typeString\":\"function (uint256) returns (function (address payable) payable returns (contract DeedImplementation))\"}},\"id\":2267,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16244:41:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_creation_payable$_t_address_payable_$returns$_t_contract$_DeedImplementation_$299_$value\",\"typeString\":\"function (address payable) payable returns (contract DeedImplementation)\"}},\"id\":2270,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16244:53:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"16233:64:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2279,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2272,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"16307:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":2276,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2273,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16318:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2274,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16318:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16307:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":2277,\"indexExpression\":{\"argumentTypes\":null,\"id\":2275,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2234,\"src\":\"16330:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"16307:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2278,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2260,\"src\":\"16343:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"16307:39:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":2280,\"nodeType\":\"ExpressionStatement\",\"src\":\"16307:39:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2282,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2234,\"src\":\"16368:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2283,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16379:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2284,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16379:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2285,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16391:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2286,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16391:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":2281,\"name\":\"NewBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2586,\"src\":\"16361:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256)\"}},\"id\":2287,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16361:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2288,\"nodeType\":\"EmitStatement\",\"src\":\"16356:45:6\"}]},\"documentation\":null,\"id\":2290,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_newBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2235,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2234,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":2290,\"src\":\"16023:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2233,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"16023:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"16022:19:6\"},\"returnParameters\":{\"id\":2236,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"16051:0:6\"},\"scope\":2505,\"src\":\"16006:402:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2355,\"nodeType\":\"Block\",\"src\":\"16501:441:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2303,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16569:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2304,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2295,\"src\":\"16575:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},\"id\":2306,\"indexExpression\":{\"argumentTypes\":null,\"id\":2305,\"name\":\"idx\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2292,\"src\":\"16582:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16575:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2308,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"16596:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":2307,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16588:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2309,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16588:13:6\",\"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\":2300,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"16549:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2302,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"16549:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2310,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16549:53:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2311,\"nodeType\":\"ExpressionStatement\",\"src\":\"16549:53:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2322,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2312,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16612:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2316,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16646:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2317,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2295,\"src\":\"16652:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},\"id\":2319,\"indexExpression\":{\"argumentTypes\":null,\"id\":2318,\"name\":\"idx\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2292,\"src\":\"16659:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16652:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2314,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"16629:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2315,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16629:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2320,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16629:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2313,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"16619:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2321,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16619:46:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"16612:53:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2323,\"nodeType\":\"ExpressionStatement\",\"src\":\"16612:53:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2326,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2324,\"name\":\"idx\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2292,\"src\":\"16724:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2325,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16730:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"16724:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2336,\"nodeType\":\"IfStatement\",\"src\":\"16720:80:6\",\"trueBody\":{\"id\":2335,\"nodeType\":\"Block\",\"src\":\"16733:67:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2330,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2328,\"name\":\"idx\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2292,\"src\":\"16767:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":2329,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16773:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"},\"src\":\"16767:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":2331,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2295,\"src\":\"16776:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},{\"argumentTypes\":null,\"id\":2332,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16784:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2327,\"name\":\"_eraseNodeHierarchy\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2356,\"src\":\"16747:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$returns$__$\",\"typeString\":\"function (uint256,bytes32[] memory,bytes32)\"}},\"id\":2333,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16747:42:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2334,\"nodeType\":\"ExpressionStatement\",\"src\":\"16747:42:6\"}]}},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2340,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16874:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2342,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16888:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2341,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16880:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2343,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16880:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2337,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"16858:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2339,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setResolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":377,\"src\":\"16858:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2344,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16858:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2345,\"nodeType\":\"ExpressionStatement\",\"src\":\"16858:35:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2349,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16916:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2351,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16930:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2350,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16922:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2352,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16922:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2346,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"16903:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2348,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":384,\"src\":\"16903:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2353,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16903:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2354,\"nodeType\":\"ExpressionStatement\",\"src\":\"16903:32:6\"}]},\"documentation\":null,\"id\":2356,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_eraseNodeHierarchy\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2298,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2292,\"name\":\"idx\",\"nodeType\":\"VariableDeclaration\",\"scope\":2356,\"src\":\"16443:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2291,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"16443:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2295,\"name\":\"labels\",\"nodeType\":\"VariableDeclaration\",\"scope\":2356,\"src\":\"16453:23:6\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2293,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"16453:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2294,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"16453:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2297,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2356,\"src\":\"16478:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2296,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"16478:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"16442:49:6\"},\"returnParameters\":{\"id\":2299,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"16501:0:6\"},\"scope\":2505,\"src\":\"16414:528:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2380,\"nodeType\":\"Block\",\"src\":\"17198:118:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2370,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2365,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"17222:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2363,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"17212:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2364,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"17212:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2366,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"17212:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2368,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"17243:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":2367,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"17235:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2369,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"17235:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"17212:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2379,\"nodeType\":\"IfStatement\",\"src\":\"17208:101:6\",\"trueBody\":{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2374,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"17282:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2375,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2358,\"src\":\"17292:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2376,\"name\":\"_newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2360,\"src\":\"17299:9:6\",\"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\":2371,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"17262:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2373,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"17262:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2377,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"17262:47:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2378,\"nodeType\":\"ExpressionStatement\",\"src\":\"17262:47:6\"}}]},\"documentation\":\"@dev Assign the owner in ENS, if we're still the registrar\\n     * @param _hash hash to change owner\\n@param _newOwner new owner to transfer to\",\"id\":2381,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"trySetSubnodeOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2361,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2358,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2381,\"src\":\"17155:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2357,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17155:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2360,\"name\":\"_newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2381,\"src\":\"17170:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2359,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17170:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17154:34:6\"},\"returnParameters\":{\"id\":2362,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"17198:0:6\"},\"scope\":2505,\"src\":\"17127:189:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2398,\"nodeType\":\"Block\",\"src\":\"17584:83:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2392,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2390,\"name\":\"a\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2383,\"src\":\"17598:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2391,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2385,\"src\":\"17602:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"17598:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"expression\":{\"argumentTypes\":null,\"id\":2395,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2385,\"src\":\"17659:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2389,\"id\":2396,\"nodeType\":\"Return\",\"src\":\"17652:8:6\"},\"id\":2397,\"nodeType\":\"IfStatement\",\"src\":\"17594:66:6\",\"trueBody\":{\"expression\":{\"argumentTypes\":null,\"id\":2393,\"name\":\"a\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2383,\"src\":\"17624:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2389,\"id\":2394,\"nodeType\":\"Return\",\"src\":\"17617:8:6\"}}]},\"documentation\":\"@dev Returns the maximum of two unsigned integers\\n     * @param a A number to compare\\n@param b A number to compare\\n@return The maximum of two unsigned integers\",\"id\":2399,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"max\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2386,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2383,\"name\":\"a\",\"nodeType\":\"VariableDeclaration\",\"scope\":2399,\"src\":\"17539:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2382,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17539:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2385,\"name\":\"b\",\"nodeType\":\"VariableDeclaration\",\"scope\":2399,\"src\":\"17547:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2384,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17547:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17538:16:6\"},\"returnParameters\":{\"id\":2389,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2388,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2399,\"src\":\"17578:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2387,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17578:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17577:6:6\"},\"scope\":2505,\"src\":\"17526:141:6\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2416,\"nodeType\":\"Block\",\"src\":\"17935:83:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2410,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2408,\"name\":\"a\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2401,\"src\":\"17949:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2409,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2403,\"src\":\"17953:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"17949:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"expression\":{\"argumentTypes\":null,\"id\":2413,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2403,\"src\":\"18010:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2407,\"id\":2414,\"nodeType\":\"Return\",\"src\":\"18003:8:6\"},\"id\":2415,\"nodeType\":\"IfStatement\",\"src\":\"17945:66:6\",\"trueBody\":{\"expression\":{\"argumentTypes\":null,\"id\":2411,\"name\":\"a\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2401,\"src\":\"17975:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2407,\"id\":2412,\"nodeType\":\"Return\",\"src\":\"17968:8:6\"}}]},\"documentation\":\"@dev Returns the minimum of two unsigned integers\\n     * @param a A number to compare\\n@param b A number to compare\\n@return The minimum of two unsigned integers\",\"id\":2417,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"min\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2404,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2401,\"name\":\"a\",\"nodeType\":\"VariableDeclaration\",\"scope\":2417,\"src\":\"17890:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2400,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17890:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2403,\"name\":\"b\",\"nodeType\":\"VariableDeclaration\",\"scope\":2417,\"src\":\"17898:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2402,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17898:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17889:16:6\"},\"returnParameters\":{\"id\":2407,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2406,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2417,\"src\":\"17929:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2405,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17929:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17928:6:6\"},\"scope\":2505,\"src\":\"17877:141:6\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2503,\"nodeType\":\"Block\",\"src\":\"18256:779:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2424,\"name\":\"s\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2419,\"src\":\"18266:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}},\"id\":2425,\"nodeType\":\"ExpressionStatement\",\"src\":\"18266:1:6\"},{\"assignments\":[2427],\"declarations\":[{\"constant\":false,\"id\":2427,\"name\":\"ptr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2503,\"src\":\"18384:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2426,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18384:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2428,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"18384:8:6\"},{\"assignments\":[2430],\"declarations\":[{\"constant\":false,\"id\":2430,\"name\":\"end\",\"nodeType\":\"VariableDeclaration\",\"scope\":2503,\"src\":\"18402:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2429,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18402:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2431,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"18402:8:6\"},{\"externalReferences\":[{\"ptr\":{\"declaration\":2427,\"isOffset\":false,\"isSlot\":false,\"src\":\"18443:3:6\",\"valueSize\":1}},{\"end\":{\"declaration\":2430,\"isOffset\":false,\"isSlot\":false,\"src\":\"18472:3:6\",\"valueSize\":1}},{\"s\":{\"declaration\":2419,\"isOffset\":false,\"isSlot\":false,\"src\":\"18454:1:6\",\"valueSize\":1}},{\"s\":{\"declaration\":2419,\"isOffset\":false,\"isSlot\":false,\"src\":\"18489:1:6\",\"valueSize\":1}},{\"ptr\":{\"declaration\":2427,\"isOffset\":false,\"isSlot\":false,\"src\":\"18493:3:6\",\"valueSize\":1}}],\"id\":2432,\"nodeType\":\"InlineAssembly\",\"operations\":\"{\\n    ptr := add(s, 1)\\n    end := add(mload(s), ptr)\\n}\",\"src\":\"18420:100:6\"},{\"assignments\":[2434],\"declarations\":[{\"constant\":false,\"id\":2434,\"name\":\"len\",\"nodeType\":\"VariableDeclaration\",\"scope\":2503,\"src\":\"18516:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2433,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18516:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2436,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2435,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18527:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"18516:12:6\"},{\"body\":{\"id\":2499,\"nodeType\":\"Block\",\"src\":\"18566:443:6\",\"statements\":[{\"assignments\":[2446],\"declarations\":[{\"constant\":false,\"id\":2446,\"name\":\"b\",\"nodeType\":\"VariableDeclaration\",\"scope\":2499,\"src\":\"18580:7:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"typeName\":{\"id\":2445,\"name\":\"uint8\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18580:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2447,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"18580:7:6\"},{\"externalReferences\":[{\"ptr\":{\"declaration\":2427,\"isOffset\":false,\"isSlot\":false,\"src\":\"18627:3:6\",\"valueSize\":1}},{\"b\":{\"declaration\":2446,\"isOffset\":false,\"isSlot\":false,\"src\":\"18612:1:6\",\"valueSize\":1}}],\"id\":2448,\"nodeType\":\"InlineAssembly\",\"operations\":\"{\\n    b := and(mload(ptr), 0xFF)\\n}\",\"src\":\"18601:54:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2451,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2449,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18657:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30783830\",\"id\":2450,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18661:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_128_by_1\",\"typeString\":\"int_const 128\"},\"value\":\"0x80\"},\"src\":\"18657:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2459,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2457,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18718:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30784530\",\"id\":2458,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18722:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_224_by_1\",\"typeString\":\"int_const 224\"},\"value\":\"0xE0\"},\"src\":\"18718:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2467,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2465,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18779:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30784630\",\"id\":2466,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18783:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_240_by_1\",\"typeString\":\"int_const 240\"},\"value\":\"0xF0\"},\"src\":\"18779:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2475,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2473,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18840:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30784638\",\"id\":2474,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18844:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_248_by_1\",\"typeString\":\"int_const 248\"},\"value\":\"0xF8\"},\"src\":\"18840:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2483,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2481,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18901:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30784643\",\"id\":2482,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18905:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_252_by_1\",\"typeString\":\"int_const 252\"},\"value\":\"0xFC\"},\"src\":\"18901:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":2493,\"nodeType\":\"Block\",\"src\":\"18958:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2491,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2489,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18976:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"36\",\"id\":2490,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18983:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_6_by_1\",\"typeString\":\"int_const 6\"},\"value\":\"6\"},\"src\":\"18976:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2492,\"nodeType\":\"ExpressionStatement\",\"src\":\"18976:8:6\"}]},\"id\":2494,\"nodeType\":\"IfStatement\",\"src\":\"18897:102:6\",\"trueBody\":{\"id\":2488,\"nodeType\":\"Block\",\"src\":\"18911:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2486,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2484,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18929:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":2485,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18936:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"},\"value\":\"5\"},\"src\":\"18929:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2487,\"nodeType\":\"ExpressionStatement\",\"src\":\"18929:8:6\"}]}},\"id\":2495,\"nodeType\":\"IfStatement\",\"src\":\"18836:163:6\",\"trueBody\":{\"id\":2480,\"nodeType\":\"Block\",\"src\":\"18850:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2478,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2476,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18868:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"34\",\"id\":2477,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18875:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_4_by_1\",\"typeString\":\"int_const 4\"},\"value\":\"4\"},\"src\":\"18868:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2479,\"nodeType\":\"ExpressionStatement\",\"src\":\"18868:8:6\"}]}},\"id\":2496,\"nodeType\":\"IfStatement\",\"src\":\"18775:224:6\",\"trueBody\":{\"id\":2472,\"nodeType\":\"Block\",\"src\":\"18789:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2470,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2468,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18807:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"33\",\"id\":2469,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18814:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_3_by_1\",\"typeString\":\"int_const 3\"},\"value\":\"3\"},\"src\":\"18807:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2471,\"nodeType\":\"ExpressionStatement\",\"src\":\"18807:8:6\"}]}},\"id\":2497,\"nodeType\":\"IfStatement\",\"src\":\"18714:285:6\",\"trueBody\":{\"id\":2464,\"nodeType\":\"Block\",\"src\":\"18728:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2462,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2460,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18746:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"32\",\"id\":2461,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18753:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2_by_1\",\"typeString\":\"int_const 2\"},\"value\":\"2\"},\"src\":\"18746:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2463,\"nodeType\":\"ExpressionStatement\",\"src\":\"18746:8:6\"}]}},\"id\":2498,\"nodeType\":\"IfStatement\",\"src\":\"18653:346:6\",\"trueBody\":{\"id\":2456,\"nodeType\":\"Block\",\"src\":\"18667:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2454,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2452,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18685:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":2453,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18692:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"},\"src\":\"18685:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2455,\"nodeType\":\"ExpressionStatement\",\"src\":\"18685:8:6\"}]}}]},\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2441,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2439,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18548:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2440,\"name\":\"end\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2430,\"src\":\"18554:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"18548:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":2500,\"initializationExpression\":{\"expression\":{\"argumentTypes\":null,\"id\":2437,\"name\":\"len\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2434,\"src\":\"18543:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2438,\"nodeType\":\"ExpressionStatement\",\"src\":\"18543:3:6\"},\"loopExpression\":{\"expression\":{\"argumentTypes\":null,\"id\":2443,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"18559:5:6\",\"subExpression\":{\"argumentTypes\":null,\"id\":2442,\"name\":\"len\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2434,\"src\":\"18559:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2444,\"nodeType\":\"ExpressionStatement\",\"src\":\"18559:5:6\"},\"nodeType\":\"ForStatement\",\"src\":\"18538:471:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2501,\"name\":\"len\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2434,\"src\":\"19025:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2423,\"id\":2502,\"nodeType\":\"Return\",\"src\":\"19018:10:6\"}]},\"documentation\":\"@dev Returns the length of a given string\\n     * @param s The string to measure the length of\\n@return The length of the input string\",\"id\":2504,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"strlen\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2420,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2419,\"name\":\"s\",\"nodeType\":\"VariableDeclaration\",\"scope\":2504,\"src\":\"18210:15:6\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2418,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18210:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"18209:17:6\"},\"returnParameters\":{\"id\":2423,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2422,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2504,\"src\":\"18250:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2421,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18250:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"18249:6:6\"},\"scope\":2505,\"src\":\"18194:841:6\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"internal\"}],\"scope\":2506,\"src\":\"586:18452:6\"}],\"src\":\"0:19039:6\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/HashRegistrar.sol\",\"exportedSymbols\":{\"HashRegistrar\":[2505]},\"id\":2506,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":1032,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:6\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":1033,\"nodeType\":\"ImportDirective\",\"scope\":2506,\"sourceUnit\":437,\"src\":\"388:19:6\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/DeedImplementation.sol\",\"file\":\"./DeedImplementation.sol\",\"id\":1034,\"nodeType\":\"ImportDirective\",\"scope\":2506,\"sourceUnit\":300,\"src\":\"408:34:6\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Registrar.sol\",\"file\":\"./Registrar.sol\",\"id\":1035,\"nodeType\":\"ImportDirective\",\"scope\":2506,\"sourceUnit\":2728,\"src\":\"443:25:6\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":1036,\"name\":\"Registrar\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2727,\"src\":\"612:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Registrar_$2727\",\"typeString\":\"contract Registrar\"}},\"id\":1037,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"612:9:6\"}],\"contractDependencies\":[299,2727],\"contractKind\":\"contract\",\"documentation\":\"@title Registrar\\n@dev The registrar handles the auction process for each subnode of the node it owns.\",\"fullyImplemented\":true,\"id\":2505,\"linearizedBaseContracts\":[2505,2727],\"name\":\"HashRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":false,\"id\":1039,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"628:14:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":1038,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"628:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":1041,\"name\":\"rootNode\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"648:23:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1040,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"648:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":1045,\"name\":\"_entries\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"678:35:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry)\"},\"typeName\":{\"id\":1044,\"keyType\":{\"id\":1042,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"687:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"678:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry)\"},\"valueType\":{\"contractScope\":null,\"id\":1043,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"698:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1051,\"name\":\"sealedBids\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"719:64:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"},\"typeName\":{\"id\":1050,\"keyType\":{\"id\":1046,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"728:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"719:46:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"},\"valueType\":{\"id\":1049,\"keyType\":{\"id\":1047,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"748:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"739:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"},\"valueType\":{\"contractScope\":null,\"id\":1048,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"759:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}}},\"value\":null,\"visibility\":\"public\"},{\"constant\":true,\"id\":1054,\"name\":\"totalAuctionLength\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"790:43:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"},\"typeName\":{\"id\":1052,\"name\":\"uint32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"790:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":1053,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"827:6:6\",\"subdenomination\":\"days\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_432000_by_1\",\"typeString\":\"int_const 432000\"},\"value\":\"5\"},\"visibility\":\"internal\"},{\"constant\":true,\"id\":1057,\"name\":\"revealPeriod\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"839:39:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"},\"typeName\":{\"id\":1055,\"name\":\"uint32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"839:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"3438\",\"id\":1056,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"870:8:6\",\"subdenomination\":\"hours\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_172800_by_1\",\"typeString\":\"int_const 172800\"},\"value\":\"48\"},\"visibility\":\"internal\"},{\"constant\":true,\"id\":1060,\"name\":\"launchLength\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"884:45:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"},\"typeName\":{\"id\":1058,\"name\":\"uint32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"884:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"38\",\"id\":1059,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"922:7:6\",\"subdenomination\":\"weeks\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_4838400_by_1\",\"typeString\":\"int_const 4838400\"},\"value\":\"8\"},\"visibility\":\"public\"},{\"constant\":true,\"id\":1063,\"name\":\"minPrice\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"936:35:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1061,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"936:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"302e3031\",\"id\":1062,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"961:10:6\",\"subdenomination\":\"ether\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_10000000000000000_by_1\",\"typeString\":\"int_const 10000000000000000\"},\"value\":\"0.01\"},\"visibility\":\"internal\"},{\"constant\":false,\"id\":1065,\"name\":\"registryStarted\",\"nodeType\":\"VariableDeclaration\",\"scope\":2505,\"src\":\"977:27:6\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1064,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"977:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"public\"},{\"canonicalName\":\"HashRegistrar.Entry\",\"id\":1074,\"members\":[{\"constant\":false,\"id\":1067,\"name\":\"deed\",\"nodeType\":\"VariableDeclaration\",\"scope\":1074,\"src\":\"1034:9:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1066,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"1034:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1069,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":1074,\"src\":\"1053:21:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1068,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1053:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1071,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":1074,\"src\":\"1084:10:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1070,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1084:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1073,\"name\":\"highestBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1074,\"src\":\"1104:15:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1072,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1104:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"name\":\"Entry\",\"nodeType\":\"StructDefinition\",\"scope\":2505,\"src\":\"1011:115:6\",\"visibility\":\"public\"},{\"body\":{\"id\":1089,\"nodeType\":\"Block\",\"src\":\"1177:59:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1085,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1082,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1076,\"src\":\"1201:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1081,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"1195:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1083,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1195:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1084,\"name\":\"_state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1078,\"src\":\"1211:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"1195:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1080,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1187:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1086,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1187:31:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1087,\"nodeType\":\"ExpressionStatement\",\"src\":\"1187:31:6\"},{\"id\":1088,\"nodeType\":\"PlaceholderStatement\",\"src\":\"1228:1:6\"}]},\"documentation\":null,\"id\":1090,\"name\":\"inState\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":1079,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1076,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1090,\"src\":\"1149:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1075,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1149:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1078,\"name\":\"_state\",\"nodeType\":\"VariableDeclaration\",\"scope\":1090,\"src\":\"1164:11:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":1077,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"1164:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1148:28:6\"},\"src\":\"1132:104:6\",\"visibility\":\"internal\"},{\"body\":{\"id\":1114,\"nodeType\":\"Block\",\"src\":\"1276:109:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1110,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1100,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1096,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1092,\"src\":\"1300:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1095,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"1294:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1097,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1294:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1098,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"1310:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1099,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1310:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"1294:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1109,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1101,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"1324:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1102,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1324:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1103,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"1338:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1105,\"indexExpression\":{\"argumentTypes\":null,\"id\":1104,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1092,\"src\":\"1347:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"1338:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"id\":1106,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"1338:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1107,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":31,\"src\":\"1338:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_address_$\",\"typeString\":\"function () view external returns (address)\"}},\"id\":1108,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1338:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"1324:42:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1294:72:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1094,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1286:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1111,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1286:81:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1112,\"nodeType\":\"ExpressionStatement\",\"src\":\"1286:81:6\"},{\"id\":1113,\"nodeType\":\"PlaceholderStatement\",\"src\":\"1377:1:6\"}]},\"documentation\":null,\"id\":1115,\"name\":\"onlyOwner\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":1093,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1092,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1115,\"src\":\"1261:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1091,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1261:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1260:15:6\"},\"src\":\"1242:143:6\",\"visibility\":\"internal\"},{\"body\":{\"id\":1144,\"nodeType\":\"Block\",\"src\":\"1415:146:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1140,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1131,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1120,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1118,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"1433:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1119,\"name\":\"registryStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1065,\"src\":\"1440:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1433:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1130,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1121,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"1459:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<=\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1129,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1122,\"name\":\"registryStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1065,\"src\":\"1466:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_rational_126144000_by_1\",\"typeString\":\"int_const 126144000\"},\"id\":1128,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_rational_1460_by_1\",\"typeString\":\"int_const 1460\"},\"id\":1125,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"hexValue\":\"333635\",\"id\":1123,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1485:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_365_by_1\",\"typeString\":\"int_const 365\"},\"value\":\"365\"},\"nodeType\":\"BinaryOperation\",\"operator\":\"*\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"34\",\"id\":1124,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1491:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_4_by_1\",\"typeString\":\"int_const 4\"},\"value\":\"4\"},\"src\":\"1485:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1460_by_1\",\"typeString\":\"int_const 1460\"}}],\"id\":1126,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"1484:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1460_by_1\",\"typeString\":\"int_const 1460\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"*\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":1127,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1496:6:6\",\"subdenomination\":\"days\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_86400_by_1\",\"typeString\":\"int_const 86400\"},\"value\":\"1\"},\"src\":\"1484:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_126144000_by_1\",\"typeString\":\"int_const 126144000\"}},\"src\":\"1466:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1459:43:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1433:69:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1139,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1134,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"1516:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":1132,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"1506:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1133,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"1506:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":1135,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1506:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1137,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"1537:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":1136,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1529:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1138,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1529:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"1506:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1433:109:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1117,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"1425:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1141,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1425:118:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1142,\"nodeType\":\"ExpressionStatement\",\"src\":\"1425:118:6\"},{\"id\":1143,\"nodeType\":\"PlaceholderStatement\",\"src\":\"1553:1:6\"}]},\"documentation\":null,\"id\":1145,\"name\":\"registryOpen\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":1116,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1412:2:6\"},\"src\":\"1391:170:6\",\"visibility\":\"internal\"},{\"body\":{\"id\":1171,\"nodeType\":\"Block\",\"src\":\"1844:118:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1156,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1154,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"1854:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1155,\"name\":\"_ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1147,\"src\":\"1860:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"1854:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1157,\"nodeType\":\"ExpressionStatement\",\"src\":\"1854:10:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1160,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1158,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"1874:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1159,\"name\":\"_rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1149,\"src\":\"1885:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"1874:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1161,\"nodeType\":\"ExpressionStatement\",\"src\":\"1874:20:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1169,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1162,\"name\":\"registryStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1065,\"src\":\"1904:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1165,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1163,\"name\":\"_startDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1151,\"src\":\"1922:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1164,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1935:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"1922:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseExpression\":{\"argumentTypes\":null,\"id\":1167,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"1952:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1168,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"Conditional\",\"src\":\"1922:33:6\",\"trueExpression\":{\"argumentTypes\":null,\"id\":1166,\"name\":\"_startDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1151,\"src\":\"1939:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"1904:51:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1170,\"nodeType\":\"ExpressionStatement\",\"src\":\"1904:51:6\"}]},\"documentation\":\"@dev Constructs a new Registrar, with the provided address as the owner of the root node.\\n     * @param _ens The address of the ENS\\n@param _rootNode The hash of the rootnode.\",\"id\":1172,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1152,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1147,\"name\":\"_ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":1172,\"src\":\"1791:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":1146,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"1791:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1149,\"name\":\"_rootNode\",\"nodeType\":\"VariableDeclaration\",\"scope\":1172,\"src\":\"1801:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1148,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1801:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1151,\"name\":\"_startDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":1172,\"src\":\"1820:15:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1150,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1820:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1790:46:6\"},\"returnParameters\":{\"id\":1153,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1844:0:6\"},\"scope\":2505,\"src\":\"1779:183:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1181,\"nodeType\":\"Block\",\"src\":\"2140:37:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1178,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1174,\"src\":\"2164:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1177,\"name\":\"_startAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2206,\"src\":\"2150:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1179,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2150:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1180,\"nodeType\":\"ExpressionStatement\",\"src\":\"2150:20:6\"}]},\"documentation\":\"@dev Start an auction for an available hash\\n     * @param _hash The hash to start an auction on\",\"id\":1182,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1175,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1174,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1182,\"src\":\"2116:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1173,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2116:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2115:15:6\"},\"returnParameters\":{\"id\":1176,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2140:0:6\"},\"scope\":2505,\"src\":\"2094:83:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2634,\"visibility\":\"external\"},{\"body\":{\"id\":1192,\"nodeType\":\"Block\",\"src\":\"2831:40:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1189,\"name\":\"_hashes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1185,\"src\":\"2856:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}],\"id\":1188,\"name\":\"_startAuctions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2232,\"src\":\"2841:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32[] memory)\"}},\"id\":1190,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2841:23:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1191,\"nodeType\":\"ExpressionStatement\",\"src\":\"2841:23:6\"}]},\"documentation\":\"@dev Start multiple auctions for better anonymity\\n     * Anyone can start an auction by sending an array of hashes that they want to bid for.\\nArrays are sent so that someone can open up an auction for X dummy hashes when they\\nare only really interested in bidding for one. This will increase the cost for an\\nattacker to simply bid blindly on all new auctions. Dummy auctions that are\\nopen but not bid on are closed after a week.\\n     * @param _hashes An array of hashes, at least one of which you presumably want to bid on\",\"id\":1193,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuctions\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1186,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1185,\"name\":\"_hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":1193,\"src\":\"2794:26:6\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":1183,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2794:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1184,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"2794:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2793:28:6\"},\"returnParameters\":{\"id\":1187,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2831:0:6\"},\"scope\":2505,\"src\":\"2771:100:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2640,\"visibility\":\"external\"},{\"body\":{\"id\":1202,\"nodeType\":\"Block\",\"src\":\"3779:35:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1199,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1195,\"src\":\"3797:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1198,\"name\":\"_newBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2290,\"src\":\"3789:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1200,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3789:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1201,\"nodeType\":\"ExpressionStatement\",\"src\":\"3789:18:6\"}]},\"documentation\":\"@dev Submit a new sealed bid on a desired hash in a blind auction\\n     * Bids are sent by sending a message to the main contract with a hash and an amount. The hash\\ncontains information about the bid, including the bidded hash, the bid amount, and a random\\nsalt. Bids are not tied to any one auction until they are revealed. The value of the bid\\nitself can be masqueraded by sending more than the value of your actual bid. This is\\nfollowed by a 48h reveal period. Bids revealed after this period will be burned and the ether unrecoverable.\\nSince this is an auction, it is expected that most public hashes, like known domains and common dictionary\\nwords, will have multiple bidders pushing the price up.\\n     * @param sealedBid A sealedBid, created by the shaBid function\",\"id\":1203,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"newBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1196,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1195,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1203,\"src\":\"3743:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1194,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3743:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3742:19:6\"},\"returnParameters\":{\"id\":1197,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"3779:0:6\"},\"scope\":2505,\"src\":\"3727:87:6\",\"stateMutability\":\"payable\",\"superFunction\":2645,\"visibility\":\"external\"},{\"body\":{\"id\":1219,\"nodeType\":\"Block\",\"src\":\"4248:67:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1212,\"name\":\"hashes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1206,\"src\":\"4273:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}],\"id\":1211,\"name\":\"_startAuctions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2232,\"src\":\"4258:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32[] memory)\"}},\"id\":1213,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4258:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1214,\"nodeType\":\"ExpressionStatement\",\"src\":\"4258:22:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1216,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1208,\"src\":\"4298:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1215,\"name\":\"_newBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2290,\"src\":\"4290:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1217,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4290:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1218,\"nodeType\":\"ExpressionStatement\",\"src\":\"4290:18:6\"}]},\"documentation\":\"@dev Start a set of auctions and bid on one of them\\n     * This method functions identically to calling `startAuctions` followed by `newBid`,\\nbut all in one transaction.\\n     * @param hashes A list of hashes to start auctions on.\\n@param sealedBid A sealed bid for one of the auctions.\",\"id\":1220,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuctionsAndBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1209,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1206,\"name\":\"hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":1220,\"src\":\"4185:25:6\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":1204,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4185:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1205,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"4185:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1208,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1220,\"src\":\"4212:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1207,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4212:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4184:46:6\"},\"returnParameters\":{\"id\":1210,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"4248:0:6\"},\"scope\":2505,\"src\":\"4156:159:6\",\"stateMutability\":\"payable\",\"superFunction\":2653,\"visibility\":\"external\"},{\"body\":{\"id\":1451,\"nodeType\":\"Block\",\"src\":\"4618:1904:6\",\"statements\":[{\"assignments\":[1230],\"declarations\":[{\"constant\":false,\"id\":1230,\"name\":\"seal\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4628:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1229,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4628:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1238,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1232,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"4650:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1233,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"4657:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1234,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"4657:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1235,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1224,\"src\":\"4669:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1236,\"name\":\"_salt\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1226,\"src\":\"4677:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1231,\"name\":\"shaBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2093,\"src\":\"4643:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes32_$_t_address_$_t_uint256_$_t_bytes32_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,address,uint256,bytes32) pure returns (bytes32)\"}},\"id\":1237,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4643:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4628:55:6\"},{\"assignments\":[1240],\"declarations\":[{\"constant\":false,\"id\":1240,\"name\":\"bid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4693:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1239,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"4693:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1247,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1241,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"4704:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":1244,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1242,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"4715:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1243,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"4715:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4704:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":1246,\"indexExpression\":{\"argumentTypes\":null,\"id\":1245,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1230,\"src\":\"4727:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4704:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4693:39:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1255,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1250,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"4758:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1249,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4750:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1251,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4750:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1253,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4774:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1252,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4766:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1254,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4766:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"4750:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1248,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"4742:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1256,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4742:37:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1257,\"nodeType\":\"ExpressionStatement\",\"src\":\"4742:37:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1269,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1258,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"4790:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":1262,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1259,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"4801:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1260,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"4801:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4790:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":1263,\"indexExpression\":{\"argumentTypes\":null,\"id\":1261,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1230,\"src\":\"4813:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"4790:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1266,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4834:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1265,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"4826:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1267,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4826:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":1264,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"4821:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1268,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4821:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"4790:49:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1270,\"nodeType\":\"ExpressionStatement\",\"src\":\"4790:49:6\"},{\"assignments\":[1272],\"declarations\":[{\"constant\":false,\"id\":1272,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4849:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1271,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"4849:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1276,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1273,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"4867:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1275,\"indexExpression\":{\"argumentTypes\":null,\"id\":1274,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"4876:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4867:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4849:33:6\"},{\"assignments\":[1278],\"declarations\":[{\"constant\":false,\"id\":1278,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4892:10:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1277,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4892:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1285,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1280,\"name\":\"_value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1224,\"src\":\"4909:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1281,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"4917:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1282,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":41,\"src\":\"4917:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_uint256_$\",\"typeString\":\"function () view external returns (uint256)\"}},\"id\":1283,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4917:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1279,\"name\":\"min\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2417,\"src\":\"4905:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\"typeString\":\"function (uint256,uint256) pure returns (uint256)\"}},\"id\":1284,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4905:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4892:37:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1289,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"4954:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"74727565\",\"id\":1290,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4961:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"true\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"expression\":{\"argumentTypes\":null,\"id\":1286,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"4939:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1288,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setBalance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":18,\"src\":\"4939:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (uint256,bool) external\"}},\"id\":1291,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4939:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1292,\"nodeType\":\"ExpressionStatement\",\"src\":\"4939:27:6\"},{\"assignments\":[1294],\"declarations\":[{\"constant\":false,\"id\":1294,\"name\":\"auctionState\",\"nodeType\":\"VariableDeclaration\",\"scope\":1451,\"src\":\"4977:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":1293,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"4977:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1298,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1296,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"5003:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1295,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"4997:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1297,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4997:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"4977:32:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1302,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1299,\"name\":\"auctionState\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1294,\"src\":\"5023:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1300,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"5039:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1301,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5039:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"5023:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1321,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1318,\"name\":\"auctionState\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1294,\"src\":\"5226:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1319,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"5242:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1320,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Reveal\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5242:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"5226:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1337,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1328,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1326,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"5327:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1327,\"name\":\"minPrice\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"5335:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"5327:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1336,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1329,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"5347:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1330,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"creationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":46,\"src\":\"5347:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_uint256_$\",\"typeString\":\"function () view external returns (uint256)\"}},\"id\":1331,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5347:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1335,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1332,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5368:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1333,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"5368:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1334,\"name\":\"revealPeriod\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1057,\"src\":\"5389:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"src\":\"5368:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"5347:54:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"5327:74:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1356,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1353,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"5568:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1354,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5576:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1355,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"5576:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"5568:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1409,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1406,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6166:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1407,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"6174:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1408,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"6174:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"6166:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":1445,\"nodeType\":\"Block\",\"src\":\"6372:144:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"393935\",\"id\":1434,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6442:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"},\"value\":\"995\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"}],\"expression\":{\"argumentTypes\":null,\"id\":1431,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"6428:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1433,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"6428:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1435,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6428:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1436,\"nodeType\":\"ExpressionStatement\",\"src\":\"6428:18:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1438,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"6477:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1439,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"6484:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1440,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"6484:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1441,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6496:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"34\",\"id\":1442,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6503:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_4_by_1\",\"typeString\":\"int_const 4\"},\"value\":\"4\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_4_by_1\",\"typeString\":\"int_const 4\"}],\"id\":1437,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"6465:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1443,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6465:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1444,\"nodeType\":\"EmitStatement\",\"src\":\"6460:45:6\"}]},\"id\":1446,\"nodeType\":\"IfStatement\",\"src\":\"6162:354:6\",\"trueBody\":{\"id\":1430,\"nodeType\":\"Block\",\"src\":\"6183:183:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1414,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1410,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"6249:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1412,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"6249:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1413,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6259:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"6249:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1415,\"nodeType\":\"ExpressionStatement\",\"src\":\"6249:15:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"393935\",\"id\":1419,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6292:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"},\"value\":\"995\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"}],\"expression\":{\"argumentTypes\":null,\"id\":1416,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"6278:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1418,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"6278:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1420,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6278:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1421,\"nodeType\":\"ExpressionStatement\",\"src\":\"6278:18:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1423,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"6327:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1424,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"6334:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1425,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"6334:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1426,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6346:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"33\",\"id\":1427,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6353:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_3_by_1\",\"typeString\":\"int_const 3\"},\"value\":\"3\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_3_by_1\",\"typeString\":\"int_const 3\"}],\"id\":1422,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"6315:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1428,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6315:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1429,\"nodeType\":\"EmitStatement\",\"src\":\"6310:45:6\"}]}},\"id\":1447,\"nodeType\":\"IfStatement\",\"src\":\"5564:952:6\",\"trueBody\":{\"id\":1405,\"nodeType\":\"Block\",\"src\":\"5590:566:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1364,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1358,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5692:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1359,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"5692:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1357,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"5684:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1360,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5684:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1362,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5711:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1361,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"5703:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1363,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5703:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"5684:31:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1377,\"nodeType\":\"IfStatement\",\"src\":\"5680:145:6\",\"trueBody\":{\"id\":1376,\"nodeType\":\"Block\",\"src\":\"5717:108:6\",\"statements\":[{\"assignments\":[1366],\"declarations\":[{\"constant\":false,\"id\":1366,\"name\":\"previousWinner\",\"nodeType\":\"VariableDeclaration\",\"scope\":1376,\"src\":\"5735:19:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1365,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"5735:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1369,\"initialValue\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1367,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5757:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1368,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"5757:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"5735:28:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"393935\",\"id\":1373,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5806:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"},\"value\":\"995\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"}],\"expression\":{\"argumentTypes\":null,\"id\":1370,\"name\":\"previousWinner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1366,\"src\":\"5781:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1372,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"5781:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1374,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5781:29:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1375,\"nodeType\":\"ExpressionStatement\",\"src\":\"5781:29:6\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":1383,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1378,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5962:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1380,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"5962:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1381,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"5972:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1382,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"5972:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"5962:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1384,\"nodeType\":\"ExpressionStatement\",\"src\":\"5962:22:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1389,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1385,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"6040:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1387,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"6040:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1388,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6055:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"6040:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1390,\"nodeType\":\"ExpressionStatement\",\"src\":\"6040:20:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1395,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1391,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1272,\"src\":\"6074:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1393,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"6074:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1394,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"6083:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"6074:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1396,\"nodeType\":\"ExpressionStatement\",\"src\":\"6074:12:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1398,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"6117:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1399,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"6124:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1400,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"6124:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1401,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"6136:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"32\",\"id\":1402,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"6143:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2_by_1\",\"typeString\":\"int_const 2\"},\"value\":\"2\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_2_by_1\",\"typeString\":\"int_const 2\"}],\"id\":1397,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"6105:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1403,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"6105:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1404,\"nodeType\":\"EmitStatement\",\"src\":\"6100:45:6\"}]}},\"id\":1448,\"nodeType\":\"IfStatement\",\"src\":\"5323:1193:6\",\"trueBody\":{\"id\":1352,\"nodeType\":\"Block\",\"src\":\"5403:155:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"393935\",\"id\":1341,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5484:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"},\"value\":\"995\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_995_by_1\",\"typeString\":\"int_const 995\"}],\"expression\":{\"argumentTypes\":null,\"id\":1338,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"5470:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1340,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"5470:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1342,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5470:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1343,\"nodeType\":\"ExpressionStatement\",\"src\":\"5470:18:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1345,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"5519:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1346,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"5526:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1347,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5526:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1348,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"5538:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1349,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5545:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1344,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"5507:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1350,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5507:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1351,\"nodeType\":\"EmitStatement\",\"src\":\"5502:45:6\"}]}},\"id\":1449,\"nodeType\":\"IfStatement\",\"src\":\"5222:1294:6\",\"trueBody\":{\"id\":1325,\"nodeType\":\"Block\",\"src\":\"5255:62:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":1322,\"name\":\"revert\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3037,3038],\"referencedDeclaration\":3037,\"src\":\"5298:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_revert_pure$__$returns$__$\",\"typeString\":\"function () pure\"}},\"id\":1323,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5298:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1324,\"nodeType\":\"ExpressionStatement\",\"src\":\"5298:8:6\"}]}},\"id\":1450,\"nodeType\":\"IfStatement\",\"src\":\"5019:1497:6\",\"trueBody\":{\"id\":1317,\"nodeType\":\"Block\",\"src\":\"5051:165:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":1306,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5144:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"},\"value\":\"5\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"}],\"expression\":{\"argumentTypes\":null,\"id\":1303,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1240,\"src\":\"5130:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1305,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"5130:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1307,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5130:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1308,\"nodeType\":\"ExpressionStatement\",\"src\":\"5130:16:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1310,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1222,\"src\":\"5177:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1311,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"5184:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1312,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5184:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":1313,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"5196:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":1314,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5203:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"}],\"id\":1309,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"5165:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1315,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5165:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1316,\"nodeType\":\"EmitStatement\",\"src\":\"5160:45:6\"}]}}]},\"documentation\":\"@dev Submit the properties of a bid to reveal them\\n     * @param _hash The node in the sealedBid\\n@param _value The bid amount in the sealedBid\\n@param _salt The sale in the sealedBid\",\"id\":1452,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"unsealBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1227,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1222,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1452,\"src\":\"4566:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1221,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4566:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1224,\"name\":\"_value\",\"nodeType\":\"VariableDeclaration\",\"scope\":1452,\"src\":\"4581:11:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1223,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4581:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1226,\"name\":\"_salt\",\"nodeType\":\"VariableDeclaration\",\"scope\":1452,\"src\":\"4594:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1225,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4594:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4565:43:6\"},\"returnParameters\":{\"id\":1228,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"4618:0:6\"},\"scope\":2505,\"src\":\"4547:1975:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2662,\"visibility\":\"external\"},{\"body\":{\"id\":1517,\"nodeType\":\"Block\",\"src\":\"6695:786:6\",\"statements\":[{\"assignments\":[1460],\"declarations\":[{\"constant\":false,\"id\":1460,\"name\":\"bid\",\"nodeType\":\"VariableDeclaration\",\"scope\":1517,\"src\":\"6705:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1459,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"6705:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1466,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1461,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"6716:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":1463,\"indexExpression\":{\"argumentTypes\":null,\"id\":1462,\"name\":\"bidder\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1454,\"src\":\"6727:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"6716:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":1465,\"indexExpression\":{\"argumentTypes\":null,\"id\":1464,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1456,\"src\":\"6735:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"6716:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"6705:35:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1484,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1474,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1469,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1460,\"src\":\"7176:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1468,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"7168:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1470,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7168:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1472,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7192:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1471,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"7184:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1473,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7184:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"7168:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1483,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1475,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"7200:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1482,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1480,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1476,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1460,\"src\":\"7207:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1477,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"creationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":46,\"src\":\"7207:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_uint256_$\",\"typeString\":\"function () view external returns (uint256)\"}},\"id\":1478,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7207:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1479,\"name\":\"totalAuctionLength\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1054,\"src\":\"7228:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"src\":\"7207:39:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"32\",\"id\":1481,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7249:7:6\",\"subdenomination\":\"weeks\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1209600_by_1\",\"typeString\":\"int_const 1209600\"},\"value\":\"2\"},\"src\":\"7207:49:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"7200:56:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"7168:88:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1467,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"7160:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1485,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7160:97:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1486,\"nodeType\":\"ExpressionStatement\",\"src\":\"7160:97:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1490,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"7347:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1491,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"7347:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":1487,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1460,\"src\":\"7334:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1489,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":6,\"src\":\"7334:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_payable_$returns$__$\",\"typeString\":\"function (address payable) external\"}},\"id\":1492,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7334:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1493,\"nodeType\":\"ExpressionStatement\",\"src\":\"7334:24:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":1497,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7382:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"},\"value\":\"5\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"}],\"expression\":{\"argumentTypes\":null,\"id\":1494,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1460,\"src\":\"7368:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1496,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"7368:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1498,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7368:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1499,\"nodeType\":\"ExpressionStatement\",\"src\":\"7368:16:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1508,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1500,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"7394:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":1503,\"indexExpression\":{\"argumentTypes\":null,\"id\":1501,\"name\":\"bidder\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1454,\"src\":\"7405:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"7394:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":1504,\"indexExpression\":{\"argumentTypes\":null,\"id\":1502,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1456,\"src\":\"7413:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"7394:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1506,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7426:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1505,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"7421:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1507,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7421:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"7394:34:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1509,\"nodeType\":\"ExpressionStatement\",\"src\":\"7394:34:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1511,\"name\":\"seal\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1456,\"src\":\"7455:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1512,\"name\":\"bidder\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1454,\"src\":\"7461:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1513,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7469:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":1514,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7472:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"},\"value\":\"5\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"}],\"id\":1510,\"name\":\"BidRevealed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2596,\"src\":\"7443:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint8_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint8)\"}},\"id\":1515,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7443:31:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1516,\"nodeType\":\"EmitStatement\",\"src\":\"7438:36:6\"}]},\"documentation\":\"@dev Cancel a bid\\n     * @param seal The value returned by the shaBid function\",\"id\":1518,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"cancelBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1457,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1454,\"name\":\"bidder\",\"nodeType\":\"VariableDeclaration\",\"scope\":1518,\"src\":\"6656:14:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":1453,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"6656:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1456,\"name\":\"seal\",\"nodeType\":\"VariableDeclaration\",\"scope\":1518,\"src\":\"6672:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1455,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"6672:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"6655:30:6\"},\"returnParameters\":{\"id\":1458,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"6695:0:6\"},\"scope\":2505,\"src\":\"6637:844:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2669,\"visibility\":\"external\"},{\"body\":{\"id\":1572,\"nodeType\":\"Block\",\"src\":\"7707:356:6\",\"statements\":[{\"assignments\":[1527],\"declarations\":[{\"constant\":false,\"id\":1527,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1572,\"src\":\"7717:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1526,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"7717:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1531,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1528,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"7735:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1530,\"indexExpression\":{\"argumentTypes\":null,\"id\":1529,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1520,\"src\":\"7744:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"7735:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"7717:33:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1540,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1532,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7849:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1534,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"7849:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1536,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7863:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1537,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"7863:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1538,\"name\":\"minPrice\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"7872:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1535,\"name\":\"max\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2399,\"src\":\"7859:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\"typeString\":\"function (uint256,uint256) pure returns (uint256)\"}},\"id\":1539,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7859:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"7849:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1541,\"nodeType\":\"ExpressionStatement\",\"src\":\"7849:32:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1547,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7909:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1548,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"7909:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"74727565\",\"id\":1549,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"7918:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"true\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1542,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7891:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1545,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"7891:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1546,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setBalance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":18,\"src\":\"7891:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (uint256,bool) external\"}},\"id\":1550,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7891:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1551,\"nodeType\":\"ExpressionStatement\",\"src\":\"7891:32:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1553,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1520,\"src\":\"7953:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1554,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"7960:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1555,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"7960:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1556,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":31,\"src\":\"7960:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_address_$\",\"typeString\":\"function () view external returns (address)\"}},\"id\":1557,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7960:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":1552,\"name\":\"trySetSubnodeOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2381,\"src\":\"7934:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":1558,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7934:41:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1559,\"nodeType\":\"ExpressionStatement\",\"src\":\"7934:41:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1561,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1520,\"src\":\"8005:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1562,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"8012:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1563,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"8012:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1564,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":31,\"src\":\"8012:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$__$returns$_t_address_$\",\"typeString\":\"function () view external returns (address)\"}},\"id\":1565,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8012:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1566,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"8028:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1567,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"8028:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1568,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1527,\"src\":\"8037:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1569,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"8037:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1560,\"name\":\"HashRegistered\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2606,\"src\":\"7990:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256,uint256)\"}},\"id\":1570,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"7990:66:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1571,\"nodeType\":\"EmitStatement\",\"src\":\"7985:71:6\"}]},\"documentation\":\"@dev Finalize an auction after the registration date has passed\\n     * @param _hash The hash of the name the auction is for\",\"id\":1573,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1523,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1520,\"src\":\"7700:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1524,\"modifierName\":{\"argumentTypes\":null,\"id\":1522,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"7690:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"7690:16:6\"}],\"name\":\"finalizeAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1521,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1520,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1573,\"src\":\"7666:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1519,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"7666:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"7665:15:6\"},\"returnParameters\":{\"id\":1525,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"7707:0:6\"},\"scope\":2505,\"src\":\"7641:422:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2674,\"visibility\":\"external\"},{\"body\":{\"id\":1610,\"nodeType\":\"Block\",\"src\":\"8357:174:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"id\":1588,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1584,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1577,\"src\":\"8375:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1586,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"8395:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1585,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"8387:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1587,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8387:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"8375:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1583,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"8367:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1589,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8367:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1590,\"nodeType\":\"ExpressionStatement\",\"src\":\"8367:33:6\"},{\"assignments\":[1592],\"declarations\":[{\"constant\":false,\"id\":1592,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1610,\"src\":\"8411:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1591,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"8411:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1596,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1593,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"8429:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1595,\"indexExpression\":{\"argumentTypes\":null,\"id\":1594,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1575,\"src\":\"8438:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"8429:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"8411:33:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1602,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1577,\"src\":\"8470:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1597,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1592,\"src\":\"8454:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1600,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"8454:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1601,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":6,\"src\":\"8454:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_payable_$returns$__$\",\"typeString\":\"function (address payable) external\"}},\"id\":1603,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8454:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1604,\"nodeType\":\"ExpressionStatement\",\"src\":\"8454:25:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1606,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1575,\"src\":\"8508:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1607,\"name\":\"newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1577,\"src\":\"8515:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":1605,\"name\":\"trySetSubnodeOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2381,\"src\":\"8489:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address)\"}},\"id\":1608,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8489:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1609,\"nodeType\":\"ExpressionStatement\",\"src\":\"8489:35:6\"}]},\"documentation\":\"@dev The owner of a domain may transfer it to someone else at any time.\\n     * @param _hash The node to transfer\\n@param newOwner The address to transfer ownership to\",\"id\":1611,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1580,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1575,\"src\":\"8350:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1581,\"modifierName\":{\"argumentTypes\":null,\"id\":1579,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"8340:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"8340:16:6\"}],\"name\":\"transfer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1578,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1575,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1611,\"src\":\"8290:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1574,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"8290:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1577,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":1611,\"src\":\"8305:24:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":1576,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"8305:15:6\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"8289:41:6\"},\"returnParameters\":{\"id\":1582,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"8357:0:6\"},\"scope\":2505,\"src\":\"8272:259:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2681,\"visibility\":\"external\"},{\"body\":{\"id\":1684,\"nodeType\":\"Block\",\"src\":\"8797:382:6\",\"statements\":[{\"assignments\":[1620],\"declarations\":[{\"constant\":false,\"id\":1620,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1684,\"src\":\"8807:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1619,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"8807:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1624,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1621,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"8825:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1623,\"indexExpression\":{\"argumentTypes\":null,\"id\":1622,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1613,\"src\":\"8834:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"8825:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"8807:33:6\"},{\"assignments\":[1626],\"declarations\":[{\"constant\":false,\"id\":1626,\"name\":\"deedContract\",\"nodeType\":\"VariableDeclaration\",\"scope\":1684,\"src\":\"8850:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1625,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"8850:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1629,\"initialValue\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1627,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"8870:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1628,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"8870:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"8850:26:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1645,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1636,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1631,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"8895:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1635,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1632,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"8902:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1633,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"8902:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"333635\",\"id\":1634,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"8923:8:6\",\"subdenomination\":\"days\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_31536000_by_1\",\"typeString\":\"int_const 31536000\"},\"value\":\"365\"},\"src\":\"8902:29:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"8895:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1644,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1639,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"8945:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":1637,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"8935:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1638,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"8935:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":1640,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8935:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1642,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"8966:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":1641,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"8958:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1643,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8958:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"8935:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"8895:76:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1630,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"8887:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1646,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"8887:85:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1647,\"nodeType\":\"ExpressionStatement\",\"src\":\"8887:85:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1652,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1648,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"8983:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1650,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"8983:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1651,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"8993:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"8983:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1653,\"nodeType\":\"ExpressionStatement\",\"src\":\"8983:11:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1658,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1654,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"9004:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1656,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"9004:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1657,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9019:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"9004:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1659,\"nodeType\":\"ExpressionStatement\",\"src\":\"9004:16:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1666,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1660,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"9030:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1662,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"9030:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1664,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9044:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1663,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"9039:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1665,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9039:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"9030:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1667,\"nodeType\":\"ExpressionStatement\",\"src\":\"9030:16:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1669,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1613,\"src\":\"9077:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1668,\"name\":\"_tryEraseSingleNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2147,\"src\":\"9057:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1670,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9057:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1671,\"nodeType\":\"ExpressionStatement\",\"src\":\"9057:26:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"31303030\",\"id\":1675,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9116:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"},\"value\":\"1000\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"}],\"expression\":{\"argumentTypes\":null,\"id\":1672,\"name\":\"deedContract\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1626,\"src\":\"9093:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1674,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"9093:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1676,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9093:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1677,\"nodeType\":\"ExpressionStatement\",\"src\":\"9093:28:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1679,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1613,\"src\":\"9149:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1680,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1620,\"src\":\"9156:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1681,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"9156:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1678,\"name\":\"HashReleased\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2612,\"src\":\"9136:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,uint256)\"}},\"id\":1682,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9136:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1683,\"nodeType\":\"EmitStatement\",\"src\":\"9131:33:6\"}]},\"documentation\":\"@dev After some time, or if we're no longer the registrar, the owner can release\\n     the name and get their ether back.\\n     * @param _hash The node to release\",\"id\":1685,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1616,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1613,\"src\":\"8790:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1617,\"modifierName\":{\"argumentTypes\":null,\"id\":1615,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"8780:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"8780:16:6\"}],\"name\":\"releaseDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1614,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1613,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1685,\"src\":\"8756:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1612,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"8756:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"8755:15:6\"},\"returnParameters\":{\"id\":1618,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"8797:0:6\"},\"scope\":2505,\"src\":\"8735:444:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2686,\"visibility\":\"external\"},{\"body\":{\"id\":1805,\"nodeType\":\"Block\",\"src\":\"9704:675:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1705,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1702,\"name\":\"unhashedName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1687,\"src\":\"9729:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}],\"id\":1701,\"name\":\"strlen\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2504,\"src\":\"9722:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_string_memory_ptr_$returns$_t_uint256_$\",\"typeString\":\"function (string memory) pure returns (uint256)\"}},\"id\":1703,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9722:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<=\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"36\",\"id\":1704,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9746:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_6_by_1\",\"typeString\":\"int_const 6\"},\"value\":\"6\"},\"src\":\"9722:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1700,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"9714:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1706,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9714:34:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1707,\"nodeType\":\"ExpressionStatement\",\"src\":\"9714:34:6\"},{\"assignments\":[1709],\"declarations\":[{\"constant\":false,\"id\":1709,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1805,\"src\":\"9758:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1708,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"9758:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1716,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1713,\"name\":\"unhashedName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1687,\"src\":\"9794:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}],\"expression\":{\"argumentTypes\":null,\"id\":1711,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"9783:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":1712,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encode\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"9783:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":1714,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9783:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1710,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"9773:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1715,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9773:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"9758:50:6\"},{\"assignments\":[1718],\"declarations\":[{\"constant\":false,\"id\":1718,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1805,\"src\":\"9819:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1717,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"9819:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1722,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1719,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"9837:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1721,\"indexExpression\":{\"argumentTypes\":null,\"id\":1720,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1709,\"src\":\"9846:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"9837:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"9819:32:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1724,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1709,\"src\":\"9882:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1723,\"name\":\"_tryEraseSingleNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2147,\"src\":\"9862:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1725,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9862:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1726,\"nodeType\":\"ExpressionStatement\",\"src\":\"9862:25:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1734,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1728,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"9910:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1729,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"9910:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1727,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"9902:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1730,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9902:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":1732,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"9929:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1731,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"9921:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1733,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9921:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"9902:31:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1775,\"nodeType\":\"IfStatement\",\"src\":\"9898:321:6\",\"trueBody\":{\"id\":1774,\"nodeType\":\"Block\",\"src\":\"9935:284:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1743,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1735,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10050:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1737,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10050:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1739,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10064:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1740,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10064:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1741,\"name\":\"minPrice\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"10073:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1738,\"name\":\"max\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2399,\"src\":\"10060:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$\",\"typeString\":\"function (uint256,uint256) pure returns (uint256)\"}},\"id\":1742,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10060:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"10050:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1744,\"nodeType\":\"ExpressionStatement\",\"src\":\"10050:32:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1753,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1750,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10114:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1751,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10114:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"/\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"32\",\"id\":1752,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10122:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2_by_1\",\"typeString\":\"int_const 2\"},\"value\":\"2\"},\"src\":\"10114:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"hexValue\":\"66616c7365\",\"id\":1754,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"bool\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10125:5:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"value\":\"false\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1745,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10096:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1748,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"10096:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1749,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setBalance\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":18,\"src\":\"10096:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (uint256,bool) external\"}},\"id\":1755,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10096:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1756,\"nodeType\":\"ExpressionStatement\",\"src\":\"10096:35:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1762,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"10161:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":1763,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"10161:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1757,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10145:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1760,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"10145:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1761,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":6,\"src\":\"10145:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_payable_$returns$__$\",\"typeString\":\"function (address payable) external\"}},\"id\":1764,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10145:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1765,\"nodeType\":\"ExpressionStatement\",\"src\":\"10145:27:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"31303030\",\"id\":1771,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10203:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"},\"value\":\"1000\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_1000_by_1\",\"typeString\":\"int_const 1000\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1766,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10186:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1769,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"10186:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1770,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"closeDeed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":23,\"src\":\"10186:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":1772,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10186:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1773,\"nodeType\":\"ExpressionStatement\",\"src\":\"10186:22:6\"}]}},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1777,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1709,\"src\":\"10250:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1778,\"name\":\"unhashedName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1687,\"src\":\"10256:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1779,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10270:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1780,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10270:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1781,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10279:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1782,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"10279:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1776,\"name\":\"HashInvalidated\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2622,\"src\":\"10234:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_string_memory_ptr_$_t_uint256_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,string memory,uint256,uint256)\"}},\"id\":1783,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10234:64:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1784,\"nodeType\":\"EmitStatement\",\"src\":\"10229:69:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1789,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1785,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10309:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1787,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"10309:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1788,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10319:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"10309:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1790,\"nodeType\":\"ExpressionStatement\",\"src\":\"10309:11:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1795,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1791,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10330:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1793,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"10330:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1794,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10345:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"10330:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1796,\"nodeType\":\"ExpressionStatement\",\"src\":\"10330:16:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1803,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1797,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1718,\"src\":\"10356:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1799,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"10356:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1801,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"10370:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1800,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"10365:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1802,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"10365:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"10356:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1804,\"nodeType\":\"ExpressionStatement\",\"src\":\"10356:16:6\"}]},\"documentation\":\"@dev Submit a name 6 characters long or less. If it has been registered,\\n     the submitter will earn 50% of the deed value. \\n\\n     * We are purposefully handicapping the simplified registrar as a way \\nto force it into being restructured in a few years.\\n     * @param unhashedName An invalid name to search for in the registry.\",\"id\":1806,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1693,\"name\":\"unhashedName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1687,\"src\":\"9672:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string calldata\"}],\"expression\":{\"argumentTypes\":null,\"id\":1691,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"9661:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":1692,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encode\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"9661:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":1694,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9661:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1690,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"9651:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1695,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"9651:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1696,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"9688:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1697,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"9688:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}}],\"id\":1698,\"modifierName\":{\"argumentTypes\":null,\"id\":1689,\"name\":\"inState\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1090,\"src\":\"9643:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$_t_enum$_Mode_$2572_$\",\"typeString\":\"modifier (bytes32,enum Registrar.Mode)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"9643:56:6\"}],\"name\":\"invalidateName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1688,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1687,\"name\":\"unhashedName\",\"nodeType\":\"VariableDeclaration\",\"scope\":1806,\"src\":\"9588:28:6\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":1686,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"9588:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"9587:30:6\"},\"returnParameters\":{\"id\":1699,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"9704:0:6\"},\"scope\":2505,\"src\":\"9564:815:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2691,\"visibility\":\"external\"},{\"body\":{\"id\":1842,\"nodeType\":\"Block\",\"src\":\"11063:176:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1816,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1813,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11081:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},\"id\":1814,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"11081:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1815,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11098:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"11081:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1812,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"11073:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1817,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11073:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1818,\"nodeType\":\"ExpressionStatement\",\"src\":\"11073:27:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":1830,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1821,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11124:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},\"id\":1826,\"indexExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1825,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1822,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11131:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},\"id\":1823,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"11131:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":1824,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11147:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"},\"src\":\"11131:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"11124:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1820,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"11118:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1827,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11118:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1828,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"11154:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1829,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"11154:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"11118:46:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1819,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"11110:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1831,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11110:55:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1832,\"nodeType\":\"ExpressionStatement\",\"src\":\"11110:55:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1837,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1834,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11196:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},\"id\":1835,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"11196:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":1836,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11212:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"},\"src\":\"11196:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1838,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1809,\"src\":\"11215:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"}},{\"argumentTypes\":null,\"id\":1839,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"11223:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[] calldata\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1833,\"name\":\"_eraseNodeHierarchy\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2356,\"src\":\"11176:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$returns$__$\",\"typeString\":\"function (uint256,bytes32[] memory,bytes32)\"}},\"id\":1840,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11176:56:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1841,\"nodeType\":\"ExpressionStatement\",\"src\":\"11176:56:6\"}]},\"documentation\":\"@dev Allows anyone to delete the owner and resolver records for a (subdomain of) a\\n     name that is not currently owned in the registrar. If passing, eg, 'foo.bar.eth',\\n     the owner and resolver fields on 'foo.bar.eth' and 'bar.eth' will all be cleared.\\n     * @param labels A series of label hashes identifying the name to zero out, rooted at the\\n       registrar's root. Must contain at least one element. For instance, to zero \\n       'foo.bar.eth' on a registrar that owns '.eth', pass an array containing\\n       [keccak256('foo'), keccak256('bar')].\",\"id\":1843,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"eraseNode\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1810,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1809,\"name\":\"labels\",\"nodeType\":\"VariableDeclaration\",\"scope\":1843,\"src\":\"11027:25:6\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":1807,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"11027:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1808,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"11027:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"11026:27:6\"},\"returnParameters\":{\"id\":1811,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"11063:0:6\"},\"scope\":2505,\"src\":\"11008:231:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2697,\"visibility\":\"external\"},{\"body\":{\"id\":1917,\"nodeType\":\"Block\",\"src\":\"11541:496:6\",\"statements\":[{\"assignments\":[1852],\"declarations\":[{\"constant\":false,\"id\":1852,\"name\":\"registrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":1917,\"src\":\"11551:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":1851,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"11551:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1857,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1855,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"11581:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":1853,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"11571:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":1854,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"11571:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":1856,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11571:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"11551:39:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":1863,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1859,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1852,\"src\":\"11608:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1861,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"11629:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":1860,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"11621:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1862,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11621:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"11608:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1858,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"11600:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":1864,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11600:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1865,\"nodeType\":\"ExpressionStatement\",\"src\":\"11600:35:6\"},{\"assignments\":[1867],\"declarations\":[{\"constant\":false,\"id\":1867,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1917,\"src\":\"11674:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1866,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"11674:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1871,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1868,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"11692:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1870,\"indexExpression\":{\"argumentTypes\":null,\"id\":1869,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1845,\"src\":\"11701:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"11692:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"11674:33:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1877,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1852,\"src\":\"11737:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1872,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11717:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1875,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"11717:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1876,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setRegistrar\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":11,\"src\":\"11717:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_$returns$__$\",\"typeString\":\"function (address) external\"}},\"id\":1878,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11717:30:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1879,\"nodeType\":\"ExpressionStatement\",\"src\":\"11717:30:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1884,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1845,\"src\":\"11860:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1885,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11867:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1886,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"11867:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1887,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11875:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1888,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"11875:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1881,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1852,\"src\":\"11825:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":1880,\"name\":\"Registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2727,\"src\":\"11815:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Registrar_$2727_$\",\"typeString\":\"type(contract Registrar)\"}},\"id\":1882,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11815:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Registrar_$2727\",\"typeString\":\"contract Registrar\"}},\"id\":1883,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"acceptRegistrarTransfer\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2711,\"src\":\"11815:44:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_contract$_Deed_$47_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,contract Deed,uint256) external\"}},\"id\":1889,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11815:79:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1890,\"nodeType\":\"ExpressionStatement\",\"src\":\"11815:79:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1897,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1891,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11935:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1893,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"11935:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1895,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11949:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":1894,\"name\":\"Deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":47,\"src\":\"11944:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Deed_$47_$\",\"typeString\":\"type(contract Deed)\"}},\"id\":1896,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"11944:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"11935:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1898,\"nodeType\":\"ExpressionStatement\",\"src\":\"11935:16:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1903,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1899,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11961:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1901,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"11961:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1902,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"11982:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"11961:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1904,\"nodeType\":\"ExpressionStatement\",\"src\":\"11961:22:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1909,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1905,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"11993:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1907,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"11993:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1908,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"12003:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"11993:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1910,\"nodeType\":\"ExpressionStatement\",\"src\":\"11993:11:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1915,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1911,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1867,\"src\":\"12014:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1913,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"12014:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1914,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"12029:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"12014:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1916,\"nodeType\":\"ExpressionStatement\",\"src\":\"12014:16:6\"}]},\"documentation\":\"@dev Transfers the deed to the current registrar, if different from this one.\\n     * Used during the upgrade process to a permanent registrar.\\n     * @param _hash The name hash to transfer.\",\"id\":1918,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1848,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1845,\"src\":\"11534:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1849,\"modifierName\":{\"argumentTypes\":null,\"id\":1847,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"11524:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"11524:16:6\"}],\"name\":\"transferRegistrars\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1846,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1845,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1918,\"src\":\"11500:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1844,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"11500:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"11499:15:6\"},\"returnParameters\":{\"id\":1850,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"11541:0:6\"},\"scope\":2505,\"src\":\"11472:565:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2702,\"visibility\":\"external\"},{\"body\":{\"id\":1933,\"nodeType\":\"Block\",\"src\":\"12523:82:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1927,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1920,\"src\":\"12533:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1928,\"nodeType\":\"ExpressionStatement\",\"src\":\"12533:4:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1929,\"name\":\"deed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1922,\"src\":\"12539:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":1930,\"nodeType\":\"ExpressionStatement\",\"src\":\"12539:4:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":1931,\"name\":\"registrationDate\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1924,\"src\":\"12545:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1932,\"nodeType\":\"ExpressionStatement\",\"src\":\"12545:16:6\"}]},\"documentation\":\"@dev Accepts a transfer from a previous registrar; stubbed out here since there\\n     is no previous registrar implementing this interface.\\n     * @param hash The sha3 hash of the label to transfer.\\n@param deed The Deed object for the name being transferred in.\\n@param registrationDate The date at which the name was originally registered.\",\"id\":1934,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"acceptRegistrarTransfer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1925,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1920,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1934,\"src\":\"12466:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1919,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12466:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1922,\"name\":\"deed\",\"nodeType\":\"VariableDeclaration\",\"scope\":1934,\"src\":\"12480:9:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":1921,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"12480:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1924,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":1934,\"src\":\"12491:21:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1923,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12491:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"12465:48:6\"},\"returnParameters\":{\"id\":1926,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"12523:0:6\"},\"scope\":2505,\"src\":\"12433:172:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":2711,\"visibility\":\"external\"},{\"body\":{\"id\":1970,\"nodeType\":\"Block\",\"src\":\"12699:141:6\",\"statements\":[{\"assignments\":[1950],\"declarations\":[{\"constant\":false,\"id\":1950,\"name\":\"h\",\"nodeType\":\"VariableDeclaration\",\"scope\":1970,\"src\":\"12709:15:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1949,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"12709:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1954,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1951,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"12727:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1953,\"indexExpression\":{\"argumentTypes\":null,\"id\":1952,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1936,\"src\":\"12736:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"12727:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"12709:33:6\"},{\"expression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1956,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1936,\"src\":\"12766:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1955,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"12760:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":1957,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"12760:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1959,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1950,\"src\":\"12782:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1960,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"deed\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1067,\"src\":\"12782:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":1958,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"12774:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":1961,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"12774:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1962,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1950,\"src\":\"12791:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1963,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"12791:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1964,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1950,\"src\":\"12811:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1965,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"12811:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1966,\"name\":\"h\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1950,\"src\":\"12820:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1967,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"12820:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":1968,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"12759:74:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$_t_enum$_Mode_$2572_$_t_address_$_t_uint256_$_t_uint256_$_t_uint256_$\",\"typeString\":\"tuple(enum Registrar.Mode,address,uint256,uint256,uint256)\"}},\"functionReturnParameters\":1948,\"id\":1969,\"nodeType\":\"Return\",\"src\":\"12752:81:6\"}]},\"documentation\":null,\"id\":1971,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"entries\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1937,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1936,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12628:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1935,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12628:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"12627:15:6\"},\"returnParameters\":{\"id\":1948,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1939,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12666:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":1938,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"12666:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1941,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12672:7:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":1940,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12672:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1943,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12681:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1942,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12681:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1945,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12687:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1944,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12687:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1947,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1971,\"src\":\"12693:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1946,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"12693:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"12665:33:6\"},\"scope\":2505,\"src\":\"12611:229:6\",\"stateMutability\":\"view\",\"superFunction\":2726,\"visibility\":\"external\"},{\"body\":{\"id\":2029,\"nodeType\":\"Block\",\"src\":\"13126:528:6\",\"statements\":[{\"assignments\":[1979],\"declarations\":[{\"constant\":false,\"id\":1979,\"name\":\"entry\",\"nodeType\":\"VariableDeclaration\",\"scope\":2029,\"src\":\"13136:19:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":1978,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"13136:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1983,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1980,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"13158:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":1982,\"indexExpression\":{\"argumentTypes\":null,\"id\":1981,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1973,\"src\":\"13167:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"13158:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"13136:37:6\"},{\"condition\":{\"argumentTypes\":null,\"id\":1988,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"13188:22:6\",\"subExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1985,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1973,\"src\":\"13199:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1986,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"13206:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":1984,\"name\":\"isAllowed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2046,\"src\":\"13189:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$_t_uint256_$returns$_t_bool_$\",\"typeString\":\"function (bytes32,uint256) view returns (bool)\"}},\"id\":1987,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"13189:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1996,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1993,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"13274:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1994,\"name\":\"entry\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1979,\"src\":\"13280:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1995,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"13280:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"13274:28:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":2026,\"nodeType\":\"Block\",\"src\":\"13492:156:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2016,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2013,\"name\":\"entry\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1979,\"src\":\"13510:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2014,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"13510:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2015,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"13530:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"13510:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":2024,\"nodeType\":\"Block\",\"src\":\"13588:50:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2021,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13613:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2022,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Owned\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13613:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":2023,\"nodeType\":\"Return\",\"src\":\"13606:17:6\"}]},\"id\":2025,\"nodeType\":\"IfStatement\",\"src\":\"13506:132:6\",\"trueBody\":{\"id\":2020,\"nodeType\":\"Block\",\"src\":\"13533:49:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2017,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13558:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2018,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Open\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13558:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":2019,\"nodeType\":\"Return\",\"src\":\"13551:16:6\"}]}}]},\"id\":2027,\"nodeType\":\"IfStatement\",\"src\":\"13270:378:6\",\"trueBody\":{\"id\":2012,\"nodeType\":\"Block\",\"src\":\"13304:182:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2002,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1997,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"13322:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2001,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1998,\"name\":\"entry\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1979,\"src\":\"13328:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":1999,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"13328:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2000,\"name\":\"revealPeriod\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1057,\"src\":\"13353:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"src\":\"13328:37:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"13322:43:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":2010,\"nodeType\":\"Block\",\"src\":\"13425:51:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2007,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13450:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2008,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Reveal\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13450:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":2009,\"nodeType\":\"Return\",\"src\":\"13443:18:6\"}]},\"id\":2011,\"nodeType\":\"IfStatement\",\"src\":\"13318:158:6\",\"trueBody\":{\"id\":2006,\"nodeType\":\"Block\",\"src\":\"13367:52:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2003,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13392:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2004,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Auction\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13392:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":2005,\"nodeType\":\"Return\",\"src\":\"13385:19:6\"}]}}]}},\"id\":2028,\"nodeType\":\"IfStatement\",\"src\":\"13184:464:6\",\"trueBody\":{\"id\":1992,\"nodeType\":\"Block\",\"src\":\"13212:52:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1989,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"13233:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":1990,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"NotYetAvailable\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"13233:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"functionReturnParameters\":1977,\"id\":1991,\"nodeType\":\"Return\",\"src\":\"13226:27:6\"}]}}]},\"documentation\":null,\"id\":2030,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"state\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1974,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1973,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2030,\"src\":\"13084:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1972,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"13084:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"13083:15:6\"},\"returnParameters\":{\"id\":1977,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1976,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2030,\"src\":\"13120:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":1975,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"13120:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"13119:6:6\"},\"scope\":2505,\"src\":\"13069:585:6\",\"stateMutability\":\"view\",\"superFunction\":2629,\"visibility\":\"public\"},{\"body\":{\"id\":2045,\"nodeType\":\"Block\",\"src\":\"14059:58:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2043,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2039,\"name\":\"_timestamp\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2034,\"src\":\"14076:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2041,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2032,\"src\":\"14104:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2040,\"name\":\"getAllowedTime\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2069,\"src\":\"14089:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_uint256_$\",\"typeString\":\"function (bytes32) view returns (uint256)\"}},\"id\":2042,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"14089:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"14076:34:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":2038,\"id\":2044,\"nodeType\":\"Return\",\"src\":\"14069:41:6\"}]},\"documentation\":\"@dev Determines if a name is available for registration yet\\n     * Each name will be assigned a random date in which its auction\\ncan be started, from 0 to 8 weeks\\n     * @param _hash The hash to start an auction on\\n@param _timestamp The timestamp to query about\",\"id\":2046,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isAllowed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2035,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2032,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2046,\"src\":\"13992:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2031,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"13992:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2034,\"name\":\"_timestamp\",\"nodeType\":\"VariableDeclaration\",\"scope\":2046,\"src\":\"14007:15:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2033,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14007:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"13991:32:6\"},\"returnParameters\":{\"id\":2038,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2037,\"name\":\"allowed\",\"nodeType\":\"VariableDeclaration\",\"scope\":2046,\"src\":\"14045:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":2036,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14045:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14044:14:6\"},\"scope\":2505,\"src\":\"13973:144:6\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2068,\"nodeType\":\"Block\",\"src\":\"14424:140:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2066,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2053,\"name\":\"registryStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1065,\"src\":\"14441:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2064,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2061,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2054,\"name\":\"launchLength\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1060,\"src\":\"14461:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"*\",\"rightExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2059,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2056,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2048,\"src\":\"14482:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2055,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"14477:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_uint256_$\",\"typeString\":\"type(uint256)\"},\"typeName\":\"uint\"},\"id\":2057,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"14477:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">>\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"313238\",\"id\":2058,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"14492:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_128_by_1\",\"typeString\":\"int_const 128\"},\"value\":\"128\"},\"src\":\"14477:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":2060,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"14476:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"14461:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":2062,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"14460:37:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">>\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"313238\",\"id\":2063,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"14501:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_128_by_1\",\"typeString\":\"int_const 128\"},\"value\":\"128\"},\"src\":\"14460:44:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"id\":2065,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"14459:46:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"14441:64:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2052,\"id\":2067,\"nodeType\":\"Return\",\"src\":\"14434:71:6\"}]},\"documentation\":\"@dev Returns available date for hash\\n     * The available time from the `registryStarted` for a hash is proportional\\nto its numeric value.\\n     * @param _hash The hash to start an auction on\",\"id\":2069,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"getAllowedTime\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2049,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2048,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2069,\"src\":\"14382:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2047,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14382:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14381:15:6\"},\"returnParameters\":{\"id\":2052,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2051,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2069,\"src\":\"14418:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2050,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14418:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14417:6:6\"},\"scope\":2505,\"src\":\"14358:206:6\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2092,\"nodeType\":\"Block\",\"src\":\"14954:77:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2085,\"name\":\"hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2071,\"src\":\"14998:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2086,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2073,\"src\":\"15004:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":2087,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2075,\"src\":\"15011:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":2088,\"name\":\"salt\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2077,\"src\":\"15018:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2083,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"14981:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2084,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"14981:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2089,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"14981:42:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2082,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"14971:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2090,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"14971:53:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2081,\"id\":2091,\"nodeType\":\"Return\",\"src\":\"14964:60:6\"}]},\"documentation\":\"@dev Hash the values required for a secret bid\\n     * @param hash The node corresponding to the desired namehash\\n@param value The bid amount\\n@param salt A random value to ensure secrecy of the bid\\n@return The hash of the bid values\",\"id\":2093,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"shaBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2078,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2071,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14869:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2070,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14869:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2073,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14883:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2072,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14883:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2075,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14898:10:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2074,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14898:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2077,\"name\":\"salt\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14910:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2076,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14910:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14868:55:6\"},\"returnParameters\":{\"id\":2081,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2080,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2093,\"src\":\"14945:7:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2079,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"14945:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"14944:9:6\"},\"scope\":2505,\"src\":\"14853:178:6\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2146,\"nodeType\":\"Block\",\"src\":\"15090:302:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2105,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2100,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"15114:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2098,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"15104:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2099,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"15104:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2101,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15104:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2103,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"15135:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":2102,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"15127:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2104,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15127:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"15104:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2145,\"nodeType\":\"IfStatement\",\"src\":\"15100:286:6\",\"trueBody\":{\"id\":2144,\"nodeType\":\"Block\",\"src\":\"15142:244:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2109,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"15176:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2110,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2095,\"src\":\"15186:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2112,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"15201:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":2111,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"15193:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2113,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15193:13:6\",\"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\":2106,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"15156:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2108,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"15156:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2114,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15156:51:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2115,\"nodeType\":\"ExpressionStatement\",\"src\":\"15156:51:6\"},{\"assignments\":[2117],\"declarations\":[{\"constant\":false,\"id\":2117,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2144,\"src\":\"15221:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2116,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15221:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2125,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2121,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"15263:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2122,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2095,\"src\":\"15273:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2119,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"15246:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2120,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"15246:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2123,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15246:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2118,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"15236:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2124,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15236:44:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"15221:59:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2129,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2117,\"src\":\"15310:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2131,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15324:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2130,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"15316:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2132,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15316:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2126,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"15294:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2128,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setResolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":377,\"src\":\"15294:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2133,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15294:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2134,\"nodeType\":\"ExpressionStatement\",\"src\":\"15294:35:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2138,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2117,\"src\":\"15356:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2140,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15370:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2139,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"15362:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2141,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15362:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2135,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"15343:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2137,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":384,\"src\":\"15343:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2142,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15343:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2143,\"nodeType\":\"ExpressionStatement\",\"src\":\"15343:32:6\"}]}}]},\"documentation\":null,\"id\":2147,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_tryEraseSingleNode\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2096,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2095,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":2147,\"src\":\"15066:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2094,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15066:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"15065:15:6\"},\"returnParameters\":{\"id\":2097,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"15090:0:6\"},\"scope\":2505,\"src\":\"15037:355:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2205,\"nodeType\":\"Block\",\"src\":\"15460:366:6\",\"statements\":[{\"assignments\":[2155],\"declarations\":[{\"constant\":false,\"id\":2155,\"name\":\"mode\",\"nodeType\":\"VariableDeclaration\",\"scope\":2205,\"src\":\"15470:9:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":2154,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"15470:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2159,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2157,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2149,\"src\":\"15488:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2156,\"name\":\"state\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2030,\"src\":\"15482:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$_t_bytes32_$returns$_t_enum$_Mode_$2572_$\",\"typeString\":\"function (bytes32) view returns (enum Registrar.Mode)\"}},\"id\":2158,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15482:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"15470:24:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":2163,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2160,\"name\":\"mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2155,\"src\":\"15508:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2161,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"15516:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2162,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Auction\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"15516:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"15508:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2165,\"nodeType\":\"IfStatement\",\"src\":\"15504:33:6\",\"trueBody\":{\"expression\":null,\"functionReturnParameters\":2153,\"id\":2164,\"nodeType\":\"Return\",\"src\":\"15530:7:6\"}},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"id\":2170,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2167,\"name\":\"mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2155,\"src\":\"15554:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2168,\"name\":\"Mode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2572,\"src\":\"15562:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_enum$_Mode_$2572_$\",\"typeString\":\"type(enum Registrar.Mode)\"}},\"id\":2169,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"Open\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"15562:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"src\":\"15554:17:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":2166,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"15546:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":2171,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15546:26:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2172,\"nodeType\":\"ExpressionStatement\",\"src\":\"15546:26:6\"},{\"assignments\":[2174],\"declarations\":[{\"constant\":false,\"id\":2174,\"name\":\"newAuction\",\"nodeType\":\"VariableDeclaration\",\"scope\":2205,\"src\":\"15583:24:6\",\"stateVariable\":false,\"storageLocation\":\"storage\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"},\"typeName\":{\"contractScope\":null,\"id\":2173,\"name\":\"Entry\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1074,\"src\":\"15583:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2178,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2175,\"name\":\"_entries\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1045,\"src\":\"15610:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_struct$_Entry_$1074_storage_$\",\"typeString\":\"mapping(bytes32 => struct HashRegistrar.Entry storage ref)\"}},\"id\":2177,\"indexExpression\":{\"argumentTypes\":null,\"id\":2176,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2149,\"src\":\"15619:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"15610:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage\",\"typeString\":\"struct HashRegistrar.Entry storage ref\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"15583:42:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2185,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2179,\"name\":\"newAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2174,\"src\":\"15635:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2181,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"15635:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2184,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2182,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"15665:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2183,\"name\":\"totalAuctionLength\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1054,\"src\":\"15671:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint32\",\"typeString\":\"uint32\"}},\"src\":\"15665:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"15635:54:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2186,\"nodeType\":\"ExpressionStatement\",\"src\":\"15635:54:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2191,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2187,\"name\":\"newAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2174,\"src\":\"15699:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2189,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1071,\"src\":\"15699:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2190,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15718:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"15699:20:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2192,\"nodeType\":\"ExpressionStatement\",\"src\":\"15699:20:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2197,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2193,\"name\":\"newAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2174,\"src\":\"15729:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2195,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"memberName\":\"highestBid\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1073,\"src\":\"15729:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2196,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15753:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"15729:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2198,\"nodeType\":\"ExpressionStatement\",\"src\":\"15729:25:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2200,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2149,\"src\":\"15784:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2201,\"name\":\"newAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2174,\"src\":\"15791:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_Entry_$1074_storage_ptr\",\"typeString\":\"struct HashRegistrar.Entry storage pointer\"}},\"id\":2202,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"registrationDate\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":1069,\"src\":\"15791:27:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":2199,\"name\":\"AuctionStarted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2578,\"src\":\"15769:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,uint256)\"}},\"id\":2203,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15769:50:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2204,\"nodeType\":\"EmitStatement\",\"src\":\"15764:55:6\"}]},\"documentation\":null,\"id\":2206,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[],\"id\":2152,\"modifierName\":{\"argumentTypes\":null,\"id\":2151,\"name\":\"registryOpen\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1145,\"src\":\"15445:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"15445:14:6\"}],\"name\":\"_startAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2150,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2149,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2206,\"src\":\"15421:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2148,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15421:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"15420:15:6\"},\"returnParameters\":{\"id\":2153,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"15460:0:6\"},\"scope\":2505,\"src\":\"15398:428:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2231,\"nodeType\":\"Block\",\"src\":\"15891:109:6\",\"statements\":[{\"body\":{\"id\":2229,\"nodeType\":\"Block\",\"src\":\"15944:50:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2224,\"name\":\"_hashes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2209,\"src\":\"15972:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},\"id\":2226,\"indexExpression\":{\"argumentTypes\":null,\"id\":2225,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2213,\"src\":\"15980:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"15972:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2223,\"name\":\"_startAuction\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2206,\"src\":\"15958:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":2227,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"15958:25:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2228,\"nodeType\":\"ExpressionStatement\",\"src\":\"15958:25:6\"}]},\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2219,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2216,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2213,\"src\":\"15918:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2217,\"name\":\"_hashes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2209,\"src\":\"15922:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},\"id\":2218,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"15922:14:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"15918:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":2230,\"initializationExpression\":{\"assignments\":[2213],\"declarations\":[{\"constant\":false,\"id\":2213,\"name\":\"i\",\"nodeType\":\"VariableDeclaration\",\"scope\":2230,\"src\":\"15906:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2212,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15906:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2215,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2214,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"15915:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"15906:10:6\"},\"loopExpression\":{\"expression\":{\"argumentTypes\":null,\"id\":2221,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"15938:4:6\",\"subExpression\":{\"argumentTypes\":null,\"id\":2220,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2213,\"src\":\"15938:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2222,\"nodeType\":\"ExpressionStatement\",\"src\":\"15938:4:6\"},\"nodeType\":\"ForStatement\",\"src\":\"15901:93:6\"}]},\"documentation\":null,\"id\":2232,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_startAuctions\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2210,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2209,\"name\":\"_hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":2232,\"src\":\"15856:24:6\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2207,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"15856:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2208,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"15856:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"15855:26:6\"},\"returnParameters\":{\"id\":2211,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"15891:0:6\"},\"scope\":2505,\"src\":\"15832:168:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2289,\"nodeType\":\"Block\",\"src\":\"16051:357:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2249,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2239,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"16077:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":2242,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2240,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16088:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2241,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16088:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16077:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":2244,\"indexExpression\":{\"argumentTypes\":null,\"id\":2243,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2234,\"src\":\"16100:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16077:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}],\"id\":2238,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16069:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2245,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16069:42:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2247,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16123:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2246,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16115:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2248,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16115:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"16069:58:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":2237,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"16061:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":2250,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16061:67:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2251,\"nodeType\":\"ExpressionStatement\",\"src\":\"16061:67:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2256,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2253,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16146:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2254,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16146:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2255,\"name\":\"minPrice\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"16159:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"16146:21:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":2252,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"16138:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":2257,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16138:30:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2258,\"nodeType\":\"ExpressionStatement\",\"src\":\"16138:30:6\"},{\"assignments\":[2260],\"declarations\":[{\"constant\":false,\"id\":2260,\"name\":\"bid\",\"nodeType\":\"VariableDeclaration\",\"scope\":2289,\"src\":\"16233:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":2259,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"16233:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2271,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2268,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16286:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2269,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16286:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2265,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16275:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2266,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16275:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"id\":2262,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"NewExpression\",\"src\":\"16245:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_creation_payable$_t_address_payable_$returns$_t_contract$_DeedImplementation_$299_$\",\"typeString\":\"function (address payable) payable returns (contract DeedImplementation)\"},\"typeName\":{\"contractScope\":null,\"id\":2261,\"name\":\"DeedImplementation\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":299,\"src\":\"16249:18:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}}}],\"id\":2263,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"16244:24:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_creation_payable$_t_address_payable_$returns$_t_contract$_DeedImplementation_$299_$\",\"typeString\":\"function (address payable) payable returns (contract DeedImplementation)\"}},\"id\":2264,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16244:30:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_setvalue_nonpayable$_t_uint256_$returns$_t_function_creation_payable$_t_address_payable_$returns$_t_contract$_DeedImplementation_$299_$value_$\",\"typeString\":\"function (uint256) returns (function (address payable) payable returns (contract DeedImplementation))\"}},\"id\":2267,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16244:41:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_creation_payable$_t_address_payable_$returns$_t_contract$_DeedImplementation_$299_$value\",\"typeString\":\"function (address payable) payable returns (contract DeedImplementation)\"}},\"id\":2270,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16244:53:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DeedImplementation_$299\",\"typeString\":\"contract DeedImplementation\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"16233:64:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2279,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2272,\"name\":\"sealedBids\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"16307:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$_$\",\"typeString\":\"mapping(address => mapping(bytes32 => contract Deed))\"}},\"id\":2276,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2273,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16318:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2274,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16318:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16307:22:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_contract$_Deed_$47_$\",\"typeString\":\"mapping(bytes32 => contract Deed)\"}},\"id\":2277,\"indexExpression\":{\"argumentTypes\":null,\"id\":2275,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2234,\"src\":\"16330:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"16307:33:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2278,\"name\":\"bid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2260,\"src\":\"16343:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"src\":\"16307:39:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"id\":2280,\"nodeType\":\"ExpressionStatement\",\"src\":\"16307:39:6\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2282,\"name\":\"sealedBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2234,\"src\":\"16368:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2283,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16379:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2284,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16379:10:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2285,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"16391:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2286,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"value\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16391:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":2281,\"name\":\"NewBid\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2586,\"src\":\"16361:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_uint256_$returns$__$\",\"typeString\":\"function (bytes32,address,uint256)\"}},\"id\":2287,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16361:40:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2288,\"nodeType\":\"EmitStatement\",\"src\":\"16356:45:6\"}]},\"documentation\":null,\"id\":2290,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_newBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2235,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2234,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":2290,\"src\":\"16023:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2233,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"16023:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"16022:19:6\"},\"returnParameters\":{\"id\":2236,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"16051:0:6\"},\"scope\":2505,\"src\":\"16006:402:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2355,\"nodeType\":\"Block\",\"src\":\"16501:441:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2303,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16569:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2304,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2295,\"src\":\"16575:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},\"id\":2306,\"indexExpression\":{\"argumentTypes\":null,\"id\":2305,\"name\":\"idx\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2292,\"src\":\"16582:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16575:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2308,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"16596:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":2307,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16588:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2309,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16588:13:6\",\"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\":2300,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"16549:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2302,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"16549:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2310,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16549:53:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2311,\"nodeType\":\"ExpressionStatement\",\"src\":\"16549:53:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2322,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2312,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16612:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2316,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16646:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2317,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2295,\"src\":\"16652:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},\"id\":2319,\"indexExpression\":{\"argumentTypes\":null,\"id\":2318,\"name\":\"idx\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2292,\"src\":\"16659:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"16652:11:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2314,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"16629:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2315,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"16629:16:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2320,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16629:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2313,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"16619:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2321,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16619:46:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"16612:53:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2323,\"nodeType\":\"ExpressionStatement\",\"src\":\"16612:53:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2326,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2324,\"name\":\"idx\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2292,\"src\":\"16724:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2325,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16730:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"16724:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2336,\"nodeType\":\"IfStatement\",\"src\":\"16720:80:6\",\"trueBody\":{\"id\":2335,\"nodeType\":\"Block\",\"src\":\"16733:67:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2330,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2328,\"name\":\"idx\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2292,\"src\":\"16767:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":2329,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16773:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"},\"src\":\"16767:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":2331,\"name\":\"labels\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2295,\"src\":\"16776:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"}},{\"argumentTypes\":null,\"id\":2332,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16784:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[] memory\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":2327,\"name\":\"_eraseNodeHierarchy\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2356,\"src\":\"16747:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_uint256_$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_bytes32_$returns$__$\",\"typeString\":\"function (uint256,bytes32[] memory,bytes32)\"}},\"id\":2333,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16747:42:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2334,\"nodeType\":\"ExpressionStatement\",\"src\":\"16747:42:6\"}]}},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2340,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16874:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2342,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16888:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2341,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16880:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2343,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16880:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2337,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"16858:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2339,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setResolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":377,\"src\":\"16858:15:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2344,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16858:35:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2345,\"nodeType\":\"ExpressionStatement\",\"src\":\"16858:35:6\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2349,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2297,\"src\":\"16916:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2351,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"16930:3:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2350,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"16922:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2352,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16922:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2346,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"16903:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2348,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":384,\"src\":\"16903:12:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2353,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"16903:32:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2354,\"nodeType\":\"ExpressionStatement\",\"src\":\"16903:32:6\"}]},\"documentation\":null,\"id\":2356,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"_eraseNodeHierarchy\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2298,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2292,\"name\":\"idx\",\"nodeType\":\"VariableDeclaration\",\"scope\":2356,\"src\":\"16443:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2291,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"16443:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2295,\"name\":\"labels\",\"nodeType\":\"VariableDeclaration\",\"scope\":2356,\"src\":\"16453:23:6\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_memory_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2293,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"16453:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2294,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"16453:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2297,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2356,\"src\":\"16478:12:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2296,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"16478:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"16442:49:6\"},\"returnParameters\":{\"id\":2299,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"16501:0:6\"},\"scope\":2505,\"src\":\"16414:528:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2380,\"nodeType\":\"Block\",\"src\":\"17198:118:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2370,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2365,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"17222:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2363,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"17212:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2364,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"17212:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2366,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"17212:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2368,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3059,\"src\":\"17243:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_HashRegistrar_$2505\",\"typeString\":\"contract HashRegistrar\"}],\"id\":2367,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"17235:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2369,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"17235:13:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"17212:36:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2379,\"nodeType\":\"IfStatement\",\"src\":\"17208:101:6\",\"trueBody\":{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2374,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"17282:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2375,\"name\":\"_hash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2358,\"src\":\"17292:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2376,\"name\":\"_newOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2360,\"src\":\"17299:9:6\",\"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\":2371,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1039,\"src\":\"17262:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2373,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"17262:19:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2377,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"17262:47:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2378,\"nodeType\":\"ExpressionStatement\",\"src\":\"17262:47:6\"}}]},\"documentation\":\"@dev Assign the owner in ENS, if we're still the registrar\\n     * @param _hash hash to change owner\\n@param _newOwner new owner to transfer to\",\"id\":2381,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"trySetSubnodeOwner\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2361,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2358,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2381,\"src\":\"17155:13:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2357,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17155:7:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2360,\"name\":\"_newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2381,\"src\":\"17170:17:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2359,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17170:7:6\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17154:34:6\"},\"returnParameters\":{\"id\":2362,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"17198:0:6\"},\"scope\":2505,\"src\":\"17127:189:6\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2398,\"nodeType\":\"Block\",\"src\":\"17584:83:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2392,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2390,\"name\":\"a\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2383,\"src\":\"17598:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2391,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2385,\"src\":\"17602:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"17598:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"expression\":{\"argumentTypes\":null,\"id\":2395,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2385,\"src\":\"17659:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2389,\"id\":2396,\"nodeType\":\"Return\",\"src\":\"17652:8:6\"},\"id\":2397,\"nodeType\":\"IfStatement\",\"src\":\"17594:66:6\",\"trueBody\":{\"expression\":{\"argumentTypes\":null,\"id\":2393,\"name\":\"a\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2383,\"src\":\"17624:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2389,\"id\":2394,\"nodeType\":\"Return\",\"src\":\"17617:8:6\"}}]},\"documentation\":\"@dev Returns the maximum of two unsigned integers\\n     * @param a A number to compare\\n@param b A number to compare\\n@return The maximum of two unsigned integers\",\"id\":2399,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"max\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2386,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2383,\"name\":\"a\",\"nodeType\":\"VariableDeclaration\",\"scope\":2399,\"src\":\"17539:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2382,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17539:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2385,\"name\":\"b\",\"nodeType\":\"VariableDeclaration\",\"scope\":2399,\"src\":\"17547:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2384,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17547:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17538:16:6\"},\"returnParameters\":{\"id\":2389,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2388,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2399,\"src\":\"17578:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2387,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17578:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17577:6:6\"},\"scope\":2505,\"src\":\"17526:141:6\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2416,\"nodeType\":\"Block\",\"src\":\"17935:83:6\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2410,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2408,\"name\":\"a\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2401,\"src\":\"17949:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2409,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2403,\"src\":\"17953:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"17949:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"expression\":{\"argumentTypes\":null,\"id\":2413,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2403,\"src\":\"18010:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2407,\"id\":2414,\"nodeType\":\"Return\",\"src\":\"18003:8:6\"},\"id\":2415,\"nodeType\":\"IfStatement\",\"src\":\"17945:66:6\",\"trueBody\":{\"expression\":{\"argumentTypes\":null,\"id\":2411,\"name\":\"a\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2401,\"src\":\"17975:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2407,\"id\":2412,\"nodeType\":\"Return\",\"src\":\"17968:8:6\"}}]},\"documentation\":\"@dev Returns the minimum of two unsigned integers\\n     * @param a A number to compare\\n@param b A number to compare\\n@return The minimum of two unsigned integers\",\"id\":2417,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"min\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2404,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2401,\"name\":\"a\",\"nodeType\":\"VariableDeclaration\",\"scope\":2417,\"src\":\"17890:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2400,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17890:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2403,\"name\":\"b\",\"nodeType\":\"VariableDeclaration\",\"scope\":2417,\"src\":\"17898:6:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2402,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17898:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17889:16:6\"},\"returnParameters\":{\"id\":2407,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2406,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2417,\"src\":\"17929:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2405,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"17929:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"17928:6:6\"},\"scope\":2505,\"src\":\"17877:141:6\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"internal\"},{\"body\":{\"id\":2503,\"nodeType\":\"Block\",\"src\":\"18256:779:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2424,\"name\":\"s\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2419,\"src\":\"18266:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}},\"id\":2425,\"nodeType\":\"ExpressionStatement\",\"src\":\"18266:1:6\"},{\"assignments\":[2427],\"declarations\":[{\"constant\":false,\"id\":2427,\"name\":\"ptr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2503,\"src\":\"18384:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2426,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18384:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2428,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"18384:8:6\"},{\"assignments\":[2430],\"declarations\":[{\"constant\":false,\"id\":2430,\"name\":\"end\",\"nodeType\":\"VariableDeclaration\",\"scope\":2503,\"src\":\"18402:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2429,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18402:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2431,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"18402:8:6\"},{\"externalReferences\":[{\"ptr\":{\"declaration\":2427,\"isOffset\":false,\"isSlot\":false,\"src\":\"18443:3:6\",\"valueSize\":1}},{\"end\":{\"declaration\":2430,\"isOffset\":false,\"isSlot\":false,\"src\":\"18472:3:6\",\"valueSize\":1}},{\"s\":{\"declaration\":2419,\"isOffset\":false,\"isSlot\":false,\"src\":\"18454:1:6\",\"valueSize\":1}},{\"s\":{\"declaration\":2419,\"isOffset\":false,\"isSlot\":false,\"src\":\"18489:1:6\",\"valueSize\":1}},{\"ptr\":{\"declaration\":2427,\"isOffset\":false,\"isSlot\":false,\"src\":\"18493:3:6\",\"valueSize\":1}}],\"id\":2432,\"nodeType\":\"InlineAssembly\",\"operations\":\"{\\n    ptr := add(s, 1)\\n    end := add(mload(s), ptr)\\n}\",\"src\":\"18420:100:6\"},{\"assignments\":[2434],\"declarations\":[{\"constant\":false,\"id\":2434,\"name\":\"len\",\"nodeType\":\"VariableDeclaration\",\"scope\":2503,\"src\":\"18516:8:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2433,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18516:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2436,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":2435,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18527:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"18516:12:6\"},{\"body\":{\"id\":2499,\"nodeType\":\"Block\",\"src\":\"18566:443:6\",\"statements\":[{\"assignments\":[2446],\"declarations\":[{\"constant\":false,\"id\":2446,\"name\":\"b\",\"nodeType\":\"VariableDeclaration\",\"scope\":2499,\"src\":\"18580:7:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"typeName\":{\"id\":2445,\"name\":\"uint8\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18580:5:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2447,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"18580:7:6\"},{\"externalReferences\":[{\"ptr\":{\"declaration\":2427,\"isOffset\":false,\"isSlot\":false,\"src\":\"18627:3:6\",\"valueSize\":1}},{\"b\":{\"declaration\":2446,\"isOffset\":false,\"isSlot\":false,\"src\":\"18612:1:6\",\"valueSize\":1}}],\"id\":2448,\"nodeType\":\"InlineAssembly\",\"operations\":\"{\\n    b := and(mload(ptr), 0xFF)\\n}\",\"src\":\"18601:54:6\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2451,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2449,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18657:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30783830\",\"id\":2450,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18661:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_128_by_1\",\"typeString\":\"int_const 128\"},\"value\":\"0x80\"},\"src\":\"18657:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2459,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2457,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18718:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30784530\",\"id\":2458,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18722:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_224_by_1\",\"typeString\":\"int_const 224\"},\"value\":\"0xE0\"},\"src\":\"18718:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2467,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2465,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18779:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30784630\",\"id\":2466,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18783:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_240_by_1\",\"typeString\":\"int_const 240\"},\"value\":\"0xF0\"},\"src\":\"18779:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2475,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2473,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18840:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30784638\",\"id\":2474,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18844:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_248_by_1\",\"typeString\":\"int_const 248\"},\"value\":\"0xF8\"},\"src\":\"18840:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"id\":2483,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2481,\"name\":\"b\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2446,\"src\":\"18901:1:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30784643\",\"id\":2482,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18905:4:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_252_by_1\",\"typeString\":\"int_const 252\"},\"value\":\"0xFC\"},\"src\":\"18901:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":2493,\"nodeType\":\"Block\",\"src\":\"18958:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2491,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2489,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18976:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"36\",\"id\":2490,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18983:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_6_by_1\",\"typeString\":\"int_const 6\"},\"value\":\"6\"},\"src\":\"18976:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2492,\"nodeType\":\"ExpressionStatement\",\"src\":\"18976:8:6\"}]},\"id\":2494,\"nodeType\":\"IfStatement\",\"src\":\"18897:102:6\",\"trueBody\":{\"id\":2488,\"nodeType\":\"Block\",\"src\":\"18911:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2486,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2484,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18929:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"35\",\"id\":2485,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18936:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_5_by_1\",\"typeString\":\"int_const 5\"},\"value\":\"5\"},\"src\":\"18929:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2487,\"nodeType\":\"ExpressionStatement\",\"src\":\"18929:8:6\"}]}},\"id\":2495,\"nodeType\":\"IfStatement\",\"src\":\"18836:163:6\",\"trueBody\":{\"id\":2480,\"nodeType\":\"Block\",\"src\":\"18850:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2478,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2476,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18868:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"34\",\"id\":2477,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18875:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_4_by_1\",\"typeString\":\"int_const 4\"},\"value\":\"4\"},\"src\":\"18868:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2479,\"nodeType\":\"ExpressionStatement\",\"src\":\"18868:8:6\"}]}},\"id\":2496,\"nodeType\":\"IfStatement\",\"src\":\"18775:224:6\",\"trueBody\":{\"id\":2472,\"nodeType\":\"Block\",\"src\":\"18789:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2470,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2468,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18807:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"33\",\"id\":2469,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18814:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_3_by_1\",\"typeString\":\"int_const 3\"},\"value\":\"3\"},\"src\":\"18807:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2471,\"nodeType\":\"ExpressionStatement\",\"src\":\"18807:8:6\"}]}},\"id\":2497,\"nodeType\":\"IfStatement\",\"src\":\"18714:285:6\",\"trueBody\":{\"id\":2464,\"nodeType\":\"Block\",\"src\":\"18728:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2462,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2460,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18746:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"32\",\"id\":2461,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18753:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2_by_1\",\"typeString\":\"int_const 2\"},\"value\":\"2\"},\"src\":\"18746:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2463,\"nodeType\":\"ExpressionStatement\",\"src\":\"18746:8:6\"}]}},\"id\":2498,\"nodeType\":\"IfStatement\",\"src\":\"18653:346:6\",\"trueBody\":{\"id\":2456,\"nodeType\":\"Block\",\"src\":\"18667:41:6\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2454,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2452,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18685:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"+=\",\"rightHandSide\":{\"argumentTypes\":null,\"hexValue\":\"31\",\"id\":2453,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"18692:1:6\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_1_by_1\",\"typeString\":\"int_const 1\"},\"value\":\"1\"},\"src\":\"18685:8:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2455,\"nodeType\":\"ExpressionStatement\",\"src\":\"18685:8:6\"}]}}]},\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2441,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2439,\"name\":\"ptr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2427,\"src\":\"18548:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2440,\"name\":\"end\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2430,\"src\":\"18554:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"18548:9:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":2500,\"initializationExpression\":{\"expression\":{\"argumentTypes\":null,\"id\":2437,\"name\":\"len\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2434,\"src\":\"18543:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2438,\"nodeType\":\"ExpressionStatement\",\"src\":\"18543:3:6\"},\"loopExpression\":{\"expression\":{\"argumentTypes\":null,\"id\":2443,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"18559:5:6\",\"subExpression\":{\"argumentTypes\":null,\"id\":2442,\"name\":\"len\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2434,\"src\":\"18559:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2444,\"nodeType\":\"ExpressionStatement\",\"src\":\"18559:5:6\"},\"nodeType\":\"ForStatement\",\"src\":\"18538:471:6\"},{\"expression\":{\"argumentTypes\":null,\"id\":2501,\"name\":\"len\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2434,\"src\":\"19025:3:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"functionReturnParameters\":2423,\"id\":2502,\"nodeType\":\"Return\",\"src\":\"19018:10:6\"}]},\"documentation\":\"@dev Returns the length of a given string\\n     * @param s The string to measure the length of\\n@return The length of the input string\",\"id\":2504,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"strlen\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2420,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2419,\"name\":\"s\",\"nodeType\":\"VariableDeclaration\",\"scope\":2504,\"src\":\"18210:15:6\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2418,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18210:6:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"18209:17:6\"},\"returnParameters\":{\"id\":2423,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2422,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2504,\"src\":\"18250:4:6\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2421,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"18250:4:6\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"18249:6:6\"},\"scope\":2505,\"src\":\"18194:841:6\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"internal\"}],\"scope\":2506,\"src\":\"586:18452:6\"}],\"src\":\"0:19039:6\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.084Z\",\"devdoc\":{\"details\":\"The registrar handles the auction process for each subnode of the node it owns.\",\"methods\":{\"acceptRegistrarTransfer(bytes32,address,uint256)\":{\"details\":\"Accepts a transfer from a previous registrar; stubbed out here since there     is no previous registrar implementing this interface.\",\"params\":{\"deed\":\"The Deed object for the name being transferred in.\",\"hash\":\"The sha3 hash of the label to transfer.\",\"registrationDate\":\"The date at which the name was originally registered.\"}},\"cancelBid(address,bytes32)\":{\"details\":\"Cancel a bid\",\"params\":{\"seal\":\"The value returned by the shaBid function\"}},\"constructor\":{\"details\":\"Constructs a new Registrar, with the provided address as the owner of the root node.\",\"params\":{\"_ens\":\"The address of the ENS\",\"_rootNode\":\"The hash of the rootnode.\"}},\"eraseNode(bytes32[])\":{\"details\":\"Allows anyone to delete the owner and resolver records for a (subdomain of) a     name that is not currently owned in the registrar. If passing, eg, 'foo.bar.eth',     the owner and resolver fields on 'foo.bar.eth' and 'bar.eth' will all be cleared.\",\"params\":{\"labels\":\"A series of label hashes identifying the name to zero out, rooted at the       registrar's root. Must contain at least one element. For instance, to zero        'foo.bar.eth' on a registrar that owns '.eth', pass an array containing       [keccak256('foo'), keccak256('bar')].\"}},\"finalizeAuction(bytes32)\":{\"details\":\"Finalize an auction after the registration date has passed\",\"params\":{\"_hash\":\"The hash of the name the auction is for\"}},\"getAllowedTime(bytes32)\":{\"details\":\"Returns available date for hash     * The available time from the `registryStarted` for a hash is proportional to its numeric value.\",\"params\":{\"_hash\":\"The hash to start an auction on\"}},\"invalidateName(string)\":{\"details\":\"Submit a name 6 characters long or less. If it has been registered,     the submitter will earn 50% of the deed value.       * We are purposefully handicapping the simplified registrar as a way  to force it into being restructured in a few years.\",\"params\":{\"unhashedName\":\"An invalid name to search for in the registry.\"}},\"isAllowed(bytes32,uint256)\":{\"details\":\"Determines if a name is available for registration yet     * Each name will be assigned a random date in which its auction can be started, from 0 to 8 weeks\",\"params\":{\"_hash\":\"The hash to start an auction on\",\"_timestamp\":\"The timestamp to query about\"}},\"newBid(bytes32)\":{\"details\":\"Submit a new sealed bid on a desired hash in a blind auction     * Bids are sent by sending a message to the main contract with a hash and an amount. The hash contains information about the bid, including the bidded hash, the bid amount, and a random salt. Bids are not tied to any one auction until they are revealed. The value of the bid itself can be masqueraded by sending more than the value of your actual bid. This is followed by a 48h reveal period. Bids revealed after this period will be burned and the ether unrecoverable. Since this is an auction, it is expected that most public hashes, like known domains and common dictionary words, will have multiple bidders pushing the price up.\",\"params\":{\"sealedBid\":\"A sealedBid, created by the shaBid function\"}},\"releaseDeed(bytes32)\":{\"details\":\"After some time, or if we're no longer the registrar, the owner can release     the name and get their ether back.\",\"params\":{\"_hash\":\"The node to release\"}},\"shaBid(bytes32,address,uint256,bytes32)\":{\"details\":\"Hash the values required for a secret bid\",\"params\":{\"hash\":\"The node corresponding to the desired namehash\",\"salt\":\"A random value to ensure secrecy of the bid\",\"value\":\"The bid amount\"},\"return\":\"The hash of the bid values\"},\"startAuction(bytes32)\":{\"details\":\"Start an auction for an available hash\",\"params\":{\"_hash\":\"The hash to start an auction on\"}},\"startAuctions(bytes32[])\":{\"details\":\"Start multiple auctions for better anonymity     * Anyone can start an auction by sending an array of hashes that they want to bid for. Arrays are sent so that someone can open up an auction for X dummy hashes when they are only really interested in bidding for one. This will increase the cost for an attacker to simply bid blindly on all new auctions. Dummy auctions that are open but not bid on are closed after a week.\",\"params\":{\"_hashes\":\"An array of hashes, at least one of which you presumably want to bid on\"}},\"startAuctionsAndBid(bytes32[],bytes32)\":{\"details\":\"Start a set of auctions and bid on one of them     * This method functions identically to calling `startAuctions` followed by `newBid`, but all in one transaction.\",\"params\":{\"hashes\":\"A list of hashes to start auctions on.\",\"sealedBid\":\"A sealed bid for one of the auctions.\"}},\"transfer(bytes32,address)\":{\"details\":\"The owner of a domain may transfer it to someone else at any time.\",\"params\":{\"_hash\":\"The node to transfer\",\"newOwner\":\"The address to transfer ownership to\"}},\"transferRegistrars(bytes32)\":{\"details\":\"Transfers the deed to the current registrar, if different from this one.     * Used during the upgrade process to a permanent registrar.\",\"params\":{\"_hash\":\"The name hash to transfer.\"}},\"unsealBid(bytes32,uint256,bytes32)\":{\"details\":\"Submit the properties of a bid to reveal them\",\"params\":{\"_hash\":\"The node in the sealedBid\",\"_salt\":\"The sale in the sealedBid\",\"_value\":\"The bid amount in the sealedBid\"}}},\"title\":\"Registrar\"},\"userdoc\":{\"methods\":{}}}");

/***/ }),

/***/ 513641:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"Migrations\",\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"last_completed_migration\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":false,\"inputs\":[{\"name\":\"completed\",\"type\":\"uint256\"}],\"name\":\"setCompleted\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"new_address\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.0+commit.1d4f565a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"new_address\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"upgrade\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"last_completed_migration\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"completed\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"setCompleted\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{},\\\"notice\\\":\\\"Truffle migration helper contract\\\"}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/Migrations.sol\\\":\\\"Migrations\\\"},\\\"evmVersion\\\":\\\"byzantium\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/Migrations.sol\\\":{\\\"keccak256\\\":\\\"0xa54feb67dc353bfc4e74918a3b3d9a1055df356fffb1678e7b44fbf9bec20e98\\\",\\\"urls\\\":[\\\"bzzr://6ebe65ffdc2ad263d3c9f49dbcbb5e63cd9c43e2afeb2cd64eb1577ca436e733\\\"]}},\\\"version\\\":1}\",\"bytecode\":\"0x608060405234801561001057600080fd5b50336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610314806100606000396000f3fe608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100b85780638da5cb5b146100e3578063fdacd5761461013a575b600080fd5b34801561007357600080fd5b506100b66004803603602081101561008a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610175565b005b3480156100c457600080fd5b506100cd61025d565b6040518082815260200191505060405180910390f35b3480156100ef57600080fd5b506100f8610263565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014657600080fd5b506101736004803603602081101561015d57600080fd5b8101908080359060200190929190505050610288565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025a5760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561024057600080fd5b505af1158015610254573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102e557806001819055505b5056fea165627a7a723058205545807fa850656f02bb600aa35466c14d35c32cc235bb5064c667b0cd2631550029\",\"deployedBytecode\":\"0x608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630900f01014610067578063445df0ac146100b85780638da5cb5b146100e3578063fdacd5761461013a575b600080fd5b34801561007357600080fd5b506100b66004803603602081101561008a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610175565b005b3480156100c457600080fd5b506100cd61025d565b6040518082815260200191505060405180910390f35b3480156100ef57600080fd5b506100f8610263565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561014657600080fd5b506101736004803603602081101561015d57600080fd5b8101908080359060200190929190505050610288565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561025a5760008190508073ffffffffffffffffffffffffffffffffffffffff1663fdacd5766001546040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561024057600080fd5b505af1158015610254573d6000803e3d6000fd5b50505050505b50565b60015481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156102e557806001819055505b5056fea165627a7a723058205545807fa850656f02bb600aa35466c14d35c32cc235bb5064c667b0cd2631550029\",\"sourceMap\":\"72:480:7:-;;;224:50;8:9:-1;5:2;;;30:1;27;20:12;5:2;224:50:7;259:10;251:5;;:18;;;;;;;;;;;;;;;;;;72:480;;;;;;\",\"deployedSourceMap\":\"72:480:7:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;385:165;;8:9:-1;5:2;;;30:1;27;20:12;5:2;385:165:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;385:165:7;;;;;;;;;;;;;;;;;;;;;;120:36;;8:9:-1;5:2;;;30:1;27;20:12;5:2;120:36:7;;;;;;;;;;;;;;;;;;;;;;;96:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;96:20:7;;;;;;;;;;;;;;;;;;;;;;;;;;;278:103;;8:9:-1;5:2;;;30:1;27;20:12;5:2;278:103:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;278:103:7;;;;;;;;;;;;;;;;;;;;385:165;207:5;;;;;;;;;;;193:19;;:10;:19;;;189:26;;;447:19;480:11;447:45;;498:8;:21;;;520:24;;498:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;498:47:7;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;498:47:7;;;;214:1;189:26;385:165;:::o;120:36::-;;;;:::o;96:20::-;;;;;;;;;;;;;:::o;278:103::-;207:5;;;;;;;;;;;193:19;;:10;:19;;;189:26;;;367:9;340:24;:36;;;;189:26;278:103;:::o\",\"source\":\"pragma solidity >=0.4.24;\\n\\n/**\\n * Truffle migration helper contract\\n */\\ncontract Migrations {\\n  address public owner;\\n  uint public last_completed_migration;\\n\\n  modifier restricted() {\\n    if (msg.sender == owner) _;\\n  }\\n\\n  constructor() public {\\n    owner = msg.sender;\\n  }\\n\\n  function setCompleted(uint completed) public restricted {\\n    last_completed_migration = completed;\\n  }\\n\\n  function upgrade(address new_address) public restricted {\\n    Migrations upgraded = Migrations(new_address);\\n    upgraded.setCompleted(last_completed_migration);\\n  }\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Migrations.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Migrations.sol\",\"exportedSymbols\":{\"Migrations\":[2562]},\"id\":2563,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2507,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:7\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":\"Truffle migration helper contract\",\"fullyImplemented\":true,\"id\":2562,\"linearizedBaseContracts\":[2562],\"name\":\"Migrations\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":false,\"id\":2509,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2562,\"src\":\"96:20:7\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2508,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"96:7:7\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2511,\"name\":\"last_completed_migration\",\"nodeType\":\"VariableDeclaration\",\"scope\":2562,\"src\":\"120:36:7\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2510,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"120:4:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2519,\"nodeType\":\"Block\",\"src\":\"183:37:7\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2516,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2513,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"193:3:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2514,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"193:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2515,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2509,\"src\":\"207:5:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"193:19:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2518,\"nodeType\":\"IfStatement\",\"src\":\"189:26:7\",\"trueBody\":{\"id\":2517,\"nodeType\":\"PlaceholderStatement\",\"src\":\"214:1:7\"}}]},\"documentation\":null,\"id\":2520,\"name\":\"restricted\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":2512,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"180:2:7\"},\"src\":\"161:59:7\",\"visibility\":\"internal\"},{\"body\":{\"id\":2528,\"nodeType\":\"Block\",\"src\":\"245:29:7\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2526,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2523,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2509,\"src\":\"251:5:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2524,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"259:3:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2525,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"259:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"251:18:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2527,\"nodeType\":\"ExpressionStatement\",\"src\":\"251:18:7\"}]},\"documentation\":null,\"id\":2529,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2521,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"235:2:7\"},\"returnParameters\":{\"id\":2522,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"245:0:7\"},\"scope\":2562,\"src\":\"224:50:7\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2540,\"nodeType\":\"Block\",\"src\":\"334:47:7\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2538,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2536,\"name\":\"last_completed_migration\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2511,\"src\":\"340:24:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2537,\"name\":\"completed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2531,\"src\":\"367:9:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"340:36:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2539,\"nodeType\":\"ExpressionStatement\",\"src\":\"340:36:7\"}]},\"documentation\":null,\"id\":2541,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":2534,\"modifierName\":{\"argumentTypes\":null,\"id\":2533,\"name\":\"restricted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2520,\"src\":\"323:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"323:10:7\"}],\"name\":\"setCompleted\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2532,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2531,\"name\":\"completed\",\"nodeType\":\"VariableDeclaration\",\"scope\":2541,\"src\":\"300:14:7\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2530,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"300:4:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"299:16:7\"},\"returnParameters\":{\"id\":2535,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"334:0:7\"},\"scope\":2562,\"src\":\"278:103:7\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2560,\"nodeType\":\"Block\",\"src\":\"441:109:7\",\"statements\":[{\"assignments\":[2549],\"declarations\":[{\"constant\":false,\"id\":2549,\"name\":\"upgraded\",\"nodeType\":\"VariableDeclaration\",\"scope\":2560,\"src\":\"447:19:7\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Migrations_$2562\",\"typeString\":\"contract Migrations\"},\"typeName\":{\"contractScope\":null,\"id\":2548,\"name\":\"Migrations\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2562,\"src\":\"447:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Migrations_$2562\",\"typeString\":\"contract Migrations\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2553,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2551,\"name\":\"new_address\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2543,\"src\":\"480:11:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2550,\"name\":\"Migrations\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2562,\"src\":\"469:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Migrations_$2562_$\",\"typeString\":\"type(contract Migrations)\"}},\"id\":2552,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"469:23:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Migrations_$2562\",\"typeString\":\"contract Migrations\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"447:45:7\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2557,\"name\":\"last_completed_migration\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2511,\"src\":\"520:24:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":2554,\"name\":\"upgraded\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2549,\"src\":\"498:8:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Migrations_$2562\",\"typeString\":\"contract Migrations\"}},\"id\":2556,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setCompleted\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2541,\"src\":\"498:21:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":2558,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"498:47:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2559,\"nodeType\":\"ExpressionStatement\",\"src\":\"498:47:7\"}]},\"documentation\":null,\"id\":2561,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":2546,\"modifierName\":{\"argumentTypes\":null,\"id\":2545,\"name\":\"restricted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2520,\"src\":\"430:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"430:10:7\"}],\"name\":\"upgrade\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2544,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2543,\"name\":\"new_address\",\"nodeType\":\"VariableDeclaration\",\"scope\":2561,\"src\":\"402:19:7\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2542,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"402:7:7\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"401:21:7\"},\"returnParameters\":{\"id\":2547,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"441:0:7\"},\"scope\":2562,\"src\":\"385:165:7\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":2563,\"src\":\"72:480:7\"}],\"src\":\"0:553:7\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Migrations.sol\",\"exportedSymbols\":{\"Migrations\":[2562]},\"id\":2563,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2507,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:7\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":\"Truffle migration helper contract\",\"fullyImplemented\":true,\"id\":2562,\"linearizedBaseContracts\":[2562],\"name\":\"Migrations\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":false,\"id\":2509,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2562,\"src\":\"96:20:7\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2508,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"96:7:7\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2511,\"name\":\"last_completed_migration\",\"nodeType\":\"VariableDeclaration\",\"scope\":2562,\"src\":\"120:36:7\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2510,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"120:4:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2519,\"nodeType\":\"Block\",\"src\":\"183:37:7\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2516,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2513,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"193:3:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2514,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"193:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2515,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2509,\"src\":\"207:5:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"193:19:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2518,\"nodeType\":\"IfStatement\",\"src\":\"189:26:7\",\"trueBody\":{\"id\":2517,\"nodeType\":\"PlaceholderStatement\",\"src\":\"214:1:7\"}}]},\"documentation\":null,\"id\":2520,\"name\":\"restricted\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":2512,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"180:2:7\"},\"src\":\"161:59:7\",\"visibility\":\"internal\"},{\"body\":{\"id\":2528,\"nodeType\":\"Block\",\"src\":\"245:29:7\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2526,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2523,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2509,\"src\":\"251:5:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2524,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"259:3:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2525,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"259:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"251:18:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2527,\"nodeType\":\"ExpressionStatement\",\"src\":\"251:18:7\"}]},\"documentation\":null,\"id\":2529,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2521,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"235:2:7\"},\"returnParameters\":{\"id\":2522,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"245:0:7\"},\"scope\":2562,\"src\":\"224:50:7\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2540,\"nodeType\":\"Block\",\"src\":\"334:47:7\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2538,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2536,\"name\":\"last_completed_migration\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2511,\"src\":\"340:24:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2537,\"name\":\"completed\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2531,\"src\":\"367:9:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"340:36:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":2539,\"nodeType\":\"ExpressionStatement\",\"src\":\"340:36:7\"}]},\"documentation\":null,\"id\":2541,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":2534,\"modifierName\":{\"argumentTypes\":null,\"id\":2533,\"name\":\"restricted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2520,\"src\":\"323:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"323:10:7\"}],\"name\":\"setCompleted\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2532,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2531,\"name\":\"completed\",\"nodeType\":\"VariableDeclaration\",\"scope\":2541,\"src\":\"300:14:7\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2530,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"300:4:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"299:16:7\"},\"returnParameters\":{\"id\":2535,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"334:0:7\"},\"scope\":2562,\"src\":\"278:103:7\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2560,\"nodeType\":\"Block\",\"src\":\"441:109:7\",\"statements\":[{\"assignments\":[2549],\"declarations\":[{\"constant\":false,\"id\":2549,\"name\":\"upgraded\",\"nodeType\":\"VariableDeclaration\",\"scope\":2560,\"src\":\"447:19:7\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Migrations_$2562\",\"typeString\":\"contract Migrations\"},\"typeName\":{\"contractScope\":null,\"id\":2548,\"name\":\"Migrations\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2562,\"src\":\"447:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Migrations_$2562\",\"typeString\":\"contract Migrations\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2553,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2551,\"name\":\"new_address\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2543,\"src\":\"480:11:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2550,\"name\":\"Migrations\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2562,\"src\":\"469:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_Migrations_$2562_$\",\"typeString\":\"type(contract Migrations)\"}},\"id\":2552,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"469:23:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Migrations_$2562\",\"typeString\":\"contract Migrations\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"447:45:7\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2557,\"name\":\"last_completed_migration\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2511,\"src\":\"520:24:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":2554,\"name\":\"upgraded\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2549,\"src\":\"498:8:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Migrations_$2562\",\"typeString\":\"contract Migrations\"}},\"id\":2556,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setCompleted\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2541,\"src\":\"498:21:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_uint256_$returns$__$\",\"typeString\":\"function (uint256) external\"}},\"id\":2558,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"498:47:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2559,\"nodeType\":\"ExpressionStatement\",\"src\":\"498:47:7\"}]},\"documentation\":null,\"id\":2561,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":null,\"id\":2546,\"modifierName\":{\"argumentTypes\":null,\"id\":2545,\"name\":\"restricted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2520,\"src\":\"430:10:7\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$__$\",\"typeString\":\"modifier ()\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"430:10:7\"}],\"name\":\"upgrade\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2544,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2543,\"name\":\"new_address\",\"nodeType\":\"VariableDeclaration\",\"scope\":2561,\"src\":\"402:19:7\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2542,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"402:7:7\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"401:21:7\"},\"returnParameters\":{\"id\":2547,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"441:0:7\"},\"scope\":2562,\"src\":\"385:165:7\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":2563,\"src\":\"72:480:7\"}],\"src\":\"0:553:7\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.100Z\",\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"Truffle migration helper contract\"}}");

/***/ }),

/***/ 752370:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"Registrar\",\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"AuctionStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"bidder\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"deposit\",\"type\":\"uint256\"}],\"name\":\"NewBid\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"BidRevealed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"HashRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"HashReleased\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"hash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"HashInvalidated\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"state\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"startAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hashes\",\"type\":\"bytes32[]\"}],\"name\":\"startAuctions\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"sealedBid\",\"type\":\"bytes32\"}],\"name\":\"newBid\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"hashes\",\"type\":\"bytes32[]\"},{\"name\":\"sealedBid\",\"type\":\"bytes32\"}],\"name\":\"startAuctionsAndBid\",\"outputs\":[],\"payable\":true,\"stateMutability\":\"payable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"_value\",\"type\":\"uint256\"},{\"name\":\"_salt\",\"type\":\"bytes32\"}],\"name\":\"unsealBid\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"bidder\",\"type\":\"address\"},{\"name\":\"seal\",\"type\":\"bytes32\"}],\"name\":\"cancelBid\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"finalizeAuction\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"},{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"releaseDeed\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"unhashedName\",\"type\":\"string\"}],\"name\":\"invalidateName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"labels\",\"type\":\"bytes32[]\"}],\"name\":\"eraseNode\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"transferRegistrars\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"hash\",\"type\":\"bytes32\"},{\"name\":\"deed\",\"type\":\"address\"},{\"name\":\"registrationDate\",\"type\":\"uint256\"}],\"name\":\"acceptRegistrarTransfer\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_hash\",\"type\":\"bytes32\"}],\"name\":\"entries\",\"outputs\":[{\"name\":\"\",\"type\":\"uint8\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"}],\"metadata\":\"\",\"bytecode\":\"0x\",\"deployedBytecode\":\"0x\",\"sourceMap\":\"\",\"deployedSourceMap\":\"\",\"source\":\"pragma solidity >=0.4.24;\\n\\nimport \\\"./Deed.sol\\\";\\n\\ninterface Registrar {\\n\\n    enum Mode { Open, Auction, Owned, Forbidden, Reveal, NotYetAvailable }\\n\\n    event AuctionStarted(bytes32 indexed hash, uint registrationDate);\\n    event NewBid(bytes32 indexed hash, address indexed bidder, uint deposit);\\n    event BidRevealed(bytes32 indexed hash, address indexed owner, uint value, uint8 status);\\n    event HashRegistered(bytes32 indexed hash, address indexed owner, uint value, uint registrationDate);\\n    event HashReleased(bytes32 indexed hash, uint value);\\n    event HashInvalidated(bytes32 indexed hash, string indexed name, uint value, uint registrationDate);\\n\\n    function state(bytes32 _hash) external view returns (Mode);\\n    function startAuction(bytes32 _hash) external;\\n    function startAuctions(bytes32[] calldata _hashes) external;\\n    function newBid(bytes32 sealedBid) external payable;\\n    function startAuctionsAndBid(bytes32[] calldata hashes, bytes32 sealedBid) external payable;\\n    function unsealBid(bytes32 _hash, uint _value, bytes32 _salt) external;\\n    function cancelBid(address bidder, bytes32 seal) external;\\n    function finalizeAuction(bytes32 _hash) external;\\n    function transfer(bytes32 _hash, address payable newOwner) external;\\n    function releaseDeed(bytes32 _hash) external;\\n    function invalidateName(string calldata unhashedName) external;\\n    function eraseNode(bytes32[] calldata labels) external;\\n    function transferRegistrars(bytes32 _hash) external;\\n    function acceptRegistrarTransfer(bytes32 hash, Deed deed, uint registrationDate) external;\\n    function entries(bytes32 _hash) external view returns (Mode, address, uint, uint, uint);\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Registrar.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Registrar.sol\",\"exportedSymbols\":{\"Registrar\":[2727]},\"id\":2728,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2564,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:8\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\",\"file\":\"./Deed.sol\",\"id\":2565,\"nodeType\":\"ImportDirective\",\"scope\":2728,\"sourceUnit\":48,\"src\":\"27:20:8\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"interface\",\"documentation\":null,\"fullyImplemented\":false,\"id\":2727,\"linearizedBaseContracts\":[2727],\"name\":\"Registrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"canonicalName\":\"Registrar.Mode\",\"id\":2572,\"members\":[{\"id\":2566,\"name\":\"Open\",\"nodeType\":\"EnumValue\",\"src\":\"88:4:8\"},{\"id\":2567,\"name\":\"Auction\",\"nodeType\":\"EnumValue\",\"src\":\"94:7:8\"},{\"id\":2568,\"name\":\"Owned\",\"nodeType\":\"EnumValue\",\"src\":\"103:5:8\"},{\"id\":2569,\"name\":\"Forbidden\",\"nodeType\":\"EnumValue\",\"src\":\"110:9:8\"},{\"id\":2570,\"name\":\"Reveal\",\"nodeType\":\"EnumValue\",\"src\":\"121:6:8\"},{\"id\":2571,\"name\":\"NotYetAvailable\",\"nodeType\":\"EnumValue\",\"src\":\"129:15:8\"}],\"name\":\"Mode\",\"nodeType\":\"EnumDefinition\",\"src\":\"76:70:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2578,\"name\":\"AuctionStarted\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2577,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2574,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2578,\"src\":\"173:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2573,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"173:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2576,\"indexed\":false,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":2578,\"src\":\"195:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2575,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"195:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"172:45:8\"},\"src\":\"152:66:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2586,\"name\":\"NewBid\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2585,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2580,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2586,\"src\":\"236:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2579,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"236:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2582,\"indexed\":true,\"name\":\"bidder\",\"nodeType\":\"VariableDeclaration\",\"scope\":2586,\"src\":\"258:22:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2581,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"258:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2584,\"indexed\":false,\"name\":\"deposit\",\"nodeType\":\"VariableDeclaration\",\"scope\":2586,\"src\":\"282:12:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2583,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"282:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"235:60:8\"},\"src\":\"223:73:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2596,\"name\":\"BidRevealed\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2595,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2588,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2596,\"src\":\"319:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2587,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"319:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2590,\"indexed\":true,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2596,\"src\":\"341:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2589,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"341:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2592,\"indexed\":false,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2596,\"src\":\"364:10:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2591,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"364:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2594,\"indexed\":false,\"name\":\"status\",\"nodeType\":\"VariableDeclaration\",\"scope\":2596,\"src\":\"376:12:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"typeName\":{\"id\":2593,\"name\":\"uint8\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"376:5:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"318:71:8\"},\"src\":\"301:89:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2606,\"name\":\"HashRegistered\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2605,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2598,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2606,\"src\":\"416:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2597,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"416:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2600,\"indexed\":true,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2606,\"src\":\"438:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2599,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"438:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2602,\"indexed\":false,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2606,\"src\":\"461:10:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2601,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"461:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2604,\"indexed\":false,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":2606,\"src\":\"473:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2603,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"473:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"415:80:8\"},\"src\":\"395:101:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2612,\"name\":\"HashReleased\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2611,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2608,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2612,\"src\":\"520:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2607,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"520:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2610,\"indexed\":false,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2612,\"src\":\"542:10:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2609,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"542:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"519:34:8\"},\"src\":\"501:53:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2622,\"name\":\"HashInvalidated\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2621,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2614,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2622,\"src\":\"581:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2613,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"581:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2616,\"indexed\":true,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2622,\"src\":\"603:19:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2615,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"603:6:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2618,\"indexed\":false,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2622,\"src\":\"624:10:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2617,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"624:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2620,\"indexed\":false,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":2622,\"src\":\"636:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2619,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"636:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"580:78:8\"},\"src\":\"559:100:8\"},{\"body\":null,\"documentation\":null,\"id\":2629,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"state\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2625,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2624,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2629,\"src\":\"680:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2623,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"680:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"679:15:8\"},\"returnParameters\":{\"id\":2628,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2627,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2629,\"src\":\"718:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":2626,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"718:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"717:6:8\"},\"scope\":2727,\"src\":\"665:59:8\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2634,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2632,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2631,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2634,\"src\":\"751:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2630,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"751:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"750:15:8\"},\"returnParameters\":{\"id\":2633,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"774:0:8\"},\"scope\":2727,\"src\":\"729:46:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2640,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuctions\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2638,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2637,\"name\":\"_hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":2640,\"src\":\"803:26:8\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2635,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"803:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2636,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"803:9:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"802:28:8\"},\"returnParameters\":{\"id\":2639,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"839:0:8\"},\"scope\":2727,\"src\":\"780:60:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2645,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"newBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2643,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2642,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":2645,\"src\":\"861:17:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2641,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"861:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"860:19:8\"},\"returnParameters\":{\"id\":2644,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"896:0:8\"},\"scope\":2727,\"src\":\"845:52:8\",\"stateMutability\":\"payable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2653,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuctionsAndBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2651,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2648,\"name\":\"hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":2653,\"src\":\"931:25:8\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2646,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"931:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2647,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"931:9:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2650,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":2653,\"src\":\"958:17:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2649,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"958:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"930:46:8\"},\"returnParameters\":{\"id\":2652,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"993:0:8\"},\"scope\":2727,\"src\":\"902:92:8\",\"stateMutability\":\"payable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2662,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"unsealBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2660,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2655,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2662,\"src\":\"1018:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2654,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1018:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2657,\"name\":\"_value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2662,\"src\":\"1033:11:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2656,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1033:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2659,\"name\":\"_salt\",\"nodeType\":\"VariableDeclaration\",\"scope\":2662,\"src\":\"1046:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2658,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1046:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1017:43:8\"},\"returnParameters\":{\"id\":2661,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1069:0:8\"},\"scope\":2727,\"src\":\"999:71:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2669,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"cancelBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2667,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2664,\"name\":\"bidder\",\"nodeType\":\"VariableDeclaration\",\"scope\":2669,\"src\":\"1094:14:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2663,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1094:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2666,\"name\":\"seal\",\"nodeType\":\"VariableDeclaration\",\"scope\":2669,\"src\":\"1110:12:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2665,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1110:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1093:30:8\"},\"returnParameters\":{\"id\":2668,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1132:0:8\"},\"scope\":2727,\"src\":\"1075:58:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2674,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"finalizeAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2672,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2671,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2674,\"src\":\"1163:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2670,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1163:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1162:15:8\"},\"returnParameters\":{\"id\":2673,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1186:0:8\"},\"scope\":2727,\"src\":\"1138:49:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2681,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"transfer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2679,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2676,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2681,\"src\":\"1210:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2675,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1210:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2678,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2681,\"src\":\"1225:24:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":2677,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1225:15:8\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1209:41:8\"},\"returnParameters\":{\"id\":2680,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1259:0:8\"},\"scope\":2727,\"src\":\"1192:68:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2686,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"releaseDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2684,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2683,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2686,\"src\":\"1286:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2682,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1286:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1285:15:8\"},\"returnParameters\":{\"id\":2685,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1309:0:8\"},\"scope\":2727,\"src\":\"1265:45:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2691,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"invalidateName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2689,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2688,\"name\":\"unhashedName\",\"nodeType\":\"VariableDeclaration\",\"scope\":2691,\"src\":\"1339:28:8\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2687,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1339:6:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1338:30:8\"},\"returnParameters\":{\"id\":2690,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1377:0:8\"},\"scope\":2727,\"src\":\"1315:63:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2697,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"eraseNode\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2695,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2694,\"name\":\"labels\",\"nodeType\":\"VariableDeclaration\",\"scope\":2697,\"src\":\"1402:25:8\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2692,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1402:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2693,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"1402:9:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1401:27:8\"},\"returnParameters\":{\"id\":2696,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1437:0:8\"},\"scope\":2727,\"src\":\"1383:55:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2702,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"transferRegistrars\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2700,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2699,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2702,\"src\":\"1471:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2698,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1471:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1470:15:8\"},\"returnParameters\":{\"id\":2701,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1494:0:8\"},\"scope\":2727,\"src\":\"1443:52:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2711,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"acceptRegistrarTransfer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2709,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2704,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2711,\"src\":\"1533:12:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2703,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1533:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2706,\"name\":\"deed\",\"nodeType\":\"VariableDeclaration\",\"scope\":2711,\"src\":\"1547:9:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":2705,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"1547:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2708,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":2711,\"src\":\"1558:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2707,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1558:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1532:48:8\"},\"returnParameters\":{\"id\":2710,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1589:0:8\"},\"scope\":2727,\"src\":\"1500:90:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2726,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"entries\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2714,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2713,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1612:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2712,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1612:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1611:15:8\"},\"returnParameters\":{\"id\":2725,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2716,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1650:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":2715,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"1650:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2718,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1656:7:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2717,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1656:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2720,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1665:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2719,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1665:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2722,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1671:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2721,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1671:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2724,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1677:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2723,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1677:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1649:33:8\"},\"scope\":2727,\"src\":\"1595:88:8\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":2728,\"src\":\"49:1636:8\"}],\"src\":\"0:1686:8\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Registrar.sol\",\"exportedSymbols\":{\"Registrar\":[2727]},\"id\":2728,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2564,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:8\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/Deed.sol\",\"file\":\"./Deed.sol\",\"id\":2565,\"nodeType\":\"ImportDirective\",\"scope\":2728,\"sourceUnit\":48,\"src\":\"27:20:8\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"interface\",\"documentation\":null,\"fullyImplemented\":false,\"id\":2727,\"linearizedBaseContracts\":[2727],\"name\":\"Registrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"canonicalName\":\"Registrar.Mode\",\"id\":2572,\"members\":[{\"id\":2566,\"name\":\"Open\",\"nodeType\":\"EnumValue\",\"src\":\"88:4:8\"},{\"id\":2567,\"name\":\"Auction\",\"nodeType\":\"EnumValue\",\"src\":\"94:7:8\"},{\"id\":2568,\"name\":\"Owned\",\"nodeType\":\"EnumValue\",\"src\":\"103:5:8\"},{\"id\":2569,\"name\":\"Forbidden\",\"nodeType\":\"EnumValue\",\"src\":\"110:9:8\"},{\"id\":2570,\"name\":\"Reveal\",\"nodeType\":\"EnumValue\",\"src\":\"121:6:8\"},{\"id\":2571,\"name\":\"NotYetAvailable\",\"nodeType\":\"EnumValue\",\"src\":\"129:15:8\"}],\"name\":\"Mode\",\"nodeType\":\"EnumDefinition\",\"src\":\"76:70:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2578,\"name\":\"AuctionStarted\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2577,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2574,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2578,\"src\":\"173:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2573,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"173:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2576,\"indexed\":false,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":2578,\"src\":\"195:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2575,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"195:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"172:45:8\"},\"src\":\"152:66:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2586,\"name\":\"NewBid\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2585,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2580,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2586,\"src\":\"236:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2579,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"236:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2582,\"indexed\":true,\"name\":\"bidder\",\"nodeType\":\"VariableDeclaration\",\"scope\":2586,\"src\":\"258:22:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2581,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"258:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2584,\"indexed\":false,\"name\":\"deposit\",\"nodeType\":\"VariableDeclaration\",\"scope\":2586,\"src\":\"282:12:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2583,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"282:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"235:60:8\"},\"src\":\"223:73:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2596,\"name\":\"BidRevealed\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2595,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2588,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2596,\"src\":\"319:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2587,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"319:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2590,\"indexed\":true,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2596,\"src\":\"341:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2589,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"341:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2592,\"indexed\":false,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2596,\"src\":\"364:10:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2591,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"364:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2594,\"indexed\":false,\"name\":\"status\",\"nodeType\":\"VariableDeclaration\",\"scope\":2596,\"src\":\"376:12:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"},\"typeName\":{\"id\":2593,\"name\":\"uint8\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"376:5:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint8\",\"typeString\":\"uint8\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"318:71:8\"},\"src\":\"301:89:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2606,\"name\":\"HashRegistered\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2605,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2598,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2606,\"src\":\"416:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2597,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"416:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2600,\"indexed\":true,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2606,\"src\":\"438:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2599,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"438:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2602,\"indexed\":false,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2606,\"src\":\"461:10:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2601,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"461:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2604,\"indexed\":false,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":2606,\"src\":\"473:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2603,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"473:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"415:80:8\"},\"src\":\"395:101:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2612,\"name\":\"HashReleased\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2611,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2608,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2612,\"src\":\"520:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2607,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"520:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2610,\"indexed\":false,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2612,\"src\":\"542:10:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2609,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"542:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"519:34:8\"},\"src\":\"501:53:8\"},{\"anonymous\":false,\"documentation\":null,\"id\":2622,\"name\":\"HashInvalidated\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":2621,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2614,\"indexed\":true,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2622,\"src\":\"581:20:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2613,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"581:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2616,\"indexed\":true,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2622,\"src\":\"603:19:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2615,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"603:6:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2618,\"indexed\":false,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2622,\"src\":\"624:10:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2617,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"624:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2620,\"indexed\":false,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":2622,\"src\":\"636:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2619,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"636:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"580:78:8\"},\"src\":\"559:100:8\"},{\"body\":null,\"documentation\":null,\"id\":2629,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"state\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2625,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2624,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2629,\"src\":\"680:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2623,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"680:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"679:15:8\"},\"returnParameters\":{\"id\":2628,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2627,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2629,\"src\":\"718:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":2626,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"718:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"717:6:8\"},\"scope\":2727,\"src\":\"665:59:8\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2634,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2632,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2631,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2634,\"src\":\"751:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2630,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"751:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"750:15:8\"},\"returnParameters\":{\"id\":2633,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"774:0:8\"},\"scope\":2727,\"src\":\"729:46:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2640,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuctions\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2638,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2637,\"name\":\"_hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":2640,\"src\":\"803:26:8\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2635,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"803:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2636,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"803:9:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"802:28:8\"},\"returnParameters\":{\"id\":2639,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"839:0:8\"},\"scope\":2727,\"src\":\"780:60:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2645,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"newBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2643,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2642,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":2645,\"src\":\"861:17:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2641,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"861:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"860:19:8\"},\"returnParameters\":{\"id\":2644,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"896:0:8\"},\"scope\":2727,\"src\":\"845:52:8\",\"stateMutability\":\"payable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2653,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"startAuctionsAndBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2651,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2648,\"name\":\"hashes\",\"nodeType\":\"VariableDeclaration\",\"scope\":2653,\"src\":\"931:25:8\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2646,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"931:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2647,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"931:9:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2650,\"name\":\"sealedBid\",\"nodeType\":\"VariableDeclaration\",\"scope\":2653,\"src\":\"958:17:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2649,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"958:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"930:46:8\"},\"returnParameters\":{\"id\":2652,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"993:0:8\"},\"scope\":2727,\"src\":\"902:92:8\",\"stateMutability\":\"payable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2662,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"unsealBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2660,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2655,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2662,\"src\":\"1018:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2654,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1018:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2657,\"name\":\"_value\",\"nodeType\":\"VariableDeclaration\",\"scope\":2662,\"src\":\"1033:11:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2656,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1033:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2659,\"name\":\"_salt\",\"nodeType\":\"VariableDeclaration\",\"scope\":2662,\"src\":\"1046:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2658,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1046:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1017:43:8\"},\"returnParameters\":{\"id\":2661,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1069:0:8\"},\"scope\":2727,\"src\":\"999:71:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2669,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"cancelBid\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2667,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2664,\"name\":\"bidder\",\"nodeType\":\"VariableDeclaration\",\"scope\":2669,\"src\":\"1094:14:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2663,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1094:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2666,\"name\":\"seal\",\"nodeType\":\"VariableDeclaration\",\"scope\":2669,\"src\":\"1110:12:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2665,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1110:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1093:30:8\"},\"returnParameters\":{\"id\":2668,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1132:0:8\"},\"scope\":2727,\"src\":\"1075:58:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2674,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"finalizeAuction\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2672,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2671,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2674,\"src\":\"1163:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2670,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1163:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1162:15:8\"},\"returnParameters\":{\"id\":2673,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1186:0:8\"},\"scope\":2727,\"src\":\"1138:49:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2681,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"transfer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2679,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2676,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2681,\"src\":\"1210:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2675,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1210:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2678,\"name\":\"newOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2681,\"src\":\"1225:24:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},\"typeName\":{\"id\":2677,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1225:15:8\",\"stateMutability\":\"payable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1209:41:8\"},\"returnParameters\":{\"id\":2680,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1259:0:8\"},\"scope\":2727,\"src\":\"1192:68:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2686,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"releaseDeed\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2684,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2683,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2686,\"src\":\"1286:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2682,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1286:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1285:15:8\"},\"returnParameters\":{\"id\":2685,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1309:0:8\"},\"scope\":2727,\"src\":\"1265:45:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2691,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"invalidateName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2689,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2688,\"name\":\"unhashedName\",\"nodeType\":\"VariableDeclaration\",\"scope\":2691,\"src\":\"1339:28:8\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2687,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1339:6:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1338:30:8\"},\"returnParameters\":{\"id\":2690,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1377:0:8\"},\"scope\":2727,\"src\":\"1315:63:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2697,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"eraseNode\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2695,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2694,\"name\":\"labels\",\"nodeType\":\"VariableDeclaration\",\"scope\":2697,\"src\":\"1402:25:8\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_calldata_ptr\",\"typeString\":\"bytes32[]\"},\"typeName\":{\"baseType\":{\"id\":2692,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1402:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2693,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"1402:9:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes32_$dyn_storage_ptr\",\"typeString\":\"bytes32[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1401:27:8\"},\"returnParameters\":{\"id\":2696,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1437:0:8\"},\"scope\":2727,\"src\":\"1383:55:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2702,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"transferRegistrars\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2700,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2699,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2702,\"src\":\"1471:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2698,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1471:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1470:15:8\"},\"returnParameters\":{\"id\":2701,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1494:0:8\"},\"scope\":2727,\"src\":\"1443:52:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2711,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"acceptRegistrarTransfer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2709,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2704,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2711,\"src\":\"1533:12:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2703,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1533:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2706,\"name\":\"deed\",\"nodeType\":\"VariableDeclaration\",\"scope\":2711,\"src\":\"1547:9:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"},\"typeName\":{\"contractScope\":null,\"id\":2705,\"name\":\"Deed\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":47,\"src\":\"1547:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Deed_$47\",\"typeString\":\"contract Deed\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2708,\"name\":\"registrationDate\",\"nodeType\":\"VariableDeclaration\",\"scope\":2711,\"src\":\"1558:21:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2707,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1558:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1532:48:8\"},\"returnParameters\":{\"id\":2710,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1589:0:8\"},\"scope\":2727,\"src\":\"1500:90:8\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":2726,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"entries\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2714,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2713,\"name\":\"_hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1612:13:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2712,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1612:7:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1611:15:8\"},\"returnParameters\":{\"id\":2725,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2716,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1650:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"},\"typeName\":{\"contractScope\":null,\"id\":2715,\"name\":\"Mode\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2572,\"src\":\"1650:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_enum$_Mode_$2572\",\"typeString\":\"enum Registrar.Mode\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2718,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1656:7:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2717,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1656:7:8\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2720,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1665:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2719,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1665:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2722,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1671:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2721,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1671:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2724,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2726,\"src\":\"1677:4:8\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2723,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1677:4:8\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1649:33:8\"},\"scope\":2727,\"src\":\"1595:88:8\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":2728,\"src\":\"49:1636:8\"}],\"src\":\"0:1686:8\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.100Z\",\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}}");

/***/ }),

/***/ 248075:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"Resolver\",\"abi\":[{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"metadata\":\"\",\"bytecode\":\"0x\",\"deployedBytecode\":\"0x\",\"sourceMap\":\"\",\"deployedSourceMap\":\"\",\"source\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"./ENS.sol\\\";\\n\\ncontract Resolver {\\n    function setName(bytes32 node, string memory name) public;\\n}\\n\\ncontract ReverseRegistrar {\\n    // namehash('addr.reverse')\\n    bytes32 public constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n    ENS public ens;\\n    Resolver public defaultResolver;\\n\\n    /**\\n     * @dev Constructor\\n     * @param ensAddr The address of the ENS registry.\\n     * @param resolverAddr The address of the default reverse resolver.\\n     */\\n    constructor(ENS ensAddr, Resolver resolverAddr) public {\\n        ens = ensAddr;\\n        defaultResolver = resolverAddr;\\n\\n        // Assign ownership of the reverse record to our deployer\\n        ReverseRegistrar oldRegistrar = ReverseRegistrar(ens.owner(ADDR_REVERSE_NODE));\\n        if (address(oldRegistrar) != address(0x0)) {\\n            oldRegistrar.claim(msg.sender);\\n        }\\n    }\\n    \\n    /**\\n     * @dev Transfers ownership of the reverse ENS record associated with the\\n     *      calling account.\\n     * @param owner The address to set as the owner of the reverse record in ENS.\\n     * @return The ENS node hash of the reverse record.\\n     */\\n    function claim(address owner) public returns (bytes32) {\\n        return claimWithResolver(owner, address(0x0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the reverse ENS record associated with the\\n     *      calling account.\\n     * @param owner The address to set as the owner of the reverse record in ENS.\\n     * @param resolver The address of the resolver to set; 0 to leave unchanged.\\n     * @return The ENS node hash of the reverse record.\\n     */\\n    function claimWithResolver(address owner, address resolver) public returns (bytes32) {\\n        bytes32 label = sha3HexAddress(msg.sender);\\n        bytes32 node = keccak256(abi.encodePacked(ADDR_REVERSE_NODE, label));\\n        address currentOwner = ens.owner(node);\\n\\n        // Update the resolver if required\\n        if (resolver != address(0x0) && resolver != ens.resolver(node)) {\\n            // Transfer the name to us first if it's not already\\n            if (currentOwner != address(this)) {\\n                ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, address(this));\\n                currentOwner = address(this);\\n            }\\n            ens.setResolver(node, resolver);\\n        }\\n\\n        // Update the owner if required\\n        if (currentOwner != owner) {\\n            ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, owner);\\n        }\\n\\n        return node;\\n    }\\n\\n    /**\\n     * @dev Sets the `name()` record for the reverse ENS record associated with\\n     * the calling account. First updates the resolver to the default reverse\\n     * resolver if necessary.\\n     * @param name The name to set for this address.\\n     * @return The ENS node hash of the reverse record.\\n     */\\n    function setName(string memory name) public returns (bytes32) {\\n        bytes32 node = claimWithResolver(address(this), address(defaultResolver));\\n        defaultResolver.setName(node, name);\\n        return node;\\n    }\\n\\n    /**\\n     * @dev Returns the node hash for a given account's reverse records.\\n     * @param addr The address to hash\\n     * @return The ENS node hash.\\n     */\\n    function node(address addr) public pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(ADDR_REVERSE_NODE, sha3HexAddress(addr)));\\n    }\\n\\n    /**\\n     * @dev An optimised function to compute the sha3 of the lower-case\\n     *      hexadecimal representation of an Ethereum address.\\n     * @param addr The address to hash\\n     * @return The SHA3 hash of the lower-case hexadecimal encoding of the\\n     *         input address.\\n     */\\n    function sha3HexAddress(address addr) private pure returns (bytes32 ret) {\\n        addr;\\n        ret; // Stop warning us about unused variables\\n        assembly {\\n            let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\\n\\n            for { let i := 40 } gt(i, 0) { } {\\n                i := sub(i, 1)\\n                mstore8(i, byte(and(addr, 0xf), lookup))\\n                addr := div(addr, 0x10)\\n                i := sub(i, 1)\\n                mstore8(i, byte(and(addr, 0xf), lookup))\\n                addr := div(addr, 0x10)\\n            }\\n\\n            ret := keccak256(0, 40)\\n        }\\n    }\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol\",\"exportedSymbols\":{\"Resolver\":[2738],\"ReverseRegistrar\":[2954]},\"id\":2955,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2729,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:9\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":2730,\"nodeType\":\"ImportDirective\",\"scope\":2955,\"sourceUnit\":437,\"src\":\"25:19:9\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":false,\"id\":2738,\"linearizedBaseContracts\":[2738],\"name\":\"Resolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"body\":null,\"documentation\":null,\"id\":2737,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2735,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2732,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2737,\"src\":\"87:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2731,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"87:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2734,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2737,\"src\":\"101:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2733,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"101:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"86:34:9\"},\"returnParameters\":{\"id\":2736,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"127:0:9\"},\"scope\":2738,\"src\":\"70:58:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":2955,\"src\":\"46:84:9\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":true,\"id\":2954,\"linearizedBaseContracts\":[2954],\"name\":\"ReverseRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":2741,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"196:110:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2739,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"196:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532\",\"id\":2740,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"240:66:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1\",\"typeString\":\"int_const 6595...(69 digits omitted)...3154\"},\"value\":\"0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2\"},\"visibility\":\"public\"},{\"constant\":false,\"id\":2743,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"313:14:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2742,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"313:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2745,\"name\":\"defaultResolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"333:31:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"},\"typeName\":{\"contractScope\":null,\"id\":2744,\"name\":\"Resolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2738,\"src\":\"333:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2785,\"nodeType\":\"Block\",\"src\":\"593:332:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2754,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2752,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"603:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2753,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2747,\"src\":\"609:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"603:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2755,\"nodeType\":\"ExpressionStatement\",\"src\":\"603:13:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2758,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2756,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"626:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2757,\"name\":\"resolverAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2749,\"src\":\"644:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"src\":\"626:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"id\":2759,\"nodeType\":\"ExpressionStatement\",\"src\":\"626:30:9\"},{\"assignments\":[2761],\"declarations\":[{\"constant\":false,\"id\":2761,\"name\":\"oldRegistrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":2785,\"src\":\"733:29:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"},\"typeName\":{\"contractScope\":null,\"id\":2760,\"name\":\"ReverseRegistrar\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2954,\"src\":\"733:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2768,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2765,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"792:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2763,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"782:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2764,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"782:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2766,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"782:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2762,\"name\":\"ReverseRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2954,\"src\":\"765:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_ReverseRegistrar_$2954_$\",\"typeString\":\"type(contract ReverseRegistrar)\"}},\"id\":2767,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"765:46:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"733:78:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2775,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2770,\"name\":\"oldRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2761,\"src\":\"833:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2769,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"825:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2771,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"825:21:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2773,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"858:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2772,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"850:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2774,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"850:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"825:37:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2784,\"nodeType\":\"IfStatement\",\"src\":\"821:98:9\",\"trueBody\":{\"id\":2783,\"nodeType\":\"Block\",\"src\":\"864:55:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2779,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"897:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2780,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"897:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2776,\"name\":\"oldRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2761,\"src\":\"878:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"id\":2778,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"claim\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2801,\"src\":\"878:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) external returns (bytes32)\"}},\"id\":2781,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"878:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2782,\"nodeType\":\"ExpressionStatement\",\"src\":\"878:30:9\"}]}}]},\"documentation\":\"@dev Constructor\\n@param ensAddr The address of the ENS registry.\\n@param resolverAddr The address of the default reverse resolver.\",\"id\":2786,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2750,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2747,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2786,\"src\":\"550:11:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2746,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"550:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2749,\"name\":\"resolverAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2786,\"src\":\"563:21:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"},\"typeName\":{\"contractScope\":null,\"id\":2748,\"name\":\"Resolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2738,\"src\":\"563:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"549:36:9\"},\"returnParameters\":{\"id\":2751,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"593:0:9\"},\"scope\":2954,\"src\":\"538:387:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2800,\"nodeType\":\"Block\",\"src\":\"1251:62:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2794,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2788,\"src\":\"1286:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2796,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1301:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2795,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1293:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2797,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1293:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":2793,\"name\":\"claimWithResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2894,\"src\":\"1268:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address,address) returns (bytes32)\"}},\"id\":2798,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1268:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2792,\"id\":2799,\"nodeType\":\"Return\",\"src\":\"1261:45:9\"}]},\"documentation\":\"@dev Transfers ownership of the reverse ENS record associated with the\\n     calling account.\\n@param owner The address to set as the owner of the reverse record in ENS.\\n@return The ENS node hash of the reverse record.\",\"id\":2801,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"claim\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2789,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2788,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2801,\"src\":\"1211:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2787,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1211:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1210:15:9\"},\"returnParameters\":{\"id\":2792,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2791,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2801,\"src\":\"1242:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2790,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1242:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1241:9:9\"},\"scope\":2954,\"src\":\"1196:117:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2893,\"nodeType\":\"Block\",\"src\":\"1746:786:9\",\"statements\":[{\"assignments\":[2811],\"declarations\":[{\"constant\":false,\"id\":2811,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1756:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2810,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1756:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2816,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2813,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"1787:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2814,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1787:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":2812,\"name\":\"sha3HexAddress\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2953,\"src\":\"1772:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) pure returns (bytes32)\"}},\"id\":2815,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1772:26:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1756:42:9\"},{\"assignments\":[2818],\"declarations\":[{\"constant\":false,\"id\":2818,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1808:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2817,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1808:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2826,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2822,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"1850:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2823,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"1869:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2820,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"1833:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2821,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1833:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2824,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1833:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2819,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"1823:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2825,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1823:53:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1808:68:9\"},{\"assignments\":[2828],\"declarations\":[{\"constant\":false,\"id\":2828,\"name\":\"currentOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1886:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2827,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1886:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2833,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2831,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"1919:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2829,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"1909:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2830,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"1909:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2832,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1909:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1886:38:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":2845,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2838,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2834,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"1982:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2836,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2002:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2835,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1994:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2837,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1994:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1982:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2844,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2839,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"2010:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2842,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2035:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2840,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2022:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2841,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":412,\"src\":\"2022:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2843,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2022:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2010:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1982:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2877,\"nodeType\":\"IfStatement\",\"src\":\"1978:372:9\",\"trueBody\":{\"id\":2876,\"nodeType\":\"Block\",\"src\":\"2042:308:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2850,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2846,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2125:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2848,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2149:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2847,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2141:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2849,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2141:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2125:29:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2868,\"nodeType\":\"IfStatement\",\"src\":\"2121:174:9\",\"trueBody\":{\"id\":2867,\"nodeType\":\"Block\",\"src\":\"2156:139:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2854,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"2194:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2855,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"2213:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2857,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2228:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2856,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2220:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2858,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2220:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2851,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2174:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2853,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"2174:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2859,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2174:60:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2860,\"nodeType\":\"ExpressionStatement\",\"src\":\"2174:60:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2865,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2861,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2252:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2863,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2275:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2862,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2267:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2864,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2267:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2252:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2866,\"nodeType\":\"ExpressionStatement\",\"src\":\"2252:28:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2872,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2324:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2873,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"2330:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2869,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2308:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2871,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setResolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":377,\"src\":\"2308:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2874,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2308:31:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2875,\"nodeType\":\"ExpressionStatement\",\"src\":\"2308:31:9\"}]}},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2880,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2878,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2404:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2879,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2803,\"src\":\"2420:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2404:21:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2890,\"nodeType\":\"IfStatement\",\"src\":\"2400:104:9\",\"trueBody\":{\"id\":2889,\"nodeType\":\"Block\",\"src\":\"2427:77:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2884,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"2461:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2885,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"2480:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2886,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2803,\"src\":\"2487:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2881,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2441:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2883,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"2441:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2887,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2441:52:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2888,\"nodeType\":\"ExpressionStatement\",\"src\":\"2441:52:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":2891,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2521:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2809,\"id\":2892,\"nodeType\":\"Return\",\"src\":\"2514:11:9\"}]},\"documentation\":\"@dev Transfers ownership of the reverse ENS record associated with the\\n     calling account.\\n@param owner The address to set as the owner of the reverse record in ENS.\\n@param resolver The address of the resolver to set; 0 to leave unchanged.\\n@return The ENS node hash of the reverse record.\",\"id\":2894,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"claimWithResolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2806,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2803,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1688:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2802,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1688:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2805,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1703:16:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2804,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1703:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1687:33:9\"},\"returnParameters\":{\"id\":2809,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2808,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1737:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2807,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1737:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1736:9:9\"},\"scope\":2954,\"src\":\"1661:871:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2921,\"nodeType\":\"Block\",\"src\":\"2913:156:9\",\"statements\":[{\"assignments\":[2902],\"declarations\":[{\"constant\":false,\"id\":2902,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2921,\"src\":\"2923:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2901,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2923:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2911,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2905,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2964:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2904,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2956:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2906,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2956:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2908,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"2979:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}],\"id\":2907,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2971:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2909,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2971:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2903,\"name\":\"claimWithResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2894,\"src\":\"2938:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address,address) returns (bytes32)\"}},\"id\":2910,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2938:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2923:73:9\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2915,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2902,\"src\":\"3030:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2916,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2896,\"src\":\"3036:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}],\"expression\":{\"argumentTypes\":null,\"id\":2912,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"3006:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"id\":2914,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setName\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2737,\"src\":\"3006:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32,string memory) external\"}},\"id\":2917,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3006:35:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2918,\"nodeType\":\"ExpressionStatement\",\"src\":\"3006:35:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2919,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2902,\"src\":\"3058:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2900,\"id\":2920,\"nodeType\":\"Return\",\"src\":\"3051:11:9\"}]},\"documentation\":\"@dev Sets the `name()` record for the reverse ENS record associated with\\nthe calling account. First updates the resolver to the default reverse\\nresolver if necessary.\\n@param name The name to set for this address.\\n@return The ENS node hash of the reverse record.\",\"id\":2922,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2897,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2896,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2922,\"src\":\"2868:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2895,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2868:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2867:20:9\"},\"returnParameters\":{\"id\":2900,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2899,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2922,\"src\":\"2904:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2898,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2904:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2903:9:9\"},\"scope\":2954,\"src\":\"2851:218:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2939,\"nodeType\":\"Block\",\"src\":\"3295:92:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2932,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"3339:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2934,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2924,\"src\":\"3373:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2933,\"name\":\"sha3HexAddress\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2953,\"src\":\"3358:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) pure returns (bytes32)\"}},\"id\":2935,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3358:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2930,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"3322:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2931,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3322:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2936,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3322:57:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2929,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"3312:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2937,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3312:68:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2928,\"id\":2938,\"nodeType\":\"Return\",\"src\":\"3305:75:9\"}]},\"documentation\":\"@dev Returns the node hash for a given account's reverse records.\\n@param addr The address to hash\\n@return The ENS node hash.\",\"id\":2940,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"node\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2925,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2924,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2940,\"src\":\"3251:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2923,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3251:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3250:14:9\"},\"returnParameters\":{\"id\":2928,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2927,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2940,\"src\":\"3286:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2926,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3286:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3285:9:9\"},\"scope\":2954,\"src\":\"3237:150:9\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2952,\"nodeType\":\"Block\",\"src\":\"3761:553:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2947,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2942,\"src\":\"3771:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2948,\"nodeType\":\"ExpressionStatement\",\"src\":\"3771:4:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2949,\"name\":\"ret\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2945,\"src\":\"3785:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2950,\"nodeType\":\"ExpressionStatement\",\"src\":\"3785:3:9\"},{\"externalReferences\":[{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4096:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4059:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4108:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4236:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4224:4:9\",\"valueSize\":1}},{\"ret\":{\"declaration\":2945,\"isOffset\":false,\"isSlot\":false,\"src\":\"4275:3:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4187:4:9\",\"valueSize\":1}}],\"id\":2951,\"nodeType\":\"InlineAssembly\",\"operations\":\"{\\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\\n    for {\\n        let i := 40\\n    }\\n    gt(i, 0)\\n    {\\n    }\\n    {\\n        i := sub(i, 1)\\n        mstore8(i, byte(and(addr, 0xf), lookup))\\n        addr := div(addr, 0x10)\\n        i := sub(i, 1)\\n        mstore8(i, byte(and(addr, 0xf), lookup))\\n        addr := div(addr, 0x10)\\n    }\\n    ret := keccak256(0, 40)\\n}\",\"src\":\"3840:474:9\"}]},\"documentation\":\"@dev An optimised function to compute the sha3 of the lower-case\\n     hexadecimal representation of an Ethereum address.\\n@param addr The address to hash\\n@return The SHA3 hash of the lower-case hexadecimal encoding of the\\n        input address.\",\"id\":2953,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"sha3HexAddress\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2943,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2942,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2953,\"src\":\"3712:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2941,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3712:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3711:14:9\"},\"returnParameters\":{\"id\":2946,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2945,\"name\":\"ret\",\"nodeType\":\"VariableDeclaration\",\"scope\":2953,\"src\":\"3748:11:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2944,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3748:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3747:13:9\"},\"scope\":2954,\"src\":\"3688:626:9\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"private\"}],\"scope\":2955,\"src\":\"132:4184:9\"}],\"src\":\"0:4317:9\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol\",\"exportedSymbols\":{\"Resolver\":[2738],\"ReverseRegistrar\":[2954]},\"id\":2955,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2729,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:9\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":2730,\"nodeType\":\"ImportDirective\",\"scope\":2955,\"sourceUnit\":437,\"src\":\"25:19:9\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":false,\"id\":2738,\"linearizedBaseContracts\":[2738],\"name\":\"Resolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"body\":null,\"documentation\":null,\"id\":2737,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2735,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2732,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2737,\"src\":\"87:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2731,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"87:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2734,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2737,\"src\":\"101:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2733,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"101:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"86:34:9\"},\"returnParameters\":{\"id\":2736,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"127:0:9\"},\"scope\":2738,\"src\":\"70:58:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":2955,\"src\":\"46:84:9\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":true,\"id\":2954,\"linearizedBaseContracts\":[2954],\"name\":\"ReverseRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":2741,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"196:110:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2739,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"196:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532\",\"id\":2740,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"240:66:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1\",\"typeString\":\"int_const 6595...(69 digits omitted)...3154\"},\"value\":\"0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2\"},\"visibility\":\"public\"},{\"constant\":false,\"id\":2743,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"313:14:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2742,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"313:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2745,\"name\":\"defaultResolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"333:31:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"},\"typeName\":{\"contractScope\":null,\"id\":2744,\"name\":\"Resolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2738,\"src\":\"333:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2785,\"nodeType\":\"Block\",\"src\":\"593:332:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2754,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2752,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"603:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2753,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2747,\"src\":\"609:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"603:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2755,\"nodeType\":\"ExpressionStatement\",\"src\":\"603:13:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2758,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2756,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"626:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2757,\"name\":\"resolverAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2749,\"src\":\"644:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"src\":\"626:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"id\":2759,\"nodeType\":\"ExpressionStatement\",\"src\":\"626:30:9\"},{\"assignments\":[2761],\"declarations\":[{\"constant\":false,\"id\":2761,\"name\":\"oldRegistrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":2785,\"src\":\"733:29:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"},\"typeName\":{\"contractScope\":null,\"id\":2760,\"name\":\"ReverseRegistrar\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2954,\"src\":\"733:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2768,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2765,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"792:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2763,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"782:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2764,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"782:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2766,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"782:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2762,\"name\":\"ReverseRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2954,\"src\":\"765:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_ReverseRegistrar_$2954_$\",\"typeString\":\"type(contract ReverseRegistrar)\"}},\"id\":2767,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"765:46:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"733:78:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2775,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2770,\"name\":\"oldRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2761,\"src\":\"833:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2769,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"825:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2771,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"825:21:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2773,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"858:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2772,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"850:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2774,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"850:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"825:37:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2784,\"nodeType\":\"IfStatement\",\"src\":\"821:98:9\",\"trueBody\":{\"id\":2783,\"nodeType\":\"Block\",\"src\":\"864:55:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2779,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"897:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2780,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"897:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2776,\"name\":\"oldRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2761,\"src\":\"878:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"id\":2778,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"claim\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2801,\"src\":\"878:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) external returns (bytes32)\"}},\"id\":2781,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"878:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2782,\"nodeType\":\"ExpressionStatement\",\"src\":\"878:30:9\"}]}}]},\"documentation\":\"@dev Constructor\\n@param ensAddr The address of the ENS registry.\\n@param resolverAddr The address of the default reverse resolver.\",\"id\":2786,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2750,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2747,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2786,\"src\":\"550:11:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2746,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"550:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2749,\"name\":\"resolverAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2786,\"src\":\"563:21:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"},\"typeName\":{\"contractScope\":null,\"id\":2748,\"name\":\"Resolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2738,\"src\":\"563:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"549:36:9\"},\"returnParameters\":{\"id\":2751,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"593:0:9\"},\"scope\":2954,\"src\":\"538:387:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2800,\"nodeType\":\"Block\",\"src\":\"1251:62:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2794,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2788,\"src\":\"1286:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2796,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1301:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2795,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1293:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2797,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1293:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":2793,\"name\":\"claimWithResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2894,\"src\":\"1268:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address,address) returns (bytes32)\"}},\"id\":2798,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1268:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2792,\"id\":2799,\"nodeType\":\"Return\",\"src\":\"1261:45:9\"}]},\"documentation\":\"@dev Transfers ownership of the reverse ENS record associated with the\\n     calling account.\\n@param owner The address to set as the owner of the reverse record in ENS.\\n@return The ENS node hash of the reverse record.\",\"id\":2801,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"claim\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2789,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2788,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2801,\"src\":\"1211:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2787,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1211:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1210:15:9\"},\"returnParameters\":{\"id\":2792,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2791,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2801,\"src\":\"1242:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2790,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1242:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1241:9:9\"},\"scope\":2954,\"src\":\"1196:117:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2893,\"nodeType\":\"Block\",\"src\":\"1746:786:9\",\"statements\":[{\"assignments\":[2811],\"declarations\":[{\"constant\":false,\"id\":2811,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1756:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2810,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1756:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2816,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2813,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"1787:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2814,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1787:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":2812,\"name\":\"sha3HexAddress\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2953,\"src\":\"1772:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) pure returns (bytes32)\"}},\"id\":2815,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1772:26:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1756:42:9\"},{\"assignments\":[2818],\"declarations\":[{\"constant\":false,\"id\":2818,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1808:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2817,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1808:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2826,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2822,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"1850:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2823,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"1869:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2820,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"1833:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2821,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1833:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2824,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1833:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2819,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"1823:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2825,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1823:53:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1808:68:9\"},{\"assignments\":[2828],\"declarations\":[{\"constant\":false,\"id\":2828,\"name\":\"currentOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1886:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2827,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1886:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2833,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2831,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"1919:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2829,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"1909:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2830,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"1909:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2832,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1909:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1886:38:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":2845,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2838,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2834,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"1982:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2836,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2002:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2835,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1994:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2837,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1994:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1982:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2844,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2839,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"2010:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2842,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2035:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2840,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2022:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2841,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":412,\"src\":\"2022:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2843,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2022:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2010:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1982:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2877,\"nodeType\":\"IfStatement\",\"src\":\"1978:372:9\",\"trueBody\":{\"id\":2876,\"nodeType\":\"Block\",\"src\":\"2042:308:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2850,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2846,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2125:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2848,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2149:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2847,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2141:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2849,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2141:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2125:29:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2868,\"nodeType\":\"IfStatement\",\"src\":\"2121:174:9\",\"trueBody\":{\"id\":2867,\"nodeType\":\"Block\",\"src\":\"2156:139:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2854,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"2194:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2855,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"2213:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2857,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2228:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2856,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2220:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2858,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2220:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2851,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2174:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2853,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"2174:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2859,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2174:60:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2860,\"nodeType\":\"ExpressionStatement\",\"src\":\"2174:60:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2865,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2861,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2252:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2863,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2275:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2862,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2267:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2864,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2267:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2252:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2866,\"nodeType\":\"ExpressionStatement\",\"src\":\"2252:28:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2872,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2324:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2873,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"2330:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2869,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2308:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2871,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setResolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":377,\"src\":\"2308:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2874,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2308:31:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2875,\"nodeType\":\"ExpressionStatement\",\"src\":\"2308:31:9\"}]}},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2880,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2878,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2404:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2879,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2803,\"src\":\"2420:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2404:21:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2890,\"nodeType\":\"IfStatement\",\"src\":\"2400:104:9\",\"trueBody\":{\"id\":2889,\"nodeType\":\"Block\",\"src\":\"2427:77:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2884,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"2461:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2885,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"2480:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2886,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2803,\"src\":\"2487:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2881,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2441:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2883,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"2441:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2887,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2441:52:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2888,\"nodeType\":\"ExpressionStatement\",\"src\":\"2441:52:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":2891,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2521:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2809,\"id\":2892,\"nodeType\":\"Return\",\"src\":\"2514:11:9\"}]},\"documentation\":\"@dev Transfers ownership of the reverse ENS record associated with the\\n     calling account.\\n@param owner The address to set as the owner of the reverse record in ENS.\\n@param resolver The address of the resolver to set; 0 to leave unchanged.\\n@return The ENS node hash of the reverse record.\",\"id\":2894,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"claimWithResolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2806,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2803,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1688:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2802,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1688:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2805,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1703:16:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2804,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1703:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1687:33:9\"},\"returnParameters\":{\"id\":2809,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2808,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1737:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2807,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1737:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1736:9:9\"},\"scope\":2954,\"src\":\"1661:871:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2921,\"nodeType\":\"Block\",\"src\":\"2913:156:9\",\"statements\":[{\"assignments\":[2902],\"declarations\":[{\"constant\":false,\"id\":2902,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2921,\"src\":\"2923:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2901,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2923:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2911,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2905,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2964:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2904,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2956:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2906,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2956:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2908,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"2979:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}],\"id\":2907,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2971:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2909,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2971:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2903,\"name\":\"claimWithResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2894,\"src\":\"2938:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address,address) returns (bytes32)\"}},\"id\":2910,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2938:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2923:73:9\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2915,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2902,\"src\":\"3030:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2916,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2896,\"src\":\"3036:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}],\"expression\":{\"argumentTypes\":null,\"id\":2912,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"3006:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"id\":2914,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setName\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2737,\"src\":\"3006:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32,string memory) external\"}},\"id\":2917,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3006:35:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2918,\"nodeType\":\"ExpressionStatement\",\"src\":\"3006:35:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2919,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2902,\"src\":\"3058:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2900,\"id\":2920,\"nodeType\":\"Return\",\"src\":\"3051:11:9\"}]},\"documentation\":\"@dev Sets the `name()` record for the reverse ENS record associated with\\nthe calling account. First updates the resolver to the default reverse\\nresolver if necessary.\\n@param name The name to set for this address.\\n@return The ENS node hash of the reverse record.\",\"id\":2922,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2897,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2896,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2922,\"src\":\"2868:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2895,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2868:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2867:20:9\"},\"returnParameters\":{\"id\":2900,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2899,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2922,\"src\":\"2904:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2898,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2904:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2903:9:9\"},\"scope\":2954,\"src\":\"2851:218:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2939,\"nodeType\":\"Block\",\"src\":\"3295:92:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2932,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"3339:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2934,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2924,\"src\":\"3373:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2933,\"name\":\"sha3HexAddress\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2953,\"src\":\"3358:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) pure returns (bytes32)\"}},\"id\":2935,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3358:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2930,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"3322:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2931,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3322:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2936,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3322:57:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2929,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"3312:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2937,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3312:68:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2928,\"id\":2938,\"nodeType\":\"Return\",\"src\":\"3305:75:9\"}]},\"documentation\":\"@dev Returns the node hash for a given account's reverse records.\\n@param addr The address to hash\\n@return The ENS node hash.\",\"id\":2940,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"node\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2925,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2924,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2940,\"src\":\"3251:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2923,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3251:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3250:14:9\"},\"returnParameters\":{\"id\":2928,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2927,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2940,\"src\":\"3286:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2926,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3286:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3285:9:9\"},\"scope\":2954,\"src\":\"3237:150:9\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2952,\"nodeType\":\"Block\",\"src\":\"3761:553:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2947,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2942,\"src\":\"3771:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2948,\"nodeType\":\"ExpressionStatement\",\"src\":\"3771:4:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2949,\"name\":\"ret\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2945,\"src\":\"3785:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2950,\"nodeType\":\"ExpressionStatement\",\"src\":\"3785:3:9\"},{\"externalReferences\":[{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4096:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4059:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4108:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4236:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4224:4:9\",\"valueSize\":1}},{\"ret\":{\"declaration\":2945,\"isOffset\":false,\"isSlot\":false,\"src\":\"4275:3:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4187:4:9\",\"valueSize\":1}}],\"id\":2951,\"nodeType\":\"InlineAssembly\",\"operations\":\"{\\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\\n    for {\\n        let i := 40\\n    }\\n    gt(i, 0)\\n    {\\n    }\\n    {\\n        i := sub(i, 1)\\n        mstore8(i, byte(and(addr, 0xf), lookup))\\n        addr := div(addr, 0x10)\\n        i := sub(i, 1)\\n        mstore8(i, byte(and(addr, 0xf), lookup))\\n        addr := div(addr, 0x10)\\n    }\\n    ret := keccak256(0, 40)\\n}\",\"src\":\"3840:474:9\"}]},\"documentation\":\"@dev An optimised function to compute the sha3 of the lower-case\\n     hexadecimal representation of an Ethereum address.\\n@param addr The address to hash\\n@return The SHA3 hash of the lower-case hexadecimal encoding of the\\n        input address.\",\"id\":2953,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"sha3HexAddress\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2943,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2942,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2953,\"src\":\"3712:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2941,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3712:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3711:14:9\"},\"returnParameters\":{\"id\":2946,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2945,\"name\":\"ret\",\"nodeType\":\"VariableDeclaration\",\"scope\":2953,\"src\":\"3748:11:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2944,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3748:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3747:13:9\"},\"scope\":2954,\"src\":\"3688:626:9\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"private\"}],\"scope\":2955,\"src\":\"132:4184:9\"}],\"src\":\"0:4317:9\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.103Z\",\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{}}}");

/***/ }),

/***/ 813900:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"ReverseRegistrar\",\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"ADDR_REVERSE_NODE\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"defaultResolver\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"resolverAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"claim\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"},{\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"claimWithResolver\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"node\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.0+commit.1d4f565a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"resolver\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"claimWithResolver\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"claim\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"ens\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"ADDR_REVERSE_NODE\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"defaultResolver\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"addr\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"node\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setName\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"name\\\":\\\"ensAddr\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"resolverAddr\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"claim(address)\\\":{\\\"details\\\":\\\"Transfers ownership of the reverse ENS record associated with the     calling account.\\\",\\\"params\\\":{\\\"owner\\\":\\\"The address to set as the owner of the reverse record in ENS.\\\"},\\\"return\\\":\\\"The ENS node hash of the reverse record.\\\"},\\\"claimWithResolver(address,address)\\\":{\\\"details\\\":\\\"Transfers ownership of the reverse ENS record associated with the     calling account.\\\",\\\"params\\\":{\\\"owner\\\":\\\"The address to set as the owner of the reverse record in ENS.\\\",\\\"resolver\\\":\\\"The address of the resolver to set; 0 to leave unchanged.\\\"},\\\"return\\\":\\\"The ENS node hash of the reverse record.\\\"},\\\"constructor\\\":{\\\"details\\\":\\\"Constructor\\\",\\\"params\\\":{\\\"ensAddr\\\":\\\"The address of the ENS registry.\\\",\\\"resolverAddr\\\":\\\"The address of the default reverse resolver.\\\"}},\\\"node(address)\\\":{\\\"details\\\":\\\"Returns the node hash for a given account's reverse records.\\\",\\\"params\\\":{\\\"addr\\\":\\\"The address to hash\\\"},\\\"return\\\":\\\"The ENS node hash.\\\"},\\\"setName(string)\\\":{\\\"details\\\":\\\"Sets the `name()` record for the reverse ENS record associated with the calling account. First updates the resolver to the default reverse resolver if necessary.\\\",\\\"params\\\":{\\\"name\\\":\\\"The name to set for this address.\\\"},\\\"return\\\":\\\"The ENS node hash of the reverse record.\\\"}}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol\\\":\\\"ReverseRegistrar\\\"},\\\"evmVersion\\\":\\\"byzantium\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\\\":{\\\"keccak256\\\":\\\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\\\",\\\"urls\\\":[\\\"bzzr://8e5a54eed92d9bf8824175cf337e0df46e647deb0864eb5f091ea0b8132568f6\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol\\\":{\\\"keccak256\\\":\\\"0x9f88ee601bc32f69ded7a3931640bcbd379920db4f3e45923f10fcc08642a8e2\\\",\\\"urls\\\":[\\\"bzzr://4a291280ddecf6766aefb98ee46c92e0daf6122653aca9bdb8ed197854c7455a\\\"]}},\\\"version\\\":1}\",\"bytecode\":\" \",\"deployedBytecode\":\" \",\"sourceMap\":\"132:4184:9:-;;;538:387;8:9:-1;5:2;;;30:1;27;20:12;5:2;538:387:9;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;538:387:9;;;;;;;;;;;;;;;;;;;;;;;;;609:7;603:3;;:13;;;;;;;;;;;;;;;;;;644:12;626:15;;:30;;;;;;;;;;;;;;;;;;733:29;782:3;;;;;;;;;;;:9;;;240:66;792:17;;782:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;782:28:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;782:28:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;782:28:9;;;;;;;;;;;;;;;;733:78;;858:3;825:37;;833:12;825:37;;;;821:98;;;878:12;:18;;;897:10;878:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;878:30:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;878:30:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;878:30:9;;;;;;;;;;;;;;;;;821:98;538:387;;;132:4184;;;;;;\",\"deployedSourceMap\":\"132:4184:9:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1661:871;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1661:871:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1661:871:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1196:117;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1196:117:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1196:117:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;313:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;313:14:9;;;;;;;;;;;;;;;;;;;;;;;;;;;196:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;196:110:9;;;;;;;;;;;;;;;;;;;;;;;333:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;333:31:9;;;;;;;;;;;;;;;;;;;;;;;;;;;3237:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3237:150:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3237:150:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2851:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2851:218:9;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2851:218:9;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;2851:218:9;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;2851:218:9;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;2851:218:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;2851:218:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1661:871;1737:7;1756:13;1772:26;1787:10;1772:14;:26::i;:::-;1756:42;;1808:12;240:66;1850:17;;1869:5;1833:42;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;1833:42:9;;;1823:53;;;;;;1808:68;;1886:20;1909:3;;;;;;;;;;;:9;;;1919:4;1909:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1909:15:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1909:15:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1909:15:9;;;;;;;;;;;;;;;;1886:38;;2002:3;1982:24;;:8;:24;;;;:58;;;;;2022:3;;;;;;;;;;;:12;;;2035:4;2022:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2022:18:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2022:18:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2022:18:9;;;;;;;;;;;;;;;;2010:30;;:8;:30;;;;1982:58;1978:372;;;2149:4;2125:29;;:12;:29;;;;2121:174;;;2174:3;;;;;;;;;;;:19;;;240:66;2194:17;;2213:5;2228:4;2174:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2174:60:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2174:60:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2174:60:9;;;;;;;;;;;;;;;;;2275:4;2252:28;;2121:174;2308:3;;;;;;;;;;;:15;;;2324:4;2330:8;2308:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2308:31:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2308:31:9;;;;1978:372;2420:5;2404:21;;:12;:21;;;;2400:104;;;2441:3;;;;;;;;;;;:19;;;240:66;2461:17;;2480:5;2487;2441:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2441:52:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2441:52:9;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2441:52:9;;;;;;;;;;;;;;;;;2400:104;2521:4;2514:11;;;;;1661:871;;;;:::o;1196:117::-;1242:7;1268:38;1286:5;1301:3;1268:17;:38::i;:::-;1261:45;;1196:117;;;:::o;313:14::-;;;;;;;;;;;;;:::o;196:110::-;240:66;196:110;;;:::o;333:31::-;;;;;;;;;;;;;:::o;3237:150::-;3286:7;240:66;3339:17;;3358:20;3373:4;3358:14;:20::i;:::-;3322:57;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3322:57:9;;;3312:68;;;;;;3305:75;;3237:150;;;:::o;2851:218::-;2904:7;2923:12;2938:58;2964:4;2979:15;;;;;;;;;;;2938:17;:58::i;:::-;2923:73;;3006:15;;;;;;;;;;;:23;;;3030:4;3036;3006:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;3006:35:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3006:35:9;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3006:35:9;;;;3058:4;3051:11;;;2851:218;;;:::o;3688:626::-;3748:11;3877:66;3972:2;3957:304;3983:1;3980;3977:8;3957:304;;;4020:1;4017;4013:9;4008:14;;4071:6;4065:3;4059:4;4055:14;4050:28;4047:1;4039:40;4114:4;4108;4104:15;4096:23;;4148:1;4145;4141:9;4136:14;;4199:6;4193:3;4187:4;4183:14;4178:28;4175:1;4167:40;4242:4;4236;4232:15;4224:23;;3957:304;;;3961:15;4295:2;4292:1;4282:16;4275:23;;3849:459;;;;:::o\",\"source\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"./ENS.sol\\\";\\n\\ncontract Resolver {\\n    function setName(bytes32 node, string memory name) public;\\n}\\n\\ncontract ReverseRegistrar {\\n    // namehash('addr.reverse')\\n    bytes32 public constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n    ENS public ens;\\n    Resolver public defaultResolver;\\n\\n    /**\\n     * @dev Constructor\\n     * @param ensAddr The address of the ENS registry.\\n     * @param resolverAddr The address of the default reverse resolver.\\n     */\\n    constructor(ENS ensAddr, Resolver resolverAddr) public {\\n        ens = ensAddr;\\n        defaultResolver = resolverAddr;\\n\\n        // Assign ownership of the reverse record to our deployer\\n        ReverseRegistrar oldRegistrar = ReverseRegistrar(ens.owner(ADDR_REVERSE_NODE));\\n        if (address(oldRegistrar) != address(0x0)) {\\n            oldRegistrar.claim(msg.sender);\\n        }\\n    }\\n    \\n    /**\\n     * @dev Transfers ownership of the reverse ENS record associated with the\\n     *      calling account.\\n     * @param owner The address to set as the owner of the reverse record in ENS.\\n     * @return The ENS node hash of the reverse record.\\n     */\\n    function claim(address owner) public returns (bytes32) {\\n        return claimWithResolver(owner, address(0x0));\\n    }\\n\\n    /**\\n     * @dev Transfers ownership of the reverse ENS record associated with the\\n     *      calling account.\\n     * @param owner The address to set as the owner of the reverse record in ENS.\\n     * @param resolver The address of the resolver to set; 0 to leave unchanged.\\n     * @return The ENS node hash of the reverse record.\\n     */\\n    function claimWithResolver(address owner, address resolver) public returns (bytes32) {\\n        bytes32 label = sha3HexAddress(msg.sender);\\n        bytes32 node = keccak256(abi.encodePacked(ADDR_REVERSE_NODE, label));\\n        address currentOwner = ens.owner(node);\\n\\n        // Update the resolver if required\\n        if (resolver != address(0x0) && resolver != ens.resolver(node)) {\\n            // Transfer the name to us first if it's not already\\n            if (currentOwner != address(this)) {\\n                ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, address(this));\\n                currentOwner = address(this);\\n            }\\n            ens.setResolver(node, resolver);\\n        }\\n\\n        // Update the owner if required\\n        if (currentOwner != owner) {\\n            ens.setSubnodeOwner(ADDR_REVERSE_NODE, label, owner);\\n        }\\n\\n        return node;\\n    }\\n\\n    /**\\n     * @dev Sets the `name()` record for the reverse ENS record associated with\\n     * the calling account. First updates the resolver to the default reverse\\n     * resolver if necessary.\\n     * @param name The name to set for this address.\\n     * @return The ENS node hash of the reverse record.\\n     */\\n    function setName(string memory name) public returns (bytes32) {\\n        bytes32 node = claimWithResolver(address(this), address(defaultResolver));\\n        defaultResolver.setName(node, name);\\n        return node;\\n    }\\n\\n    /**\\n     * @dev Returns the node hash for a given account's reverse records.\\n     * @param addr The address to hash\\n     * @return The ENS node hash.\\n     */\\n    function node(address addr) public pure returns (bytes32) {\\n        return keccak256(abi.encodePacked(ADDR_REVERSE_NODE, sha3HexAddress(addr)));\\n    }\\n\\n    /**\\n     * @dev An optimised function to compute the sha3 of the lower-case\\n     *      hexadecimal representation of an Ethereum address.\\n     * @param addr The address to hash\\n     * @return The SHA3 hash of the lower-case hexadecimal encoding of the\\n     *         input address.\\n     */\\n    function sha3HexAddress(address addr) private pure returns (bytes32 ret) {\\n        addr;\\n        ret; // Stop warning us about unused variables\\n        assembly {\\n            let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\\n\\n            for { let i := 40 } gt(i, 0) { } {\\n                i := sub(i, 1)\\n                mstore8(i, byte(and(addr, 0xf), lookup))\\n                addr := div(addr, 0x10)\\n                i := sub(i, 1)\\n                mstore8(i, byte(and(addr, 0xf), lookup))\\n                addr := div(addr, 0x10)\\n            }\\n\\n            ret := keccak256(0, 40)\\n        }\\n    }\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol\",\"exportedSymbols\":{\"Resolver\":[2738],\"ReverseRegistrar\":[2954]},\"id\":2955,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2729,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:9\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":2730,\"nodeType\":\"ImportDirective\",\"scope\":2955,\"sourceUnit\":437,\"src\":\"25:19:9\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":false,\"id\":2738,\"linearizedBaseContracts\":[2738],\"name\":\"Resolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"body\":null,\"documentation\":null,\"id\":2737,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2735,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2732,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2737,\"src\":\"87:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2731,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"87:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2734,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2737,\"src\":\"101:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2733,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"101:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"86:34:9\"},\"returnParameters\":{\"id\":2736,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"127:0:9\"},\"scope\":2738,\"src\":\"70:58:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":2955,\"src\":\"46:84:9\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":true,\"id\":2954,\"linearizedBaseContracts\":[2954],\"name\":\"ReverseRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":2741,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"196:110:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2739,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"196:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532\",\"id\":2740,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"240:66:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1\",\"typeString\":\"int_const 6595...(69 digits omitted)...3154\"},\"value\":\"0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2\"},\"visibility\":\"public\"},{\"constant\":false,\"id\":2743,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"313:14:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2742,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"313:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2745,\"name\":\"defaultResolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"333:31:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"},\"typeName\":{\"contractScope\":null,\"id\":2744,\"name\":\"Resolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2738,\"src\":\"333:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2785,\"nodeType\":\"Block\",\"src\":\"593:332:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2754,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2752,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"603:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2753,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2747,\"src\":\"609:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"603:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2755,\"nodeType\":\"ExpressionStatement\",\"src\":\"603:13:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2758,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2756,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"626:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2757,\"name\":\"resolverAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2749,\"src\":\"644:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"src\":\"626:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"id\":2759,\"nodeType\":\"ExpressionStatement\",\"src\":\"626:30:9\"},{\"assignments\":[2761],\"declarations\":[{\"constant\":false,\"id\":2761,\"name\":\"oldRegistrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":2785,\"src\":\"733:29:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"},\"typeName\":{\"contractScope\":null,\"id\":2760,\"name\":\"ReverseRegistrar\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2954,\"src\":\"733:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2768,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2765,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"792:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2763,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"782:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2764,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"782:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2766,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"782:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2762,\"name\":\"ReverseRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2954,\"src\":\"765:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_ReverseRegistrar_$2954_$\",\"typeString\":\"type(contract ReverseRegistrar)\"}},\"id\":2767,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"765:46:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"733:78:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2775,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2770,\"name\":\"oldRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2761,\"src\":\"833:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2769,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"825:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2771,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"825:21:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2773,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"858:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2772,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"850:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2774,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"850:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"825:37:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2784,\"nodeType\":\"IfStatement\",\"src\":\"821:98:9\",\"trueBody\":{\"id\":2783,\"nodeType\":\"Block\",\"src\":\"864:55:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2779,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"897:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2780,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"897:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2776,\"name\":\"oldRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2761,\"src\":\"878:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"id\":2778,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"claim\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2801,\"src\":\"878:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) external returns (bytes32)\"}},\"id\":2781,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"878:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2782,\"nodeType\":\"ExpressionStatement\",\"src\":\"878:30:9\"}]}}]},\"documentation\":\"@dev Constructor\\n@param ensAddr The address of the ENS registry.\\n@param resolverAddr The address of the default reverse resolver.\",\"id\":2786,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2750,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2747,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2786,\"src\":\"550:11:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2746,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"550:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2749,\"name\":\"resolverAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2786,\"src\":\"563:21:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"},\"typeName\":{\"contractScope\":null,\"id\":2748,\"name\":\"Resolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2738,\"src\":\"563:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"549:36:9\"},\"returnParameters\":{\"id\":2751,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"593:0:9\"},\"scope\":2954,\"src\":\"538:387:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2800,\"nodeType\":\"Block\",\"src\":\"1251:62:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2794,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2788,\"src\":\"1286:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2796,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1301:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2795,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1293:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2797,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1293:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":2793,\"name\":\"claimWithResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2894,\"src\":\"1268:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address,address) returns (bytes32)\"}},\"id\":2798,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1268:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2792,\"id\":2799,\"nodeType\":\"Return\",\"src\":\"1261:45:9\"}]},\"documentation\":\"@dev Transfers ownership of the reverse ENS record associated with the\\n     calling account.\\n@param owner The address to set as the owner of the reverse record in ENS.\\n@return The ENS node hash of the reverse record.\",\"id\":2801,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"claim\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2789,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2788,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2801,\"src\":\"1211:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2787,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1211:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1210:15:9\"},\"returnParameters\":{\"id\":2792,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2791,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2801,\"src\":\"1242:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2790,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1242:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1241:9:9\"},\"scope\":2954,\"src\":\"1196:117:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2893,\"nodeType\":\"Block\",\"src\":\"1746:786:9\",\"statements\":[{\"assignments\":[2811],\"declarations\":[{\"constant\":false,\"id\":2811,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1756:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2810,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1756:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2816,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2813,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"1787:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2814,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1787:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":2812,\"name\":\"sha3HexAddress\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2953,\"src\":\"1772:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) pure returns (bytes32)\"}},\"id\":2815,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1772:26:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1756:42:9\"},{\"assignments\":[2818],\"declarations\":[{\"constant\":false,\"id\":2818,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1808:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2817,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1808:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2826,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2822,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"1850:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2823,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"1869:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2820,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"1833:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2821,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1833:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2824,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1833:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2819,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"1823:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2825,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1823:53:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1808:68:9\"},{\"assignments\":[2828],\"declarations\":[{\"constant\":false,\"id\":2828,\"name\":\"currentOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1886:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2827,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1886:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2833,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2831,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"1919:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2829,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"1909:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2830,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"1909:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2832,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1909:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1886:38:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":2845,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2838,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2834,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"1982:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2836,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2002:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2835,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1994:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2837,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1994:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1982:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2844,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2839,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"2010:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2842,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2035:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2840,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2022:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2841,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":412,\"src\":\"2022:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2843,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2022:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2010:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1982:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2877,\"nodeType\":\"IfStatement\",\"src\":\"1978:372:9\",\"trueBody\":{\"id\":2876,\"nodeType\":\"Block\",\"src\":\"2042:308:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2850,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2846,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2125:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2848,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2149:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2847,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2141:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2849,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2141:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2125:29:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2868,\"nodeType\":\"IfStatement\",\"src\":\"2121:174:9\",\"trueBody\":{\"id\":2867,\"nodeType\":\"Block\",\"src\":\"2156:139:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2854,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"2194:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2855,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"2213:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2857,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2228:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2856,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2220:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2858,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2220:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2851,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2174:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2853,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"2174:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2859,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2174:60:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2860,\"nodeType\":\"ExpressionStatement\",\"src\":\"2174:60:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2865,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2861,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2252:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2863,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2275:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2862,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2267:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2864,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2267:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2252:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2866,\"nodeType\":\"ExpressionStatement\",\"src\":\"2252:28:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2872,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2324:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2873,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"2330:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2869,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2308:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2871,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setResolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":377,\"src\":\"2308:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2874,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2308:31:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2875,\"nodeType\":\"ExpressionStatement\",\"src\":\"2308:31:9\"}]}},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2880,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2878,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2404:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2879,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2803,\"src\":\"2420:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2404:21:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2890,\"nodeType\":\"IfStatement\",\"src\":\"2400:104:9\",\"trueBody\":{\"id\":2889,\"nodeType\":\"Block\",\"src\":\"2427:77:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2884,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"2461:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2885,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"2480:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2886,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2803,\"src\":\"2487:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2881,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2441:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2883,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"2441:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2887,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2441:52:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2888,\"nodeType\":\"ExpressionStatement\",\"src\":\"2441:52:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":2891,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2521:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2809,\"id\":2892,\"nodeType\":\"Return\",\"src\":\"2514:11:9\"}]},\"documentation\":\"@dev Transfers ownership of the reverse ENS record associated with the\\n     calling account.\\n@param owner The address to set as the owner of the reverse record in ENS.\\n@param resolver The address of the resolver to set; 0 to leave unchanged.\\n@return The ENS node hash of the reverse record.\",\"id\":2894,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"claimWithResolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2806,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2803,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1688:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2802,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1688:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2805,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1703:16:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2804,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1703:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1687:33:9\"},\"returnParameters\":{\"id\":2809,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2808,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1737:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2807,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1737:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1736:9:9\"},\"scope\":2954,\"src\":\"1661:871:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2921,\"nodeType\":\"Block\",\"src\":\"2913:156:9\",\"statements\":[{\"assignments\":[2902],\"declarations\":[{\"constant\":false,\"id\":2902,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2921,\"src\":\"2923:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2901,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2923:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2911,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2905,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2964:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2904,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2956:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2906,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2956:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2908,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"2979:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}],\"id\":2907,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2971:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2909,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2971:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2903,\"name\":\"claimWithResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2894,\"src\":\"2938:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address,address) returns (bytes32)\"}},\"id\":2910,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2938:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2923:73:9\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2915,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2902,\"src\":\"3030:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2916,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2896,\"src\":\"3036:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}],\"expression\":{\"argumentTypes\":null,\"id\":2912,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"3006:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"id\":2914,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setName\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2737,\"src\":\"3006:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32,string memory) external\"}},\"id\":2917,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3006:35:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2918,\"nodeType\":\"ExpressionStatement\",\"src\":\"3006:35:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2919,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2902,\"src\":\"3058:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2900,\"id\":2920,\"nodeType\":\"Return\",\"src\":\"3051:11:9\"}]},\"documentation\":\"@dev Sets the `name()` record for the reverse ENS record associated with\\nthe calling account. First updates the resolver to the default reverse\\nresolver if necessary.\\n@param name The name to set for this address.\\n@return The ENS node hash of the reverse record.\",\"id\":2922,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2897,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2896,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2922,\"src\":\"2868:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2895,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2868:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2867:20:9\"},\"returnParameters\":{\"id\":2900,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2899,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2922,\"src\":\"2904:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2898,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2904:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2903:9:9\"},\"scope\":2954,\"src\":\"2851:218:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2939,\"nodeType\":\"Block\",\"src\":\"3295:92:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2932,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"3339:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2934,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2924,\"src\":\"3373:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2933,\"name\":\"sha3HexAddress\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2953,\"src\":\"3358:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) pure returns (bytes32)\"}},\"id\":2935,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3358:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2930,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"3322:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2931,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3322:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2936,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3322:57:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2929,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"3312:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2937,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3312:68:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2928,\"id\":2938,\"nodeType\":\"Return\",\"src\":\"3305:75:9\"}]},\"documentation\":\"@dev Returns the node hash for a given account's reverse records.\\n@param addr The address to hash\\n@return The ENS node hash.\",\"id\":2940,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"node\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2925,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2924,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2940,\"src\":\"3251:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2923,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3251:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3250:14:9\"},\"returnParameters\":{\"id\":2928,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2927,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2940,\"src\":\"3286:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2926,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3286:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3285:9:9\"},\"scope\":2954,\"src\":\"3237:150:9\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2952,\"nodeType\":\"Block\",\"src\":\"3761:553:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2947,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2942,\"src\":\"3771:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2948,\"nodeType\":\"ExpressionStatement\",\"src\":\"3771:4:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2949,\"name\":\"ret\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2945,\"src\":\"3785:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2950,\"nodeType\":\"ExpressionStatement\",\"src\":\"3785:3:9\"},{\"externalReferences\":[{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4096:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4059:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4108:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4236:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4224:4:9\",\"valueSize\":1}},{\"ret\":{\"declaration\":2945,\"isOffset\":false,\"isSlot\":false,\"src\":\"4275:3:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4187:4:9\",\"valueSize\":1}}],\"id\":2951,\"nodeType\":\"InlineAssembly\",\"operations\":\"{\\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\\n    for {\\n        let i := 40\\n    }\\n    gt(i, 0)\\n    {\\n    }\\n    {\\n        i := sub(i, 1)\\n        mstore8(i, byte(and(addr, 0xf), lookup))\\n        addr := div(addr, 0x10)\\n        i := sub(i, 1)\\n        mstore8(i, byte(and(addr, 0xf), lookup))\\n        addr := div(addr, 0x10)\\n    }\\n    ret := keccak256(0, 40)\\n}\",\"src\":\"3840:474:9\"}]},\"documentation\":\"@dev An optimised function to compute the sha3 of the lower-case\\n     hexadecimal representation of an Ethereum address.\\n@param addr The address to hash\\n@return The SHA3 hash of the lower-case hexadecimal encoding of the\\n        input address.\",\"id\":2953,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"sha3HexAddress\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2943,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2942,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2953,\"src\":\"3712:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2941,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3712:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3711:14:9\"},\"returnParameters\":{\"id\":2946,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2945,\"name\":\"ret\",\"nodeType\":\"VariableDeclaration\",\"scope\":2953,\"src\":\"3748:11:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2944,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3748:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3747:13:9\"},\"scope\":2954,\"src\":\"3688:626:9\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"private\"}],\"scope\":2955,\"src\":\"132:4184:9\"}],\"src\":\"0:4317:9\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ReverseRegistrar.sol\",\"exportedSymbols\":{\"Resolver\":[2738],\"ReverseRegistrar\":[2954]},\"id\":2955,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2729,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:9\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":2730,\"nodeType\":\"ImportDirective\",\"scope\":2955,\"sourceUnit\":437,\"src\":\"25:19:9\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":false,\"id\":2738,\"linearizedBaseContracts\":[2738],\"name\":\"Resolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"body\":null,\"documentation\":null,\"id\":2737,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2735,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2732,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2737,\"src\":\"87:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2731,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"87:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2734,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2737,\"src\":\"101:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2733,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"101:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"86:34:9\"},\"returnParameters\":{\"id\":2736,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"127:0:9\"},\"scope\":2738,\"src\":\"70:58:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":2955,\"src\":\"46:84:9\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":true,\"id\":2954,\"linearizedBaseContracts\":[2954],\"name\":\"ReverseRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":2741,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"196:110:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2739,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"196:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532\",\"id\":2740,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"240:66:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1\",\"typeString\":\"int_const 6595...(69 digits omitted)...3154\"},\"value\":\"0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2\"},\"visibility\":\"public\"},{\"constant\":false,\"id\":2743,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"313:14:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2742,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"313:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2745,\"name\":\"defaultResolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":2954,\"src\":\"333:31:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"},\"typeName\":{\"contractScope\":null,\"id\":2744,\"name\":\"Resolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2738,\"src\":\"333:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2785,\"nodeType\":\"Block\",\"src\":\"593:332:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2754,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2752,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"603:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2753,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2747,\"src\":\"609:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"603:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2755,\"nodeType\":\"ExpressionStatement\",\"src\":\"603:13:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2758,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2756,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"626:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2757,\"name\":\"resolverAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2749,\"src\":\"644:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"src\":\"626:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"id\":2759,\"nodeType\":\"ExpressionStatement\",\"src\":\"626:30:9\"},{\"assignments\":[2761],\"declarations\":[{\"constant\":false,\"id\":2761,\"name\":\"oldRegistrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":2785,\"src\":\"733:29:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"},\"typeName\":{\"contractScope\":null,\"id\":2760,\"name\":\"ReverseRegistrar\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2954,\"src\":\"733:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2768,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2765,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"792:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2763,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"782:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2764,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"782:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2766,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"782:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2762,\"name\":\"ReverseRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2954,\"src\":\"765:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_ReverseRegistrar_$2954_$\",\"typeString\":\"type(contract ReverseRegistrar)\"}},\"id\":2767,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"765:46:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"733:78:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2775,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2770,\"name\":\"oldRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2761,\"src\":\"833:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2769,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"825:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2771,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"825:21:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2773,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"858:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2772,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"850:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2774,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"850:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"825:37:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2784,\"nodeType\":\"IfStatement\",\"src\":\"821:98:9\",\"trueBody\":{\"id\":2783,\"nodeType\":\"Block\",\"src\":\"864:55:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2779,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"897:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2780,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"897:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":2776,\"name\":\"oldRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2761,\"src\":\"878:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}},\"id\":2778,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"claim\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2801,\"src\":\"878:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) external returns (bytes32)\"}},\"id\":2781,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"878:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2782,\"nodeType\":\"ExpressionStatement\",\"src\":\"878:30:9\"}]}}]},\"documentation\":\"@dev Constructor\\n@param ensAddr The address of the ENS registry.\\n@param resolverAddr The address of the default reverse resolver.\",\"id\":2786,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2750,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2747,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2786,\"src\":\"550:11:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2746,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"550:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2749,\"name\":\"resolverAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2786,\"src\":\"563:21:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"},\"typeName\":{\"contractScope\":null,\"id\":2748,\"name\":\"Resolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":2738,\"src\":\"563:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"549:36:9\"},\"returnParameters\":{\"id\":2751,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"593:0:9\"},\"scope\":2954,\"src\":\"538:387:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2800,\"nodeType\":\"Block\",\"src\":\"1251:62:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2794,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2788,\"src\":\"1286:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2796,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1301:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2795,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1293:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2797,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1293:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":2793,\"name\":\"claimWithResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2894,\"src\":\"1268:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address,address) returns (bytes32)\"}},\"id\":2798,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1268:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2792,\"id\":2799,\"nodeType\":\"Return\",\"src\":\"1261:45:9\"}]},\"documentation\":\"@dev Transfers ownership of the reverse ENS record associated with the\\n     calling account.\\n@param owner The address to set as the owner of the reverse record in ENS.\\n@return The ENS node hash of the reverse record.\",\"id\":2801,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"claim\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2789,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2788,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2801,\"src\":\"1211:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2787,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1211:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1210:15:9\"},\"returnParameters\":{\"id\":2792,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2791,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2801,\"src\":\"1242:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2790,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1242:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1241:9:9\"},\"scope\":2954,\"src\":\"1196:117:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2893,\"nodeType\":\"Block\",\"src\":\"1746:786:9\",\"statements\":[{\"assignments\":[2811],\"declarations\":[{\"constant\":false,\"id\":2811,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1756:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2810,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1756:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2816,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":2813,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3032,\"src\":\"1787:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":2814,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1787:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"id\":2812,\"name\":\"sha3HexAddress\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2953,\"src\":\"1772:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) pure returns (bytes32)\"}},\"id\":2815,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1772:26:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1756:42:9\"},{\"assignments\":[2818],\"declarations\":[{\"constant\":false,\"id\":2818,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1808:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2817,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1808:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2826,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2822,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"1850:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2823,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"1869:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2820,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"1833:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2821,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1833:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2824,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1833:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2819,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"1823:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2825,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1823:53:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1808:68:9\"},{\"assignments\":[2828],\"declarations\":[{\"constant\":false,\"id\":2828,\"name\":\"currentOwner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2893,\"src\":\"1886:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2827,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1886:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2833,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2831,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"1919:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2829,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"1909:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2830,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":405,\"src\":\"1909:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2832,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1909:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"1886:38:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":2845,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2838,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2834,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"1982:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":2836,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2002:3:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":2835,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1994:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2837,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1994:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1982:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"&&\",\"rightExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2844,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2839,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"2010:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2842,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2035:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2840,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2022:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2841,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"resolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":412,\"src\":\"2022:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":2843,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2022:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2010:30:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1982:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2877,\"nodeType\":\"IfStatement\",\"src\":\"1978:372:9\",\"trueBody\":{\"id\":2876,\"nodeType\":\"Block\",\"src\":\"2042:308:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2850,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2846,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2125:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2848,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2149:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2847,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2141:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2849,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2141:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2125:29:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2868,\"nodeType\":\"IfStatement\",\"src\":\"2121:174:9\",\"trueBody\":{\"id\":2867,\"nodeType\":\"Block\",\"src\":\"2156:139:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2854,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"2194:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2855,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"2213:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2857,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2228:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2856,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2220:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2858,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2220:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2851,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2174:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2853,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"2174:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2859,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2174:60:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2860,\"nodeType\":\"ExpressionStatement\",\"src\":\"2174:60:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2865,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2861,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2252:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2863,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2275:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2862,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2267:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2864,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2267:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2252:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2866,\"nodeType\":\"ExpressionStatement\",\"src\":\"2252:28:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2872,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2324:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2873,\"name\":\"resolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2805,\"src\":\"2330:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2869,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2308:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2871,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setResolver\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":377,\"src\":\"2308:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_address_$returns$__$\",\"typeString\":\"function (bytes32,address) external\"}},\"id\":2874,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2308:31:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2875,\"nodeType\":\"ExpressionStatement\",\"src\":\"2308:31:9\"}]}},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":2880,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":2878,\"name\":\"currentOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2828,\"src\":\"2404:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2879,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2803,\"src\":\"2420:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"2404:21:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":2890,\"nodeType\":\"IfStatement\",\"src\":\"2400:104:9\",\"trueBody\":{\"id\":2889,\"nodeType\":\"Block\",\"src\":\"2427:77:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2884,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"2461:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2885,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2811,\"src\":\"2480:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2886,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2803,\"src\":\"2487:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"expression\":{\"argumentTypes\":null,\"id\":2881,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2743,\"src\":\"2441:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2883,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"2441:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":2887,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2441:52:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2888,\"nodeType\":\"ExpressionStatement\",\"src\":\"2441:52:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":2891,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2818,\"src\":\"2521:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2809,\"id\":2892,\"nodeType\":\"Return\",\"src\":\"2514:11:9\"}]},\"documentation\":\"@dev Transfers ownership of the reverse ENS record associated with the\\n     calling account.\\n@param owner The address to set as the owner of the reverse record in ENS.\\n@param resolver The address of the resolver to set; 0 to leave unchanged.\\n@return The ENS node hash of the reverse record.\",\"id\":2894,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"claimWithResolver\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2806,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2803,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1688:13:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2802,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1688:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2805,\"name\":\"resolver\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1703:16:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2804,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1703:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1687:33:9\"},\"returnParameters\":{\"id\":2809,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2808,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2894,\"src\":\"1737:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2807,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1737:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1736:9:9\"},\"scope\":2954,\"src\":\"1661:871:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2921,\"nodeType\":\"Block\",\"src\":\"2913:156:9\",\"statements\":[{\"assignments\":[2902],\"declarations\":[{\"constant\":false,\"id\":2902,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2921,\"src\":\"2923:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2901,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2923:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":2911,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2905,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3065,\"src\":\"2964:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$2954\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":2904,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2956:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2906,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2956:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2908,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"2979:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}],\"id\":2907,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2971:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":2909,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2971:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2903,\"name\":\"claimWithResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2894,\"src\":\"2938:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_address_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address,address) returns (bytes32)\"}},\"id\":2910,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2938:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2923:73:9\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2915,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2902,\"src\":\"3030:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":2916,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2896,\"src\":\"3036:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}],\"expression\":{\"argumentTypes\":null,\"id\":2912,\"name\":\"defaultResolver\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2745,\"src\":\"3006:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Resolver_$2738\",\"typeString\":\"contract Resolver\"}},\"id\":2914,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setName\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2737,\"src\":\"3006:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_string_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32,string memory) external\"}},\"id\":2917,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3006:35:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2918,\"nodeType\":\"ExpressionStatement\",\"src\":\"3006:35:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2919,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2902,\"src\":\"3058:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2900,\"id\":2920,\"nodeType\":\"Return\",\"src\":\"3051:11:9\"}]},\"documentation\":\"@dev Sets the `name()` record for the reverse ENS record associated with\\nthe calling account. First updates the resolver to the default reverse\\nresolver if necessary.\\n@param name The name to set for this address.\\n@return The ENS node hash of the reverse record.\",\"id\":2922,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2897,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2896,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":2922,\"src\":\"2868:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":2895,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2868:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2867:20:9\"},\"returnParameters\":{\"id\":2900,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2899,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2922,\"src\":\"2904:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2898,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2904:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2903:9:9\"},\"scope\":2954,\"src\":\"2851:218:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2939,\"nodeType\":\"Block\",\"src\":\"3295:92:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2932,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2741,\"src\":\"3339:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":2934,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2924,\"src\":\"3373:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":2933,\"name\":\"sha3HexAddress\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2953,\"src\":\"3358:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) pure returns (bytes32)\"}},\"id\":2935,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3358:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":2930,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3019,\"src\":\"3322:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":2931,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3322:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":2936,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3322:57:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":2929,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3026,\"src\":\"3312:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":2937,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3312:68:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"functionReturnParameters\":2928,\"id\":2938,\"nodeType\":\"Return\",\"src\":\"3305:75:9\"}]},\"documentation\":\"@dev Returns the node hash for a given account's reverse records.\\n@param addr The address to hash\\n@return The ENS node hash.\",\"id\":2940,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"node\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2925,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2924,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2940,\"src\":\"3251:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2923,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3251:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3250:14:9\"},\"returnParameters\":{\"id\":2928,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2927,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":2940,\"src\":\"3286:7:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2926,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3286:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3285:9:9\"},\"scope\":2954,\"src\":\"3237:150:9\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2952,\"nodeType\":\"Block\",\"src\":\"3761:553:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2947,\"name\":\"addr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2942,\"src\":\"3771:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":2948,\"nodeType\":\"ExpressionStatement\",\"src\":\"3771:4:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":2949,\"name\":\"ret\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2945,\"src\":\"3785:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2950,\"nodeType\":\"ExpressionStatement\",\"src\":\"3785:3:9\"},{\"externalReferences\":[{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4096:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4059:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4108:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4236:4:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4224:4:9\",\"valueSize\":1}},{\"ret\":{\"declaration\":2945,\"isOffset\":false,\"isSlot\":false,\"src\":\"4275:3:9\",\"valueSize\":1}},{\"addr\":{\"declaration\":2942,\"isOffset\":false,\"isSlot\":false,\"src\":\"4187:4:9\",\"valueSize\":1}}],\"id\":2951,\"nodeType\":\"InlineAssembly\",\"operations\":\"{\\n    let lookup := 0x3031323334353637383961626364656600000000000000000000000000000000\\n    for {\\n        let i := 40\\n    }\\n    gt(i, 0)\\n    {\\n    }\\n    {\\n        i := sub(i, 1)\\n        mstore8(i, byte(and(addr, 0xf), lookup))\\n        addr := div(addr, 0x10)\\n        i := sub(i, 1)\\n        mstore8(i, byte(and(addr, 0xf), lookup))\\n        addr := div(addr, 0x10)\\n    }\\n    ret := keccak256(0, 40)\\n}\",\"src\":\"3840:474:9\"}]},\"documentation\":\"@dev An optimised function to compute the sha3 of the lower-case\\n     hexadecimal representation of an Ethereum address.\\n@param addr The address to hash\\n@return The SHA3 hash of the lower-case hexadecimal encoding of the\\n        input address.\",\"id\":2953,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"sha3HexAddress\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2943,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2942,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2953,\"src\":\"3712:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2941,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3712:7:9\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3711:14:9\"},\"returnParameters\":{\"id\":2946,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2945,\"name\":\"ret\",\"nodeType\":\"VariableDeclaration\",\"scope\":2953,\"src\":\"3748:11:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2944,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3748:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"3747:13:9\"},\"scope\":2954,\"src\":\"3688:626:9\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"private\"}],\"scope\":2955,\"src\":\"132:4184:9\"}],\"src\":\"0:4317:9\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.105Z\",\"devdoc\":{\"methods\":{\"claim(address)\":{\"details\":\"Transfers ownership of the reverse ENS record associated with the     calling account.\",\"params\":{\"owner\":\"The address to set as the owner of the reverse record in ENS.\"},\"return\":\"The ENS node hash of the reverse record.\"},\"claimWithResolver(address,address)\":{\"details\":\"Transfers ownership of the reverse ENS record associated with the     calling account.\",\"params\":{\"owner\":\"The address to set as the owner of the reverse record in ENS.\",\"resolver\":\"The address of the resolver to set; 0 to leave unchanged.\"},\"return\":\"The ENS node hash of the reverse record.\"},\"constructor\":{\"details\":\"Constructor\",\"params\":{\"ensAddr\":\"The address of the ENS registry.\",\"resolverAddr\":\"The address of the default reverse resolver.\"}},\"node(address)\":{\"details\":\"Returns the node hash for a given account's reverse records.\",\"params\":{\"addr\":\"The address to hash\"},\"return\":\"The ENS node hash.\"},\"setName(string)\":{\"details\":\"Sets the `name()` record for the reverse ENS record associated with the calling account. First updates the resolver to the default reverse resolver if necessary.\",\"params\":{\"name\":\"The name to set for this address.\"},\"return\":\"The ENS node hash of the reverse record.\"}}},\"userdoc\":{\"methods\":{}}}");

/***/ }),

/***/ 620135:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"TestRegistrar\",\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"expiryTimes\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rootNode\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"},{\"name\":\"node\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":false,\"inputs\":[{\"name\":\"label\",\"type\":\"bytes32\"},{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"register\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.0+commit.1d4f565a\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"ens\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"expiryTimes\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"label\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"owner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"register\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"rootNode\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"name\\\":\\\"ensAddr\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"constructor\\\":{\\\"params\\\":{\\\"ensAddr\\\":\\\"The address of the ENS registry.\\\",\\\"node\\\":\\\"The node that this registrar administers.\\\"}},\\\"register(bytes32,address)\\\":{\\\"params\\\":{\\\"label\\\":\\\"The hash of the label to register.\\\",\\\"owner\\\":\\\"The address of the new owner.\\\"}}}},\\\"userdoc\\\":{\\\"methods\\\":{\\\"constructor\\\":\\\"Constructor.\\\",\\\"register(bytes32,address)\\\":{\\\"notice\\\":\\\"Register a name that's not currently registered\\\"}},\\\"notice\\\":\\\"A registrar that allocates subdomains to the first person to claim them, but expires registrations a fixed period after they're initially claimed.\\\"}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/TestRegistrar.sol\\\":\\\"TestRegistrar\\\"},\\\"evmVersion\\\":\\\"byzantium\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\\\":{\\\"keccak256\\\":\\\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\\\",\\\"urls\\\":[\\\"bzzr://8e5a54eed92d9bf8824175cf337e0df46e647deb0864eb5f091ea0b8132568f6\\\"]},\\\"/Users/deaneigenmann/Documents/ens/contracts/TestRegistrar.sol\\\":{\\\"keccak256\\\":\\\"0x9ce17bee2d30526c45754e0032b8a8c5f1c4b3893ecb9d42f4804fe47ad5f34b\\\",\\\"urls\\\":[\\\"bzzr://d5a0efff480cff0774a2b8cd25c185e3aa13aaaed4febe3e5921c7c637b5cd5f\\\"]}},\\\"version\\\":1}\",\"bytecode\":\"0x608060405234801561001057600080fd5b506040516040806103f18339810180604052604081101561003057600080fd5b810190808051906020019092919080519060200190929190505050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600181905550505061034e806100a36000396000f3fe608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633f15457f14610067578063af9f26e4146100be578063d22057a91461010d578063faff50a814610168575b600080fd5b34801561007357600080fd5b5061007c610193565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100ca57600080fd5b506100f7600480360360208110156100e157600080fd5b81019080803590602001909291905050506101b8565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b506101666004803603604081101561013057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101d0565b005b34801561017457600080fd5b5061017d61031c565b6040518082815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b4260026000848152602001908152602001600020541015156101f157600080fd5b6224ea00420160026000848152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156102dc57600080fd5b505af11580156102f0573d6000803e3d6000fd5b505050506040513d602081101561030657600080fd5b8101908080519060200190929190505050505050565b6001548156fea165627a7a7230582074dc863731593597db7b651147325d2fb231518dc70e00d867c3ed991d27e2cf0029\",\"deployedBytecode\":\"0x608060405260043610610062576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633f15457f14610067578063af9f26e4146100be578063d22057a91461010d578063faff50a814610168575b600080fd5b34801561007357600080fd5b5061007c610193565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100ca57600080fd5b506100f7600480360360208110156100e157600080fd5b81019080803590602001909291905050506101b8565b6040518082815260200191505060405180910390f35b34801561011957600080fd5b506101666004803603604081101561013057600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506101d0565b005b34801561017457600080fd5b5061017d61031c565b6040518082815260200191505060405180910390f35b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60026020528060005260406000206000915090505481565b4260026000848152602001908152602001600020541015156101f157600080fd5b6224ea00420160026000848152602001908152602001600020819055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360015484846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b1580156102dc57600080fd5b505af11580156102f0573d6000803e3d6000fd5b505050506040513d602081101561030657600080fd5b8101908080519060200190929190505050505050565b6001548156fea165627a7a7230582074dc863731593597db7b651147325d2fb231518dc70e00d867c3ed991d27e2cf0029\",\"sourceMap\":\"209:829:10:-;;;539:101;8:9:-1;5:2;;;30:1;27;20:12;5:2;539:101:10;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;539:101:10;;;;;;;;;;;;;;;;;;;;;;;;;601:7;595:3;;:13;;;;;;;;;;;;;;;;;;629:4;618:8;:15;;;;539:101;;209:829;;;;;;\",\"deployedSourceMap\":\"209:829:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;287:14;;8:9:-1;5:2;;;30:1;27;20:12;5:2;287:14:10;;;;;;;;;;;;;;;;;;;;;;;;;;;336:44;;8:9:-1;5:2;;;30:1;27;20:12;5:2;336:44:10;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;336:44:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;822:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;822:214:10;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;822:214:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;307:23;;8:9:-1;5:2;;;30:1;27;20:12;5:2;307:23:10;;;;;;;;;;;;;;;;;;;;;;;287:14;;;;;;;;;;;;;:::o;336:44::-;;;;;;;;;;;;;;;;;:::o;822:214::-;916:3;895:11;:18;907:5;895:18;;;;;;;;;;;;:24;887:33;;;;;;;;273:7;952:3;:24;931:11;:18;943:5;931:18;;;;;;;;;;;:45;;;;986:3;;;;;;;;;;;:19;;;1006:8;;1016:5;1023;986:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;986:43:10;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;986:43:10;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;986:43:10;;;;;;;;;;;;;;;;;822:214;;:::o;307:23::-;;;;:::o\",\"source\":\"pragma solidity >=0.4.24;\\n\\nimport \\\"./ENS.sol\\\";\\n\\n/**\\n * A registrar that allocates subdomains to the first person to claim them, but\\n * expires registrations a fixed period after they're initially claimed.\\n */\\ncontract TestRegistrar {\\n    uint constant registrationPeriod = 4 weeks;\\n\\n    ENS public ens;\\n    bytes32 public rootNode;\\n    mapping (bytes32 => uint) public expiryTimes;\\n\\n    /**\\n     * Constructor.\\n     * @param ensAddr The address of the ENS registry.\\n     * @param node The node that this registrar administers.\\n     */\\n    constructor(ENS ensAddr, bytes32 node) public {\\n        ens = ensAddr;\\n        rootNode = node;\\n    }\\n\\n    /**\\n     * Register a name that's not currently registered\\n     * @param label The hash of the label to register.\\n     * @param owner The address of the new owner.\\n     */\\n    function register(bytes32 label, address owner) public {\\n        require(expiryTimes[label] < now);\\n\\n        expiryTimes[label] = now + registrationPeriod;\\n        ens.setSubnodeOwner(rootNode, label, owner);\\n    }\\n}\\n\",\"sourcePath\":\"/Users/deaneigenmann/Documents/ens/contracts/TestRegistrar.sol\",\"ast\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/TestRegistrar.sol\",\"exportedSymbols\":{\"TestRegistrar\":[3017]},\"id\":3018,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2956,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:10\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":2957,\"nodeType\":\"ImportDirective\",\"scope\":3018,\"sourceUnit\":437,\"src\":\"27:19:10\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":\"A registrar that allocates subdomains to the first person to claim them, but\\nexpires registrations a fixed period after they're initially claimed.\",\"fullyImplemented\":true,\"id\":3017,\"linearizedBaseContracts\":[3017],\"name\":\"TestRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":2960,\"name\":\"registrationPeriod\",\"nodeType\":\"VariableDeclaration\",\"scope\":3017,\"src\":\"238:42:10\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2958,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"238:4:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"34\",\"id\":2959,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"273:7:10\",\"subdenomination\":\"weeks\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2419200_by_1\",\"typeString\":\"int_const 2419200\"},\"value\":\"4\"},\"visibility\":\"internal\"},{\"constant\":false,\"id\":2962,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":3017,\"src\":\"287:14:10\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2961,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"287:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2964,\"name\":\"rootNode\",\"nodeType\":\"VariableDeclaration\",\"scope\":3017,\"src\":\"307:23:10\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2963,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"307:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2968,\"name\":\"expiryTimes\",\"nodeType\":\"VariableDeclaration\",\"scope\":3017,\"src\":\"336:44:10\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"},\"typeName\":{\"id\":2967,\"keyType\":{\"id\":2965,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"345:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"336:25:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"},\"valueType\":{\"id\":2966,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"356:4:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2983,\"nodeType\":\"Block\",\"src\":\"585:55:10\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2977,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2975,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2962,\"src\":\"595:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2976,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2970,\"src\":\"601:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"595:13:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2978,\"nodeType\":\"ExpressionStatement\",\"src\":\"595:13:10\"},{\"expression\":{\"argumentTypes\":null,\"id\":2981,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2979,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2964,\"src\":\"618:8:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2980,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2972,\"src\":\"629:4:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"618:15:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2982,\"nodeType\":\"ExpressionStatement\",\"src\":\"618:15:10\"}]},\"documentation\":\"Constructor.\\n@param ensAddr The address of the ENS registry.\\n@param node The node that this registrar administers.\",\"id\":2984,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2973,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2970,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2984,\"src\":\"551:11:10\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2969,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"551:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2972,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2984,\"src\":\"564:12:10\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2971,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"564:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"550:27:10\"},\"returnParameters\":{\"id\":2974,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"585:0:10\"},\"scope\":3017,\"src\":\"539:101:10\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":3015,\"nodeType\":\"Block\",\"src\":\"877:159:10\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2996,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2992,\"name\":\"expiryTimes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2968,\"src\":\"895:11:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":2994,\"indexExpression\":{\"argumentTypes\":null,\"id\":2993,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2986,\"src\":\"907:5:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"895:18:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2995,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"916:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"895:24:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":2991,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"887:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":2997,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"887:33:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2998,\"nodeType\":\"ExpressionStatement\",\"src\":\"887:33:10\"},{\"expression\":{\"argumentTypes\":null,\"id\":3005,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2999,\"name\":\"expiryTimes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2968,\"src\":\"931:11:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":3001,\"indexExpression\":{\"argumentTypes\":null,\"id\":3000,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2986,\"src\":\"943:5:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"931:18:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":3004,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":3002,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"952:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"id\":3003,\"name\":\"registrationPeriod\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2960,\"src\":\"958:18:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"952:24:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"931:45:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":3006,\"nodeType\":\"ExpressionStatement\",\"src\":\"931:45:10\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":3010,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2964,\"src\":\"1006:8:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":3011,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2986,\"src\":\"1016:5:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":3012,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2988,\"src\":\"1023:5:10\",\"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\":3007,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2962,\"src\":\"986:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":3009,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"986:19:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":3013,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"986:43:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":3014,\"nodeType\":\"ExpressionStatement\",\"src\":\"986:43:10\"}]},\"documentation\":\"Register a name that's not currently registered\\n@param label The hash of the label to register.\\n@param owner The address of the new owner.\",\"id\":3016,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"register\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2989,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2986,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":3016,\"src\":\"840:13:10\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2985,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"840:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2988,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":3016,\"src\":\"855:13:10\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2987,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"855:7:10\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"839:30:10\"},\"returnParameters\":{\"id\":2990,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"877:0:10\"},\"scope\":3017,\"src\":\"822:214:10\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":3018,\"src\":\"209:829:10\"}],\"src\":\"0:1039:10\"},\"legacyAST\":{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/TestRegistrar.sol\",\"exportedSymbols\":{\"TestRegistrar\":[3017]},\"id\":3018,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":2956,\"literals\":[\"solidity\",\">=\",\"0.4\",\".24\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:10\"},{\"absolutePath\":\"/Users/deaneigenmann/Documents/ens/contracts/ENS.sol\",\"file\":\"./ENS.sol\",\"id\":2957,\"nodeType\":\"ImportDirective\",\"scope\":3018,\"sourceUnit\":437,\"src\":\"27:19:10\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":\"A registrar that allocates subdomains to the first person to claim them, but\\nexpires registrations a fixed period after they're initially claimed.\",\"fullyImplemented\":true,\"id\":3017,\"linearizedBaseContracts\":[3017],\"name\":\"TestRegistrar\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":2960,\"name\":\"registrationPeriod\",\"nodeType\":\"VariableDeclaration\",\"scope\":3017,\"src\":\"238:42:10\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":2958,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"238:4:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"34\",\"id\":2959,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"273:7:10\",\"subdenomination\":\"weeks\",\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2419200_by_1\",\"typeString\":\"int_const 2419200\"},\"value\":\"4\"},\"visibility\":\"internal\"},{\"constant\":false,\"id\":2962,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":3017,\"src\":\"287:14:10\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2961,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"287:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2964,\"name\":\"rootNode\",\"nodeType\":\"VariableDeclaration\",\"scope\":3017,\"src\":\"307:23:10\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2963,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"307:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":2968,\"name\":\"expiryTimes\",\"nodeType\":\"VariableDeclaration\",\"scope\":3017,\"src\":\"336:44:10\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"},\"typeName\":{\"id\":2967,\"keyType\":{\"id\":2965,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"345:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"336:25:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"},\"valueType\":{\"id\":2966,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"356:4:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":2983,\"nodeType\":\"Block\",\"src\":\"585:55:10\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":2977,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2975,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2962,\"src\":\"595:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2976,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2970,\"src\":\"601:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"src\":\"595:13:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":2978,\"nodeType\":\"ExpressionStatement\",\"src\":\"595:13:10\"},{\"expression\":{\"argumentTypes\":null,\"id\":2981,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":2979,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2964,\"src\":\"618:8:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":2980,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2972,\"src\":\"629:4:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"618:15:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":2982,\"nodeType\":\"ExpressionStatement\",\"src\":\"618:15:10\"}]},\"documentation\":\"Constructor.\\n@param ensAddr The address of the ENS registry.\\n@param node The node that this registrar administers.\",\"id\":2984,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2973,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2970,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":2984,\"src\":\"551:11:10\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":2969,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":436,\"src\":\"551:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2972,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":2984,\"src\":\"564:12:10\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2971,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"564:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"550:27:10\"},\"returnParameters\":{\"id\":2974,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"585:0:10\"},\"scope\":3017,\"src\":\"539:101:10\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":3015,\"nodeType\":\"Block\",\"src\":\"877:159:10\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":2996,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2992,\"name\":\"expiryTimes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2968,\"src\":\"895:11:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":2994,\"indexExpression\":{\"argumentTypes\":null,\"id\":2993,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2986,\"src\":\"907:5:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"895:18:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"id\":2995,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"916:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"895:24:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":2991,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[3035,3036],\"referencedDeclaration\":3035,\"src\":\"887:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":2997,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"887:33:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":2998,\"nodeType\":\"ExpressionStatement\",\"src\":\"887:33:10\"},{\"expression\":{\"argumentTypes\":null,\"id\":3005,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":2999,\"name\":\"expiryTimes\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2968,\"src\":\"931:11:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":3001,\"indexExpression\":{\"argumentTypes\":null,\"id\":3000,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2986,\"src\":\"943:5:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"931:18:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":3004,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":3002,\"name\":\"now\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":3034,\"src\":\"952:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"+\",\"rightExpression\":{\"argumentTypes\":null,\"id\":3003,\"name\":\"registrationPeriod\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2960,\"src\":\"958:18:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"952:24:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"931:45:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":3006,\"nodeType\":\"ExpressionStatement\",\"src\":\"931:45:10\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":3010,\"name\":\"rootNode\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2964,\"src\":\"1006:8:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":3011,\"name\":\"label\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2986,\"src\":\"1016:5:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":3012,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2988,\"src\":\"1023:5:10\",\"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\":3007,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":2962,\"src\":\"986:3:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$436\",\"typeString\":\"contract ENS\"}},\"id\":3009,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"setSubnodeOwner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":370,\"src\":\"986:19:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_bytes32_$_t_bytes32_$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes32,bytes32,address) external returns (bytes32)\"}},\"id\":3013,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"986:43:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":3014,\"nodeType\":\"ExpressionStatement\",\"src\":\"986:43:10\"}]},\"documentation\":\"Register a name that's not currently registered\\n@param label The hash of the label to register.\\n@param owner The address of the new owner.\",\"id\":3016,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"register\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":2989,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":2986,\"name\":\"label\",\"nodeType\":\"VariableDeclaration\",\"scope\":3016,\"src\":\"840:13:10\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":2985,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"840:7:10\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":2988,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":3016,\"src\":\"855:13:10\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":2987,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"855:7:10\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"839:30:10\"},\"returnParameters\":{\"id\":2990,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"877:0:10\"},\"scope\":3017,\"src\":\"822:214:10\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":3018,\"src\":\"209:829:10\"}],\"src\":\"0:1039:10\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.0+commit.1d4f565a.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.6\",\"updatedAt\":\"2020-01-30T01:30:20.108Z\",\"devdoc\":{\"methods\":{\"constructor\":{\"params\":{\"ensAddr\":\"The address of the ENS registry.\",\"node\":\"The node that this registrar administers.\"}},\"register(bytes32,address)\":{\"params\":{\"label\":\"The hash of the label to register.\",\"owner\":\"The address of the new owner.\"}}}},\"userdoc\":{\"methods\":{\"constructor\":\"Constructor.\",\"register(bytes32,address)\":{\"notice\":\"Register a name that's not currently registered\"}},\"notice\":\"A registrar that allocates subdomains to the first person to claim them, but expires registrations a fixed period after they're initially claimed.\"}}");

/***/ }),

/***/ 535842:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

const Deed = __webpack_require__(24411)
const DeedImplementation = __webpack_require__(369244)
const ENS = __webpack_require__(120650)
const ENSRegistry = __webpack_require__(329252)
const FIFSRegistrar = __webpack_require__(366240)
const HashRegistrar = __webpack_require__(137874)
const Migrations = __webpack_require__(513641)
const Registrar = __webpack_require__(752370)
const Resolver = __webpack_require__(248075)
const ReverseRegistrar = __webpack_require__(813900)
const TestRegistrar = __webpack_require__(620135)

module.exports = {
  Deed,
  DeedImplementation,
  ENS,
  ENSRegistry,
  FIFSRegistrar,
  HashRegistrar,
  Migrations,
  Registrar,
  Resolver,
  ReverseRegistrar,
  TestRegistrar
}


/***/ }),

/***/ 196999:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"DNSResolver\",\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"resource\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"record\",\"type\":\"bytes\"}],\"name\":\"DNSRecordChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"resource\",\"type\":\"uint16\"}],\"name\":\"DNSRecordDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"DNSZoneCleared\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setDNSRecords\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"bytes32\"},{\"name\":\"resource\",\"type\":\"uint16\"}],\"name\":\"dnsRecord\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"bytes32\"}],\"name\":\"hasDNSRecords\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"clearDNSZone\",\"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\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"}],\\\"name\\\":\\\"supportsInterface\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setDNSRecords\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"hasDNSRecords\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"resource\\\",\\\"type\\\":\\\"uint16\\\"}],\\\"name\\\":\\\"dnsRecord\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"clearDNSZone\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"resource\\\",\\\"type\\\":\\\"uint16\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"record\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"DNSRecordChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"resource\\\",\\\"type\\\":\\\"uint16\\\"}],\\\"name\\\":\\\"DNSRecordDeleted\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"DNSZoneCleared\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"clearDNSZone(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"the namehash of the node for which to clear the zone\\\"}},\\\"dnsRecord(bytes32,bytes32,uint16)\\\":{\\\"params\\\":{\\\"name\\\":\\\"the keccak-256 hash of the fully-qualified name for which to fetch the record\\\",\\\"node\\\":\\\"the namehash of the node for which to fetch the record\\\",\\\"resource\\\":\\\"the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\\"},\\\"return\\\":\\\"the DNS record in wire format if present, otherwise empty\\\"},\\\"hasDNSRecords(bytes32,bytes32)\\\":{\\\"params\\\":{\\\"name\\\":\\\"the namehash of the node for which to check the records\\\",\\\"node\\\":\\\"the namehash of the node for which to check the records\\\"}},\\\"setDNSRecords(bytes32,bytes)\\\":{\\\"params\\\":{\\\"data\\\":\\\"the DNS wire format records to set\\\",\\\"node\\\":\\\"the namehash of the node for which to set the records\\\"}}}},\\\"userdoc\\\":{\\\"methods\\\":{\\\"clearDNSZone(bytes32)\\\":{\\\"notice\\\":\\\"Clear all information for a DNS zone.\\\"},\\\"dnsRecord(bytes32,bytes32,uint16)\\\":{\\\"notice\\\":\\\"Obtain a DNS record.\\\"},\\\"hasDNSRecords(bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Check if a given node has records.\\\"},\\\"setDNSRecords(bytes32,bytes)\\\":{\\\"notice\\\":\\\"Set one or more DNS records.  Records are supplied in wire-format. Records with the same node/name/resource must be supplied one after the other to ensure the data is updated correctly. For example, if the data was supplied:    a.example.com IN A 1.2.3.4    a.example.com IN A 5.6.7.8    www.example.com IN CNAME a.example.com. then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was supplied:    a.example.com IN A 1.2.3.4    www.example.com IN CNAME a.example.com.    a.example.com IN A 5.6.7.8 then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\\\"}}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/DNSResolver.sol\\\":\\\"DNSResolver\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/ResolverBase.sol\\\":{\\\"keccak256\\\":\\\"0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8\\\",\\\"urls\\\":[\\\"bzzr://81e5565403a67f558d12c787f53f40ff19a5da99c648f8a4f99f2caa449ca0e6\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/DNSResolver.sol\\\":{\\\"keccak256\\\":\\\"0x51534f5ebdcfda403b1a935f256e7f27d16b490e5b023b6e57877973daf9a4d4\\\",\\\"urls\\\":[\\\"bzzr://a81c189814102f6debd761795650d94694225b7486d490faf7d5fb6e0704ed28\\\"]},\\\"@ensdomains/buffer/contracts/Buffer.sol\\\":{\\\"keccak256\\\":\\\"0x1264adbd06f6e05b04539bb225063a988b7fa90343d068de60cdde6cfb6fa92d\\\",\\\"urls\\\":[\\\"bzzr://8f1cb39e242b73bb7fac1f48bf0380ccccad14f06aae9cf4f87329cc78186122\\\"]},\\\"@ensdomains/dnssec-oracle/contracts/BytesUtils.sol\\\":{\\\"keccak256\\\":\\\"0x4014e689ef4a36cbf7103d88286abd2a7c560c2a7af99a561c33c61bc78be27a\\\",\\\"urls\\\":[\\\"bzzr://adf984996598f1e0d446eea1eda14ed2c49ab86a4ea1ae837cf4f9d99556b9c2\\\"]},\\\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\\\":{\\\"keccak256\\\":\\\"0x5135591043cf38413b19f93d16f189f0f8b50b01b78642fb764635d9790cc7ca\\\",\\\"urls\\\":[\\\"bzzr://7e3a0111306a7c5640e213da22bcfac1e42b813e8d4d99ef7ea33c09747049fc\\\"]}},\\\"version\\\":1}\",\"bytecode\":\"0x\",\"deployedBytecode\":\"0x\",\"sourceMap\":\"\",\"deployedSourceMap\":\"\",\"source\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"../ResolverBase.sol\\\";\\nimport \\\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\\\";\\n\\ncontract DNSResolver is ResolverBase {\\n    using RRUtils for *;\\n    using BytesUtils for bytes;\\n\\n    bytes4 constant private DNS_RECORD_INTERFACE_ID = 0xa8fa5682;\\n\\n    // DNSRecordChanged is emitted whenever a given node/name/resource's RRSET is updated.\\n    event DNSRecordChanged(bytes32 indexed node, bytes name, uint16 resource, bytes record);\\n    // DNSRecordDeleted is emitted whenever a given node/name/resource's RRSET is deleted.\\n    event DNSRecordDeleted(bytes32 indexed node, bytes name, uint16 resource);\\n    // DNSZoneCleared is emitted whenever a given node's zone information is cleared.\\n    event DNSZoneCleared(bytes32 indexed node);\\n\\n    // Version the mapping for each zone.  This allows users who have lost\\n    // track of their entries to effectively delete an entire zone by bumping\\n    // the version number.\\n    // node => version\\n    mapping(bytes32=>uint256) private versions;\\n\\n    // The records themselves.  Stored as binary RRSETs\\n    // node => version => name => resource => data\\n    mapping(bytes32=>mapping(uint256=>mapping(bytes32=>mapping(uint16=>bytes)))) private records;\\n\\n    // Count of number of entries for a given name.  Required for DNS resolvers\\n    // when resolving wildcards.\\n    // node => version => name => number of records\\n    mapping(bytes32=>mapping(uint256=>mapping(bytes32=>uint16))) private nameEntriesCount;\\n\\n    /**\\n     * Set one or more DNS records.  Records are supplied in wire-format.\\n     * Records with the same node/name/resource must be supplied one after the\\n     * other to ensure the data is updated correctly. For example, if the data\\n     * was supplied:\\n     *     a.example.com IN A 1.2.3.4\\n     *     a.example.com IN A 5.6.7.8\\n     *     www.example.com IN CNAME a.example.com.\\n     * then this would store the two A records for a.example.com correctly as a\\n     * single RRSET, however if the data was supplied:\\n     *     a.example.com IN A 1.2.3.4\\n     *     www.example.com IN CNAME a.example.com.\\n     *     a.example.com IN A 5.6.7.8\\n     * then this would store the first A record, the CNAME, then the second A\\n     * record which would overwrite the first.\\n     *\\n     * @param node the namehash of the node for which to set the records\\n     * @param data the DNS wire format records to set\\n     */\\n    function setDNSRecords(bytes32 node, bytes calldata data) external authorised(node) {\\n        uint16 resource = 0;\\n        uint256 offset = 0;\\n        bytes memory name;\\n        bytes memory value;\\n        bytes32 nameHash;\\n        // Iterate over the data to add the resource records\\n        for (RRUtils.RRIterator memory iter = data.iterateRRs(0); !iter.done(); iter.next()) {\\n            if (resource == 0) {\\n                resource = iter.dnstype;\\n                name = iter.name();\\n                nameHash = keccak256(abi.encodePacked(name));\\n                value = bytes(iter.rdata());\\n            } else {\\n                bytes memory newName = iter.name();\\n                if (resource != iter.dnstype || !name.equals(newName)) {\\n                    setDNSRRSet(node, name, resource, data, offset, iter.offset - offset, value.length == 0);\\n                    resource = iter.dnstype;\\n                    offset = iter.offset;\\n                    name = newName;\\n                    nameHash = keccak256(name);\\n                    value = bytes(iter.rdata());\\n                }\\n            }\\n        }\\n        if (name.length > 0) {\\n            setDNSRRSet(node, name, resource, data, offset, data.length - offset, value.length == 0);\\n        }\\n    }\\n\\n    /**\\n     * Obtain a DNS record.\\n     * @param node the namehash of the node for which to fetch the record\\n     * @param name the keccak-256 hash of the fully-qualified name for which to fetch the record\\n     * @param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\n     * @return the DNS record in wire format if present, otherwise empty\\n     */\\n    function dnsRecord(bytes32 node, bytes32 name, uint16 resource) public view returns (bytes memory) {\\n        return records[node][versions[node]][name][resource];\\n    }\\n\\n    /**\\n     * Check if a given node has records.\\n     * @param node the namehash of the node for which to check the records\\n     * @param name the namehash of the node for which to check the records\\n     */\\n    function hasDNSRecords(bytes32 node, bytes32 name) public view returns (bool) {\\n        return (nameEntriesCount[node][versions[node]][name] != 0);\\n    }\\n\\n    /**\\n     * Clear all information for a DNS zone.\\n     * @param node the namehash of the node for which to clear the zone\\n     */\\n    function clearDNSZone(bytes32 node) public authorised(node) {\\n        versions[node]++;\\n        emit DNSZoneCleared(node);\\n    }\\n\\n    function supportsInterface(bytes4 interfaceID) public pure returns(bool) {\\n        return interfaceID == DNS_RECORD_INTERFACE_ID || super.supportsInterface(interfaceID);\\n    }\\n\\n    function setDNSRRSet(\\n        bytes32 node,\\n        bytes memory name,\\n        uint16 resource,\\n        bytes memory data,\\n        uint256 offset,\\n        uint256 size,\\n        bool deleteRecord) private\\n    {\\n        uint256 version = versions[node];\\n        bytes32 nameHash = keccak256(name);\\n        bytes memory rrData = data.substring(offset, size);\\n        if (deleteRecord) {\\n            if (records[node][version][nameHash][resource].length != 0) {\\n                nameEntriesCount[node][version][nameHash]--;\\n            }\\n            delete(records[node][version][nameHash][resource]);\\n            emit DNSRecordDeleted(node, name, resource);\\n        } else {\\n            if (records[node][version][nameHash][resource].length == 0) {\\n                nameEntriesCount[node][version][nameHash]++;\\n            }\\n            records[node][version][nameHash][resource] = rrData;\\n            emit DNSRecordChanged(node, name, resource, rrData);\\n        }\\n    }\\n}\\n\",\"sourcePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/DNSResolver.sol\",\"ast\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/DNSResolver.sol\",\"exportedSymbols\":{\"DNSResolver\":[1458]},\"id\":1459,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":1029,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:9\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/ResolverBase.sol\",\"file\":\"../ResolverBase.sol\",\"id\":1030,\"nodeType\":\"ImportDirective\",\"scope\":1459,\"sourceUnit\":663,\"src\":\"25:29:9\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\",\"file\":\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\",\"id\":1031,\"nodeType\":\"ImportDirective\",\"scope\":1459,\"sourceUnit\":3703,\"src\":\"55:57:9\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":1032,\"name\":\"ResolverBase\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":662,\"src\":\"138:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ResolverBase_$662\",\"typeString\":\"contract ResolverBase\"}},\"id\":1033,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"138:12:9\"}],\"contractDependencies\":[662],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":false,\"id\":1458,\"linearizedBaseContracts\":[1458,662],\"name\":\"DNSResolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"id\":1035,\"libraryName\":{\"contractScope\":null,\"id\":1034,\"name\":\"RRUtils\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3702,\"src\":\"163:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_RRUtils_$3702\",\"typeString\":\"library RRUtils\"}},\"nodeType\":\"UsingForDirective\",\"src\":\"157:20:9\",\"typeName\":null},{\"id\":1038,\"libraryName\":{\"contractScope\":null,\"id\":1036,\"name\":\"BytesUtils\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3081,\"src\":\"188:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_BytesUtils_$3081\",\"typeString\":\"library BytesUtils\"}},\"nodeType\":\"UsingForDirective\",\"src\":\"182:27:9\",\"typeName\":{\"id\":1037,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"203:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}}},{\"constant\":true,\"id\":1041,\"name\":\"DNS_RECORD_INTERFACE_ID\",\"nodeType\":\"VariableDeclaration\",\"scope\":1458,\"src\":\"215:60:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":1039,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"215:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"30786138666135363832\",\"id\":1040,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"265:10:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2834978434_by_1\",\"typeString\":\"int_const 2834978434\"},\"value\":\"0xa8fa5682\"},\"visibility\":\"private\"},{\"anonymous\":false,\"documentation\":null,\"id\":1051,\"name\":\"DNSRecordChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":1050,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1043,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1051,\"src\":\"396:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1042,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"396:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1045,\"indexed\":false,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1051,\"src\":\"418:10:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1044,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"418:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1047,\"indexed\":false,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1051,\"src\":\"430:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1046,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"430:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1049,\"indexed\":false,\"name\":\"record\",\"nodeType\":\"VariableDeclaration\",\"scope\":1051,\"src\":\"447:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1048,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"447:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"395:65:9\"},\"src\":\"373:88:9\"},{\"anonymous\":false,\"documentation\":null,\"id\":1059,\"name\":\"DNSRecordDeleted\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":1058,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1053,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1059,\"src\":\"580:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1052,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"580:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1055,\"indexed\":false,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1059,\"src\":\"602:10:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1054,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"602:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1057,\"indexed\":false,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1059,\"src\":\"614:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1056,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"614:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"579:51:9\"},\"src\":\"557:74:9\"},{\"anonymous\":false,\"documentation\":null,\"id\":1063,\"name\":\"DNSZoneCleared\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":1062,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1061,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1063,\"src\":\"743:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1060,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"743:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"742:22:9\"},\"src\":\"722:43:9\"},{\"constant\":false,\"id\":1067,\"name\":\"versions\",\"nodeType\":\"VariableDeclaration\",\"scope\":1458,\"src\":\"974:42:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"},\"typeName\":{\"id\":1066,\"keyType\":{\"id\":1064,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"982:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"974:25:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"},\"valueType\":{\"id\":1065,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"991:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":1077,\"name\":\"records\",\"nodeType\":\"VariableDeclaration\",\"scope\":1458,\"src\":\"1130:92:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes))))\"},\"typeName\":{\"id\":1076,\"keyType\":{\"id\":1068,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1138:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"1130:76:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes))))\"},\"valueType\":{\"id\":1075,\"keyType\":{\"id\":1069,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1155:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Mapping\",\"src\":\"1147:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes)))\"},\"valueType\":{\"id\":1074,\"keyType\":{\"id\":1070,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1172:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"1164:40:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes))\"},\"valueType\":{\"id\":1073,\"keyType\":{\"id\":1071,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1189:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"Mapping\",\"src\":\"1181:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes)\"},\"valueType\":{\"id\":1072,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1197:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}}}}}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":1085,\"name\":\"nameEntriesCount\",\"nodeType\":\"VariableDeclaration\",\"scope\":1458,\"src\":\"1394:85:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"},\"typeName\":{\"id\":1084,\"keyType\":{\"id\":1078,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1402:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"1394:60:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"},\"valueType\":{\"id\":1083,\"keyType\":{\"id\":1079,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1419:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Mapping\",\"src\":\"1411:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => uint16))\"},\"valueType\":{\"id\":1082,\"keyType\":{\"id\":1080,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1436:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"1428:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint16_$\",\"typeString\":\"mapping(bytes32 => uint16)\"},\"valueType\":{\"id\":1081,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1445:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}}}}},\"value\":null,\"visibility\":\"private\"},{\"body\":{\"id\":1249,\"nodeType\":\"Block\",\"src\":\"2487:1179:9\",\"statements\":[{\"assignments\":[1096],\"declarations\":[{\"constant\":false,\"id\":1096,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2497:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1095,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2497:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1098,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1097,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2515:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2497:19:9\"},{\"assignments\":[1100],\"declarations\":[{\"constant\":false,\"id\":1100,\"name\":\"offset\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2526:14:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1099,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2526:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1102,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1101,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2543:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2526:18:9\"},{\"assignments\":[1104],\"declarations\":[{\"constant\":false,\"id\":1104,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2554:17:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1103,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2554:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1105,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2554:17:9\"},{\"assignments\":[1107],\"declarations\":[{\"constant\":false,\"id\":1107,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2581:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1106,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2581:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1108,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2581:18:9\"},{\"assignments\":[1110],\"declarations\":[{\"constant\":false,\"id\":1110,\"name\":\"nameHash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2609:16:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1109,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2609:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1111,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2609:16:9\"},{\"body\":{\"id\":1225,\"nodeType\":\"Block\",\"src\":\"2781:736:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"id\":1131,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1129,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"2799:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1130,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2811:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"2799:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":1223,\"nodeType\":\"Block\",\"src\":\"3019:488:9\",\"statements\":[{\"assignments\":[1162],\"declarations\":[{\"constant\":false,\"id\":1162,\"name\":\"newName\",\"nodeType\":\"VariableDeclaration\",\"scope\":1223,\"src\":\"3037:20:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1161,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3037:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1166,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1163,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3060:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1164,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"name\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3387,\"src\":\"3060:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bytes memory)\"}},\"id\":1165,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3060:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"3037:34:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1176,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"id\":1170,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1167,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"3093:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1168,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3105:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1169,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"dnstype\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3214,\"src\":\"3105:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"src\":\"3093:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1175,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"3121:21:9\",\"subExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1173,\"name\":\"newName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1162,\"src\":\"3134:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"expression\":{\"argumentTypes\":null,\"id\":1171,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3122:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1172,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"equals\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2651,\"src\":\"3122:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$\",\"typeString\":\"function (bytes memory,bytes memory) pure returns (bool)\"}},\"id\":1174,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3122:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"3093:49:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1222,\"nodeType\":\"IfStatement\",\"src\":\"3089:404:9\",\"trueBody\":{\"id\":1221,\"nodeType\":\"Block\",\"src\":\"3144:349:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1178,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1087,\"src\":\"3178:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1179,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3184:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},{\"argumentTypes\":null,\"id\":1180,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"3190:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},{\"argumentTypes\":null,\"id\":1181,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1089,\"src\":\"3200:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"}},{\"argumentTypes\":null,\"id\":1182,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3206:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1186,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1183,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3214:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1184,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"offset\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3212,\"src\":\"3214:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1185,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3228:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"3214:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1190,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1187,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1107,\"src\":\"3236:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1188,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3236:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1189,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"3252:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"3236:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"},{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1177,\"name\":\"setDNSRRSet\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1457,\"src\":\"3166:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint16_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (bytes32,bytes memory,uint16,bytes memory,uint256,uint256,bool)\"}},\"id\":1191,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3166:88:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1192,\"nodeType\":\"ExpressionStatement\",\"src\":\"3166:88:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1196,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1193,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"3276:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1194,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3287:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1195,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"dnstype\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3214,\"src\":\"3287:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"src\":\"3276:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"id\":1197,\"nodeType\":\"ExpressionStatement\",\"src\":\"3276:23:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1201,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1198,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3321:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1199,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3330:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1200,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"offset\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3212,\"src\":\"3330:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"3321:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1202,\"nodeType\":\"ExpressionStatement\",\"src\":\"3321:20:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1205,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1203,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3363:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1204,\"name\":\"newName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1162,\"src\":\"3370:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"3363:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1206,\"nodeType\":\"ExpressionStatement\",\"src\":\"3363:14:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1211,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1207,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1110,\"src\":\"3399:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1209,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3420:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1208,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4127,\"src\":\"3410:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1210,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3410:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"3399:26:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1212,\"nodeType\":\"ExpressionStatement\",\"src\":\"3399:26:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1219,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1213,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1107,\"src\":\"3447:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1215,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3461:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1216,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"rdata\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3407,\"src\":\"3461:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bytes memory)\"}},\"id\":1217,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3461:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1214,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"3455:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_bytes_storage_ptr_$\",\"typeString\":\"type(bytes storage pointer)\"},\"typeName\":\"bytes\"},\"id\":1218,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3455:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"3447:27:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1220,\"nodeType\":\"ExpressionStatement\",\"src\":\"3447:27:9\"}]}}]},\"id\":1224,\"nodeType\":\"IfStatement\",\"src\":\"2795:712:9\",\"trueBody\":{\"id\":1160,\"nodeType\":\"Block\",\"src\":\"2814:199:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1135,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1132,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"2832:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1133,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2843:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1134,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"dnstype\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3214,\"src\":\"2843:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"src\":\"2832:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"id\":1136,\"nodeType\":\"ExpressionStatement\",\"src\":\"2832:23:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1141,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1137,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"2873:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1138,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2880:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1139,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"name\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3387,\"src\":\"2880:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bytes memory)\"}},\"id\":1140,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2880:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"2873:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1142,\"nodeType\":\"ExpressionStatement\",\"src\":\"2873:18:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1150,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1143,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1110,\"src\":\"2909:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1147,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"2947:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"expression\":{\"argumentTypes\":null,\"id\":1145,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4120,\"src\":\"2930:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":1146,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2930:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":1148,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2930:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1144,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4127,\"src\":\"2920:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1149,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2920:33:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"2909:44:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1151,\"nodeType\":\"ExpressionStatement\",\"src\":\"2909:44:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1158,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1152,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1107,\"src\":\"2971:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1154,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2985:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1155,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"rdata\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3407,\"src\":\"2985:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bytes memory)\"}},\"id\":1156,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2985:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1153,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2979:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_bytes_storage_ptr_$\",\"typeString\":\"type(bytes storage pointer)\"},\"typeName\":\"bytes\"},\"id\":1157,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2979:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"2971:27:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1159,\"nodeType\":\"ExpressionStatement\",\"src\":\"2971:27:9\"}]}}]},\"condition\":{\"argumentTypes\":null,\"id\":1124,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"2754:12:9\",\"subExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1121,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2755:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1122,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"done\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3264,\"src\":\"2755:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bool)\"}},\"id\":1123,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2755:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":1226,\"initializationExpression\":{\"assignments\":[1115],\"declarations\":[{\"constant\":false,\"id\":1115,\"name\":\"iter\",\"nodeType\":\"VariableDeclaration\",\"scope\":1226,\"src\":\"2701:30:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator\"},\"typeName\":{\"contractScope\":null,\"id\":1114,\"name\":\"RRUtils.RRIterator\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3223,\"src\":\"2701:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_storage_ptr\",\"typeString\":\"struct RRUtils.RRIterator\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1120,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1118,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2750:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"expression\":{\"argumentTypes\":null,\"id\":1116,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1089,\"src\":\"2734:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"}},\"id\":1117,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"iterateRRs\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3249,\"src\":\"2734:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_struct$_RRIterator_$3223_memory_ptr_$bound_to$_t_bytes_memory_ptr_$\",\"typeString\":\"function (bytes memory,uint256) pure returns (struct RRUtils.RRIterator memory)\"}},\"id\":1119,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2734:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2701:51:9\"},\"loopExpression\":{\"expression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1125,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2768:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1126,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"next\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3366,\"src\":\"2768:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure\"}},\"id\":1127,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2768:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1128,\"nodeType\":\"ExpressionStatement\",\"src\":\"2768:11:9\"},\"nodeType\":\"ForStatement\",\"src\":\"2696:821:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1230,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1227,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3530:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1228,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3530:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1229,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"3544:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"3530:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1248,\"nodeType\":\"IfStatement\",\"src\":\"3526:134:9\",\"trueBody\":{\"id\":1247,\"nodeType\":\"Block\",\"src\":\"3547:113:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1232,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1087,\"src\":\"3573:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1233,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3579:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},{\"argumentTypes\":null,\"id\":1234,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"3585:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},{\"argumentTypes\":null,\"id\":1235,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1089,\"src\":\"3595:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"}},{\"argumentTypes\":null,\"id\":1236,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3601:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1240,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1237,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1089,\"src\":\"3609:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"}},\"id\":1238,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3609:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1239,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3623:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"3609:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1244,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1241,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1107,\"src\":\"3631:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1242,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3631:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1243,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"3647:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"3631:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"},{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1231,\"name\":\"setDNSRRSet\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1457,\"src\":\"3561:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint16_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (bytes32,bytes memory,uint16,bytes memory,uint256,uint256,bool)\"}},\"id\":1245,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3561:88:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1246,\"nodeType\":\"ExpressionStatement\",\"src\":\"3561:88:9\"}]}}]},\"documentation\":\"Set one or more DNS records.  Records are supplied in wire-format.\\nRecords with the same node/name/resource must be supplied one after the\\nother to ensure the data is updated correctly. For example, if the data\\nwas supplied:\\n    a.example.com IN A 1.2.3.4\\n    a.example.com IN A 5.6.7.8\\n    www.example.com IN CNAME a.example.com.\\nthen this would store the two A records for a.example.com correctly as a\\nsingle RRSET, however if the data was supplied:\\n    a.example.com IN A 1.2.3.4\\n    www.example.com IN CNAME a.example.com.\\n    a.example.com IN A 5.6.7.8\\nthen this would store the first A record, the CNAME, then the second A\\nrecord which would overwrite the first.\\n     * @param node the namehash of the node for which to set the records\\n@param data the DNS wire format records to set\",\"id\":1250,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1092,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1087,\"src\":\"2481:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1093,\"modifierName\":{\"argumentTypes\":null,\"id\":1091,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":629,\"src\":\"2470:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"2470:16:9\"}],\"name\":\"setDNSRecords\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1090,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1087,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1250,\"src\":\"2426:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1086,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2426:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1089,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":1250,\"src\":\"2440:19:9\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1088,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2440:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2425:35:9\"},\"returnParameters\":{\"id\":1094,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2487:0:9\"},\"scope\":1458,\"src\":\"2403:1263:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":{\"id\":1273,\"nodeType\":\"Block\",\"src\":\"4167:69:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1261,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"4184:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1263,\"indexExpression\":{\"argumentTypes\":null,\"id\":1262,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1252,\"src\":\"4192:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4184:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1267,\"indexExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1264,\"name\":\"versions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1067,\"src\":\"4198:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":1266,\"indexExpression\":{\"argumentTypes\":null,\"id\":1265,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1252,\"src\":\"4207:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4198:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4184:29:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1269,\"indexExpression\":{\"argumentTypes\":null,\"id\":1268,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1254,\"src\":\"4214:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4184:35:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1271,\"indexExpression\":{\"argumentTypes\":null,\"id\":1270,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1256,\"src\":\"4220:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4184:45:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"functionReturnParameters\":1260,\"id\":1272,\"nodeType\":\"Return\",\"src\":\"4177:52:9\"}]},\"documentation\":\"Obtain a DNS record.\\n@param node the namehash of the node for which to fetch the record\\n@param name the keccak-256 hash of the fully-qualified name for which to fetch the record\\n@param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\n@return the DNS record in wire format if present, otherwise empty\",\"id\":1274,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"dnsRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1257,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1252,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1274,\"src\":\"4087:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1251,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4087:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1254,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1274,\"src\":\"4101:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1253,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4101:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1256,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1274,\"src\":\"4115:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1255,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4115:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4086:45:9\"},\"returnParameters\":{\"id\":1260,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1259,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1274,\"src\":\"4153:12:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1258,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4153:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4152:14:9\"},\"scope\":1458,\"src\":\"4068:168:9\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1296,\"nodeType\":\"Block\",\"src\":\"4528:75:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"id\":1293,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1283,\"name\":\"nameEntriesCount\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1085,\"src\":\"4546:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"}},\"id\":1285,\"indexExpression\":{\"argumentTypes\":null,\"id\":1284,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1276,\"src\":\"4563:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4546:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => uint16))\"}},\"id\":1289,\"indexExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1286,\"name\":\"versions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1067,\"src\":\"4569:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":1288,\"indexExpression\":{\"argumentTypes\":null,\"id\":1287,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1276,\"src\":\"4578:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4569:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4546:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint16_$\",\"typeString\":\"mapping(bytes32 => uint16)\"}},\"id\":1291,\"indexExpression\":{\"argumentTypes\":null,\"id\":1290,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"4585:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4546:44:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1292,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4594:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"4546:49:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"id\":1294,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"4545:51:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":1282,\"id\":1295,\"nodeType\":\"Return\",\"src\":\"4538:58:9\"}]},\"documentation\":\"Check if a given node has records.\\n@param node the namehash of the node for which to check the records\\n@param name the namehash of the node for which to check the records\",\"id\":1297,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"hasDNSRecords\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1279,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1276,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1297,\"src\":\"4473:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1275,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4473:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1278,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1297,\"src\":\"4487:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1277,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4487:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4472:28:9\"},\"returnParameters\":{\"id\":1282,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1281,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1297,\"src\":\"4522:4:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":1280,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4522:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4521:6:9\"},\"scope\":1458,\"src\":\"4450:153:9\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1314,\"nodeType\":\"Block\",\"src\":\"4802:68:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1308,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"4812:16:9\",\"subExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1305,\"name\":\"versions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1067,\"src\":\"4812:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":1307,\"indexExpression\":{\"argumentTypes\":null,\"id\":1306,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1299,\"src\":\"4821:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"4812:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1309,\"nodeType\":\"ExpressionStatement\",\"src\":\"4812:16:9\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1311,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1299,\"src\":\"4858:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1310,\"name\":\"DNSZoneCleared\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"4843:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1312,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4843:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1313,\"nodeType\":\"EmitStatement\",\"src\":\"4838:25:9\"}]},\"documentation\":\"Clear all information for a DNS zone.\\n@param node the namehash of the node for which to clear the zone\",\"id\":1315,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1302,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1299,\"src\":\"4796:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1303,\"modifierName\":{\"argumentTypes\":null,\"id\":1301,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":629,\"src\":\"4785:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"4785:16:9\"}],\"name\":\"clearDNSZone\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1300,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1299,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1315,\"src\":\"4764:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1298,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4764:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4763:14:9\"},\"returnParameters\":{\"id\":1304,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"4802:0:9\"},\"scope\":1458,\"src\":\"4742:128:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1331,\"nodeType\":\"Block\",\"src\":\"4949:102:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1329,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"id\":1324,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1322,\"name\":\"interfaceID\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1317,\"src\":\"4966:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1323,\"name\":\"DNS_RECORD_INTERFACE_ID\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"4981:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"src\":\"4966:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1327,\"name\":\"interfaceID\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1317,\"src\":\"5032:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}],\"expression\":{\"argumentTypes\":null,\"id\":1325,\"name\":\"super\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4184,\"src\":\"5008:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_super$_DNSResolver_$1458\",\"typeString\":\"contract super DNSResolver\"}},\"id\":1326,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"supportsInterface\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":610,\"src\":\"5008:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes4_$returns$_t_bool_$\",\"typeString\":\"function (bytes4) pure returns (bool)\"}},\"id\":1328,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5008:36:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"4966:78:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":1321,\"id\":1330,\"nodeType\":\"Return\",\"src\":\"4959:85:9\"}]},\"documentation\":null,\"id\":1332,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"supportsInterface\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1318,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1317,\"name\":\"interfaceID\",\"nodeType\":\"VariableDeclaration\",\"scope\":1332,\"src\":\"4903:18:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":1316,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4903:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4902:20:9\"},\"returnParameters\":{\"id\":1321,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1320,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1332,\"src\":\"4943:4:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":1319,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4943:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4942:6:9\"},\"scope\":1458,\"src\":\"4876:175:9\",\"stateMutability\":\"pure\",\"superFunction\":610,\"visibility\":\"public\"},{\"body\":{\"id\":1456,\"nodeType\":\"Block\",\"src\":\"5265:757:9\",\"statements\":[{\"assignments\":[1350],\"declarations\":[{\"constant\":false,\"id\":1350,\"name\":\"version\",\"nodeType\":\"VariableDeclaration\",\"scope\":1456,\"src\":\"5275:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1349,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5275:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1354,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1351,\"name\":\"versions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1067,\"src\":\"5293:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":1353,\"indexExpression\":{\"argumentTypes\":null,\"id\":1352,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5302:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5293:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"5275:32:9\"},{\"assignments\":[1356],\"declarations\":[{\"constant\":false,\"id\":1356,\"name\":\"nameHash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1456,\"src\":\"5317:16:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1355,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5317:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1360,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1358,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1336,\"src\":\"5346:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1357,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4127,\"src\":\"5336:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1359,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5336:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"5317:34:9\"},{\"assignments\":[1362],\"declarations\":[{\"constant\":false,\"id\":1362,\"name\":\"rrData\",\"nodeType\":\"VariableDeclaration\",\"scope\":1456,\"src\":\"5361:19:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1361,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5361:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1368,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1365,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1342,\"src\":\"5398:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1366,\"name\":\"size\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1344,\"src\":\"5406:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":1363,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1340,\"src\":\"5383:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1364,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"substring\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2858,\"src\":\"5383:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$\",\"typeString\":\"function (bytes memory,uint256,uint256) pure returns (bytes memory)\"}},\"id\":1367,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5383:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"5361:50:9\"},{\"condition\":{\"argumentTypes\":null,\"id\":1369,\"name\":\"deleteRecord\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1346,\"src\":\"5425:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":1454,\"nodeType\":\"Block\",\"src\":\"5726:290:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1423,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1412,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"5744:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1414,\"indexExpression\":{\"argumentTypes\":null,\"id\":1413,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5752:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5744:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1416,\"indexExpression\":{\"argumentTypes\":null,\"id\":1415,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5758:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5744:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1418,\"indexExpression\":{\"argumentTypes\":null,\"id\":1417,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5767:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5744:32:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1420,\"indexExpression\":{\"argumentTypes\":null,\"id\":1419,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5777:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5744:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"id\":1421,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5744:49:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1422,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5797:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"5744:54:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1434,\"nodeType\":\"IfStatement\",\"src\":\"5740:136:9\",\"trueBody\":{\"id\":1433,\"nodeType\":\"Block\",\"src\":\"5800:76:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1431,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"5818:43:9\",\"subExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1424,\"name\":\"nameEntriesCount\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1085,\"src\":\"5818:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"}},\"id\":1428,\"indexExpression\":{\"argumentTypes\":null,\"id\":1425,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5835:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5818:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => uint16))\"}},\"id\":1429,\"indexExpression\":{\"argumentTypes\":null,\"id\":1426,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5841:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5818:31:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint16_$\",\"typeString\":\"mapping(bytes32 => uint16)\"}},\"id\":1430,\"indexExpression\":{\"argumentTypes\":null,\"id\":1427,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5850:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"5818:41:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"id\":1432,\"nodeType\":\"ExpressionStatement\",\"src\":\"5818:43:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":1445,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1435,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"5889:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1440,\"indexExpression\":{\"argumentTypes\":null,\"id\":1436,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5897:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5889:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1441,\"indexExpression\":{\"argumentTypes\":null,\"id\":1437,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5903:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5889:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1442,\"indexExpression\":{\"argumentTypes\":null,\"id\":1438,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5912:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5889:32:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1443,\"indexExpression\":{\"argumentTypes\":null,\"id\":1439,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5922:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"5889:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1444,\"name\":\"rrData\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1362,\"src\":\"5934:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"5889:51:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"id\":1446,\"nodeType\":\"ExpressionStatement\",\"src\":\"5889:51:9\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1448,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5976:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1449,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1336,\"src\":\"5982:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},{\"argumentTypes\":null,\"id\":1450,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5988:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},{\"argumentTypes\":null,\"id\":1451,\"name\":\"rrData\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1362,\"src\":\"5998:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"},{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1447,\"name\":\"DNSRecordChanged\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"5959:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint16_$_t_bytes_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32,bytes memory,uint16,bytes memory)\"}},\"id\":1452,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5959:46:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1453,\"nodeType\":\"EmitStatement\",\"src\":\"5954:51:9\"}]},\"id\":1455,\"nodeType\":\"IfStatement\",\"src\":\"5421:595:9\",\"trueBody\":{\"id\":1411,\"nodeType\":\"Block\",\"src\":\"5439:281:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1381,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1370,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"5457:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1372,\"indexExpression\":{\"argumentTypes\":null,\"id\":1371,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5465:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5457:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1374,\"indexExpression\":{\"argumentTypes\":null,\"id\":1373,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5471:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5457:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1376,\"indexExpression\":{\"argumentTypes\":null,\"id\":1375,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5480:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5457:32:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1378,\"indexExpression\":{\"argumentTypes\":null,\"id\":1377,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5490:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5457:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"id\":1379,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5457:49:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1380,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5510:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"5457:54:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1392,\"nodeType\":\"IfStatement\",\"src\":\"5453:136:9\",\"trueBody\":{\"id\":1391,\"nodeType\":\"Block\",\"src\":\"5513:76:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1389,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"--\",\"prefix\":false,\"src\":\"5531:43:9\",\"subExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1382,\"name\":\"nameEntriesCount\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1085,\"src\":\"5531:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"}},\"id\":1386,\"indexExpression\":{\"argumentTypes\":null,\"id\":1383,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5548:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5531:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => uint16))\"}},\"id\":1387,\"indexExpression\":{\"argumentTypes\":null,\"id\":1384,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5554:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5531:31:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint16_$\",\"typeString\":\"mapping(bytes32 => uint16)\"}},\"id\":1388,\"indexExpression\":{\"argumentTypes\":null,\"id\":1385,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5563:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"5531:41:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"id\":1390,\"nodeType\":\"ExpressionStatement\",\"src\":\"5531:43:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":1403,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"delete\",\"prefix\":true,\"src\":\"5602:50:9\",\"subExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1393,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"5609:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1395,\"indexExpression\":{\"argumentTypes\":null,\"id\":1394,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5617:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5609:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1397,\"indexExpression\":{\"argumentTypes\":null,\"id\":1396,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5623:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5609:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1399,\"indexExpression\":{\"argumentTypes\":null,\"id\":1398,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5632:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5609:32:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1401,\"indexExpression\":{\"argumentTypes\":null,\"id\":1400,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5642:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"5609:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}}],\"id\":1402,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"TupleExpression\",\"src\":\"5608:44:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1404,\"nodeType\":\"ExpressionStatement\",\"src\":\"5602:50:9\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1406,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5688:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1407,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1336,\"src\":\"5694:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},{\"argumentTypes\":null,\"id\":1408,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5700:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"},{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}],\"id\":1405,\"name\":\"DNSRecordDeleted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1059,\"src\":\"5671:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint16_$returns$__$\",\"typeString\":\"function (bytes32,bytes memory,uint16)\"}},\"id\":1409,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5671:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1410,\"nodeType\":\"EmitStatement\",\"src\":\"5666:43:9\"}]}}]},\"documentation\":null,\"id\":1457,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setDNSRRSet\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1347,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1334,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5087:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1333,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5087:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1336,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5109:17:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1335,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5109:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1338,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5136:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1337,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5136:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1340,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5161:17:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1339,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5161:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1342,\"name\":\"offset\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5188:14:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1341,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5188:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1344,\"name\":\"size\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5212:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1343,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5212:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1346,\"name\":\"deleteRecord\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5234:17:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":1345,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5234:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5077:175:9\"},\"returnParameters\":{\"id\":1348,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"5265:0:9\"},\"scope\":1458,\"src\":\"5057:965:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"private\"}],\"scope\":1459,\"src\":\"114:5910:9\"}],\"src\":\"0:6025:9\"},\"legacyAST\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/DNSResolver.sol\",\"exportedSymbols\":{\"DNSResolver\":[1458]},\"id\":1459,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":1029,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:9\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/ResolverBase.sol\",\"file\":\"../ResolverBase.sol\",\"id\":1030,\"nodeType\":\"ImportDirective\",\"scope\":1459,\"sourceUnit\":663,\"src\":\"25:29:9\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\",\"file\":\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\",\"id\":1031,\"nodeType\":\"ImportDirective\",\"scope\":1459,\"sourceUnit\":3703,\"src\":\"55:57:9\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":1032,\"name\":\"ResolverBase\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":662,\"src\":\"138:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ResolverBase_$662\",\"typeString\":\"contract ResolverBase\"}},\"id\":1033,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"138:12:9\"}],\"contractDependencies\":[662],\"contractKind\":\"contract\",\"documentation\":null,\"fullyImplemented\":false,\"id\":1458,\"linearizedBaseContracts\":[1458,662],\"name\":\"DNSResolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"id\":1035,\"libraryName\":{\"contractScope\":null,\"id\":1034,\"name\":\"RRUtils\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3702,\"src\":\"163:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_RRUtils_$3702\",\"typeString\":\"library RRUtils\"}},\"nodeType\":\"UsingForDirective\",\"src\":\"157:20:9\",\"typeName\":null},{\"id\":1038,\"libraryName\":{\"contractScope\":null,\"id\":1036,\"name\":\"BytesUtils\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3081,\"src\":\"188:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_BytesUtils_$3081\",\"typeString\":\"library BytesUtils\"}},\"nodeType\":\"UsingForDirective\",\"src\":\"182:27:9\",\"typeName\":{\"id\":1037,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"203:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}}},{\"constant\":true,\"id\":1041,\"name\":\"DNS_RECORD_INTERFACE_ID\",\"nodeType\":\"VariableDeclaration\",\"scope\":1458,\"src\":\"215:60:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":1039,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"215:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"30786138666135363832\",\"id\":1040,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"265:10:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_2834978434_by_1\",\"typeString\":\"int_const 2834978434\"},\"value\":\"0xa8fa5682\"},\"visibility\":\"private\"},{\"anonymous\":false,\"documentation\":null,\"id\":1051,\"name\":\"DNSRecordChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":1050,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1043,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1051,\"src\":\"396:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1042,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"396:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1045,\"indexed\":false,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1051,\"src\":\"418:10:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1044,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"418:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1047,\"indexed\":false,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1051,\"src\":\"430:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1046,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"430:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1049,\"indexed\":false,\"name\":\"record\",\"nodeType\":\"VariableDeclaration\",\"scope\":1051,\"src\":\"447:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1048,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"447:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"395:65:9\"},\"src\":\"373:88:9\"},{\"anonymous\":false,\"documentation\":null,\"id\":1059,\"name\":\"DNSRecordDeleted\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":1058,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1053,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1059,\"src\":\"580:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1052,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"580:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1055,\"indexed\":false,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1059,\"src\":\"602:10:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1054,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"602:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1057,\"indexed\":false,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1059,\"src\":\"614:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1056,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"614:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"579:51:9\"},\"src\":\"557:74:9\"},{\"anonymous\":false,\"documentation\":null,\"id\":1063,\"name\":\"DNSZoneCleared\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":1062,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1061,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1063,\"src\":\"743:20:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1060,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"743:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"742:22:9\"},\"src\":\"722:43:9\"},{\"constant\":false,\"id\":1067,\"name\":\"versions\",\"nodeType\":\"VariableDeclaration\",\"scope\":1458,\"src\":\"974:42:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"},\"typeName\":{\"id\":1066,\"keyType\":{\"id\":1064,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"982:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"974:25:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"},\"valueType\":{\"id\":1065,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"991:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":1077,\"name\":\"records\",\"nodeType\":\"VariableDeclaration\",\"scope\":1458,\"src\":\"1130:92:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes))))\"},\"typeName\":{\"id\":1076,\"keyType\":{\"id\":1068,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1138:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"1130:76:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes))))\"},\"valueType\":{\"id\":1075,\"keyType\":{\"id\":1069,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1155:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Mapping\",\"src\":\"1147:58:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes)))\"},\"valueType\":{\"id\":1074,\"keyType\":{\"id\":1070,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1172:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"1164:40:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes))\"},\"valueType\":{\"id\":1073,\"keyType\":{\"id\":1071,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1189:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"Mapping\",\"src\":\"1181:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes)\"},\"valueType\":{\"id\":1072,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1197:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}}}}}},\"value\":null,\"visibility\":\"private\"},{\"constant\":false,\"id\":1085,\"name\":\"nameEntriesCount\",\"nodeType\":\"VariableDeclaration\",\"scope\":1458,\"src\":\"1394:85:9\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"},\"typeName\":{\"id\":1084,\"keyType\":{\"id\":1078,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1402:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"1394:60:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"},\"valueType\":{\"id\":1083,\"keyType\":{\"id\":1079,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1419:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Mapping\",\"src\":\"1411:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => uint16))\"},\"valueType\":{\"id\":1082,\"keyType\":{\"id\":1080,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1436:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"1428:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint16_$\",\"typeString\":\"mapping(bytes32 => uint16)\"},\"valueType\":{\"id\":1081,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1445:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}}}}},\"value\":null,\"visibility\":\"private\"},{\"body\":{\"id\":1249,\"nodeType\":\"Block\",\"src\":\"2487:1179:9\",\"statements\":[{\"assignments\":[1096],\"declarations\":[{\"constant\":false,\"id\":1096,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2497:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1095,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2497:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1098,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1097,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2515:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2497:19:9\"},{\"assignments\":[1100],\"declarations\":[{\"constant\":false,\"id\":1100,\"name\":\"offset\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2526:14:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1099,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2526:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1102,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1101,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2543:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2526:18:9\"},{\"assignments\":[1104],\"declarations\":[{\"constant\":false,\"id\":1104,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2554:17:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1103,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2554:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1105,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2554:17:9\"},{\"assignments\":[1107],\"declarations\":[{\"constant\":false,\"id\":1107,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2581:18:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1106,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2581:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1108,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2581:18:9\"},{\"assignments\":[1110],\"declarations\":[{\"constant\":false,\"id\":1110,\"name\":\"nameHash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1249,\"src\":\"2609:16:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1109,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2609:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1111,\"initialValue\":null,\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2609:16:9\"},{\"body\":{\"id\":1225,\"nodeType\":\"Block\",\"src\":\"2781:736:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"id\":1131,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1129,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"2799:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1130,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2811:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"2799:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":1223,\"nodeType\":\"Block\",\"src\":\"3019:488:9\",\"statements\":[{\"assignments\":[1162],\"declarations\":[{\"constant\":false,\"id\":1162,\"name\":\"newName\",\"nodeType\":\"VariableDeclaration\",\"scope\":1223,\"src\":\"3037:20:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1161,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"3037:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1166,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1163,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3060:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1164,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"name\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3387,\"src\":\"3060:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bytes memory)\"}},\"id\":1165,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3060:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"3037:34:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1176,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"id\":1170,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1167,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"3093:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1168,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3105:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1169,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"dnstype\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3214,\"src\":\"3105:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"src\":\"3093:24:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1175,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"3121:21:9\",\"subExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1173,\"name\":\"newName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1162,\"src\":\"3134:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"expression\":{\"argumentTypes\":null,\"id\":1171,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3122:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1172,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"equals\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2651,\"src\":\"3122:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$_t_bool_$bound_to$_t_bytes_memory_ptr_$\",\"typeString\":\"function (bytes memory,bytes memory) pure returns (bool)\"}},\"id\":1174,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3122:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"3093:49:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1222,\"nodeType\":\"IfStatement\",\"src\":\"3089:404:9\",\"trueBody\":{\"id\":1221,\"nodeType\":\"Block\",\"src\":\"3144:349:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1178,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1087,\"src\":\"3178:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1179,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3184:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},{\"argumentTypes\":null,\"id\":1180,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"3190:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},{\"argumentTypes\":null,\"id\":1181,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1089,\"src\":\"3200:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"}},{\"argumentTypes\":null,\"id\":1182,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3206:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1186,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1183,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3214:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1184,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"offset\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3212,\"src\":\"3214:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1185,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3228:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"3214:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1190,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1187,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1107,\"src\":\"3236:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1188,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3236:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1189,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"3252:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"3236:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"},{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1177,\"name\":\"setDNSRRSet\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1457,\"src\":\"3166:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint16_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (bytes32,bytes memory,uint16,bytes memory,uint256,uint256,bool)\"}},\"id\":1191,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3166:88:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1192,\"nodeType\":\"ExpressionStatement\",\"src\":\"3166:88:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1196,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1193,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"3276:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1194,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3287:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1195,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"dnstype\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3214,\"src\":\"3287:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"src\":\"3276:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"id\":1197,\"nodeType\":\"ExpressionStatement\",\"src\":\"3276:23:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1201,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1198,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3321:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1199,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3330:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1200,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"offset\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3212,\"src\":\"3330:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"3321:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1202,\"nodeType\":\"ExpressionStatement\",\"src\":\"3321:20:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1205,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1203,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3363:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1204,\"name\":\"newName\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1162,\"src\":\"3370:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"3363:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1206,\"nodeType\":\"ExpressionStatement\",\"src\":\"3363:14:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1211,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1207,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1110,\"src\":\"3399:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1209,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3420:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1208,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4127,\"src\":\"3410:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1210,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3410:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"3399:26:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1212,\"nodeType\":\"ExpressionStatement\",\"src\":\"3399:26:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1219,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1213,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1107,\"src\":\"3447:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1215,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"3461:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1216,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"rdata\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3407,\"src\":\"3461:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bytes memory)\"}},\"id\":1217,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3461:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1214,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"3455:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_bytes_storage_ptr_$\",\"typeString\":\"type(bytes storage pointer)\"},\"typeName\":\"bytes\"},\"id\":1218,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3455:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"3447:27:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1220,\"nodeType\":\"ExpressionStatement\",\"src\":\"3447:27:9\"}]}}]},\"id\":1224,\"nodeType\":\"IfStatement\",\"src\":\"2795:712:9\",\"trueBody\":{\"id\":1160,\"nodeType\":\"Block\",\"src\":\"2814:199:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1135,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1132,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"2832:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1133,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2843:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1134,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"dnstype\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3214,\"src\":\"2843:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"src\":\"2832:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"id\":1136,\"nodeType\":\"ExpressionStatement\",\"src\":\"2832:23:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1141,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1137,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"2873:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1138,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2880:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1139,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"name\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3387,\"src\":\"2880:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bytes memory)\"}},\"id\":1140,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2880:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"2873:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1142,\"nodeType\":\"ExpressionStatement\",\"src\":\"2873:18:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1150,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1143,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1110,\"src\":\"2909:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1147,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"2947:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"expression\":{\"argumentTypes\":null,\"id\":1145,\"name\":\"abi\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4120,\"src\":\"2930:3:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_abi\",\"typeString\":\"abi\"}},\"id\":1146,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"memberName\":\"encodePacked\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2930:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$\",\"typeString\":\"function () pure returns (bytes memory)\"}},\"id\":1148,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2930:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1144,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4127,\"src\":\"2920:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1149,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2920:33:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"src\":\"2909:44:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":1151,\"nodeType\":\"ExpressionStatement\",\"src\":\"2909:44:9\"},{\"expression\":{\"argumentTypes\":null,\"id\":1158,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":1152,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1107,\"src\":\"2971:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1154,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2985:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1155,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"rdata\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3407,\"src\":\"2985:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bytes_memory_ptr_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bytes memory)\"}},\"id\":1156,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2985:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1153,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2979:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_bytes_storage_ptr_$\",\"typeString\":\"type(bytes storage pointer)\"},\"typeName\":\"bytes\"},\"id\":1157,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2979:19:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"2971:27:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1159,\"nodeType\":\"ExpressionStatement\",\"src\":\"2971:27:9\"}]}}]},\"condition\":{\"argumentTypes\":null,\"id\":1124,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"!\",\"prefix\":true,\"src\":\"2754:12:9\",\"subExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1121,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2755:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1122,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"done\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3264,\"src\":\"2755:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$_t_bool_$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure returns (bool)\"}},\"id\":1123,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2755:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":1226,\"initializationExpression\":{\"assignments\":[1115],\"declarations\":[{\"constant\":false,\"id\":1115,\"name\":\"iter\",\"nodeType\":\"VariableDeclaration\",\"scope\":1226,\"src\":\"2701:30:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator\"},\"typeName\":{\"contractScope\":null,\"id\":1114,\"name\":\"RRUtils.RRIterator\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3223,\"src\":\"2701:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_storage_ptr\",\"typeString\":\"struct RRUtils.RRIterator\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1120,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1118,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2750:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"expression\":{\"argumentTypes\":null,\"id\":1116,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1089,\"src\":\"2734:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"}},\"id\":1117,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"iterateRRs\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3249,\"src\":\"2734:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$returns$_t_struct$_RRIterator_$3223_memory_ptr_$bound_to$_t_bytes_memory_ptr_$\",\"typeString\":\"function (bytes memory,uint256) pure returns (struct RRUtils.RRIterator memory)\"}},\"id\":1119,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2734:18:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2701:51:9\"},\"loopExpression\":{\"expression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"expression\":{\"argumentTypes\":null,\"id\":1125,\"name\":\"iter\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1115,\"src\":\"2768:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_struct$_RRIterator_$3223_memory_ptr\",\"typeString\":\"struct RRUtils.RRIterator memory\"}},\"id\":1126,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"next\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3366,\"src\":\"2768:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_struct$_RRIterator_$3223_memory_ptr_$returns$__$bound_to$_t_struct$_RRIterator_$3223_memory_ptr_$\",\"typeString\":\"function (struct RRUtils.RRIterator memory) pure\"}},\"id\":1127,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2768:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1128,\"nodeType\":\"ExpressionStatement\",\"src\":\"2768:11:9\"},\"nodeType\":\"ForStatement\",\"src\":\"2696:821:9\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1230,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1227,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3530:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1228,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3530:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\">\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1229,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"3544:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"3530:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1248,\"nodeType\":\"IfStatement\",\"src\":\"3526:134:9\",\"trueBody\":{\"id\":1247,\"nodeType\":\"Block\",\"src\":\"3547:113:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1232,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1087,\"src\":\"3573:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1233,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1104,\"src\":\"3579:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},{\"argumentTypes\":null,\"id\":1234,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1096,\"src\":\"3585:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},{\"argumentTypes\":null,\"id\":1235,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1089,\"src\":\"3595:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"}},{\"argumentTypes\":null,\"id\":1236,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3601:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1240,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1237,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1089,\"src\":\"3609:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"}},\"id\":1238,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3609:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"-\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1239,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1100,\"src\":\"3623:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"3609:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1244,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":1241,\"name\":\"value\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1107,\"src\":\"3631:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1242,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"3631:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1243,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"3647:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"3631:17:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"},{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes calldata\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":1231,\"name\":\"setDNSRRSet\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1457,\"src\":\"3561:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint16_$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$_t_bool_$returns$__$\",\"typeString\":\"function (bytes32,bytes memory,uint16,bytes memory,uint256,uint256,bool)\"}},\"id\":1245,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"3561:88:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1246,\"nodeType\":\"ExpressionStatement\",\"src\":\"3561:88:9\"}]}}]},\"documentation\":\"Set one or more DNS records.  Records are supplied in wire-format.\\nRecords with the same node/name/resource must be supplied one after the\\nother to ensure the data is updated correctly. For example, if the data\\nwas supplied:\\n    a.example.com IN A 1.2.3.4\\n    a.example.com IN A 5.6.7.8\\n    www.example.com IN CNAME a.example.com.\\nthen this would store the two A records for a.example.com correctly as a\\nsingle RRSET, however if the data was supplied:\\n    a.example.com IN A 1.2.3.4\\n    www.example.com IN CNAME a.example.com.\\n    a.example.com IN A 5.6.7.8\\nthen this would store the first A record, the CNAME, then the second A\\nrecord which would overwrite the first.\\n     * @param node the namehash of the node for which to set the records\\n@param data the DNS wire format records to set\",\"id\":1250,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1092,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1087,\"src\":\"2481:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1093,\"modifierName\":{\"argumentTypes\":null,\"id\":1091,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":629,\"src\":\"2470:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"2470:16:9\"}],\"name\":\"setDNSRecords\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1090,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1087,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1250,\"src\":\"2426:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1086,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2426:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1089,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":1250,\"src\":\"2440:19:9\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1088,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2440:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2425:35:9\"},\"returnParameters\":{\"id\":1094,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2487:0:9\"},\"scope\":1458,\"src\":\"2403:1263:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":{\"id\":1273,\"nodeType\":\"Block\",\"src\":\"4167:69:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1261,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"4184:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1263,\"indexExpression\":{\"argumentTypes\":null,\"id\":1262,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1252,\"src\":\"4192:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4184:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1267,\"indexExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1264,\"name\":\"versions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1067,\"src\":\"4198:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":1266,\"indexExpression\":{\"argumentTypes\":null,\"id\":1265,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1252,\"src\":\"4207:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4198:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4184:29:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1269,\"indexExpression\":{\"argumentTypes\":null,\"id\":1268,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1254,\"src\":\"4214:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4184:35:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1271,\"indexExpression\":{\"argumentTypes\":null,\"id\":1270,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1256,\"src\":\"4220:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4184:45:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"functionReturnParameters\":1260,\"id\":1272,\"nodeType\":\"Return\",\"src\":\"4177:52:9\"}]},\"documentation\":\"Obtain a DNS record.\\n@param node the namehash of the node for which to fetch the record\\n@param name the keccak-256 hash of the fully-qualified name for which to fetch the record\\n@param resource the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\n@return the DNS record in wire format if present, otherwise empty\",\"id\":1274,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"dnsRecord\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1257,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1252,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1274,\"src\":\"4087:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1251,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4087:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1254,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1274,\"src\":\"4101:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1253,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4101:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1256,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1274,\"src\":\"4115:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1255,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4115:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4086:45:9\"},\"returnParameters\":{\"id\":1260,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1259,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1274,\"src\":\"4153:12:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1258,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4153:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4152:14:9\"},\"scope\":1458,\"src\":\"4068:168:9\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1296,\"nodeType\":\"Block\",\"src\":\"4528:75:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"id\":1293,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1283,\"name\":\"nameEntriesCount\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1085,\"src\":\"4546:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"}},\"id\":1285,\"indexExpression\":{\"argumentTypes\":null,\"id\":1284,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1276,\"src\":\"4563:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4546:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => uint16))\"}},\"id\":1289,\"indexExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1286,\"name\":\"versions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1067,\"src\":\"4569:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":1288,\"indexExpression\":{\"argumentTypes\":null,\"id\":1287,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1276,\"src\":\"4578:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4569:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4546:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint16_$\",\"typeString\":\"mapping(bytes32 => uint16)\"}},\"id\":1291,\"indexExpression\":{\"argumentTypes\":null,\"id\":1290,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1278,\"src\":\"4585:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"4546:44:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1292,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"4594:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"4546:49:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"id\":1294,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"TupleExpression\",\"src\":\"4545:51:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":1282,\"id\":1295,\"nodeType\":\"Return\",\"src\":\"4538:58:9\"}]},\"documentation\":\"Check if a given node has records.\\n@param node the namehash of the node for which to check the records\\n@param name the namehash of the node for which to check the records\",\"id\":1297,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"hasDNSRecords\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1279,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1276,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1297,\"src\":\"4473:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1275,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4473:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1278,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1297,\"src\":\"4487:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1277,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4487:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4472:28:9\"},\"returnParameters\":{\"id\":1282,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1281,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1297,\"src\":\"4522:4:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":1280,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4522:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4521:6:9\"},\"scope\":1458,\"src\":\"4450:153:9\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1314,\"nodeType\":\"Block\",\"src\":\"4802:68:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1308,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"4812:16:9\",\"subExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1305,\"name\":\"versions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1067,\"src\":\"4812:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":1307,\"indexExpression\":{\"argumentTypes\":null,\"id\":1306,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1299,\"src\":\"4821:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"4812:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":1309,\"nodeType\":\"ExpressionStatement\",\"src\":\"4812:16:9\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1311,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1299,\"src\":\"4858:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"id\":1310,\"name\":\"DNSZoneCleared\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1063,\"src\":\"4843:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$returns$__$\",\"typeString\":\"function (bytes32)\"}},\"id\":1312,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"4843:20:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1313,\"nodeType\":\"EmitStatement\",\"src\":\"4838:25:9\"}]},\"documentation\":\"Clear all information for a DNS zone.\\n@param node the namehash of the node for which to clear the zone\",\"id\":1315,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":1302,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1299,\"src\":\"4796:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":1303,\"modifierName\":{\"argumentTypes\":null,\"id\":1301,\"name\":\"authorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":629,\"src\":\"4785:10:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"4785:16:9\"}],\"name\":\"clearDNSZone\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1300,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1299,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1315,\"src\":\"4764:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1298,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4764:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4763:14:9\"},\"returnParameters\":{\"id\":1304,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"4802:0:9\"},\"scope\":1458,\"src\":\"4742:128:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":1331,\"nodeType\":\"Block\",\"src\":\"4949:102:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":1329,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"id\":1324,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":1322,\"name\":\"interfaceID\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1317,\"src\":\"4966:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"id\":1323,\"name\":\"DNS_RECORD_INTERFACE_ID\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1041,\"src\":\"4981:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"src\":\"4966:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1327,\"name\":\"interfaceID\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1317,\"src\":\"5032:11:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}],\"expression\":{\"argumentTypes\":null,\"id\":1325,\"name\":\"super\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4184,\"src\":\"5008:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_super$_DNSResolver_$1458\",\"typeString\":\"contract super DNSResolver\"}},\"id\":1326,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"supportsInterface\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":610,\"src\":\"5008:23:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes4_$returns$_t_bool_$\",\"typeString\":\"function (bytes4) pure returns (bool)\"}},\"id\":1328,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5008:36:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"4966:78:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":1321,\"id\":1330,\"nodeType\":\"Return\",\"src\":\"4959:85:9\"}]},\"documentation\":null,\"id\":1332,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"supportsInterface\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1318,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1317,\"name\":\"interfaceID\",\"nodeType\":\"VariableDeclaration\",\"scope\":1332,\"src\":\"4903:18:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":1316,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4903:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4902:20:9\"},\"returnParameters\":{\"id\":1321,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1320,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":1332,\"src\":\"4943:4:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":1319,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"4943:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"4942:6:9\"},\"scope\":1458,\"src\":\"4876:175:9\",\"stateMutability\":\"pure\",\"superFunction\":610,\"visibility\":\"public\"},{\"body\":{\"id\":1456,\"nodeType\":\"Block\",\"src\":\"5265:757:9\",\"statements\":[{\"assignments\":[1350],\"declarations\":[{\"constant\":false,\"id\":1350,\"name\":\"version\",\"nodeType\":\"VariableDeclaration\",\"scope\":1456,\"src\":\"5275:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1349,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5275:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1354,\"initialValue\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1351,\"name\":\"versions\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1067,\"src\":\"5293:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint256_$\",\"typeString\":\"mapping(bytes32 => uint256)\"}},\"id\":1353,\"indexExpression\":{\"argumentTypes\":null,\"id\":1352,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5302:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5293:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"5275:32:9\"},{\"assignments\":[1356],\"declarations\":[{\"constant\":false,\"id\":1356,\"name\":\"nameHash\",\"nodeType\":\"VariableDeclaration\",\"scope\":1456,\"src\":\"5317:16:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1355,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5317:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1360,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1358,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1336,\"src\":\"5346:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1357,\"name\":\"keccak256\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4127,\"src\":\"5336:9:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\"typeString\":\"function (bytes memory) pure returns (bytes32)\"}},\"id\":1359,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5336:15:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"5317:34:9\"},{\"assignments\":[1362],\"declarations\":[{\"constant\":false,\"id\":1362,\"name\":\"rrData\",\"nodeType\":\"VariableDeclaration\",\"scope\":1456,\"src\":\"5361:19:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1361,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5361:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":1368,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1365,\"name\":\"offset\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1342,\"src\":\"5398:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},{\"argumentTypes\":null,\"id\":1366,\"name\":\"size\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1344,\"src\":\"5406:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"expression\":{\"argumentTypes\":null,\"id\":1363,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1340,\"src\":\"5383:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"id\":1364,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"substring\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":2858,\"src\":\"5383:14:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bytes_memory_ptr_$bound_to$_t_bytes_memory_ptr_$\",\"typeString\":\"function (bytes memory,uint256,uint256) pure returns (bytes memory)\"}},\"id\":1367,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5383:28:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"5361:50:9\"},{\"condition\":{\"argumentTypes\":null,\"id\":1369,\"name\":\"deleteRecord\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1346,\"src\":\"5425:12:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":{\"id\":1454,\"nodeType\":\"Block\",\"src\":\"5726:290:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1423,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1412,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"5744:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1414,\"indexExpression\":{\"argumentTypes\":null,\"id\":1413,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5752:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5744:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1416,\"indexExpression\":{\"argumentTypes\":null,\"id\":1415,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5758:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5744:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1418,\"indexExpression\":{\"argumentTypes\":null,\"id\":1417,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5767:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5744:32:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1420,\"indexExpression\":{\"argumentTypes\":null,\"id\":1419,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5777:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5744:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"id\":1421,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5744:49:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1422,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5797:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"5744:54:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1434,\"nodeType\":\"IfStatement\",\"src\":\"5740:136:9\",\"trueBody\":{\"id\":1433,\"nodeType\":\"Block\",\"src\":\"5800:76:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1431,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"5818:43:9\",\"subExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1424,\"name\":\"nameEntriesCount\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1085,\"src\":\"5818:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"}},\"id\":1428,\"indexExpression\":{\"argumentTypes\":null,\"id\":1425,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5835:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5818:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => uint16))\"}},\"id\":1429,\"indexExpression\":{\"argumentTypes\":null,\"id\":1426,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5841:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5818:31:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint16_$\",\"typeString\":\"mapping(bytes32 => uint16)\"}},\"id\":1430,\"indexExpression\":{\"argumentTypes\":null,\"id\":1427,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5850:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"5818:41:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"id\":1432,\"nodeType\":\"ExpressionStatement\",\"src\":\"5818:43:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":1445,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1435,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"5889:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1440,\"indexExpression\":{\"argumentTypes\":null,\"id\":1436,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5897:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5889:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1441,\"indexExpression\":{\"argumentTypes\":null,\"id\":1437,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5903:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5889:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1442,\"indexExpression\":{\"argumentTypes\":null,\"id\":1438,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5912:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5889:32:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1443,\"indexExpression\":{\"argumentTypes\":null,\"id\":1439,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5922:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"5889:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":1444,\"name\":\"rrData\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1362,\"src\":\"5934:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"5889:51:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"id\":1446,\"nodeType\":\"ExpressionStatement\",\"src\":\"5889:51:9\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1448,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5976:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1449,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1336,\"src\":\"5982:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},{\"argumentTypes\":null,\"id\":1450,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5988:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},{\"argumentTypes\":null,\"id\":1451,\"name\":\"rrData\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1362,\"src\":\"5998:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"},{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}],\"id\":1447,\"name\":\"DNSRecordChanged\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1051,\"src\":\"5959:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint16_$_t_bytes_memory_ptr_$returns$__$\",\"typeString\":\"function (bytes32,bytes memory,uint16,bytes memory)\"}},\"id\":1452,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5959:46:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1453,\"nodeType\":\"EmitStatement\",\"src\":\"5954:51:9\"}]},\"id\":1455,\"nodeType\":\"IfStatement\",\"src\":\"5421:595:9\",\"trueBody\":{\"id\":1411,\"nodeType\":\"Block\",\"src\":\"5439:281:9\",\"statements\":[{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":1381,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1370,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"5457:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1372,\"indexExpression\":{\"argumentTypes\":null,\"id\":1371,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5465:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5457:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1374,\"indexExpression\":{\"argumentTypes\":null,\"id\":1373,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5471:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5457:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1376,\"indexExpression\":{\"argumentTypes\":null,\"id\":1375,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5480:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5457:32:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1378,\"indexExpression\":{\"argumentTypes\":null,\"id\":1377,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5490:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5457:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"id\":1379,\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"5457:49:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":1380,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"5510:1:9\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"src\":\"5457:54:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":1392,\"nodeType\":\"IfStatement\",\"src\":\"5453:136:9\",\"trueBody\":{\"id\":1391,\"nodeType\":\"Block\",\"src\":\"5513:76:9\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":1389,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"--\",\"prefix\":false,\"src\":\"5531:43:9\",\"subExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1382,\"name\":\"nameEntriesCount\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1085,\"src\":\"5531:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => uint16)))\"}},\"id\":1386,\"indexExpression\":{\"argumentTypes\":null,\"id\":1383,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5548:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5531:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint16_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => uint16))\"}},\"id\":1387,\"indexExpression\":{\"argumentTypes\":null,\"id\":1384,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5554:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5531:31:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_uint16_$\",\"typeString\":\"mapping(bytes32 => uint16)\"}},\"id\":1388,\"indexExpression\":{\"argumentTypes\":null,\"id\":1385,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5563:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"5531:41:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"id\":1390,\"nodeType\":\"ExpressionStatement\",\"src\":\"5531:43:9\"}]}},{\"expression\":{\"argumentTypes\":null,\"id\":1403,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"delete\",\"prefix\":true,\"src\":\"5602:50:9\",\"subExpression\":{\"argumentTypes\":null,\"components\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":1393,\"name\":\"records\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1077,\"src\":\"5609:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref))))\"}},\"id\":1395,\"indexExpression\":{\"argumentTypes\":null,\"id\":1394,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5617:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5609:13:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$_$\",\"typeString\":\"mapping(uint256 => mapping(bytes32 => mapping(uint16 => bytes storage ref)))\"}},\"id\":1397,\"indexExpression\":{\"argumentTypes\":null,\"id\":1396,\"name\":\"version\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1350,\"src\":\"5623:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5609:22:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_uint16_$_t_bytes_storage_$_$\",\"typeString\":\"mapping(bytes32 => mapping(uint16 => bytes storage ref))\"}},\"id\":1399,\"indexExpression\":{\"argumentTypes\":null,\"id\":1398,\"name\":\"nameHash\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1356,\"src\":\"5632:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"5609:32:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_uint16_$_t_bytes_storage_$\",\"typeString\":\"mapping(uint16 => bytes storage ref)\"}},\"id\":1401,\"indexExpression\":{\"argumentTypes\":null,\"id\":1400,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5642:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"5609:42:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}}],\"id\":1402,\"isConstant\":false,\"isInlineArray\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"TupleExpression\",\"src\":\"5608:44:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage\",\"typeString\":\"bytes storage ref\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1404,\"nodeType\":\"ExpressionStatement\",\"src\":\"5602:50:9\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":1406,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1334,\"src\":\"5688:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"id\":1407,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1336,\"src\":\"5694:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},{\"argumentTypes\":null,\"id\":1408,\"name\":\"resource\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1338,\"src\":\"5700:8:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"},{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}],\"id\":1405,\"name\":\"DNSRecordDeleted\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":1059,\"src\":\"5671:16:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$_t_uint16_$returns$__$\",\"typeString\":\"function (bytes32,bytes memory,uint16)\"}},\"id\":1409,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"5671:38:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":1410,\"nodeType\":\"EmitStatement\",\"src\":\"5666:43:9\"}]}}]},\"documentation\":null,\"id\":1457,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setDNSRRSet\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":1347,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":1334,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5087:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":1333,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5087:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1336,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5109:17:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1335,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5109:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1338,\"name\":\"resource\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5136:15:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"},\"typeName\":{\"id\":1337,\"name\":\"uint16\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5136:6:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint16\",\"typeString\":\"uint16\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1340,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5161:17:9\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":1339,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5161:5:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1342,\"name\":\"offset\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5188:14:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1341,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5188:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1344,\"name\":\"size\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5212:12:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":1343,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5212:7:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":1346,\"name\":\"deleteRecord\",\"nodeType\":\"VariableDeclaration\",\"scope\":1457,\"src\":\"5234:17:9\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":1345,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"5234:4:9\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"5077:175:9\"},\"returnParameters\":{\"id\":1348,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"5265:0:9\"},\"scope\":1458,\"src\":\"5057:965:9\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"private\"}],\"scope\":1459,\"src\":\"114:5910:9\"}],\"src\":\"0:6025:9\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.8+commit.23d335f2.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.16\",\"updatedAt\":\"2019-12-10T10:26:02.648Z\",\"devdoc\":{\"methods\":{\"clearDNSZone(bytes32)\":{\"params\":{\"node\":\"the namehash of the node for which to clear the zone\"}},\"dnsRecord(bytes32,bytes32,uint16)\":{\"params\":{\"name\":\"the keccak-256 hash of the fully-qualified name for which to fetch the record\",\"node\":\"the namehash of the node for which to fetch the record\",\"resource\":\"the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\"},\"return\":\"the DNS record in wire format if present, otherwise empty\"},\"hasDNSRecords(bytes32,bytes32)\":{\"params\":{\"name\":\"the namehash of the node for which to check the records\",\"node\":\"the namehash of the node for which to check the records\"}},\"setDNSRecords(bytes32,bytes)\":{\"params\":{\"data\":\"the DNS wire format records to set\",\"node\":\"the namehash of the node for which to set the records\"}}}},\"userdoc\":{\"methods\":{\"clearDNSZone(bytes32)\":{\"notice\":\"Clear all information for a DNS zone.\"},\"dnsRecord(bytes32,bytes32,uint16)\":{\"notice\":\"Obtain a DNS record.\"},\"hasDNSRecords(bytes32,bytes32)\":{\"notice\":\"Check if a given node has records.\"},\"setDNSRecords(bytes32,bytes)\":{\"notice\":\"Set one or more DNS records.  Records are supplied in wire-format. Records with the same node/name/resource must be supplied one after the other to ensure the data is updated correctly. For example, if the data was supplied:    a.example.com IN A 1.2.3.4    a.example.com IN A 5.6.7.8    www.example.com IN CNAME a.example.com. then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was supplied:    a.example.com IN A 1.2.3.4    www.example.com IN CNAME a.example.com.    a.example.com IN A 5.6.7.8 then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\"}}}}");

/***/ }),

/***/ 169819:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"DefaultReverseResolver\",\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"ens\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"ensAddr\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"ens\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"_name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setName\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"name\\\":\\\"ensAddr\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"}],\\\"devdoc\\\":{\\\"details\\\":\\\"Provides a default implementation of a resolver for reverse records, which permits only the owner to update it.\\\",\\\"methods\\\":{\\\"constructor\\\":{\\\"details\\\":\\\"Constructor\\\",\\\"params\\\":{\\\"ensAddr\\\":\\\"The address of the ENS registry.\\\"}},\\\"setName(bytes32,string)\\\":{\\\"details\\\":\\\"Sets the name for a node.\\\",\\\"params\\\":{\\\"_name\\\":\\\"The name to set.\\\",\\\"node\\\":\\\"The node to update.\\\"}}}},\\\"userdoc\\\":{\\\"methods\\\":{}}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/DefaultReverseResolver.sol\\\":\\\"DefaultReverseResolver\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/DefaultReverseResolver.sol\\\":{\\\"keccak256\\\":\\\"0x3911f972c8f69bea945ffaa356d8b9496446ac00f2543eafbf3aaf8a76d27682\\\",\\\"urls\\\":[\\\"bzzr://1bfa8ac7b28a7f546bcd7bc49b54ca37a618d6b13f344f7a9603a64277b65fcc\\\"]},\\\"@ensdomains/ens/contracts/ENS.sol\\\":{\\\"keccak256\\\":\\\"0xe688db01c0b974f8ff8565557f7fe81aa1f209c1497ec1e74536241f4cc11f08\\\",\\\"urls\\\":[\\\"bzzr://04aa083550728a1da54d9acf874f4fca77cc3afef81c57f1ec19be78af05019a\\\"]},\\\"@ensdomains/ens/contracts/ReverseRegistrar.sol\\\":{\\\"keccak256\\\":\\\"0x9f88ee601bc32f69ded7a3931640bcbd379920db4f3e45923f10fcc08642a8e2\\\",\\\"urls\\\":[\\\"bzzr://4a291280ddecf6766aefb98ee46c92e0daf6122653aca9bdb8ed197854c7455a\\\"]}},\\\"version\\\":1}\",\"bytecode\":\"0x608060405234801561001057600080fd5b5060405160208061070a8339810180604052602081101561003057600080fd5b8101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260001b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561011857600080fd5b505afa15801561012c573d6000803e3d6000fd5b505050506040513d602081101561014257600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610245578073ffffffffffffffffffffffffffffffffffffffff16631e83409a336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561020857600080fd5b505af115801561021c573d6000803e3d6000fd5b505050506040513d602081101561023257600080fd5b8101908080519060200190929190505050505b50506104b4806102566000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80633f15457f14610046578063691f3431146100905780637737221314610137575b600080fd5b61004e6101fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100bc600480360360208110156100a657600080fd5b8101908080359060200190929190505050610221565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100fc5780820151818401526020810190506100e1565b50505050905090810190601f1680156101295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101fa6004803603604081101561014d57600080fd5b81019080803590602001909291908035906020019064010000000081111561017457600080fd5b82018360208201111561018657600080fd5b803590602001918460018302840111640100000000831117156101a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506102d1565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102c95780601f1061029e576101008083540402835291602001916102c9565b820191906000526020600020905b8154815290600101906020018083116102ac57829003601f168201915b505050505081565b816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561034457600080fd5b505afa158015610358573d6000803e3d6000fd5b505050506040513d602081101561036e57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b657600080fd5b816001600085815260200190815260200160002090805190602001906103dd9291906103e3565b50505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061042457805160ff1916838001178555610452565b82800160010185558215610452579182015b82811115610451578251825591602001919060010190610436565b5b50905061045f9190610463565b5090565b61048591905b80821115610481576000816000905550600101610469565b5090565b9056fea165627a7a7230582055cf53a19908980851f5036d6bfb3ed56fd48d0dac3d9639507072b9d0b22e810029\",\"deployedBytecode\":\"0x608060405234801561001057600080fd5b50600436106100415760003560e01c80633f15457f14610046578063691f3431146100905780637737221314610137575b600080fd5b61004e6101fc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6100bc600480360360208110156100a657600080fd5b8101908080359060200190929190505050610221565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156100fc5780820151818401526020810190506100e1565b50505050905090810190601f1680156101295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101fa6004803603604081101561014d57600080fd5b81019080803590602001909291908035906020019064010000000081111561017457600080fd5b82018360208201111561018657600080fd5b803590602001918460018302840111640100000000831117156101a857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506102d1565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156102c95780601f1061029e576101008083540402835291602001916102c9565b820191906000526020600020905b8154815290600101906020018083116102ac57829003601f168201915b505050505081565b816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561034457600080fd5b505afa158015610358573d6000803e3d6000fd5b505050506040513d602081101561036e57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b657600080fd5b816001600085815260200190815260200160002090805190602001906103dd9291906103e3565b50505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061042457805160ff1916838001178555610452565b82800160010185558215610452579182015b82811115610451578251825591602001919060010190610436565b5b50905061045f9190610463565b5090565b61048591905b80821115610481576000816000905550600101610469565b5090565b9056fea165627a7a7230582055cf53a19908980851f5036d6bfb3ed56fd48d0dac3d9639507072b9d0b22e810029\",\"sourceMap\":\"260:1138:0:-;;;835:315;8:9:-1;5:2;;;30:1;27;20:12;5:2;835:315:0;;;;;;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;835:315:0;;;;;;;;;;;;;;;;883:7;877:3;;:13;;;;;;;;;;;;;;;;;;967:26;1013:3;;;;;;;;;;;:9;;;367:66;1023:17;;1013:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1013:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1013:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1013:28:0;;;;;;;;;;;;;;;;967:75;;1086:3;1056:34;;1064:9;1056:34;;;1052:92;;1106:9;:15;;;1122:10;1106:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1106:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1106:27:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1106:27:0;;;;;;;;;;;;;;;;;1052:92;835:315;;260:1138;;;;;;\",\"deployedSourceMap\":\"260:1138:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;260:1138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;440:14;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;460:39;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;460:39:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;460:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1286:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1286:110:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1286:110:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1286:110:0;;;;;;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;1286:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;1286:110:0;;;;;;;;;;;;;;;:::i;:::-;;440:14;;;;;;;;;;;;;:::o;460:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1286:110::-;1355:4;700:3;;;;;;;;;;;:9;;;710:4;700:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;700:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;700:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;700:15:0;;;;;;;;;;;;;;;;686:29;;:10;:29;;;678:38;;;;;;1384:5;1371:4;:10;1376:4;1371:10;;;;;;;;;;;:18;;;;;;;;;;;;:::i;:::-;;1286:110;;;:::o;260:1138::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o\",\"source\":\"pragma solidity >=0.4.25;\\n\\nimport \\\"@ensdomains/ens/contracts/ENS.sol\\\";\\nimport \\\"@ensdomains/ens/contracts/ReverseRegistrar.sol\\\";\\n\\n/**\\n * @dev Provides a default implementation of a resolver for reverse records,\\n * which permits only the owner to update it.\\n */\\ncontract DefaultReverseResolver {\\n    // namehash('addr.reverse')\\n    bytes32 constant ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2;\\n\\n    ENS public ens;\\n    mapping (bytes32 => string) public name;\\n\\n    /**\\n     * @dev Only permits calls by the reverse registrar.\\n     * @param node The node permission is required for.\\n     */\\n    modifier onlyOwner(bytes32 node) {\\n        require(msg.sender == ens.owner(node));\\n        _;\\n    }\\n\\n    /**\\n     * @dev Constructor\\n     * @param ensAddr The address of the ENS registry.\\n     */\\n    constructor(ENS ensAddr) public {\\n        ens = ensAddr;\\n\\n        // Assign ownership of the reverse record to our deployer\\n        ReverseRegistrar registrar = ReverseRegistrar(ens.owner(ADDR_REVERSE_NODE));\\n        if (address(registrar) != address(0x0)) {\\n            registrar.claim(msg.sender);\\n        }\\n    }\\n\\n    /**\\n     * @dev Sets the name for a node.\\n     * @param node The node to update.\\n     * @param _name The name to set.\\n     */\\n    function setName(bytes32 node, string memory _name) public onlyOwner(node) {\\n        name[node] = _name;\\n    }\\n}\\n\",\"sourcePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/DefaultReverseResolver.sol\",\"ast\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/DefaultReverseResolver.sol\",\"exportedSymbols\":{\"DefaultReverseResolver\":[81]},\"id\":82,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":1,\"literals\":[\"solidity\",\">=\",\"0.4\",\".25\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:0\"},{\"absolutePath\":\"@ensdomains/ens/contracts/ENS.sol\",\"file\":\"@ensdomains/ens/contracts/ENS.sol\",\"id\":2,\"nodeType\":\"ImportDirective\",\"scope\":82,\"sourceUnit\":3783,\"src\":\"27:43:0\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"@ensdomains/ens/contracts/ReverseRegistrar.sol\",\"file\":\"@ensdomains/ens/contracts/ReverseRegistrar.sol\",\"id\":3,\"nodeType\":\"ImportDirective\",\"scope\":82,\"sourceUnit\":4010,\"src\":\"71:56:0\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":\"@dev Provides a default implementation of a resolver for reverse records,\\nwhich permits only the owner to update it.\",\"fullyImplemented\":true,\"id\":81,\"linearizedBaseContracts\":[81],\"name\":\"DefaultReverseResolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":6,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"VariableDeclaration\",\"scope\":81,\"src\":\"330:103:0\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":4,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"330:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532\",\"id\":5,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"367:66:0\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1\",\"typeString\":\"int_const 6595...(69 digits omitted)...3154\"},\"value\":\"0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2\"},\"visibility\":\"internal\"},{\"constant\":false,\"id\":8,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":81,\"src\":\"440:14:0\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":7,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3782,\"src\":\"440:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":12,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":81,\"src\":\"460:39:0\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_string_storage_$\",\"typeString\":\"mapping(bytes32 => string)\"},\"typeName\":{\"id\":11,\"keyType\":{\"id\":9,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"469:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"460:27:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_string_storage_$\",\"typeString\":\"mapping(bytes32 => string)\"},\"valueType\":{\"id\":10,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"480:6:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":27,\"nodeType\":\"Block\",\"src\":\"668:66:0\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":23,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":17,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4133,\"src\":\"686:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":18,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"686:10:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":21,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":14,\"src\":\"710:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":19,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":8,\"src\":\"700:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"id\":20,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3767,\"src\":\"700:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":22,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"700:15:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"686:29:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":16,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[4136,4137],\"referencedDeclaration\":4136,\"src\":\"678:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":24,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"678:38:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":25,\"nodeType\":\"ExpressionStatement\",\"src\":\"678:38:0\"},{\"id\":26,\"nodeType\":\"PlaceholderStatement\",\"src\":\"726:1:0\"}]},\"documentation\":\"@dev Only permits calls by the reverse registrar.\\n@param node The node permission is required for.\",\"id\":28,\"name\":\"onlyOwner\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":15,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":14,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":28,\"src\":\"654:12:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":13,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"654:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"653:14:0\"},\"src\":\"635:99:0\",\"visibility\":\"internal\"},{\"body\":{\"id\":62,\"nodeType\":\"Block\",\"src\":\"867:283:0\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":35,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":33,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":8,\"src\":\"877:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":34,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":30,\"src\":\"883:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"src\":\"877:13:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"id\":36,\"nodeType\":\"ExpressionStatement\",\"src\":\"877:13:0\"},{\"assignments\":[38],\"declarations\":[{\"constant\":false,\"id\":38,\"name\":\"registrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":62,\"src\":\"967:26:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"},\"typeName\":{\"contractScope\":null,\"id\":37,\"name\":\"ReverseRegistrar\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":4009,\"src\":\"967:16:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":45,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":42,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":6,\"src\":\"1023:17:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":40,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":8,\"src\":\"1013:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"id\":41,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3767,\"src\":\"1013:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":43,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1013:28:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":39,\"name\":\"ReverseRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4009,\"src\":\"996:16:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_ReverseRegistrar_$4009_$\",\"typeString\":\"type(contract ReverseRegistrar)\"}},\"id\":44,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"996:46:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"967:75:0\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":52,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":47,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":38,\"src\":\"1064:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":46,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1056:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":48,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1056:18:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":50,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1086:3:0\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":49,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1078:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":51,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1078:12:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1056:34:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":61,\"nodeType\":\"IfStatement\",\"src\":\"1052:92:0\",\"trueBody\":{\"id\":60,\"nodeType\":\"Block\",\"src\":\"1092:52:0\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":56,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4133,\"src\":\"1122:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":57,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1122:10:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":53,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":38,\"src\":\"1106:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}},\"id\":55,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"claim\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3856,\"src\":\"1106:15:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) external returns (bytes32)\"}},\"id\":58,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1106:27:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":59,\"nodeType\":\"ExpressionStatement\",\"src\":\"1106:27:0\"}]}}]},\"documentation\":\"@dev Constructor\\n@param ensAddr The address of the ENS registry.\",\"id\":63,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":31,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":30,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":63,\"src\":\"847:11:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":29,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3782,\"src\":\"847:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"846:13:0\"},\"returnParameters\":{\"id\":32,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"867:0:0\"},\"scope\":81,\"src\":\"835:315:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":79,\"nodeType\":\"Block\",\"src\":\"1361:35:0\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":77,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":73,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":12,\"src\":\"1371:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_string_storage_$\",\"typeString\":\"mapping(bytes32 => string storage ref)\"}},\"id\":75,\"indexExpression\":{\"argumentTypes\":null,\"id\":74,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":65,\"src\":\"1376:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"1371:10:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage\",\"typeString\":\"string storage ref\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":76,\"name\":\"_name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"1384:5:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}},\"src\":\"1371:18:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage\",\"typeString\":\"string storage ref\"}},\"id\":78,\"nodeType\":\"ExpressionStatement\",\"src\":\"1371:18:0\"}]},\"documentation\":\"@dev Sets the name for a node.\\n@param node The node to update.\\n@param _name The name to set.\",\"id\":80,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":70,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":65,\"src\":\"1355:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":71,\"modifierName\":{\"argumentTypes\":null,\"id\":69,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":28,\"src\":\"1345:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1345:15:0\"}],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":68,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":65,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":80,\"src\":\"1303:12:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":64,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1303:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":67,\"name\":\"_name\",\"nodeType\":\"VariableDeclaration\",\"scope\":80,\"src\":\"1317:19:0\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":66,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1317:6:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1302:35:0\"},\"returnParameters\":{\"id\":72,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1361:0:0\"},\"scope\":81,\"src\":\"1286:110:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":82,\"src\":\"260:1138:0\"}],\"src\":\"0:1399:0\"},\"legacyAST\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/DefaultReverseResolver.sol\",\"exportedSymbols\":{\"DefaultReverseResolver\":[81]},\"id\":82,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":1,\"literals\":[\"solidity\",\">=\",\"0.4\",\".25\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:0\"},{\"absolutePath\":\"@ensdomains/ens/contracts/ENS.sol\",\"file\":\"@ensdomains/ens/contracts/ENS.sol\",\"id\":2,\"nodeType\":\"ImportDirective\",\"scope\":82,\"sourceUnit\":3783,\"src\":\"27:43:0\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"@ensdomains/ens/contracts/ReverseRegistrar.sol\",\"file\":\"@ensdomains/ens/contracts/ReverseRegistrar.sol\",\"id\":3,\"nodeType\":\"ImportDirective\",\"scope\":82,\"sourceUnit\":4010,\"src\":\"71:56:0\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"contract\",\"documentation\":\"@dev Provides a default implementation of a resolver for reverse records,\\nwhich permits only the owner to update it.\",\"fullyImplemented\":true,\"id\":81,\"linearizedBaseContracts\":[81],\"name\":\"DefaultReverseResolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":true,\"id\":6,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"VariableDeclaration\",\"scope\":81,\"src\":\"330:103:0\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":4,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"330:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":{\"argumentTypes\":null,\"hexValue\":\"307839316431373737373831383834643033613637353761383033393936653338646532613432393637666233376565616361373237323932373130323561396532\",\"id\":5,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"367:66:0\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_65955458610802586644366824307633271870356699036341805474246458084352783133154_by_1\",\"typeString\":\"int_const 6595...(69 digits omitted)...3154\"},\"value\":\"0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2\"},\"visibility\":\"internal\"},{\"constant\":false,\"id\":8,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":81,\"src\":\"440:14:0\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":7,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3782,\"src\":\"440:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"public\"},{\"constant\":false,\"id\":12,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":81,\"src\":\"460:39:0\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_string_storage_$\",\"typeString\":\"mapping(bytes32 => string)\"},\"typeName\":{\"id\":11,\"keyType\":{\"id\":9,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"469:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"460:27:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_string_storage_$\",\"typeString\":\"mapping(bytes32 => string)\"},\"valueType\":{\"id\":10,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"480:6:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}}},\"value\":null,\"visibility\":\"public\"},{\"body\":{\"id\":27,\"nodeType\":\"Block\",\"src\":\"668:66:0\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":23,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":17,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4133,\"src\":\"686:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":18,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"686:10:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":21,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":14,\"src\":\"710:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":19,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":8,\"src\":\"700:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"id\":20,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3767,\"src\":\"700:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":22,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"700:15:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"686:29:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":16,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[4136,4137],\"referencedDeclaration\":4136,\"src\":\"678:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":24,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"678:38:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":25,\"nodeType\":\"ExpressionStatement\",\"src\":\"678:38:0\"},{\"id\":26,\"nodeType\":\"PlaceholderStatement\",\"src\":\"726:1:0\"}]},\"documentation\":\"@dev Only permits calls by the reverse registrar.\\n@param node The node permission is required for.\",\"id\":28,\"name\":\"onlyOwner\",\"nodeType\":\"ModifierDefinition\",\"parameters\":{\"id\":15,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":14,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":28,\"src\":\"654:12:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":13,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"654:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"653:14:0\"},\"src\":\"635:99:0\",\"visibility\":\"internal\"},{\"body\":{\"id\":62,\"nodeType\":\"Block\",\"src\":\"867:283:0\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":35,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":33,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":8,\"src\":\"877:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":34,\"name\":\"ensAddr\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":30,\"src\":\"883:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"src\":\"877:13:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"id\":36,\"nodeType\":\"ExpressionStatement\",\"src\":\"877:13:0\"},{\"assignments\":[38],\"declarations\":[{\"constant\":false,\"id\":38,\"name\":\"registrar\",\"nodeType\":\"VariableDeclaration\",\"scope\":62,\"src\":\"967:26:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"},\"typeName\":{\"contractScope\":null,\"id\":37,\"name\":\"ReverseRegistrar\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":4009,\"src\":\"967:16:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":45,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":42,\"name\":\"ADDR_REVERSE_NODE\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":6,\"src\":\"1023:17:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":40,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":8,\"src\":\"1013:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"id\":41,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3767,\"src\":\"1013:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":43,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1013:28:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}],\"id\":39,\"name\":\"ReverseRegistrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4009,\"src\":\"996:16:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_contract$_ReverseRegistrar_$4009_$\",\"typeString\":\"type(contract ReverseRegistrar)\"}},\"id\":44,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"996:46:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"967:75:0\"},{\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":52,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":47,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":38,\"src\":\"1064:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}],\"id\":46,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1056:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":48,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1056:18:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"!=\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"hexValue\":\"307830\",\"id\":50,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"1086:3:0\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0x0\"}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"}],\"id\":49,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"1078:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":51,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1078:12:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"1056:34:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"falseBody\":null,\"id\":61,\"nodeType\":\"IfStatement\",\"src\":\"1052:92:0\",\"trueBody\":{\"id\":60,\"nodeType\":\"Block\",\"src\":\"1092:52:0\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":56,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4133,\"src\":\"1122:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":57,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"1122:10:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}],\"expression\":{\"argumentTypes\":null,\"id\":53,\"name\":\"registrar\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":38,\"src\":\"1106:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ReverseRegistrar_$4009\",\"typeString\":\"contract ReverseRegistrar\"}},\"id\":55,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"claim\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3856,\"src\":\"1106:15:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_nonpayable$_t_address_$returns$_t_bytes32_$\",\"typeString\":\"function (address) external returns (bytes32)\"}},\"id\":58,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"1106:27:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"id\":59,\"nodeType\":\"ExpressionStatement\",\"src\":\"1106:27:0\"}]}}]},\"documentation\":\"@dev Constructor\\n@param ensAddr The address of the ENS registry.\",\"id\":63,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":31,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":30,\"name\":\"ensAddr\",\"nodeType\":\"VariableDeclaration\",\"scope\":63,\"src\":\"847:11:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":29,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3782,\"src\":\"847:3:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3782\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"846:13:0\"},\"returnParameters\":{\"id\":32,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"867:0:0\"},\"scope\":81,\"src\":\"835:315:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":79,\"nodeType\":\"Block\",\"src\":\"1361:35:0\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":77,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":73,\"name\":\"name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":12,\"src\":\"1371:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_string_storage_$\",\"typeString\":\"mapping(bytes32 => string storage ref)\"}},\"id\":75,\"indexExpression\":{\"argumentTypes\":null,\"id\":74,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":65,\"src\":\"1376:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"1371:10:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage\",\"typeString\":\"string storage ref\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":76,\"name\":\"_name\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":67,\"src\":\"1384:5:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string memory\"}},\"src\":\"1371:18:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage\",\"typeString\":\"string storage ref\"}},\"id\":78,\"nodeType\":\"ExpressionStatement\",\"src\":\"1371:18:0\"}]},\"documentation\":\"@dev Sets the name for a node.\\n@param node The node to update.\\n@param _name The name to set.\",\"id\":80,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[{\"arguments\":[{\"argumentTypes\":null,\"id\":70,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":65,\"src\":\"1355:4:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"id\":71,\"modifierName\":{\"argumentTypes\":null,\"id\":69,\"name\":\"onlyOwner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":28,\"src\":\"1345:9:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_modifier$_t_bytes32_$\",\"typeString\":\"modifier (bytes32)\"}},\"nodeType\":\"ModifierInvocation\",\"src\":\"1345:15:0\"}],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":68,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":65,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":80,\"src\":\"1303:12:0\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":64,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1303:7:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":67,\"name\":\"_name\",\"nodeType\":\"VariableDeclaration\",\"scope\":80,\"src\":\"1317:19:0\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":66,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1317:6:0\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1302:35:0\"},\"returnParameters\":{\"id\":72,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1361:0:0\"},\"scope\":81,\"src\":\"1286:110:0\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"}],\"scope\":82,\"src\":\"260:1138:0\"}],\"src\":\"0:1399:0\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.8+commit.23d335f2.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.16\",\"updatedAt\":\"2019-12-10T10:26:02.630Z\",\"devdoc\":{\"details\":\"Provides a default implementation of a resolver for reverse records, which permits only the owner to update it.\",\"methods\":{\"constructor\":{\"details\":\"Constructor\",\"params\":{\"ensAddr\":\"The address of the ENS registry.\"}},\"setName(bytes32,string)\":{\"details\":\"Sets the name for a node.\",\"params\":{\"_name\":\"The name to set.\",\"node\":\"The node to update.\"}}}},\"userdoc\":{\"methods\":{}}}");

/***/ }),

/***/ 725781:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"OwnedResolver\",\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"interfaceImplementer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"setContenthash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"coinType\",\"type\":\"uint256\"},{\"name\":\"a\",\"type\":\"bytes\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"contenthash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"setInterface\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"coinType\",\"type\":\"uint256\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"indexed\":false,\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"InterfaceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"ContenthashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"coinType\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newAddress\",\"type\":\"bytes\"}],\"name\":\"AddressChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"}],\\\"name\\\":\\\"supportsInterface\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setText\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"}],\\\"name\\\":\\\"interfaceImplementer\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"contentTypes\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ABI\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"setPubkey\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setContenthash\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addr\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"text\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"contentType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setABI\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[],\\\"name\\\":\\\"renounceOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setName\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setAddr\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"owner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[],\\\"name\\\":\\\"isOwner\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"contenthash\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"pubkey\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setAddr\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"},{\\\"name\\\":\\\"implementer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setInterface\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"addr\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"transferOwnership\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"indexedKey\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"TextChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"PubkeyChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"NameChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"implementer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"InterfaceChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"ContenthashChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddrChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"newAddress\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"AddressChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"contentType\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ABIChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"previousOwner\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"newOwner\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"OwnershipTransferred\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"ABI(bytes32,uint256)\\\":{\\\"params\\\":{\\\"contentTypes\\\":\\\"A bitwise OR of the ABI formats accepted by the caller.\\\",\\\"node\\\":\\\"The ENS node to query\\\"},\\\"return\\\":\\\"contentType The content type of the return valuedata The ABI data\\\"},\\\"addr(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The associated address.\\\"},\\\"contenthash(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The associated contenthash.\\\"},\\\"interfaceImplementer(bytes32,bytes4)\\\":{\\\"params\\\":{\\\"interfaceID\\\":\\\"The EIP 168 interface ID to check for.\\\",\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The address that implements this interface, or 0 if the interface is unsupported.\\\"},\\\"isOwner()\\\":{\\\"return\\\":\\\"true if `msg.sender` is the owner of the contract.\\\"},\\\"name(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The associated name.\\\"},\\\"owner()\\\":{\\\"return\\\":\\\"the address of the owner.\\\"},\\\"pubkey(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query\\\"},\\\"return\\\":\\\"x, y the X and Y coordinates of the curve point for the public key.\\\"},\\\"renounceOwnership()\\\":{\\\"details\\\":\\\"Allows the current owner to relinquish control of the contract.\\\"},\\\"setABI(bytes32,uint256,bytes)\\\":{\\\"params\\\":{\\\"contentType\\\":\\\"The content type of the ABI\\\",\\\"data\\\":\\\"The ABI data.\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setAddr(bytes32,address)\\\":{\\\"params\\\":{\\\"a\\\":\\\"The address to set.\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setContenthash(bytes32,bytes)\\\":{\\\"params\\\":{\\\"hash\\\":\\\"The contenthash to set\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setInterface(bytes32,bytes4,address)\\\":{\\\"params\\\":{\\\"implementer\\\":\\\"The address of a contract that implements this interface for this node.\\\",\\\"interfaceID\\\":\\\"The EIP 168 interface ID.\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setName(bytes32,string)\\\":{\\\"params\\\":{\\\"name\\\":\\\"The name to set.\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setPubkey(bytes32,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query\\\",\\\"x\\\":\\\"the X coordinate of the curve point for the public key.\\\",\\\"y\\\":\\\"the Y coordinate of the curve point for the public key.\\\"}},\\\"setText(bytes32,string,string)\\\":{\\\"params\\\":{\\\"key\\\":\\\"The key to set.\\\",\\\"node\\\":\\\"The node to update.\\\",\\\"value\\\":\\\"The text data value to set.\\\"}},\\\"text(bytes32,string)\\\":{\\\"params\\\":{\\\"key\\\":\\\"The text data key to query.\\\",\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The associated text data.\\\"},\\\"transferOwnership(address)\\\":{\\\"details\\\":\\\"Allows the current owner to transfer control of the contract to a newOwner.\\\",\\\"params\\\":{\\\"newOwner\\\":\\\"The address to transfer ownership to.\\\"}}}},\\\"userdoc\\\":{\\\"methods\\\":{\\\"ABI(bytes32,uint256)\\\":{\\\"notice\\\":\\\"Returns the ABI associated with an ENS node. Defined in EIP205.\\\"},\\\"addr(bytes32)\\\":{\\\"notice\\\":\\\"Returns the address associated with an ENS node.\\\"},\\\"contenthash(bytes32)\\\":{\\\"notice\\\":\\\"Returns the contenthash associated with an ENS node.\\\"},\\\"interfaceImplementer(bytes32,bytes4)\\\":{\\\"notice\\\":\\\"Returns the address of a contract that implements the specified interface for this name. If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that contract implements EIP168 and returns `true` for the specified interfaceID, its address will be returned.\\\"},\\\"name(bytes32)\\\":{\\\"notice\\\":\\\"Returns the name associated with an ENS node, for reverse records. Defined in EIP181.\\\"},\\\"pubkey(bytes32)\\\":{\\\"notice\\\":\\\"Returns the SECP256k1 public key associated with an ENS node. Defined in EIP 619.\\\"},\\\"renounceOwnership()\\\":{\\\"notice\\\":\\\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\\\"},\\\"setABI(bytes32,uint256,bytes)\\\":{\\\"notice\\\":\\\"Sets the ABI associated with an ENS node. Nodes may have one ABI of each content type. To remove an ABI, set it to the empty string.\\\"},\\\"setAddr(bytes32,address)\\\":{\\\"notice\\\":\\\"Sets the address associated with an ENS node. May only be called by the owner of that node in the ENS registry.\\\"},\\\"setContenthash(bytes32,bytes)\\\":{\\\"notice\\\":\\\"Sets the contenthash associated with an ENS node. May only be called by the owner of that node in the ENS registry.\\\"},\\\"setInterface(bytes32,bytes4,address)\\\":{\\\"notice\\\":\\\"Sets an interface associated with a name. Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\\\"},\\\"setName(bytes32,string)\\\":{\\\"notice\\\":\\\"Sets the name associated with an ENS node, for reverse records. May only be called by the owner of that node in the ENS registry.\\\"},\\\"setPubkey(bytes32,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Sets the SECP256k1 public key associated with an ENS node.\\\"},\\\"setText(bytes32,string,string)\\\":{\\\"notice\\\":\\\"Sets the text data associated with an ENS node and key. May only be called by the owner of that node in the ENS registry.\\\"},\\\"text(bytes32,string)\\\":{\\\"notice\\\":\\\"Returns the text data associated with an ENS node and key.\\\"}},\\\"notice\\\":\\\"A simple resolver anyone can use; only allows the owner of a node to set its address.\\\"}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/OwnedResolver.sol\\\":\\\"OwnedResolver\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/OwnedResolver.sol\\\":{\\\"keccak256\\\":\\\"0x7f733f4354cde4ed92c08095afd8cc6b2f8d17da8b763fd17069319d9f840bf3\\\",\\\"urls\\\":[\\\"bzzr://471cb1f17fc51d7d2e1a64faf7b8e86e98f6c063222dfa85d7e86545f013a428\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/ResolverBase.sol\\\":{\\\"keccak256\\\":\\\"0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8\\\",\\\"urls\\\":[\\\"bzzr://81e5565403a67f558d12c787f53f40ff19a5da99c648f8a4f99f2caa449ca0e6\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ABIResolver.sol\\\":{\\\"keccak256\\\":\\\"0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f\\\",\\\"urls\\\":[\\\"bzzr://9fdf58339517baeca57889519a4bb2f30a010f2f4262771e6f5de4374fc436b1\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/AddrResolver.sol\\\":{\\\"keccak256\\\":\\\"0xbe84f840b10f6ddc3d695d5905fe4034569c646bdf56b1367c16271aa92071c6\\\",\\\"urls\\\":[\\\"bzzr://c97941ee4075d43abe371cc52f3bfa018d7dc93c7cfbb72da565ecaa72996381\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ContentHashResolver.sol\\\":{\\\"keccak256\\\":\\\"0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc\\\",\\\"urls\\\":[\\\"bzzr://c80ec35a145dd4b853e1e04b32763843313be216462a4993d28d5b489a6912f7\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/InterfaceResolver.sol\\\":{\\\"keccak256\\\":\\\"0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41\\\",\\\"urls\\\":[\\\"bzzr://0d539232d308722b6a434ed5e9a22b0c4cb849c641b6d0739f2f83e566cb59f1\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/NameResolver.sol\\\":{\\\"keccak256\\\":\\\"0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16\\\",\\\"urls\\\":[\\\"bzzr://a4a8988916719c4976bb0caf1cff3bdee3c94ae693b57970f6b925124cff38ee\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/PubkeyResolver.sol\\\":{\\\"keccak256\\\":\\\"0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a\\\",\\\"urls\\\":[\\\"bzzr://1caaa8668f536f654f4e6d68129ab5091e0ed5c72e0e70216b82d0bb9e7cd86f\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/TextResolver.sol\\\":{\\\"keccak256\\\":\\\"0x1feb20d9466c52f471c57344c1e3792e2c69b24ab9d7f7a4de6e49912abc75bb\\\",\\\"urls\\\":[\\\"bzzr://25ce3b4bf68f29d54e8916c0682b746a9e15f14bcccfc76136fc17ae2c902898\\\"]},\\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0x980de387a1a020a498f53d00f89fecebb12c949a17e8f160093c0303ede2b786\\\",\\\"urls\\\":[\\\"bzzr://08894efa2a557982070beda6a81a032407e70532d24bdafe80d39660c74904d9\\\"]}},\\\"version\\\":1}\",\"bytecode\":\" \",\"deployedBytecode\":\" \",\"sourceMap\":\"469:262:2:-;;;524:10:19;515:6;;:19;;;;;;;;;;;;;;;;;;582:6;;;;;;;;;;;549:40;;578:1;549:40;;;;;;;;;;;;469:262:2;;;;;;\",\"deployedSourceMap\":\"469:262:2:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;469:262:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1107:169:13;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1107:169:13;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;573:184;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;573:184:13;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;573:184:13;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;573:184:13;;;;;;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;573:184:13;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;573:184:13;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;573:184:13;;;;;;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;573:184:13;;;;;;;;;;;;:::i;:::-;;1721:953:10;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1721:953:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;1195:454:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1195:454:6;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1195:454:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;612:169:12;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;612:169:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;505:166:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;505:166:8;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;505:166:8;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;505:166:8;;;;;;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;505:166:8;;;;;;;;;;;;:::i;:::-;;972:228:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;972:228:7;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;974:127:13;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;974:127:13;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;974:127:13;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;974:127:13;;;;;;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;974:127:13;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;974:127:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;582:292:6;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;582:292:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;582:292:6;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;582:292:6;;;;;;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;582:292:6;;;;;;;;;;;;:::i;:::-;;844:101:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;844:101:11;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;844:101:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1347:137:19;;;:::i;:::-;;492:152:11;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;492:152:11;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;492:152:11;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;492:152:11;;;;;;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;492:152:11;;;;;;;;;;;;:::i;:::-;;1206:286:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1206:286:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;1206:286:7;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;1206:286:7;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;1206:286:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;1206:286:7;;;;;;;;;;;;;;;:::i;:::-;;659:77:19;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;979:90;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;838:108:8;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;838:108:8;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;838:108:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1023:133:12;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1023:133:12;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;681:132:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;681:132:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;858:226:10;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;858:226:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1498:127:7;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1498:127:7;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;1498:127:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1655:107:19;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;1655:107:19;;;;;;;;;;;;;;;;;;;:::i;:::-;;1107:169:13;1174:4;144:10;1212:17;;1197:32;;;:11;:32;;;;:72;;;;1233:36;1257:11;1233:23;:36::i;:::-;1197:72;1190:79;;1107:169;;;:::o;573:184::-;668:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;703:5:13;;684;:11;690:4;684:11;;;;;;;;;;;696:3;;684:16;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;684:16:13;;;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;741:3;;723:27;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;723:27:13;;;;;;;;;;;;;735:4;723:27;746:3;;723:27;;;;;;;;;;;;;;;;;;;;;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;;723:27:13;;;;;;;;;;;;;;573:184;;;;;;:::o;1721:953:10:-;1808:7;1827:19;1849:10;:16;1860:4;1849:16;;;;;;;;;;;:29;1866:11;1849:29;;;;;;;;;;;;;;;;;;;;;;;;;;;1827:51;;1914:1;1891:25;;:11;:25;;;1888:73;;1939:11;1932:18;;;;;1888:73;1971:9;1983:10;1988:4;1983;:10::i;:::-;1971:22;;2019:1;2006:15;;:1;:15;;;2003:62;;;2052:1;2037:17;;;;;;2003:62;2076:12;2090:23;2117:1;:12;;304:10;2183:17;;2130:71;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2130:71:10;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;2130:71:10;2117:85;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2117:85:10;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2075:127:10;;;;2216:7;2215:8;:34;;;;2247:2;2227:10;:17;:22;2215:34;:57;;;;2271:1;2253:19;;:10;2264:2;2253:14;;;;;;;;;;;;;;;;:19;;;;2215:57;2212:151;;;2350:1;2335:17;;;;;;;;2212:151;2397:1;:12;;2463:11;2410:65;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2410:65:10;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;2410:65:10;2397:79;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2397:79:10;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2373:103:10;;;;;;;;2490:7;2489:8;:34;;;;2521:2;2501:10;:17;:22;2489:34;:57;;;;2545:1;2527:19;;:10;2538:2;2527:14;;;;;;;;;;;;;;;;:19;;;;2489:57;2486:163;;;2636:1;2621:17;;;;;;;;2486:163;2666:1;2659:8;;;;;;1721:953;;;;;:::o;1195:454:6:-;1267:7;1276:12;1300:38;1341:4;:10;1346:4;1341:10;;;;;;;;;;;1300:51;;1367:19;1389:1;1367:23;;1362:249;1407:12;1392:11;:27;1362:249;;1490:1;1473:12;1459:11;:26;1458:33;;:67;;;;;1524:1;1495:6;:19;1502:11;1495:19;;;;;;;;;;;:26;;;;;;;;;;;;;;;;:30;1458:67;1454:147;;;1553:11;1566:6;:19;1573:11;1566:19;;;;;;;;;;;1545:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1454:147;1437:1;1421:17;;;;;1362:249;;;;1629:1;1632:9;;;;;;;;;;;;1621:21;;;;;;;;1195:454;;;;;;:::o;612:169:12:-;687:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;719:15:12;;;;;;;;729:1;719:15;;;;732:1;719:15;;;703:7;:13;711:4;703:13;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;763:4;749:25;769:1;772;749:25;;;;;;;;;;;;;;;;;;;;;;;;612:169;;;;:::o;505:166:8:-;584:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;615:4:8;;600:6;:12;607:4;600:12;;;;;;;;;;;:19;;;;;;;:::i;:::-;;653:4;634:30;659:4;;634:30;;;;;;;;;;;;;;;;;;;;;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;;634:30:8;;;;;;;;;;;;;;505:166;;;;:::o;972:228:7:-;1021:15;1048:14;1065:25;1070:4;261:2;1065:4;:25::i;:::-;1048:42;;1115:1;1103;:8;:13;1100:60;;;1147:1;1132:17;;;;;1100:60;1176:17;1191:1;1176:14;:17::i;:::-;1169:24;;;972:228;;;;:::o;974:127:13:-;1046:13;1078:5;:11;1084:4;1078:11;;;;;;;;;;;1090:3;;1078:16;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;1078:16:13;;;;;;;;;;;;;;;;;;1071:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;974:127;;;;;:::o;582:292:6:-;674:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;780:1:6;764:11;759:1;745:11;:15;744:31;743:38;735:47;;;;;;819:4;;793;:10;798:4;793:10;;;;;;;;;;;:23;804:11;793:23;;;;;;;;;;;:30;;;;;;;:::i;:::-;;855:11;849:4;838:29;;;;;;;;;;582:292;;;;;:::o;844:101:11:-;895:13;927:5;:11;933:4;927:11;;;;;;;;;;;920:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:101;;;:::o;1347:137:19:-;863:9;:7;:9::i;:::-;855:18;;;;;;1445:1;1408:40;;1429:6;;;;;;;;;;;1408:40;;;;;;;;;;;;1475:1;1458:6;;:19;;;;;;;;;;;;;;;;;;1347:137::o;492:152:11:-;565:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;595:4:11;;581:5;:11;587:4;581:11;;;;;;;;;;;:18;;;;;;;:::i;:::-;;626:4;614:23;632:4;;614:23;;;;;;;;;;;;;;;;;;;;;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;;614:23:11;;;;;;;;;;;;;;492:152;;;;:::o;1206:286:7:-;1286:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;1322:4:7;1307:33;1328:8;1338:1;1307: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;1307:33:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;261:2;1353:8;:25;1350:96;;;1411:4;1399:36;1417:17;1432:1;1417:14;:17::i;:::-;1399:36;;;;;;;;;;;;;;;;;;;;;;1350:96;1484:1;1455:10;:16;1466:4;1455:16;;;;;;;;;;;:26;1472:8;1455:26;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;1206:286;;;;:::o;659:77:19:-;697:7;723:6;;;;;;;;;;;716:13;;659:77;:::o;979:90::-;1019:4;1056:6;;;;;;;;;;;1042:20;;:10;:20;;;1035:27;;979:90;:::o;838:108:8:-;896:12;927:6;:12;934:4;927:12;;;;;;;;;;;920:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:108;;;:::o;1023:133:12:-;1076:9;1087;1116:7;:13;1124:4;1116:13;;;;;;;;;;;:15;;;1133:7;:13;1141:4;1133:13;;;;;;;;;;;:15;;;1108:41;;;;1023:133;;;:::o;681:132:7:-;743:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;759:47:7;767:4;261:2;788:17;803:1;788:14;:17::i;:::-;759:7;:47::i;:::-;681:132;;;:::o;858:226:10:-;955:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;1003:11:10;971:10;:16;982:4;971:16;;;;;;;;;;;:29;988:11;971:29;;;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;1052:11;1029:48;;;1046:4;1029:48;1065:11;1029:48;;;;;;;;;;;;;;;;;;;;;;858:226;;;;:::o;1498:127:7:-;1561:12;1592:10;:16;1603:4;1592:16;;;;;;;;;;;:26;1609:8;1592:26;;;;;;;;;;;1585:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1498:127;;;;:::o;1655:107:19:-;863:9;:7;:9::i;:::-;855:18;;;;;;1727:28;1746:8;1727:18;:28::i;:::-;1655:107;:::o;1162:171:12:-;1229:4;148:10;1267:19;;1252:34;;;:11;:34;;;;:74;;;;1290:36;1314:11;1290:23;:36::i;:::-;1252:74;1245:81;;1162:171;;;:::o;620:109:2:-;678:4;715:7;:5;:7::i;:::-;701:21;;:10;:21;;;694:28;;620:109;;;:::o;414:204:5:-;476:17;525:2;513:1;:8;:14;505:23;;;;;;598:2;593:3;589:12;583:2;580:1;576:10;570:17;566:36;561:41;;547:65;;;:::o;624:189::-;681:14;721:2;711:13;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;711:13:5;;;;707:17;;792:2;787:3;783:12;780:1;776:20;771:2;768:1;764:10;757:40;743:64;;;:::o;1906:183:19:-;1999:1;1979:22;;:8;:22;;;;1971:31;;;;;;2046:8;2017:38;;2038:6;;;;;;;;;;;2017:38;;;;;;;;;;;;2074:8;2065:6;;:17;;;;;;;;;;;;;;;;;;1906:183;:::o;951:169:11:-;1018:4;144:10;1056:17;;1041:32;;;:11;:32;;;;:72;;;;1077:36;1101:11;1077:23;:36::i;:::-;1041:72;1034:79;;951:169;;;:::o;2680:174:10:-;2747:4;204:49;;;;;;;;;;;;;;;;;;;2770:37;;;:11;:37;;;;:77;;;;2811:36;2835:11;2811:23;:36::i;:::-;2770:77;2763:84;;2680:174;;;:::o;952:177:8:-;1019:4;159:10;1057:25;;1042:40;;;:11;:40;;;;:80;;;;1086:36;1110:11;1086:23;:36::i;:::-;1042:80;1035:87;;952:177;;;:::o;1631:208:7:-;1698:4;144:10;1736:17;;1721:32;;;:11;:32;;;;:71;;;;207:10;1772:20;;1757:35;;;:11;:35;;;;1721:71;:111;;;;1796:36;1820:11;1796:23;:36::i;:::-;1721:111;1714:118;;1631:208;;;:::o;1655:168:6:-;1722:4;142:10;1760:16;;1745:31;;;:11;:31;;;;:71;;;;1780:36;1804:11;1780:23;:36::i;:::-;1745:71;1738:78;;1655:168;;;:::o;114:129:5:-;181:4;97:10;219:17;;204:32;;;:11;:32;;;;197:39;;114:129;;;:::o;469:262:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o\",\"source\":\"pragma solidity ^0.5.0;\\n\\nimport \\\"openzeppelin-solidity/contracts/ownership/Ownable.sol\\\";\\nimport \\\"./profiles/ABIResolver.sol\\\";\\nimport \\\"./profiles/AddrResolver.sol\\\";\\nimport \\\"./profiles/ContentHashResolver.sol\\\";\\nimport \\\"./profiles/InterfaceResolver.sol\\\";\\nimport \\\"./profiles/NameResolver.sol\\\";\\nimport \\\"./profiles/PubkeyResolver.sol\\\";\\nimport \\\"./profiles/TextResolver.sol\\\";\\n\\n/**\\n * A simple resolver anyone can use; only allows the owner of a node to set its\\n * address.\\n */\\ncontract OwnedResolver is Ownable, ABIResolver, AddrResolver, ContentHashResolver, InterfaceResolver, NameResolver, PubkeyResolver, TextResolver {\\n    function isAuthorised(bytes32 node) internal view returns(bool) {\\n        return msg.sender == owner();\\n    }\\n}\\n\",\"sourcePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/OwnedResolver.sol\",\"ast\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/OwnedResolver.sol\",\"exportedSymbols\":{\"OwnedResolver\":[179]},\"id\":180,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":140,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:2\"},{\"absolutePath\":\"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\"file\":\"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\"id\":141,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":4119,\"src\":\"25:63:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ABIResolver.sol\",\"file\":\"./profiles/ABIResolver.sol\",\"id\":142,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":799,\"src\":\"89:36:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/AddrResolver.sol\",\"file\":\"./profiles/AddrResolver.sol\",\"id\":143,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":958,\"src\":\"126:37:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ContentHashResolver.sol\",\"file\":\"./profiles/ContentHashResolver.sol\",\"id\":144,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1028,\"src\":\"164:44:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/InterfaceResolver.sol\",\"file\":\"./profiles/InterfaceResolver.sol\",\"id\":145,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1646,\"src\":\"209:42:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/NameResolver.sol\",\"file\":\"./profiles/NameResolver.sol\",\"id\":146,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1716,\"src\":\"252:37:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/PubkeyResolver.sol\",\"file\":\"./profiles/PubkeyResolver.sol\",\"id\":147,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1807,\"src\":\"290:39:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/TextResolver.sol\",\"file\":\"./profiles/TextResolver.sol\",\"id\":148,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1890,\"src\":\"330:37:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":149,\"name\":\"Ownable\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":4118,\"src\":\"495:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Ownable_$4118\",\"typeString\":\"contract Ownable\"}},\"id\":150,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"495:7:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":151,\"name\":\"ABIResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":798,\"src\":\"504:11:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ABIResolver_$798\",\"typeString\":\"contract ABIResolver\"}},\"id\":152,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"504:11:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":153,\"name\":\"AddrResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":957,\"src\":\"517:12:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_AddrResolver_$957\",\"typeString\":\"contract AddrResolver\"}},\"id\":154,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"517:12:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":155,\"name\":\"ContentHashResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1027,\"src\":\"531:19:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ContentHashResolver_$1027\",\"typeString\":\"contract ContentHashResolver\"}},\"id\":156,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"531:19:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":157,\"name\":\"InterfaceResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1645,\"src\":\"552:17:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_InterfaceResolver_$1645\",\"typeString\":\"contract InterfaceResolver\"}},\"id\":158,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"552:17:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":159,\"name\":\"NameResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1715,\"src\":\"571:12:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_NameResolver_$1715\",\"typeString\":\"contract NameResolver\"}},\"id\":160,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"571:12:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":161,\"name\":\"PubkeyResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1806,\"src\":\"585:14:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_PubkeyResolver_$1806\",\"typeString\":\"contract PubkeyResolver\"}},\"id\":162,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"585:14:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":163,\"name\":\"TextResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1889,\"src\":\"601:12:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_TextResolver_$1889\",\"typeString\":\"contract TextResolver\"}},\"id\":164,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"601:12:2\"}],\"contractDependencies\":[662,798,957,1027,1645,1715,1806,1889,4118],\"contractKind\":\"contract\",\"documentation\":\"A simple resolver anyone can use; only allows the owner of a node to set its\\naddress.\",\"fullyImplemented\":true,\"id\":179,\"linearizedBaseContracts\":[179,1889,1806,1715,1645,1027,957,798,662,4118],\"name\":\"OwnedResolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"body\":{\"id\":177,\"nodeType\":\"Block\",\"src\":\"684:45:2\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":175,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":171,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4133,\"src\":\"701:3:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":172,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"701:10:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":173,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4043,\"src\":\"715:5:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$__$returns$_t_address_$\",\"typeString\":\"function () view returns (address)\"}},\"id\":174,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"715:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"701:21:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":170,\"id\":176,\"nodeType\":\"Return\",\"src\":\"694:28:2\"}]},\"documentation\":null,\"id\":178,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isAuthorised\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":167,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":166,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":178,\"src\":\"642:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":165,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"642:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"641:14:2\"},\"returnParameters\":{\"id\":170,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":169,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":178,\"src\":\"678:4:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":168,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"678:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"677:6:2\"},\"scope\":179,\"src\":\"620:109:2\",\"stateMutability\":\"view\",\"superFunction\":617,\"visibility\":\"internal\"}],\"scope\":180,\"src\":\"469:262:2\"}],\"src\":\"0:732:2\"},\"legacyAST\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/OwnedResolver.sol\",\"exportedSymbols\":{\"OwnedResolver\":[179]},\"id\":180,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":140,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:2\"},{\"absolutePath\":\"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\"file\":\"openzeppelin-solidity/contracts/ownership/Ownable.sol\",\"id\":141,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":4119,\"src\":\"25:63:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ABIResolver.sol\",\"file\":\"./profiles/ABIResolver.sol\",\"id\":142,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":799,\"src\":\"89:36:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/AddrResolver.sol\",\"file\":\"./profiles/AddrResolver.sol\",\"id\":143,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":958,\"src\":\"126:37:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ContentHashResolver.sol\",\"file\":\"./profiles/ContentHashResolver.sol\",\"id\":144,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1028,\"src\":\"164:44:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/InterfaceResolver.sol\",\"file\":\"./profiles/InterfaceResolver.sol\",\"id\":145,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1646,\"src\":\"209:42:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/NameResolver.sol\",\"file\":\"./profiles/NameResolver.sol\",\"id\":146,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1716,\"src\":\"252:37:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/PubkeyResolver.sol\",\"file\":\"./profiles/PubkeyResolver.sol\",\"id\":147,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1807,\"src\":\"290:39:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/TextResolver.sol\",\"file\":\"./profiles/TextResolver.sol\",\"id\":148,\"nodeType\":\"ImportDirective\",\"scope\":180,\"sourceUnit\":1890,\"src\":\"330:37:2\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":149,\"name\":\"Ownable\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":4118,\"src\":\"495:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_Ownable_$4118\",\"typeString\":\"contract Ownable\"}},\"id\":150,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"495:7:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":151,\"name\":\"ABIResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":798,\"src\":\"504:11:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ABIResolver_$798\",\"typeString\":\"contract ABIResolver\"}},\"id\":152,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"504:11:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":153,\"name\":\"AddrResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":957,\"src\":\"517:12:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_AddrResolver_$957\",\"typeString\":\"contract AddrResolver\"}},\"id\":154,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"517:12:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":155,\"name\":\"ContentHashResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1027,\"src\":\"531:19:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ContentHashResolver_$1027\",\"typeString\":\"contract ContentHashResolver\"}},\"id\":156,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"531:19:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":157,\"name\":\"InterfaceResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1645,\"src\":\"552:17:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_InterfaceResolver_$1645\",\"typeString\":\"contract InterfaceResolver\"}},\"id\":158,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"552:17:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":159,\"name\":\"NameResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1715,\"src\":\"571:12:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_NameResolver_$1715\",\"typeString\":\"contract NameResolver\"}},\"id\":160,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"571:12:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":161,\"name\":\"PubkeyResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1806,\"src\":\"585:14:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_PubkeyResolver_$1806\",\"typeString\":\"contract PubkeyResolver\"}},\"id\":162,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"585:14:2\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":163,\"name\":\"TextResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1889,\"src\":\"601:12:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_TextResolver_$1889\",\"typeString\":\"contract TextResolver\"}},\"id\":164,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"601:12:2\"}],\"contractDependencies\":[662,798,957,1027,1645,1715,1806,1889,4118],\"contractKind\":\"contract\",\"documentation\":\"A simple resolver anyone can use; only allows the owner of a node to set its\\naddress.\",\"fullyImplemented\":true,\"id\":179,\"linearizedBaseContracts\":[179,1889,1806,1715,1645,1027,957,798,662,4118],\"name\":\"OwnedResolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"body\":{\"id\":177,\"nodeType\":\"Block\",\"src\":\"684:45:2\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":175,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":171,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4133,\"src\":\"701:3:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":172,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"701:10:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"arguments\":[],\"expression\":{\"argumentTypes\":[],\"id\":173,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4043,\"src\":\"715:5:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_internal_view$__$returns$_t_address_$\",\"typeString\":\"function () view returns (address)\"}},\"id\":174,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"715:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"src\":\"701:21:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":170,\"id\":176,\"nodeType\":\"Return\",\"src\":\"694:28:2\"}]},\"documentation\":null,\"id\":178,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isAuthorised\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":167,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":166,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":178,\"src\":\"642:12:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":165,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"642:7:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"641:14:2\"},\"returnParameters\":{\"id\":170,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":169,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":178,\"src\":\"678:4:2\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":168,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"678:4:2\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"677:6:2\"},\"scope\":179,\"src\":\"620:109:2\",\"stateMutability\":\"view\",\"superFunction\":617,\"visibility\":\"internal\"}],\"scope\":180,\"src\":\"469:262:2\"}],\"src\":\"0:732:2\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.8+commit.23d335f2.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.16\",\"updatedAt\":\"2019-12-10T10:26:02.632Z\",\"devdoc\":{\"methods\":{\"ABI(bytes32,uint256)\":{\"params\":{\"contentTypes\":\"A bitwise OR of the ABI formats accepted by the caller.\",\"node\":\"The ENS node to query\"},\"return\":\"contentType The content type of the return valuedata The ABI data\"},\"addr(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated address.\"},\"contenthash(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated contenthash.\"},\"interfaceImplementer(bytes32,bytes4)\":{\"params\":{\"interfaceID\":\"The EIP 168 interface ID to check for.\",\"node\":\"The ENS node to query.\"},\"return\":\"The address that implements this interface, or 0 if the interface is unsupported.\"},\"isOwner()\":{\"return\":\"true if `msg.sender` is the owner of the contract.\"},\"name(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated name.\"},\"owner()\":{\"return\":\"the address of the owner.\"},\"pubkey(bytes32)\":{\"params\":{\"node\":\"The ENS node to query\"},\"return\":\"x, y the X and Y coordinates of the curve point for the public key.\"},\"renounceOwnership()\":{\"details\":\"Allows the current owner to relinquish control of the contract.\"},\"setABI(bytes32,uint256,bytes)\":{\"params\":{\"contentType\":\"The content type of the ABI\",\"data\":\"The ABI data.\",\"node\":\"The node to update.\"}},\"setAddr(bytes32,address)\":{\"params\":{\"a\":\"The address to set.\",\"node\":\"The node to update.\"}},\"setContenthash(bytes32,bytes)\":{\"params\":{\"hash\":\"The contenthash to set\",\"node\":\"The node to update.\"}},\"setInterface(bytes32,bytes4,address)\":{\"params\":{\"implementer\":\"The address of a contract that implements this interface for this node.\",\"interfaceID\":\"The EIP 168 interface ID.\",\"node\":\"The node to update.\"}},\"setName(bytes32,string)\":{\"params\":{\"name\":\"The name to set.\",\"node\":\"The node to update.\"}},\"setPubkey(bytes32,bytes32,bytes32)\":{\"params\":{\"node\":\"The ENS node to query\",\"x\":\"the X coordinate of the curve point for the public key.\",\"y\":\"the Y coordinate of the curve point for the public key.\"}},\"setText(bytes32,string,string)\":{\"params\":{\"key\":\"The key to set.\",\"node\":\"The node to update.\",\"value\":\"The text data value to set.\"}},\"text(bytes32,string)\":{\"params\":{\"key\":\"The text data key to query.\",\"node\":\"The ENS node to query.\"},\"return\":\"The associated text data.\"},\"transferOwnership(address)\":{\"details\":\"Allows the current owner to transfer control of the contract to a newOwner.\",\"params\":{\"newOwner\":\"The address to transfer ownership to.\"}}}},\"userdoc\":{\"methods\":{\"ABI(bytes32,uint256)\":{\"notice\":\"Returns the ABI associated with an ENS node. Defined in EIP205.\"},\"addr(bytes32)\":{\"notice\":\"Returns the address associated with an ENS node.\"},\"contenthash(bytes32)\":{\"notice\":\"Returns the contenthash associated with an ENS node.\"},\"interfaceImplementer(bytes32,bytes4)\":{\"notice\":\"Returns the address of a contract that implements the specified interface for this name. If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that contract implements EIP168 and returns `true` for the specified interfaceID, its address will be returned.\"},\"name(bytes32)\":{\"notice\":\"Returns the name associated with an ENS node, for reverse records. Defined in EIP181.\"},\"pubkey(bytes32)\":{\"notice\":\"Returns the SECP256k1 public key associated with an ENS node. Defined in EIP 619.\"},\"renounceOwnership()\":{\"notice\":\"Renouncing to ownership will leave the contract without an owner. It will not be possible to call the functions with the `onlyOwner` modifier anymore.\"},\"setABI(bytes32,uint256,bytes)\":{\"notice\":\"Sets the ABI associated with an ENS node. Nodes may have one ABI of each content type. To remove an ABI, set it to the empty string.\"},\"setAddr(bytes32,address)\":{\"notice\":\"Sets the address associated with an ENS node. May only be called by the owner of that node in the ENS registry.\"},\"setContenthash(bytes32,bytes)\":{\"notice\":\"Sets the contenthash associated with an ENS node. May only be called by the owner of that node in the ENS registry.\"},\"setInterface(bytes32,bytes4,address)\":{\"notice\":\"Sets an interface associated with a name. Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\"},\"setName(bytes32,string)\":{\"notice\":\"Sets the name associated with an ENS node, for reverse records. May only be called by the owner of that node in the ENS registry.\"},\"setPubkey(bytes32,bytes32,bytes32)\":{\"notice\":\"Sets the SECP256k1 public key associated with an ENS node.\"},\"setText(bytes32,string,string)\":{\"notice\":\"Sets the text data associated with an ENS node and key. May only be called by the owner of that node in the ENS registry.\"},\"text(bytes32,string)\":{\"notice\":\"Returns the text data associated with an ENS node and key.\"}},\"notice\":\"A simple resolver anyone can use; only allows the owner of a node to set its address.\"}}");

/***/ }),

/***/ 322315:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"PublicResolver\",\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"pure\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setDNSRecords\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"interfaceImplementer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"setContenthash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"bytes32\"}],\"name\":\"hasDNSRecords\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"coinType\",\"type\":\"uint256\"},{\"name\":\"a\",\"type\":\"bytes\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"name\",\"type\":\"bytes32\"},{\"name\":\"resource\",\"type\":\"uint16\"}],\"name\":\"dnsRecord\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"clearDNSZone\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"contenthash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"a\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"setInterface\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"coinType\",\"type\":\"uint256\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\"},{\"name\":\"\",\"type\":\"address\"},{\"name\":\"\",\"type\":\"address\"}],\"name\":\"authorisations\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"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\":true,\"name\":\"target\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"isAuthorised\",\"type\":\"bool\"}],\"name\":\"AuthorisationChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"indexed\":false,\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"InterfaceChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"resource\",\"type\":\"uint16\"},{\"indexed\":false,\"name\":\"record\",\"type\":\"bytes\"}],\"name\":\"DNSRecordChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"bytes\"},{\"indexed\":false,\"name\":\"resource\",\"type\":\"uint16\"}],\"name\":\"DNSRecordDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"DNSZoneCleared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"ContenthashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"coinType\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newAddress\",\"type\":\"bytes\"}],\"name\":\"AddressChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"target\",\"type\":\"address\"},{\"name\":\"isAuthorised\",\"type\":\"bool\"}],\"name\":\"setAuthorisation\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"data\",\"type\":\"bytes[]\"}],\"name\":\"multicall\",\"outputs\":[{\"name\":\"results\",\"type\":\"bytes[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"}],\\\"name\\\":\\\"supportsInterface\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setDNSRecords\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setText\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"}],\\\"name\\\":\\\"interfaceImplementer\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"contentTypes\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ABI\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"setPubkey\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setContenthash\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addr\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"isAuthorised\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"setAuthorisation\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"hasDNSRecords\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"text\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"contentType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setABI\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setName\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setAddr\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"resource\\\",\\\"type\\\":\\\"uint16\\\"}],\\\"name\\\":\\\"dnsRecord\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"name\\\":\\\"multicall\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"results\\\",\\\"type\\\":\\\"bytes[]\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"clearDNSZone\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"contenthash\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"pubkey\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setAddr\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"},{\\\"name\\\":\\\"implementer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setInterface\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"addr\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"authorisations\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"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\\\":true,\\\"name\\\":\\\"target\\\",\\\"type\\\":\\\"address\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"isAuthorised\\\",\\\"type\\\":\\\"bool\\\"}],\\\"name\\\":\\\"AuthorisationChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"indexedKey\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"TextChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"PubkeyChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"NameChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"implementer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"InterfaceChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"resource\\\",\\\"type\\\":\\\"uint16\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"record\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"DNSRecordChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"resource\\\",\\\"type\\\":\\\"uint16\\\"}],\\\"name\\\":\\\"DNSRecordDeleted\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"DNSZoneCleared\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"ContenthashChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddrChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"newAddress\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"AddressChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"contentType\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ABIChanged\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{\\\"ABI(bytes32,uint256)\\\":{\\\"params\\\":{\\\"contentTypes\\\":\\\"A bitwise OR of the ABI formats accepted by the caller.\\\",\\\"node\\\":\\\"The ENS node to query\\\"},\\\"return\\\":\\\"contentType The content type of the return valuedata The ABI data\\\"},\\\"addr(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The associated address.\\\"},\\\"clearDNSZone(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"the namehash of the node for which to clear the zone\\\"}},\\\"contenthash(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The associated contenthash.\\\"},\\\"dnsRecord(bytes32,bytes32,uint16)\\\":{\\\"params\\\":{\\\"name\\\":\\\"the keccak-256 hash of the fully-qualified name for which to fetch the record\\\",\\\"node\\\":\\\"the namehash of the node for which to fetch the record\\\",\\\"resource\\\":\\\"the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\\\"},\\\"return\\\":\\\"the DNS record in wire format if present, otherwise empty\\\"},\\\"hasDNSRecords(bytes32,bytes32)\\\":{\\\"params\\\":{\\\"name\\\":\\\"the namehash of the node for which to check the records\\\",\\\"node\\\":\\\"the namehash of the node for which to check the records\\\"}},\\\"interfaceImplementer(bytes32,bytes4)\\\":{\\\"params\\\":{\\\"interfaceID\\\":\\\"The EIP 168 interface ID to check for.\\\",\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The address that implements this interface, or 0 if the interface is unsupported.\\\"},\\\"name(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The associated name.\\\"},\\\"pubkey(bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query\\\"},\\\"return\\\":\\\"x, y the X and Y coordinates of the curve point for the public key.\\\"},\\\"setABI(bytes32,uint256,bytes)\\\":{\\\"params\\\":{\\\"contentType\\\":\\\"The content type of the ABI\\\",\\\"data\\\":\\\"The ABI data.\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setAddr(bytes32,address)\\\":{\\\"params\\\":{\\\"a\\\":\\\"The address to set.\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setAuthorisation(bytes32,address,bool)\\\":{\\\"details\\\":\\\"Sets or clears an authorisation. Authorisations are specific to the caller. Any account can set an authorisation for any name, but the authorisation that is checked will be that of the current owner of a name. Thus, transferring a name effectively clears any existing authorisations, and new authorisations can be set in advance of an ownership transfer if desired.\\\",\\\"params\\\":{\\\"isAuthorised\\\":\\\"True if the address should be authorised, or false if it should be deauthorised.\\\",\\\"node\\\":\\\"The name to change the authorisation on.\\\",\\\"target\\\":\\\"The address that is to be authorised or deauthorised.\\\"}},\\\"setContenthash(bytes32,bytes)\\\":{\\\"params\\\":{\\\"hash\\\":\\\"The contenthash to set\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setDNSRecords(bytes32,bytes)\\\":{\\\"params\\\":{\\\"data\\\":\\\"the DNS wire format records to set\\\",\\\"node\\\":\\\"the namehash of the node for which to set the records\\\"}},\\\"setInterface(bytes32,bytes4,address)\\\":{\\\"params\\\":{\\\"implementer\\\":\\\"The address of a contract that implements this interface for this node.\\\",\\\"interfaceID\\\":\\\"The EIP 168 interface ID.\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setName(bytes32,string)\\\":{\\\"params\\\":{\\\"name\\\":\\\"The name to set.\\\",\\\"node\\\":\\\"The node to update.\\\"}},\\\"setPubkey(bytes32,bytes32,bytes32)\\\":{\\\"params\\\":{\\\"node\\\":\\\"The ENS node to query\\\",\\\"x\\\":\\\"the X coordinate of the curve point for the public key.\\\",\\\"y\\\":\\\"the Y coordinate of the curve point for the public key.\\\"}},\\\"setText(bytes32,string,string)\\\":{\\\"params\\\":{\\\"key\\\":\\\"The key to set.\\\",\\\"node\\\":\\\"The node to update.\\\",\\\"value\\\":\\\"The text data value to set.\\\"}},\\\"text(bytes32,string)\\\":{\\\"params\\\":{\\\"key\\\":\\\"The text data key to query.\\\",\\\"node\\\":\\\"The ENS node to query.\\\"},\\\"return\\\":\\\"The associated text data.\\\"}}},\\\"userdoc\\\":{\\\"methods\\\":{\\\"ABI(bytes32,uint256)\\\":{\\\"notice\\\":\\\"Returns the ABI associated with an ENS node. Defined in EIP205.\\\"},\\\"addr(bytes32)\\\":{\\\"notice\\\":\\\"Returns the address associated with an ENS node.\\\"},\\\"clearDNSZone(bytes32)\\\":{\\\"notice\\\":\\\"Clear all information for a DNS zone.\\\"},\\\"contenthash(bytes32)\\\":{\\\"notice\\\":\\\"Returns the contenthash associated with an ENS node.\\\"},\\\"dnsRecord(bytes32,bytes32,uint16)\\\":{\\\"notice\\\":\\\"Obtain a DNS record.\\\"},\\\"hasDNSRecords(bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Check if a given node has records.\\\"},\\\"interfaceImplementer(bytes32,bytes4)\\\":{\\\"notice\\\":\\\"Returns the address of a contract that implements the specified interface for this name. If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that contract implements EIP168 and returns `true` for the specified interfaceID, its address will be returned.\\\"},\\\"name(bytes32)\\\":{\\\"notice\\\":\\\"Returns the name associated with an ENS node, for reverse records. Defined in EIP181.\\\"},\\\"pubkey(bytes32)\\\":{\\\"notice\\\":\\\"Returns the SECP256k1 public key associated with an ENS node. Defined in EIP 619.\\\"},\\\"setABI(bytes32,uint256,bytes)\\\":{\\\"notice\\\":\\\"Sets the ABI associated with an ENS node. Nodes may have one ABI of each content type. To remove an ABI, set it to the empty string.\\\"},\\\"setAddr(bytes32,address)\\\":{\\\"notice\\\":\\\"Sets the address associated with an ENS node. May only be called by the owner of that node in the ENS registry.\\\"},\\\"setContenthash(bytes32,bytes)\\\":{\\\"notice\\\":\\\"Sets the contenthash associated with an ENS node. May only be called by the owner of that node in the ENS registry.\\\"},\\\"setDNSRecords(bytes32,bytes)\\\":{\\\"notice\\\":\\\"Set one or more DNS records.  Records are supplied in wire-format. Records with the same node/name/resource must be supplied one after the other to ensure the data is updated correctly. For example, if the data was supplied:    a.example.com IN A 1.2.3.4    a.example.com IN A 5.6.7.8    www.example.com IN CNAME a.example.com. then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was supplied:    a.example.com IN A 1.2.3.4    www.example.com IN CNAME a.example.com.    a.example.com IN A 5.6.7.8 then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\\\"},\\\"setInterface(bytes32,bytes4,address)\\\":{\\\"notice\\\":\\\"Sets an interface associated with a name. Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\\\"},\\\"setName(bytes32,string)\\\":{\\\"notice\\\":\\\"Sets the name associated with an ENS node, for reverse records. May only be called by the owner of that node in the ENS registry.\\\"},\\\"setPubkey(bytes32,bytes32,bytes32)\\\":{\\\"notice\\\":\\\"Sets the SECP256k1 public key associated with an ENS node.\\\"},\\\"setText(bytes32,string,string)\\\":{\\\"notice\\\":\\\"Sets the text data associated with an ENS node and key. May only be called by the owner of that node in the ENS registry.\\\"},\\\"text(bytes32,string)\\\":{\\\"notice\\\":\\\"Returns the text data associated with an ENS node and key.\\\"}},\\\"notice\\\":\\\"A simple resolver anyone can use; only allows the owner of a node to set its address.\\\"}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/PublicResolver.sol\\\":\\\"PublicResolver\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/PublicResolver.sol\\\":{\\\"keccak256\\\":\\\"0xefbe75eae88d73e4db56bc22f72fbf157d027caf2d20644eb99298f04b27fa5f\\\",\\\"urls\\\":[\\\"bzzr://4cb74b326c91262a10141c4c2dfe36a303793fbb300f502a0f3e2fbfbb468c58\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/ResolverBase.sol\\\":{\\\"keccak256\\\":\\\"0xfc7d550960829127576d6fc3080513d74ef18a6d7057d0d9262ce071890053e8\\\",\\\"urls\\\":[\\\"bzzr://81e5565403a67f558d12c787f53f40ff19a5da99c648f8a4f99f2caa449ca0e6\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ABIResolver.sol\\\":{\\\"keccak256\\\":\\\"0x794514d39c469bab511822ca7a1a7a7838dca338499889896c7dac4303c30c1f\\\",\\\"urls\\\":[\\\"bzzr://9fdf58339517baeca57889519a4bb2f30a010f2f4262771e6f5de4374fc436b1\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/AddrResolver.sol\\\":{\\\"keccak256\\\":\\\"0xbe84f840b10f6ddc3d695d5905fe4034569c646bdf56b1367c16271aa92071c6\\\",\\\"urls\\\":[\\\"bzzr://c97941ee4075d43abe371cc52f3bfa018d7dc93c7cfbb72da565ecaa72996381\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ContentHashResolver.sol\\\":{\\\"keccak256\\\":\\\"0xaa3d9b9baae36fbf831b8297832b54ffd1023b9ac508f2c5068b92ce0c30edfc\\\",\\\"urls\\\":[\\\"bzzr://c80ec35a145dd4b853e1e04b32763843313be216462a4993d28d5b489a6912f7\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/DNSResolver.sol\\\":{\\\"keccak256\\\":\\\"0x51534f5ebdcfda403b1a935f256e7f27d16b490e5b023b6e57877973daf9a4d4\\\",\\\"urls\\\":[\\\"bzzr://a81c189814102f6debd761795650d94694225b7486d490faf7d5fb6e0704ed28\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/InterfaceResolver.sol\\\":{\\\"keccak256\\\":\\\"0x6398dc59dd38501acd6a716173793e84aa1c454c3e21c190e10ddbe54dd8be41\\\",\\\"urls\\\":[\\\"bzzr://0d539232d308722b6a434ed5e9a22b0c4cb849c641b6d0739f2f83e566cb59f1\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/NameResolver.sol\\\":{\\\"keccak256\\\":\\\"0xcff06da8901397164ca9bea36361ac518fb62cd5283d2e2e835e006980ba4d16\\\",\\\"urls\\\":[\\\"bzzr://a4a8988916719c4976bb0caf1cff3bdee3c94ae693b57970f6b925124cff38ee\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/PubkeyResolver.sol\\\":{\\\"keccak256\\\":\\\"0xaa10a8a7e1579987b6781657153ae3f16806f240b3ffaa54ea1f303f7cb7a74a\\\",\\\"urls\\\":[\\\"bzzr://1caaa8668f536f654f4e6d68129ab5091e0ed5c72e0e70216b82d0bb9e7cd86f\\\"]},\\\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/TextResolver.sol\\\":{\\\"keccak256\\\":\\\"0x1feb20d9466c52f471c57344c1e3792e2c69b24ab9d7f7a4de6e49912abc75bb\\\",\\\"urls\\\":[\\\"bzzr://25ce3b4bf68f29d54e8916c0682b746a9e15f14bcccfc76136fc17ae2c902898\\\"]},\\\"@ensdomains/buffer/contracts/Buffer.sol\\\":{\\\"keccak256\\\":\\\"0x1264adbd06f6e05b04539bb225063a988b7fa90343d068de60cdde6cfb6fa92d\\\",\\\"urls\\\":[\\\"bzzr://8f1cb39e242b73bb7fac1f48bf0380ccccad14f06aae9cf4f87329cc78186122\\\"]},\\\"@ensdomains/dnssec-oracle/contracts/BytesUtils.sol\\\":{\\\"keccak256\\\":\\\"0x4014e689ef4a36cbf7103d88286abd2a7c560c2a7af99a561c33c61bc78be27a\\\",\\\"urls\\\":[\\\"bzzr://adf984996598f1e0d446eea1eda14ed2c49ab86a4ea1ae837cf4f9d99556b9c2\\\"]},\\\"@ensdomains/dnssec-oracle/contracts/RRUtils.sol\\\":{\\\"keccak256\\\":\\\"0x5135591043cf38413b19f93d16f189f0f8b50b01b78642fb764635d9790cc7ca\\\",\\\"urls\\\":[\\\"bzzr://7e3a0111306a7c5640e213da22bcfac1e42b813e8d4d99ef7ea33c09747049fc\\\"]},\\\"@ensdomains/ens/contracts/ENS.sol\\\":{\\\"keccak256\\\":\\\"0x10b88673d8c180cd62523be4fec7607c65594eb4f0c561fa0fbc0784422b4871\\\",\\\"urls\\\":[\\\"bzzr://8e5a54eed92d9bf8824175cf337e0df46e647deb0864eb5f091ea0b8132568f6\\\"]}},\\\"version\\\":1}\",\"bytecode\":\" \",\"deployedBytecode\":\" \",\"sourceMap\":\"520:2174:3:-;;;1151:56;8:9:-1;5:2;;;30:1;27;20:12;5:2;1151:56:3;;;;;;;;;;;;;;;;;;;;;;1196:4;1190:3;;:10;;;;;;;;;;;;;;;;;;1151:56;520:2174;;5:158:-1;;101:6;95:13;86:22;;113:45;152:5;113:45;;;80:83;;;;;170:287;;297:2;285:9;276:7;272:23;268:32;265:2;;;313:1;310;303:12;265:2;348:1;365:76;433:7;424:6;413:9;409:22;365:76;;;355:86;;327:120;259:198;;;;;464:91;;526:24;544:5;526:24;;;515:35;;509:46;;;;562:103;;636:24;654:5;636:24;;;625:35;;619:46;;;;672:121;;745:42;738:5;734:54;723:65;;717:76;;;;800:141;881:36;911:5;881:36;;;874:5;871:47;861:2;;932:1;929;922:12;861:2;855:86;;520:2174:3;;;;;;;\",\"deployedSourceMap\":\"520:2174:3:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;520:2174:3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1107:169:13;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2403:1263:9;;;;;;;;;;;;;;;;:::i;:::-;;573:184:13;;;;;;;;;;;;;;;;:::i;:::-;;1721:953:10;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1195:454:6;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;612:169:12;;;;;;;;;;;;;;;;:::i;:::-;;505:166:8;;;;;;;;;;;;;;;;:::i;:::-;;972:228:7;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1892:231:3;;;;;;;;;;;;;;;;:::i;:::-;;4450:153:9;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;974:127:13;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;582:292:6;;;;;;;;;;;;;;;;:::i;:::-;;844:101:11;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;492:152;;;;;;;;;;;;;;;;:::i;:::-;;1206:286:7;;;;;;;;;;;;;;;;:::i;:::-;;4068:168:9;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2326:366:3;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4742:128:9;;;;;;;;;;;;;;;;:::i;:::-;;838:108:8;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1023:133:12;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;681:132:7;;;;;;;;;;;;;;;;:::i;:::-;;858:226:10;;;;;;;;;;;;;;;;:::i;:::-;;1498:127:7;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;943:80:3;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1107:169:13;1174:4;144:10;1212:17;;1197:32;;;:11;:32;;;;:72;;;;1233:36;1257:11;1233:23;:36::i;:::-;1197:72;1190:79;;1107:169;;;:::o;2403:1263:9:-;2481:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;2497:15:9;2515:1;2497:19;;2526:14;2543:1;2526:18;;2554:17;2581:18;2609:16;2701:30;;:::i;:::-;2734:18;2750:1;2734:4;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;2734:15:9;;;;;;;;:18;;;;:::i;:::-;2701:51;;2696:821;2755:11;:4;:9;:11::i;:::-;2696:821;;2811:1;2799:8;:13;;;2795:712;;;2843:4;:12;;;2832:23;;2880:11;:4;:9;:11::i;:::-;2873:18;;2947:4;2930:22;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2930:22:9;;;2920:33;;;;;;2909:44;;2985:12;:4;:10;:12::i;:::-;2971:27;;2795:712;;;3037:20;3060:11;:4;:9;:11::i;:::-;3037:34;;3105:4;:12;;;3093:24;;:8;:24;;;;:49;;;;3122:20;3134:7;3122:4;:11;;:20;;;;:::i;:::-;3121:21;3093:49;3089:404;;;3166:88;3178:4;3184;3190:8;3200:4;;3166:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;3166:88:9;;;;;;3206:6;3228;3214:4;:11;;;:20;3252:1;3236:5;:12;:17;3166:11;:88::i;:::-;3287:4;:12;;;3276:23;;3330:4;:11;;;3321:20;;3370:7;3363:14;;3420:4;3410:15;;;;;;3399:26;;3461:12;:4;:10;:12::i;:::-;3447:27;;3089:404;2795:712;;2768:11;:4;:9;:11::i;:::-;2696:821;;;;3544:1;3530:4;:11;:15;3526:134;;;3561:88;3573:4;3579;3585:8;3595:4;;3561:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;3561:88:9;;;;;;3601:6;3623;3609:4;;:11;;:20;3647:1;3631:5;:12;:17;3561:11;:88::i;:::-;3526:134;400:1:5;;;;;2403:1263:9;;;;:::o;573:184:13:-;668:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;703:5:13;;684;:11;690:4;684:11;;;;;;;;;;;696:3;;684:16;;;;;;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;741:3;;723:27;;;;;;;;;;;;;;;;735:4;723:27;746:3;;723:27;;;;;;;;;;;;;;;;573:184;;;;;;:::o;1721:953:10:-;1808:7;1827:19;1849:10;:16;1860:4;1849:16;;;;;;;;;;;:29;1866:11;1849:29;;;;;;;;;;;;;;;;;;;;;;;;;;;1827:51;;1914:1;1891:25;;:11;:25;;;1888:73;;1939:11;1932:18;;;;;1888:73;1971:9;1983:10;1988:4;1983;:10::i;:::-;1971:22;;2019:1;2006:15;;:1;:15;;;2003:62;;;2052:1;2037:17;;;;;;2003:62;2076:12;2090:23;2117:1;:12;;304:10;2183:17;;2130:71;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2130:71:10;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;2130:71:10;2117:85;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2075:127:10;;;;2216:7;2215:8;:34;;;;2247:2;2227:10;:17;:22;2215:34;:57;;;;2271:1;2253:19;;:10;2264:2;2253:14;;;;;;;;;;;;;;;;:19;;;;2215:57;2212:151;;;2350:1;2335:17;;;;;;;;2212:151;2397:1;:12;;2463:11;2410:65;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;2410:65:10;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;2410:65:10;2397:79;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2373:103:10;;;;;;;;2490:7;2489:8;:34;;;;2521:2;2501:10;:17;:22;2489:34;:57;;;;2545:1;2527:19;;:10;2538:2;2527:14;;;;;;;;;;;;;;;;:19;;;;2489:57;2486:163;;;2636:1;2621:17;;;;;;;;2486:163;2666:1;2659:8;;;;;;1721:953;;;;;:::o;1195:454:6:-;1267:7;1276:12;1300:38;1341:4;:10;1346:4;1341:10;;;;;;;;;;;1300:51;;1367:19;1389:1;1367:23;;1362:249;1407:12;1392:11;:27;1362:249;;1490:1;1473:12;1459:11;:26;1458:33;;:67;;;;;1524:1;1495:6;:19;1502:11;1495:19;;;;;;;;;;;:26;;;;;;;;;;;;;;;;:30;1458:67;1454:147;;;1553:11;1566:6;:19;1573:11;1566:19;;;;;;;;;;;1545:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1454:147;1437:1;1421:17;;;;;1362:249;;;;1629:1;1632:9;;;;;;;;;;;;1621:21;;;;;;;;1195:454;;;;;;:::o;612:169:12:-;687:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;719:15:12;;;;;;;;729:1;719:15;;;;732:1;719:15;;;703:7;:13;711:4;703:13;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;763:4;749:25;769:1;772;749:25;;;;;;;;;;;;;;;;612:169;;;;:::o;505:166:8:-;584:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;615:4:8;;600:6;:12;607:4;600:12;;;;;;;;;;;:19;;;;;;;:::i;:::-;;653:4;634:30;659:4;;634:30;;;;;;;;;;;;;;;;505:166;;;;:::o;972:228:7:-;1021:15;1048:14;1065:25;1070:4;261:2;1065:4;:25::i;:::-;1048:42;;1115:1;1103;:8;:13;1100:60;;;1147:1;1132:17;;;;;1100:60;1176:17;1191:1;1176:14;:17::i;:::-;1169:24;;;972:228;;;;:::o;1892:231:3:-;2029:12;1986:14;:20;2001:4;1986:20;;;;;;;;;;;:32;2007:10;1986:32;;;;;;;;;;;;;;;:40;2019:6;1986:40;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;2095:6;2056:60;;2083:10;2056:60;;2077:4;2056:60;2103:12;2056:60;;;;;;;;;;;;;;;1892:231;;;:::o;4450:153:9:-;4522:4;4594:1;4546:16;:22;4563:4;4546:22;;;;;;;;;;;:38;4569:8;:14;4578:4;4569:14;;;;;;;;;;;;4546:38;;;;;;;;;;;:44;4585:4;4546:44;;;;;;;;;;;;;;;;;;;;;:49;;;;4538:58;;4450:153;;;;:::o;974:127:13:-;1046:13;1078:5;:11;1084:4;1078:11;;;;;;;;;;;1090:3;;1078:16;;;;;;;;;;;;;;;;;;;;;1071:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;974:127;;;;;:::o;582:292:6:-;674:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;780:1:6;764:11;759:1;745:11;:15;744:31;743:38;735:47;;;;;;819:4;;793;:10;798:4;793:10;;;;;;;;;;;:23;804:11;793:23;;;;;;;;;;;:30;;;;;;;:::i;:::-;;855:11;849:4;838:29;;;;;;;;;;582:292;;;;;:::o;844:101:11:-;895:13;927:5;:11;933:4;927:11;;;;;;;;;;;920:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;844:101;;;:::o;492:152::-;565:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;595:4:11;;581:5;:11;587:4;581:11;;;;;;;;;;;:18;;;;;;;:::i;:::-;;626:4;614:23;632:4;;614:23;;;;;;;;;;;;;;;;492:152;;;;:::o;1206:286:7:-;1286:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;1322:4:7;1307:33;1328:8;1338:1;1307:33;;;;;;;;;;;;;;;;261:2;1353:8;:25;1350:96;;;1411:4;1399:36;1417:17;1432:1;1417:14;:17::i;:::-;1399:36;;;;;;;;;;;;;;;1350:96;1484:1;1455:10;:16;1466:4;1455:16;;;;;;;;;;;:26;1472:8;1455:26;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;1206:286;;;;:::o;4068:168:9:-;4153:12;4184:7;:13;4192:4;4184:13;;;;;;;;;;;:29;4198:8;:14;4207:4;4198:14;;;;;;;;;;;;4184:29;;;;;;;;;;;:35;4214:4;4184:35;;;;;;;;;;;:45;4220:8;4184:45;;;;;;;;;;;;;;;4177:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4068:168;;;;;:::o;2326:366:3:-;2385:22;2441:4;;:11;;2429:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2419:34;;2467:6;2476:1;2467:10;;2463:199;2483:4;;:11;;2479:1;:15;2463:199;;;2516:12;2530:19;2561:4;2553:26;;2580:4;;2585:1;2580:7;;;;;;;;;;;;;43:11:-1;30:25;137:1;131:4;127:12;116:8;100:14;96:29;92:48;72:18;68:73;58:2;;155:1;152;145:12;58:2;188:18;178:8;174:33;162:45;;0:210;29:8;16:22;6:32;;69:4;59:8;55:19;43:31;;93:18;85:6;82:30;79:2;;;125:1;122;115:12;79:2;183:3;175:6;171:16;155:14;151:37;141:8;137:52;134:2;;;202:1;199;192:12;134:2;2553:35:3;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;2515:73:3;;;;2610:7;2602:16;;;;;;2645:6;2632:7;2640:1;2632:10;;;;;;;;;;;;;:19;;;;2463:199;;2496:3;;;;;;;2463:199;;;;2678:7;2671:14;;2326:366;;;;:::o;4742:128:9:-;4796:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;4812:8:9;:14;4821:4;4812:14;;;;;;;;;;;;:16;;;;;;;;;;;;;4858:4;4843:20;;;;;;;;;;4742:128;;:::o;838:108:8:-;896:12;927:6;:12;934:4;927:12;;;;;;;;;;;920:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;838:108;;;:::o;1023:133:12:-;1076:9;1087;1116:7;:13;1124:4;1116:13;;;;;;;;;;;:15;;;1133:7;:13;1141:4;1133:13;;;;;;;;;;;:15;;;1108:41;;;;1023:133;;;:::o;681:132:7:-;743:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;759:47:7;767:4;261:2;788:17;803:1;788:14;:17::i;:::-;759:7;:47::i;:::-;681:132;;;:::o;858:226:10:-;955:4;371:18:5;384:4;371:12;:18::i;:::-;363:27;;;;;;1003:11:10;971:10;:16;982:4;971:16;;;;;;;;;;;:29;988:11;971:29;;;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;1052:11;1029:48;;;1046:4;1029:48;1065:11;1029:48;;;;;;;;;;;;;;;858:226;;;;:::o;1498:127:7:-;1561:12;1592:10;:16;1603:4;1592:16;;;;;;;;;;;:26;1609:8;1592:26;;;;;;;;;;;1585:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1498:127;;;;:::o;943:80:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1162:171:12:-;1229:4;148:10;1267:19;;1252:34;;;:11;:34;;;;:74;;;;1290:36;1314:11;1290:23;:36::i;:::-;1252:74;1245:81;;1162:171;;;:::o;2129:191:3:-;2187:4;2203:13;2219:3;;;;;;;;;;;:9;;;2229:4;2219:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2219:15:3;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;2219:15:3;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;2219:15:3;;;;;;;;;2203:31;;2260:10;2251:19;;:5;:19;;;:62;;;;2274:14;:20;2289:4;2274:20;;;;;;;;;;;:27;2295:5;2274:27;;;;;;;;;;;;;;;:39;2302:10;2274:39;;;;;;;;;;;;;;;;;;;;;;;;;2251:62;2244:69;;;2129:191;;;:::o;2435:182:16:-;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;3890:166::-;3950:12;3981:68;4001:4;:11;;;4014:34;4025:4;:9;;;4036:4;:11;;;4014:10;:34::i;:::-;3981:4;:9;;;:19;;:68;;;;;:::i;:::-;3974:75;;3890:166;;;:::o;4229:172::-;4290:12;4321:73;4341:4;:16;;;4377:4;:16;;;4359:4;:15;;;:34;4321:4;:9;;;:19;;:73;;;;;:::i;:::-;4314:80;;4229:172;;;:::o;4913:176:15:-;4990:4;5028:5;:12;5013:4;:11;:27;:69;;;;;5044:38;5051:4;5057:1;5060:5;5067:1;5070:4;:11;5044:6;:38::i;:::-;5013:69;5006:76;;4913:176;;;;:::o;5057:965:9:-;5275:15;5293:8;:14;5302:4;5293:14;;;;;;;;;;;;5275:32;;5317:16;5346:4;5336:15;;;;;;5317:34;;5361:19;5383:28;5398:6;5406:4;5383;:14;;:28;;;;;:::i;:::-;5361:50;;5425:12;5421:595;;;5510:1;5457:7;:13;5465:4;5457:13;;;;;;;;;;;:22;5471:7;5457:22;;;;;;;;;;;:32;5480:8;5457:32;;;;;;;;;;;:42;5490:8;5457:42;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:54;5453:136;;5531:16;:22;5548:4;5531:22;;;;;;;;;;;:31;5554:7;5531:31;;;;;;;;;;;:41;5563:8;5531:41;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5453:136;5609:7;:13;5617:4;5609:13;;;;;;;;;;;:22;5623:7;5609:22;;;;;;;;;;;:32;5632:8;5609:32;;;;;;;;;;;:42;5642:8;5609:42;;;;;;;;;;;;;;;;5602:50;;;;:::i;:::-;5688:4;5671:38;5694:4;5700:8;5671:38;;;;;;;;;;;;;;;;5421:595;;;5797:1;5744:7;:13;5752:4;5744:13;;;;;;;;;;;:22;5758:7;5744:22;;;;;;;;;;;:32;5767:8;5744:32;;;;;;;;;;;:42;5777:8;5744:42;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:54;5740:136;;;5818:16;:22;5835:4;5818:22;;;;;;;;;;;:31;5841:7;5818:31;;;;;;;;;;;:41;5850:8;5818:41;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5740:136;5934:6;5889:7;:13;5897:4;5889:13;;;;;;;;;;;:22;5903:7;5889:22;;;;;;;;;;;:32;5912:8;5889:32;;;;;;;;;;;:42;5922:8;5889:42;;;;;;;;;;;;;;;:51;;;;;;;;;;;;:::i;:::-;;5976:4;5959:46;5982:4;5988:8;5998:6;5959:46;;;;;;;;;;;;;;;;;5421:595;5057:965;;;;;;;;;;:::o;3032:682:16:-;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;414:204:5:-;476:17;525:2;513:1;:8;:14;505:23;;;;;;598:2;593:3;589:12;583:2;580:1;576:10;570:17;566:36;561:41;;547:65;;;:::o;624:189::-;681:14;721:2;711:13;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;711:13:5;;;;707:17;;792:2;787:3;783:12;780:1;776:20;771:2;768:1;764:10;757:40;743:64;;;:::o;951:169:11:-;1018:4;144:10;1056:17;;1041:32;;;:11;:32;;;;:72;;;;1077:36;1101:11;1077:23;:36::i;:::-;1041:72;1034:79;;951:169;;;:::o;535:367:16:-;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;8683:393:15:-;8766:12;8814:4;:11;8807:3;8798:6;:12;:27;;8790:36;;;;;;8837:16;8866:3;8856:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;8856:14:15;;;;8837:33;;8880:9;8899:8;8958:2;8953:3;8949:12;8941:20;;9000:6;8995:2;8989:4;8985:13;8981:26;8974:33;;9026:22;9033:4;9039:3;9044;9026:6;:22::i;:::-;9066:3;9059:10;;;;;8683:393;;;;;:::o;3277:209::-;3396:4;3448:31;3455:5;3462:11;3475:3;3448:6;:31::i;:::-;3419:25;3426:4;3432:6;3440:3;3419:6;:25::i;:::-;:60;3412:67;;3277:209;;;;;;;:::o;5697:223::-;5769:10;5810:4;:11;5805:1;5799:3;:7;:22;;5791:31;;;;;;5897:6;5890:3;5886:1;5880:4;5876:12;5872:22;5866:29;5862:42;5855:49;;5841:73;;;;:::o;6164:227::-;6236:10;6277:4;:11;6272:1;6266:3;:7;:22;;6258:31;;;;;;6364:10;6357:3;6353:1;6347:4;6343:12;6339:22;6333:29;6329:46;6322:53;;6308:77;;;;:::o;2680:174:10:-;2747:4;204:49;;;;;;;;;;;;;;2770:37;;;:11;:37;;;;:77;;;;2811:36;2835:11;2811:23;:36::i;:::-;2770:77;2763:84;;2680:174;;;:::o;5331:122:15:-;5402:9;5436:4;5441:3;5436:9;;;;;;;;;;;;;;;;5430:16;;5423:23;;5331:122;;;;:::o;7914:549::-;8034:165;8048:2;8041:3;:9;8034:165;;8123:3;8117:10;8111:4;8104:24;8163:2;8155:10;;;;8186:2;8179:9;;;;8059:2;8052:9;;;;8034:165;;;8241:9;8273:1;8266:3;8261:2;:8;8253:3;:17;:21;8241:33;;8342:4;8338:9;8332:3;8326:10;8322:26;8394:4;8387;8381:11;8377:22;8438:7;8428:8;8425:21;8419:4;8412:35;8293:164;;;;;;:::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;4876:175:9:-;4943:4;265:10;4981:23;;4966:38;;;:11;:38;;;;:78;;;;5008:36;5032:11;5008:23;:36::i;:::-;4966:78;4959:85;;4876:175;;;:::o;952:177:8:-;1019:4;159:10;1057:25;;1042:40;;;:11;:40;;;;:80;;;;1086:36;1110:11;1086:23;:36::i;:::-;1042:80;1035:87;;952:177;;;:::o;1631:208:7:-;1698:4;144:10;1736:17;;1721:32;;;:11;:32;;;;:71;;;;207:10;1772:20;;1757:35;;;:11;:35;;;;1721:71;:111;;;;1796:36;1820:11;1796:23;:36::i;:::-;1721:111;1714:118;;1631:208;;;:::o;1655:168:6:-;1722:4;142:10;1760:16;;1745:31;;;:11;:31;;;;:71;;;;1780:36;1804:11;1780:23;:36::i;:::-;1745:71;1738:78;;1655:168;;;:::o;114:129:5:-;181:4;97:10;219:17;;204:32;;;:11;:32;;;;197:39;;114:129;;;:::o;520:2174:3:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;299:359;;;436:3;429:4;421:6;417:17;413:27;403:2;;454:1;451;444:12;403:2;487:6;474:20;464:30;;514:18;506:6;503:30;500:2;;;546:1;543;536:12;500:2;580:4;572:6;568:17;556:29;;631:3;623:4;615:6;611:17;601:8;597:32;594:41;591:2;;;648:1;645;638:12;591:2;396:262;;;;;;666:124;;743:6;730:20;721:29;;755:30;779:5;755:30;;;715:75;;;;;797:130;;877:6;864:20;855:29;;889:33;916:5;889:33;;;849:78;;;;;934:128;;1013:6;1000:20;991:29;;1025:32;1051:5;1025:32;;;985:77;;;;;1083:335;;;1197:3;1190:4;1182:6;1178:17;1174:27;1164:2;;1215:1;1212;1205:12;1164:2;1248:6;1235:20;1225:30;;1275:18;1267:6;1264:30;1261:2;;;1307:1;1304;1297:12;1261:2;1341:4;1333:6;1329:17;1317:29;;1391:3;1384;1376:6;1372:16;1362:8;1358:31;1355:40;1352:2;;;1408:1;1405;1398:12;1352:2;1157:261;;;;;;1427:440;;1528:3;1521:4;1513:6;1509:17;1505:27;1495:2;;1546:1;1543;1536:12;1495:2;1583:6;1570:20;1605:64;1620:48;1661:6;1620:48;;;1605:64;;;1596:73;;1689:6;1682:5;1675:21;1725:4;1717:6;1713:17;1758:4;1751:5;1747:16;1793:3;1784:6;1779:3;1775:16;1772:25;1769:2;;;1810:1;1807;1800:12;1769:2;1820:41;1854:6;1849:3;1844;1820:41;;;1488:379;;;;;;;;1890:336;;;2005:3;1998:4;1990:6;1986:17;1982:27;1972:2;;2023:1;2020;2013:12;1972:2;2056:6;2043:20;2033:30;;2083:18;2075:6;2072:30;2069:2;;;2115:1;2112;2105:12;2069:2;2149:4;2141:6;2137:17;2125:29;;2199:3;2192;2184:6;2180:16;2170:8;2166:31;2163:40;2160:2;;;2216:1;2213;2206:12;2160:2;1965:261;;;;;;2234:128;;2313:6;2300:20;2291:29;;2325:32;2351:5;2325:32;;;2285:77;;;;;2369:130;;2449:6;2436:20;2427:29;;2461:33;2488:5;2461:33;;;2421:78;;;;;2506:263;;2621:2;2609:9;2600:7;2596:23;2592:32;2589:2;;;2637:1;2634;2627:12;2589:2;2672:1;2689:64;2745:7;2736:6;2725:9;2721:22;2689:64;;;2679:74;;2651:108;2583:186;;;;;2776:411;;;2922:2;2910:9;2901:7;2897:23;2893:32;2890:2;;;2938:1;2935;2928:12;2890:2;3001:1;2990:9;2986:17;2973:31;3024:18;3016:6;3013:30;3010:2;;;3056:1;3053;3046:12;3010:2;3084:87;3163:7;3154:6;3143:9;3139:22;3084:87;;;3074:97;;;;2952:225;2884:303;;;;;;3194:241;;3298:2;3286:9;3277:7;3273:23;3269:32;3266:2;;;3314:1;3311;3304:12;3266:2;3349:1;3366:53;3411:7;3402:6;3391:9;3387:22;3366:53;;;3356:63;;3328:97;3260:175;;;;;3442:366;;;3563:2;3551:9;3542:7;3538:23;3534:32;3531:2;;;3579:1;3576;3569:12;3531:2;3614:1;3631:53;3676:7;3667:6;3656:9;3652:22;3631:53;;;3621:63;;3593:97;3721:2;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;;;3729:63;;3700:98;3525:283;;;;;;3815:491;;;;3953:2;3941:9;3932:7;3928:23;3924:32;3921:2;;;3969:1;3966;3959:12;3921:2;4004:1;4021:53;4066:7;4057:6;4046:9;4042:22;4021:53;;;4011:63;;3983:97;4111:2;4129:53;4174:7;4165:6;4154:9;4150:22;4129:53;;;4119:63;;4090:98;4219:2;4237:53;4282:7;4273:6;4262:9;4258:22;4237:53;;;4227:63;;4198:98;3915:391;;;;;;4313:485;;;;4448:2;4436:9;4427:7;4423:23;4419:32;4416:2;;;4464:1;4461;4454:12;4416:2;4499:1;4516:53;4561:7;4552:6;4541:9;4537:22;4516:53;;;4506:63;;4478:97;4606:2;4624:53;4669:7;4660:6;4649:9;4645:22;4624:53;;;4614:63;;4585:98;4714:2;4732:50;4774:7;4765:6;4754:9;4750:22;4732:50;;;4722:60;;4693:95;4410:388;;;;;;4805:366;;;4926:2;4914:9;4905:7;4901:23;4897:32;4894:2;;;4942:1;4939;4932:12;4894:2;4977:1;4994:53;5039:7;5030:6;5019:9;5015:22;4994:53;;;4984:63;;4956:97;5084:2;5102:53;5147:7;5138:6;5127:9;5123:22;5102:53;;;5092:63;;5063:98;4888:283;;;;;;5178:491;;;;5316:2;5304:9;5295:7;5291:23;5287:32;5284:2;;;5332:1;5329;5322:12;5284:2;5367:1;5384:53;5429:7;5420:6;5409:9;5405:22;5384:53;;;5374:63;;5346:97;5474:2;5492:53;5537:7;5528:6;5517:9;5513:22;5492:53;;;5482:63;;5453:98;5582:2;5600:53;5645:7;5636:6;5625:9;5621:22;5600:53;;;5590:63;;5561:98;5278:391;;;;;;5676:489;;;;5813:2;5801:9;5792:7;5788:23;5784:32;5781:2;;;5829:1;5826;5819:12;5781:2;5864:1;5881:53;5926:7;5917:6;5906:9;5902:22;5881:53;;;5871:63;;5843:97;5971:2;5989:53;6034:7;6025:6;6014:9;6010:22;5989:53;;;5979:63;;5950:98;6079:2;6097:52;6141:7;6132:6;6121:9;6117:22;6097:52;;;6087:62;;6058:97;5775:390;;;;;;6172:364;;;6292:2;6280:9;6271:7;6267:23;6263:32;6260:2;;;6308:1;6305;6298:12;6260:2;6343:1;6360:53;6405:7;6396:6;6385:9;6381:22;6360:53;;;6350:63;;6322:97;6450:2;6468:52;6512:7;6503:6;6492:9;6488:22;6468:52;;;6458:62;;6429:97;6254:282;;;;;;6543:489;;;;6680:2;6668:9;6659:7;6655:23;6651:32;6648:2;;;6696:1;6693;6686:12;6648:2;6731:1;6748:53;6793:7;6784:6;6773:9;6769:22;6748:53;;;6738:63;;6710:97;6838:2;6856:52;6900:7;6891:6;6880:9;6876:22;6856:52;;;6846:62;;6817:97;6945:2;6963:53;7008:7;6999:6;6988:9;6984:22;6963:53;;;6953:63;;6924:98;6642:390;;;;;;7039:490;;;;7179:2;7167:9;7158:7;7154:23;7150:32;7147:2;;;7195:1;7192;7185:12;7147:2;7230:1;7247:53;7292:7;7283:6;7272:9;7268:22;7247:53;;;7237:63;;7209:97;7365:2;7354:9;7350:18;7337:32;7389:18;7381:6;7378:30;7375:2;;;7421:1;7418;7411:12;7375:2;7449:64;7505:7;7496:6;7485:9;7481:22;7449:64;;;7439:74;;;;7316:203;7141:388;;;;;;7536:492;;;;7677:2;7665:9;7656:7;7652:23;7648:32;7645:2;;;7693:1;7690;7683:12;7645:2;7728:1;7745:53;7790:7;7781:6;7770:9;7766:22;7745:53;;;7735:63;;7707:97;7863:2;7852:9;7848:18;7835:32;7887:18;7879:6;7876:30;7873:2;;;7919:1;7916;7909:12;7873:2;7947:65;8004:7;7995:6;7984:9;7980:22;7947:65;;;7937:75;;;;7814:204;7639:389;;;;;;8035:743;;;;;;8213:2;8201:9;8192:7;8188:23;8184:32;8181:2;;;8229:1;8226;8219:12;8181:2;8264:1;8281:53;8326:7;8317:6;8306:9;8302:22;8281:53;;;8271:63;;8243:97;8399:2;8388:9;8384:18;8371:32;8423:18;8415:6;8412:30;8409:2;;;8455:1;8452;8445:12;8409:2;8483:65;8540:7;8531:6;8520:9;8516:22;8483:65;;;8473:75;;;;8350:204;8613:2;8602:9;8598:18;8585:32;8637:18;8629:6;8626:30;8623:2;;;8669:1;8666;8659:12;8623:2;8697:65;8754:7;8745:6;8734:9;8730:22;8697:65;;;8687:75;;;;8564:204;8175:603;;;;;;;;;8785:366;;;8906:2;8894:9;8885:7;8881:23;8877:32;8874:2;;;8922:1;8919;8912:12;8874:2;8957:1;8974:53;9019:7;9010:6;8999:9;8995:22;8974:53;;;8964:63;;8936:97;9064:2;9082:53;9127:7;9118:6;9107:9;9103:22;9082:53;;;9072:63;;9043:98;8868:283;;;;;;9158:615;;;;;9315:2;9303:9;9294:7;9290:23;9286:32;9283:2;;;9331:1;9328;9321:12;9283:2;9366:1;9383:53;9428:7;9419:6;9408:9;9404:22;9383:53;;;9373:63;;9345:97;9473:2;9491:53;9536:7;9527:6;9516:9;9512:22;9491:53;;;9481:63;;9452:98;9609:2;9598:9;9594:18;9581:32;9633:18;9625:6;9622:30;9619:2;;;9665:1;9662;9655:12;9619:2;9693:64;9749:7;9740:6;9729:9;9725:22;9693:64;;;9683:74;;;;9560:203;9277:496;;;;;;;;9780:595;;;;9927:2;9915:9;9906:7;9902:23;9898:32;9895:2;;;9943:1;9940;9933:12;9895:2;9978:1;9995:53;10040:7;10031:6;10020:9;10016:22;9995:53;;;9985:63;;9957:97;10085:2;10103:53;10148:7;10139:6;10128:9;10124:22;10103:53;;;10093:63;;10064:98;10221:2;10210:9;10206:18;10193:32;10245:18;10237:6;10234:30;10231:2;;;10277:1;10274;10267:12;10231:2;10297:62;10351:7;10342:6;10331:9;10327:22;10297:62;;;10287:72;;10172:193;9889:486;;;;;;10382:239;;10485:2;10473:9;10464:7;10460:23;10456:32;10453:2;;;10501:1;10498;10491:12;10453:2;10536:1;10553:52;10597:7;10588:6;10577:9;10573:22;10553:52;;;10543:62;;10515:96;10447:174;;;;;10629:177;;10740:60;10796:3;10788:6;10740:60;;;10726:74;;10719:87;;;;;10814:142;10905:45;10944:5;10905:45;;;10900:3;10893:58;10887:69;;;10963:137;11062:32;11088:5;11062:32;;;11057:3;11050:45;11044:56;;;11107:113;11190:24;11208:5;11190:24;;;11185:3;11178:37;11172:48;;;11254:888;;11409:59;11462:5;11409:59;;;11481:91;11565:6;11560:3;11481:91;;;11474:98;;11595:3;11637:4;11629:6;11625:17;11620:3;11616:27;11664:61;11719:5;11664:61;;;11745:7;11773:1;11758:345;11783:6;11780:1;11777:13;11758:345;;;11845:9;11839:4;11835:20;11830:3;11823:33;11890:6;11884:13;11912:74;11981:4;11966:13;11912:74;;;11904:82;;12003:65;12061:6;12003:65;;;11993:75;;12091:4;12086:3;12082:14;12075:21;;11815:288;11805:1;11802;11798:9;11793:14;;11758:345;;;11762:14;12116:4;12109:11;;12133:3;12126:10;;11388:754;;;;;;;;;;12150:104;12227:21;12242:5;12227:21;;;12222:3;12215:34;12209:45;;;12261:113;12344:24;12362:5;12344:24;;;12339:3;12332:37;12326:48;;;12381:110;12462:23;12479:5;12462:23;;;12457:3;12450:36;12444:47;;;12521:297;;12635:70;12698:6;12693:3;12635:70;;;12628:77;;12717:43;12753:6;12748:3;12741:5;12717:43;;;12782:29;12804:6;12782:29;;;12777:3;12773:39;12766:46;;12621:197;;;;;;12849:306;;12977:88;13058:6;13053:3;12977:88;;;12970:95;;13077:43;13113:6;13108:3;13101:5;13077:43;;;13142:6;13137:3;13133:16;13126:23;;12963:192;;;;;;13163:343;;13273:38;13305:5;13273:38;;;13323:70;13386:6;13381:3;13323:70;;;13316:77;;13398:52;13443:6;13438:3;13431:4;13424:5;13420:16;13398:52;;;13471:29;13493:6;13471:29;;;13466:3;13462:39;13455:46;;13253:253;;;;;;13513:356;;13641:38;13673:5;13641:38;;;13691:88;13772:6;13767:3;13691:88;;;13684:95;;13784:52;13829:6;13824:3;13817:4;13810:5;13806:16;13784:52;;;13857:6;13852:3;13848:16;13841:23;;13621:248;;;;;;13876:315;;13972:34;14000:5;13972:34;;;14018:60;14071:6;14066:3;14018:60;;;14011:67;;14083:52;14128:6;14123:3;14116:4;14109:5;14105:16;14083:52;;;14156:29;14178:6;14156:29;;;14151:3;14147:39;14140:46;;13952:239;;;;;;14223:300;;14339:71;14403:6;14398:3;14339:71;;;14332:78;;14422:43;14458:6;14453:3;14446:5;14422:43;;;14487:29;14509:6;14487:29;;;14482:3;14478:39;14471:46;;14325:198;;;;;;14556:313;;14690:89;14772:6;14767:3;14690:89;;;14683:96;;14791:43;14827:6;14822:3;14815:5;14791:43;;;14856:6;14851:3;14847:16;14840:23;;14676:193;;;;;;14877:347;;14989:39;15022:5;14989:39;;;15040:71;15104:6;15099:3;15040:71;;;15033:78;;15116:52;15161:6;15156:3;15149:4;15142:5;15138:16;15116:52;;;15189:29;15211:6;15189:29;;;15184:3;15180:39;15173:46;;14969:255;;;;;;15232:501;;15410:85;15492:2;15487:3;15410:85;;;15403:92;;15528:66;15524:1;15519:3;15515:11;15508:87;15629:66;15624:2;15619:3;15615:12;15608:88;15724:2;15719:3;15715:12;15708:19;;15396:337;;;;15741:110;15822:23;15839:5;15822:23;;;15817:3;15810:36;15804:47;;;15858:113;15941:24;15959:5;15941:24;;;15936:3;15929:37;15923:48;;;15978:274;;16128:99;16223:3;16214:6;16206;16128:99;;;16121:106;;16244:3;16237:10;;16109:143;;;;;;16259:262;;16403:93;16492:3;16483:6;16403:93;;;16396:100;;16513:3;16506:10;;16384:137;;;;;16528:286;;16684:105;16785:3;16776:6;16768;16684:105;;;16677:112;;16806:3;16799:10;;16665:149;;;;;;16821:372;;17020:148;17164:3;17020:148;;;17013:155;;17185:3;17178:10;;17001:192;;;;17200:213;;17318:2;17307:9;17303:18;17295:26;;17332:71;17400:1;17389:9;17385:17;17376:6;17332:71;;;17289:124;;;;;17420:229;;17546:2;17535:9;17531:18;17523:26;;17560:79;17636:1;17625:9;17621:17;17612:6;17560:79;;;17517:132;;;;;17656:245;;17790:2;17779:9;17775:18;17767:26;;17804:87;17888:1;17877:9;17873:17;17864:6;17804:87;;;17761:140;;;;;17908:381;;18086:2;18075:9;18071:18;18063:26;;18136:9;18130:4;18126:20;18122:1;18111:9;18107:17;18100:47;18161:118;18274:4;18265:6;18161:118;;;18153:126;;18057:232;;;;;18296:201;;18408:2;18397:9;18393:18;18385:26;;18422:65;18484:1;18473:9;18469:17;18460:6;18422:65;;;18379:118;;;;;18504:213;;18622:2;18611:9;18607:18;18599:26;;18636:71;18704:1;18693:9;18689:17;18680:6;18636:71;;;18593:124;;;;;18724:324;;18870:2;18859:9;18855:18;18847:26;;18884:71;18952:1;18941:9;18937:17;18928:6;18884:71;;;18966:72;19034:2;19023:9;19019:18;19010:6;18966:72;;;18841:207;;;;;;19055:209;;19171:2;19160:9;19156:18;19148:26;;19185:69;19251:1;19240:9;19236:17;19227:6;19185:69;;;19142:122;;;;;19271:317;;19417:2;19406:9;19402:18;19394:26;;19467:9;19461:4;19457:20;19453:1;19442:9;19438:17;19431:47;19492:86;19573:4;19564:6;19556;19492:86;;;19484:94;;19388:200;;;;;;19595:297;;19731:2;19720:9;19716:18;19708:26;;19781:9;19775:4;19771:20;19767:1;19756:9;19752:17;19745:47;19806:76;19877:4;19868:6;19806:76;;;19798:84;;19702:190;;;;;19899:404;;20061:2;20050:9;20046:18;20038:26;;20111:9;20105:4;20101:20;20097:1;20086:9;20082:17;20075:47;20136:76;20207:4;20198:6;20136:76;;;20128:84;;20223:70;20289:2;20278:9;20274:18;20265:6;20223:70;;;20032:271;;;;;;20310:599;;20518:2;20507:9;20503:18;20495:26;;20568:9;20562:4;20558:20;20554:1;20543:9;20539:17;20532:47;20593:76;20664:4;20655:6;20593:76;;;20585:84;;20680:70;20746:2;20735:9;20731:18;20722:6;20680:70;;;20798:9;20792:4;20788:20;20783:2;20772:9;20768:18;20761:48;20823:76;20894:4;20885:6;20823:76;;;20815:84;;20489:420;;;;;;;20916:321;;21064:2;21053:9;21049:18;21041:26;;21114:9;21108:4;21104:20;21100:1;21089:9;21085:17;21078:47;21139:88;21222:4;21213:6;21205;21139:88;;;21131:96;;21035:202;;;;;;21244:301;;21382:2;21371:9;21367:18;21359:26;;21432:9;21426:4;21422:20;21418:1;21407:9;21403:17;21396:47;21457:78;21530:4;21521:6;21457:78;;;21449:86;;21353:192;;;;;21552:408;;21716:2;21705:9;21701:18;21693:26;;21730:71;21798:1;21787:9;21783:17;21774:6;21730:71;;;21849:9;21843:4;21839:20;21834:2;21823:9;21819:18;21812:48;21874:76;21945:4;21936:6;21874:76;;;21866:84;;21687:273;;;;;;21967:256;;22029:2;22023:9;22013:19;;22067:4;22059:6;22055:17;22166:6;22154:10;22151:22;22130:18;22118:10;22115:34;22112:62;22109:2;;;22187:1;22184;22177:12;22109:2;22207:10;22203:2;22196:22;22007:216;;;;;22230:258;;22373:18;22365:6;22362:30;22359:2;;;22405:1;22402;22395:12;22359:2;22449:4;22445:9;22438:4;22430:6;22426:17;22422:33;22414:41;;22478:4;22472;22468:15;22460:23;;22296:192;;;;22498:128;;22613:4;22605:6;22601:17;22590:28;;22581:45;;;;22636:112;;22737:5;22731:12;22721:22;;22715:33;;;;22755:87;;22831:5;22825:12;22815:22;;22809:33;;;;22849:91;;22929:5;22923:12;22913:22;;22907:33;;;;22947:92;;23028:5;23022:12;23012:22;;23006:33;;;;23048:129;;23165:4;23157:6;23153:17;23142:28;;23134:43;;;;23187:183;;23322:6;23317:3;23310:19;23359:4;23354:3;23350:14;23335:29;;23303:67;;;;;23379:152;;23483:6;23478:3;23471:19;23520:4;23515:3;23511:14;23496:29;;23464:67;;;;;23540:162;;23654:6;23649:3;23642:19;23691:4;23686:3;23682:14;23667:29;;23635:67;;;;;23711:144;;23846:3;23831:18;;23824:31;;;;;23864:163;;23979:6;23974:3;23967:19;24016:4;24011:3;24007:14;23992:29;;23960:67;;;;;24036:145;;24172:3;24157:18;;24150:31;;;;;24189:91;;24251:24;24269:5;24251:24;;;24240:35;;24234:46;;;;24287:99;;24357:24;24375:5;24357:24;;;24346:35;;24340:46;;;;24393:85;;24466:5;24459:13;24452:21;24441:32;;24435:43;;;;24485:72;;24547:5;24536:16;;24530:27;;;;24564:144;;24636:66;24629:5;24625:78;24614:89;;24608:100;;;;24715:84;;24787:6;24780:5;24776:18;24765:29;;24759:40;;;;24806:121;;24879:42;24872:5;24868:54;24857:65;;24851:76;;;;24934:72;;24996:5;24985:16;;24979:27;;;;25013:129;;25100:37;25131:5;25100:37;;;25087:50;;25081:61;;;;25149:121;;25228:37;25259:5;25228:37;;;25215:50;;25209:61;;;;25277:108;;25356:24;25374:5;25356:24;;;25343:37;;25337:48;;;;25393:145;25474:6;25469:3;25464;25451:30;25530:1;25521:6;25516:3;25512:16;25505:27;25444:94;;;;25547:268;25612:1;25619:101;25633:6;25630:1;25627:13;25619:101;;;25709:1;25704:3;25700:11;25694:18;25690:1;25685:3;25681:11;25674:39;25655:2;25652:1;25648:10;25643:15;;25619:101;;;25735:6;25732:1;25729:13;25726:2;;;25800:1;25791:6;25786:3;25782:16;25775:27;25726:2;25596:219;;;;;25823:97;;25911:2;25907:7;25902:2;25895:5;25891:14;25887:28;25877:38;;25871:49;;;;25928:117;25997:24;26015:5;25997:24;;;25990:5;25987:35;25977:2;;26036:1;26033;26026:12;25977:2;25971:74;;26052:111;26118:21;26133:5;26118:21;;;26111:5;26108:32;26098:2;;26154:1;26151;26144:12;26098:2;26092:71;;26170:117;26239:24;26257:5;26239:24;;;26232:5;26229:35;26219:2;;26278:1;26275;26268:12;26219:2;26213:74;;26294:115;26362:23;26379:5;26362:23;;;26355:5;26352:34;26342:2;;26400:1;26397;26390:12;26342:2;26336:73;;26416:115;26484:23;26501:5;26484:23;;;26477:5;26474:34;26464:2;;26522:1;26519;26512:12;26464:2;26458:73;;26538:117;26607:24;26625:5;26607:24;;;26600:5;26597:35;26587:2;;26646:1;26643;26636:12;26587:2;26581:74;\",\"source\":\"pragma solidity ^0.5.0;\\npragma experimental ABIEncoderV2;\\n\\nimport \\\"@ensdomains/ens/contracts/ENS.sol\\\";\\nimport \\\"./profiles/ABIResolver.sol\\\";\\nimport \\\"./profiles/AddrResolver.sol\\\";\\nimport \\\"./profiles/ContentHashResolver.sol\\\";\\nimport \\\"./profiles/DNSResolver.sol\\\";\\nimport \\\"./profiles/InterfaceResolver.sol\\\";\\nimport \\\"./profiles/NameResolver.sol\\\";\\nimport \\\"./profiles/PubkeyResolver.sol\\\";\\nimport \\\"./profiles/TextResolver.sol\\\";\\n\\n/**\\n * A simple resolver anyone can use; only allows the owner of a node to set its\\n * address.\\n */\\ncontract PublicResolver is ABIResolver, AddrResolver, ContentHashResolver, DNSResolver, InterfaceResolver, NameResolver, PubkeyResolver, TextResolver {\\n    ENS ens;\\n\\n    /**\\n     * A mapping of authorisations. An address that is authorised for a name\\n     * may make any changes to the name that the owner could, but may not update\\n     * the set of authorisations.\\n     * (node, owner, caller) => isAuthorised\\n     */\\n    mapping(bytes32=>mapping(address=>mapping(address=>bool))) public authorisations;\\n\\n    event AuthorisationChanged(bytes32 indexed node, address indexed owner, address indexed target, bool isAuthorised);\\n\\n    constructor(ENS _ens) public {\\n        ens = _ens;\\n    }\\n\\n    /**\\n     * @dev Sets or clears an authorisation.\\n     * Authorisations are specific to the caller. Any account can set an authorisation\\n     * for any name, but the authorisation that is checked will be that of the\\n     * current owner of a name. Thus, transferring a name effectively clears any\\n     * existing authorisations, and new authorisations can be set in advance of\\n     * an ownership transfer if desired.\\n     *\\n     * @param node The name to change the authorisation on.\\n     * @param target The address that is to be authorised or deauthorised.\\n     * @param isAuthorised True if the address should be authorised, or false if it should be deauthorised.\\n     */\\n    function setAuthorisation(bytes32 node, address target, bool isAuthorised) external {\\n        authorisations[node][msg.sender][target] = isAuthorised;\\n        emit AuthorisationChanged(node, msg.sender, target, isAuthorised);\\n    }\\n\\n    function isAuthorised(bytes32 node) internal view returns(bool) {\\n        address owner = ens.owner(node);\\n        return owner == msg.sender || authorisations[node][owner][msg.sender];\\n    }\\n\\n    function multicall(bytes[] calldata data) external returns(bytes[] memory results) {\\n        results = new bytes[](data.length);\\n        for(uint i = 0; i < data.length; i++) {\\n            (bool success, bytes memory result) = address(this).delegatecall(data[i]);\\n            require(success);\\n            results[i] = result;\\n        }\\n        return results;\\n    }\\n}\\n\",\"sourcePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/PublicResolver.sol\",\"ast\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/PublicResolver.sol\",\"exportedSymbols\":{\"PublicResolver\":[353]},\"id\":354,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":181,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:3\"},{\"id\":182,\"literals\":[\"experimental\",\"ABIEncoderV2\"],\"nodeType\":\"PragmaDirective\",\"src\":\"24:33:3\"},{\"absolutePath\":\"@ensdomains/ens/contracts/ENS.sol\",\"file\":\"@ensdomains/ens/contracts/ENS.sol\",\"id\":183,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":3840,\"src\":\"59:43:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ABIResolver.sol\",\"file\":\"./profiles/ABIResolver.sol\",\"id\":184,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":799,\"src\":\"103:36:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/AddrResolver.sol\",\"file\":\"./profiles/AddrResolver.sol\",\"id\":185,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":958,\"src\":\"140:37:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ContentHashResolver.sol\",\"file\":\"./profiles/ContentHashResolver.sol\",\"id\":186,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1028,\"src\":\"178:44:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/DNSResolver.sol\",\"file\":\"./profiles/DNSResolver.sol\",\"id\":187,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1459,\"src\":\"223:36:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/InterfaceResolver.sol\",\"file\":\"./profiles/InterfaceResolver.sol\",\"id\":188,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1646,\"src\":\"260:42:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/NameResolver.sol\",\"file\":\"./profiles/NameResolver.sol\",\"id\":189,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1716,\"src\":\"303:37:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/PubkeyResolver.sol\",\"file\":\"./profiles/PubkeyResolver.sol\",\"id\":190,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1807,\"src\":\"341:39:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/TextResolver.sol\",\"file\":\"./profiles/TextResolver.sol\",\"id\":191,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1890,\"src\":\"381:37:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":192,\"name\":\"ABIResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":798,\"src\":\"547:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ABIResolver_$798\",\"typeString\":\"contract ABIResolver\"}},\"id\":193,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"547:11:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":194,\"name\":\"AddrResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":957,\"src\":\"560:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_AddrResolver_$957\",\"typeString\":\"contract AddrResolver\"}},\"id\":195,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"560:12:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":196,\"name\":\"ContentHashResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1027,\"src\":\"574:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ContentHashResolver_$1027\",\"typeString\":\"contract ContentHashResolver\"}},\"id\":197,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"574:19:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":198,\"name\":\"DNSResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1458,\"src\":\"595:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DNSResolver_$1458\",\"typeString\":\"contract DNSResolver\"}},\"id\":199,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"595:11:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":200,\"name\":\"InterfaceResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1645,\"src\":\"608:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_InterfaceResolver_$1645\",\"typeString\":\"contract InterfaceResolver\"}},\"id\":201,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"608:17:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":202,\"name\":\"NameResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1715,\"src\":\"627:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_NameResolver_$1715\",\"typeString\":\"contract NameResolver\"}},\"id\":203,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"627:12:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":204,\"name\":\"PubkeyResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1806,\"src\":\"641:14:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_PubkeyResolver_$1806\",\"typeString\":\"contract PubkeyResolver\"}},\"id\":205,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"641:14:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":206,\"name\":\"TextResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1889,\"src\":\"657:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_TextResolver_$1889\",\"typeString\":\"contract TextResolver\"}},\"id\":207,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"657:12:3\"}],\"contractDependencies\":[662,798,957,1027,1458,1645,1715,1806,1889],\"contractKind\":\"contract\",\"documentation\":\"A simple resolver anyone can use; only allows the owner of a node to set its\\naddress.\",\"fullyImplemented\":true,\"id\":353,\"linearizedBaseContracts\":[353,1889,1806,1715,1645,1458,1027,957,798,662],\"name\":\"PublicResolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":false,\"id\":209,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":353,\"src\":\"676:7:3\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":208,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3839,\"src\":\"676:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":217,\"name\":\"authorisations\",\"nodeType\":\"VariableDeclaration\",\"scope\":353,\"src\":\"943:80:3\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(address => mapping(address => bool)))\"},\"typeName\":{\"id\":216,\"keyType\":{\"id\":210,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"951:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"943:58:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(address => mapping(address => bool)))\"},\"valueType\":{\"id\":215,\"keyType\":{\"id\":211,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"968:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"960:40:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"},\"valueType\":{\"id\":214,\"keyType\":{\"id\":212,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"985:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"977:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"},\"valueType\":{\"id\":213,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"994:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}}}},\"value\":null,\"visibility\":\"public\"},{\"anonymous\":false,\"documentation\":null,\"id\":227,\"name\":\"AuthorisationChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":226,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":219,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":227,\"src\":\"1057:20:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":218,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1057:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":221,\"indexed\":true,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":227,\"src\":\"1079:21:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":220,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1079:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":223,\"indexed\":true,\"name\":\"target\",\"nodeType\":\"VariableDeclaration\",\"scope\":227,\"src\":\"1102:22:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":222,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1102:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":225,\"indexed\":false,\"name\":\"isAuthorised\",\"nodeType\":\"VariableDeclaration\",\"scope\":227,\"src\":\"1126:17:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":224,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1126:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1056:88:3\"},\"src\":\"1030:115:3\"},{\"body\":{\"id\":236,\"nodeType\":\"Block\",\"src\":\"1180:27:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":234,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":232,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":209,\"src\":\"1190:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":233,\"name\":\"_ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":229,\"src\":\"1196:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"src\":\"1190:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"id\":235,\"nodeType\":\"ExpressionStatement\",\"src\":\"1190:10:3\"}]},\"documentation\":null,\"id\":237,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":230,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":229,\"name\":\"_ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":237,\"src\":\"1163:8:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":228,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3839,\"src\":\"1163:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1162:10:3\"},\"returnParameters\":{\"id\":231,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1180:0:3\"},\"scope\":353,\"src\":\"1151:56:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":265,\"nodeType\":\"Block\",\"src\":\"1976:147:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":255,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":246,\"name\":\"authorisations\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":217,\"src\":\"1986:14:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(address => mapping(address => bool)))\"}},\"id\":251,\"indexExpression\":{\"argumentTypes\":null,\"id\":247,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":239,\"src\":\"2001:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"1986:20:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":252,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":248,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4190,\"src\":\"2007:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":249,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2007:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"1986:32:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":253,\"indexExpression\":{\"argumentTypes\":null,\"id\":250,\"name\":\"target\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":241,\"src\":\"2019:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"1986:40:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":254,\"name\":\"isAuthorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":243,\"src\":\"2029:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1986:55:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":256,\"nodeType\":\"ExpressionStatement\",\"src\":\"1986:55:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":258,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":239,\"src\":\"2077:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":259,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4190,\"src\":\"2083:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":260,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2083:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":261,\"name\":\"target\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":241,\"src\":\"2095:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":262,\"name\":\"isAuthorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":243,\"src\":\"2103:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":257,\"name\":\"AuthorisationChanged\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":227,\"src\":\"2056:20:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_bool_$returns$__$\",\"typeString\":\"function (bytes32,address,address,bool)\"}},\"id\":263,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2056:60:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":264,\"nodeType\":\"EmitStatement\",\"src\":\"2051:65:3\"}]},\"documentation\":\"@dev Sets or clears an authorisation.\\nAuthorisations are specific to the caller. Any account can set an authorisation\\nfor any name, but the authorisation that is checked will be that of the\\ncurrent owner of a name. Thus, transferring a name effectively clears any\\nexisting authorisations, and new authorisations can be set in advance of\\nan ownership transfer if desired.\\n     * @param node The name to change the authorisation on.\\n@param target The address that is to be authorised or deauthorised.\\n@param isAuthorised True if the address should be authorised, or false if it should be deauthorised.\",\"id\":266,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setAuthorisation\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":244,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":239,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":266,\"src\":\"1918:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":238,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1918:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":241,\"name\":\"target\",\"nodeType\":\"VariableDeclaration\",\"scope\":266,\"src\":\"1932:14:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":240,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1932:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":243,\"name\":\"isAuthorised\",\"nodeType\":\"VariableDeclaration\",\"scope\":266,\"src\":\"1948:17:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":242,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1948:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1917:49:3\"},\"returnParameters\":{\"id\":245,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1976:0:3\"},\"scope\":353,\"src\":\"1892:231:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":{\"id\":294,\"nodeType\":\"Block\",\"src\":\"2193:127:3\",\"statements\":[{\"assignments\":[274],\"declarations\":[{\"constant\":false,\"id\":274,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":294,\"src\":\"2203:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":273,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2203:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":279,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":277,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":268,\"src\":\"2229:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":275,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":209,\"src\":\"2219:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"id\":276,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3808,\"src\":\"2219:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":278,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2219:15:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2203:31:3\"},{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":292,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":283,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":280,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":274,\"src\":\"2251:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":281,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4190,\"src\":\"2260:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":282,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2260:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"2251:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":284,\"name\":\"authorisations\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":217,\"src\":\"2274:14:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(address => mapping(address => bool)))\"}},\"id\":286,\"indexExpression\":{\"argumentTypes\":null,\"id\":285,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":268,\"src\":\"2289:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2274:20:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":288,\"indexExpression\":{\"argumentTypes\":null,\"id\":287,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":274,\"src\":\"2295:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2274:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":291,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":289,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4190,\"src\":\"2302:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":290,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2302:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2274:39:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"2251:62:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":272,\"id\":293,\"nodeType\":\"Return\",\"src\":\"2244:69:3\"}]},\"documentation\":null,\"id\":295,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isAuthorised\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":269,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":268,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":295,\"src\":\"2151:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":267,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2151:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2150:14:3\"},\"returnParameters\":{\"id\":272,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":271,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":295,\"src\":\"2187:4:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":270,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2187:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2186:6:3\"},\"scope\":353,\"src\":\"2129:191:3\",\"stateMutability\":\"view\",\"superFunction\":617,\"visibility\":\"internal\"},{\"body\":{\"id\":351,\"nodeType\":\"Block\",\"src\":\"2409:283:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":311,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":304,\"name\":\"results\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":302,\"src\":\"2419:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes memory[] memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":308,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2441:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_calldata_$dyn_calldata_ptr\",\"typeString\":\"bytes calldata[] calldata\"}},\"id\":309,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2441:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":307,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"NewExpression\",\"src\":\"2429:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_$dyn_memory_$\",\"typeString\":\"function (uint256) pure returns (bytes memory[] memory)\"},\"typeName\":{\"baseType\":{\"id\":305,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2433:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"id\":306,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"2433:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_storage_$dyn_storage_ptr\",\"typeString\":\"bytes[]\"}}},\"id\":310,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2429:24:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory\",\"typeString\":\"bytes memory[] memory\"}},\"src\":\"2419:34:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes memory[] memory\"}},\"id\":312,\"nodeType\":\"ExpressionStatement\",\"src\":\"2419:34:3\"},{\"body\":{\"id\":347,\"nodeType\":\"Block\",\"src\":\"2501:161:3\",\"statements\":[{\"assignments\":[325,327],\"declarations\":[{\"constant\":false,\"id\":325,\"name\":\"success\",\"nodeType\":\"VariableDeclaration\",\"scope\":347,\"src\":\"2516:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":324,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2516:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":327,\"name\":\"result\",\"nodeType\":\"VariableDeclaration\",\"scope\":347,\"src\":\"2530:19:3\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":326,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2530:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":336,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":332,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2580:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_calldata_$dyn_calldata_ptr\",\"typeString\":\"bytes calldata[] calldata\"}},\"id\":334,\"indexExpression\":{\"argumentTypes\":null,\"id\":333,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":314,\"src\":\"2585:1:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2580:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata\",\"typeString\":\"bytes calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_calldata\",\"typeString\":\"bytes calldata\"}],\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":329,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4242,\"src\":\"2561:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_PublicResolver_$353\",\"typeString\":\"contract PublicResolver\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_PublicResolver_$353\",\"typeString\":\"contract PublicResolver\"}],\"id\":328,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2553:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":330,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2553:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":331,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"delegatecall\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2553:26:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$\",\"typeString\":\"function (bytes memory) returns (bool,bytes memory)\"}},\"id\":335,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2553:35:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$_t_bool_$_t_bytes_memory_ptr_$\",\"typeString\":\"tuple(bool,bytes memory)\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2515:73:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":338,\"name\":\"success\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":325,\"src\":\"2610:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":337,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[4193,4194],\"referencedDeclaration\":4193,\"src\":\"2602:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":339,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2602:16:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":340,\"nodeType\":\"ExpressionStatement\",\"src\":\"2602:16:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":345,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":341,\"name\":\"results\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":302,\"src\":\"2632:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes memory[] memory\"}},\"id\":343,\"indexExpression\":{\"argumentTypes\":null,\"id\":342,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":314,\"src\":\"2640:1:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"2632:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":344,\"name\":\"result\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":327,\"src\":\"2645:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"2632:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory\",\"typeString\":\"bytes memory\"}},\"id\":346,\"nodeType\":\"ExpressionStatement\",\"src\":\"2632:19:3\"}]},\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":320,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":317,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":314,\"src\":\"2479:1:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":318,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2483:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_calldata_$dyn_calldata_ptr\",\"typeString\":\"bytes calldata[] calldata\"}},\"id\":319,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2483:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"2479:15:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":348,\"initializationExpression\":{\"assignments\":[314],\"declarations\":[{\"constant\":false,\"id\":314,\"name\":\"i\",\"nodeType\":\"VariableDeclaration\",\"scope\":348,\"src\":\"2467:6:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":313,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2467:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":316,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":315,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2476:1:3\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2467:10:3\"},\"loopExpression\":{\"expression\":{\"argumentTypes\":null,\"id\":322,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"2496:3:3\",\"subExpression\":{\"argumentTypes\":null,\"id\":321,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":314,\"src\":\"2496:1:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":323,\"nodeType\":\"ExpressionStatement\",\"src\":\"2496:3:3\"},\"nodeType\":\"ForStatement\",\"src\":\"2463:199:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":349,\"name\":\"results\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":302,\"src\":\"2678:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes memory[] memory\"}},\"functionReturnParameters\":303,\"id\":350,\"nodeType\":\"Return\",\"src\":\"2671:14:3\"}]},\"documentation\":null,\"id\":352,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"multicall\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":299,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":298,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":352,\"src\":\"2345:21:3\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_calldata_$dyn_calldata_ptr\",\"typeString\":\"bytes[]\"},\"typeName\":{\"baseType\":{\"id\":296,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2345:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"id\":297,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"2345:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_storage_$dyn_storage_ptr\",\"typeString\":\"bytes[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2344:23:3\"},\"returnParameters\":{\"id\":303,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":302,\"name\":\"results\",\"nodeType\":\"VariableDeclaration\",\"scope\":352,\"src\":\"2385:22:3\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes[]\"},\"typeName\":{\"baseType\":{\"id\":300,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2385:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"id\":301,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"2385:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_storage_$dyn_storage_ptr\",\"typeString\":\"bytes[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2384:24:3\"},\"scope\":353,\"src\":\"2326:366:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":354,\"src\":\"520:2174:3\"}],\"src\":\"0:2695:3\"},\"legacyAST\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/PublicResolver.sol\",\"exportedSymbols\":{\"PublicResolver\":[353]},\"id\":354,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":181,\"literals\":[\"solidity\",\"^\",\"0.5\",\".0\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:23:3\"},{\"id\":182,\"literals\":[\"experimental\",\"ABIEncoderV2\"],\"nodeType\":\"PragmaDirective\",\"src\":\"24:33:3\"},{\"absolutePath\":\"@ensdomains/ens/contracts/ENS.sol\",\"file\":\"@ensdomains/ens/contracts/ENS.sol\",\"id\":183,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":3840,\"src\":\"59:43:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ABIResolver.sol\",\"file\":\"./profiles/ABIResolver.sol\",\"id\":184,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":799,\"src\":\"103:36:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/AddrResolver.sol\",\"file\":\"./profiles/AddrResolver.sol\",\"id\":185,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":958,\"src\":\"140:37:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/ContentHashResolver.sol\",\"file\":\"./profiles/ContentHashResolver.sol\",\"id\":186,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1028,\"src\":\"178:44:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/DNSResolver.sol\",\"file\":\"./profiles/DNSResolver.sol\",\"id\":187,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1459,\"src\":\"223:36:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/InterfaceResolver.sol\",\"file\":\"./profiles/InterfaceResolver.sol\",\"id\":188,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1646,\"src\":\"260:42:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/NameResolver.sol\",\"file\":\"./profiles/NameResolver.sol\",\"id\":189,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1716,\"src\":\"303:37:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/PubkeyResolver.sol\",\"file\":\"./profiles/PubkeyResolver.sol\",\"id\":190,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1807,\"src\":\"341:39:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/profiles/TextResolver.sol\",\"file\":\"./profiles/TextResolver.sol\",\"id\":191,\"nodeType\":\"ImportDirective\",\"scope\":354,\"sourceUnit\":1890,\"src\":\"381:37:3\",\"symbolAliases\":[],\"unitAlias\":\"\"},{\"baseContracts\":[{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":192,\"name\":\"ABIResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":798,\"src\":\"547:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ABIResolver_$798\",\"typeString\":\"contract ABIResolver\"}},\"id\":193,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"547:11:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":194,\"name\":\"AddrResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":957,\"src\":\"560:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_AddrResolver_$957\",\"typeString\":\"contract AddrResolver\"}},\"id\":195,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"560:12:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":196,\"name\":\"ContentHashResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1027,\"src\":\"574:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ContentHashResolver_$1027\",\"typeString\":\"contract ContentHashResolver\"}},\"id\":197,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"574:19:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":198,\"name\":\"DNSResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1458,\"src\":\"595:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_DNSResolver_$1458\",\"typeString\":\"contract DNSResolver\"}},\"id\":199,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"595:11:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":200,\"name\":\"InterfaceResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1645,\"src\":\"608:17:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_InterfaceResolver_$1645\",\"typeString\":\"contract InterfaceResolver\"}},\"id\":201,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"608:17:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":202,\"name\":\"NameResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1715,\"src\":\"627:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_NameResolver_$1715\",\"typeString\":\"contract NameResolver\"}},\"id\":203,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"627:12:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":204,\"name\":\"PubkeyResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1806,\"src\":\"641:14:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_PubkeyResolver_$1806\",\"typeString\":\"contract PubkeyResolver\"}},\"id\":205,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"641:14:3\"},{\"arguments\":null,\"baseName\":{\"contractScope\":null,\"id\":206,\"name\":\"TextResolver\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":1889,\"src\":\"657:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_TextResolver_$1889\",\"typeString\":\"contract TextResolver\"}},\"id\":207,\"nodeType\":\"InheritanceSpecifier\",\"src\":\"657:12:3\"}],\"contractDependencies\":[662,798,957,1027,1458,1645,1715,1806,1889],\"contractKind\":\"contract\",\"documentation\":\"A simple resolver anyone can use; only allows the owner of a node to set its\\naddress.\",\"fullyImplemented\":true,\"id\":353,\"linearizedBaseContracts\":[353,1889,1806,1715,1645,1458,1027,957,798,662],\"name\":\"PublicResolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"constant\":false,\"id\":209,\"name\":\"ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":353,\"src\":\"676:7:3\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":208,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3839,\"src\":\"676:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":217,\"name\":\"authorisations\",\"nodeType\":\"VariableDeclaration\",\"scope\":353,\"src\":\"943:80:3\",\"stateVariable\":true,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(address => mapping(address => bool)))\"},\"typeName\":{\"id\":216,\"keyType\":{\"id\":210,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"951:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"nodeType\":\"Mapping\",\"src\":\"943:58:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(address => mapping(address => bool)))\"},\"valueType\":{\"id\":215,\"keyType\":{\"id\":211,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"968:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"960:40:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"},\"valueType\":{\"id\":214,\"keyType\":{\"id\":212,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"985:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"Mapping\",\"src\":\"977:22:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"},\"valueType\":{\"id\":213,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"994:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}}}},\"value\":null,\"visibility\":\"public\"},{\"anonymous\":false,\"documentation\":null,\"id\":227,\"name\":\"AuthorisationChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":226,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":219,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":227,\"src\":\"1057:20:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":218,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1057:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":221,\"indexed\":true,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":227,\"src\":\"1079:21:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":220,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1079:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":223,\"indexed\":true,\"name\":\"target\",\"nodeType\":\"VariableDeclaration\",\"scope\":227,\"src\":\"1102:22:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":222,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1102:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":225,\"indexed\":false,\"name\":\"isAuthorised\",\"nodeType\":\"VariableDeclaration\",\"scope\":227,\"src\":\"1126:17:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":224,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1126:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1056:88:3\"},\"src\":\"1030:115:3\"},{\"body\":{\"id\":236,\"nodeType\":\"Block\",\"src\":\"1180:27:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":234,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":232,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":209,\"src\":\"1190:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":233,\"name\":\"_ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":229,\"src\":\"1196:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"src\":\"1190:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"id\":235,\"nodeType\":\"ExpressionStatement\",\"src\":\"1190:10:3\"}]},\"documentation\":null,\"id\":237,\"implemented\":true,\"kind\":\"constructor\",\"modifiers\":[],\"name\":\"\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":230,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":229,\"name\":\"_ens\",\"nodeType\":\"VariableDeclaration\",\"scope\":237,\"src\":\"1163:8:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"},\"typeName\":{\"contractScope\":null,\"id\":228,\"name\":\"ENS\",\"nodeType\":\"UserDefinedTypeName\",\"referencedDeclaration\":3839,\"src\":\"1163:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1162:10:3\"},\"returnParameters\":{\"id\":231,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1180:0:3\"},\"scope\":353,\"src\":\"1151:56:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"public\"},{\"body\":{\"id\":265,\"nodeType\":\"Block\",\"src\":\"1976:147:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":255,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":246,\"name\":\"authorisations\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":217,\"src\":\"1986:14:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(address => mapping(address => bool)))\"}},\"id\":251,\"indexExpression\":{\"argumentTypes\":null,\"id\":247,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":239,\"src\":\"2001:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"1986:20:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":252,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":248,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4190,\"src\":\"2007:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":249,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2007:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"1986:32:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":253,\"indexExpression\":{\"argumentTypes\":null,\"id\":250,\"name\":\"target\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":241,\"src\":\"2019:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"1986:40:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":254,\"name\":\"isAuthorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":243,\"src\":\"2029:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"1986:55:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":256,\"nodeType\":\"ExpressionStatement\",\"src\":\"1986:55:3\"},{\"eventCall\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":258,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":239,\"src\":\"2077:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":259,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4190,\"src\":\"2083:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":260,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2083:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},{\"argumentTypes\":null,\"id\":261,\"name\":\"target\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":241,\"src\":\"2095:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},{\"argumentTypes\":null,\"id\":262,\"name\":\"isAuthorised\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":243,\"src\":\"2103:12:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"},{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":257,\"name\":\"AuthorisationChanged\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":227,\"src\":\"2056:20:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$_t_bool_$returns$__$\",\"typeString\":\"function (bytes32,address,address,bool)\"}},\"id\":263,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2056:60:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":264,\"nodeType\":\"EmitStatement\",\"src\":\"2051:65:3\"}]},\"documentation\":\"@dev Sets or clears an authorisation.\\nAuthorisations are specific to the caller. Any account can set an authorisation\\nfor any name, but the authorisation that is checked will be that of the\\ncurrent owner of a name. Thus, transferring a name effectively clears any\\nexisting authorisations, and new authorisations can be set in advance of\\nan ownership transfer if desired.\\n     * @param node The name to change the authorisation on.\\n@param target The address that is to be authorised or deauthorised.\\n@param isAuthorised True if the address should be authorised, or false if it should be deauthorised.\",\"id\":266,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setAuthorisation\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":244,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":239,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":266,\"src\":\"1918:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":238,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1918:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":241,\"name\":\"target\",\"nodeType\":\"VariableDeclaration\",\"scope\":266,\"src\":\"1932:14:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":240,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1932:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":243,\"name\":\"isAuthorised\",\"nodeType\":\"VariableDeclaration\",\"scope\":266,\"src\":\"1948:17:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":242,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1948:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1917:49:3\"},\"returnParameters\":{\"id\":245,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1976:0:3\"},\"scope\":353,\"src\":\"1892:231:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":{\"id\":294,\"nodeType\":\"Block\",\"src\":\"2193:127:3\",\"statements\":[{\"assignments\":[274],\"declarations\":[{\"constant\":false,\"id\":274,\"name\":\"owner\",\"nodeType\":\"VariableDeclaration\",\"scope\":294,\"src\":\"2203:13:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":273,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2203:7:3\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":279,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":277,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":268,\"src\":\"2229:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}],\"expression\":{\"argumentTypes\":null,\"id\":275,\"name\":\"ens\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":209,\"src\":\"2219:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_ENS_$3839\",\"typeString\":\"contract ENS\"}},\"id\":276,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"owner\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":3808,\"src\":\"2219:9:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_external_view$_t_bytes32_$returns$_t_address_$\",\"typeString\":\"function (bytes32) view external returns (address)\"}},\"id\":278,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2219:15:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2203:31:3\"},{\"expression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"id\":292,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"id\":283,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":280,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":274,\"src\":\"2251:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"==\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":281,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4190,\"src\":\"2260:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":282,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2260:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"src\":\"2251:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"||\",\"rightExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":284,\"name\":\"authorisations\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":217,\"src\":\"2274:14:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_bytes32_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$_$\",\"typeString\":\"mapping(bytes32 => mapping(address => mapping(address => bool)))\"}},\"id\":286,\"indexExpression\":{\"argumentTypes\":null,\"id\":285,\"name\":\"node\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":268,\"src\":\"2289:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2274:20:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$\",\"typeString\":\"mapping(address => mapping(address => bool))\"}},\"id\":288,\"indexExpression\":{\"argumentTypes\":null,\"id\":287,\"name\":\"owner\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":274,\"src\":\"2295:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2274:27:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_mapping$_t_address_$_t_bool_$\",\"typeString\":\"mapping(address => bool)\"}},\"id\":291,\"indexExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":289,\"name\":\"msg\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4190,\"src\":\"2302:3:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_magic_message\",\"typeString\":\"msg\"}},\"id\":290,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"sender\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2302:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address_payable\",\"typeString\":\"address payable\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2274:39:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"src\":\"2251:62:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"functionReturnParameters\":272,\"id\":293,\"nodeType\":\"Return\",\"src\":\"2244:69:3\"}]},\"documentation\":null,\"id\":295,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"isAuthorised\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":269,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":268,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":295,\"src\":\"2151:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":267,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2151:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2150:14:3\"},\"returnParameters\":{\"id\":272,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":271,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":295,\"src\":\"2187:4:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":270,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2187:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2186:6:3\"},\"scope\":353,\"src\":\"2129:191:3\",\"stateMutability\":\"view\",\"superFunction\":617,\"visibility\":\"internal\"},{\"body\":{\"id\":351,\"nodeType\":\"Block\",\"src\":\"2409:283:3\",\"statements\":[{\"expression\":{\"argumentTypes\":null,\"id\":311,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"id\":304,\"name\":\"results\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":302,\"src\":\"2419:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes memory[] memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":308,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2441:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_calldata_$dyn_calldata_ptr\",\"typeString\":\"bytes calldata[] calldata\"}},\"id\":309,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2441:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}],\"id\":307,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"NewExpression\",\"src\":\"2429:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes_memory_$dyn_memory_$\",\"typeString\":\"function (uint256) pure returns (bytes memory[] memory)\"},\"typeName\":{\"baseType\":{\"id\":305,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2433:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"id\":306,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"2433:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_storage_$dyn_storage_ptr\",\"typeString\":\"bytes[]\"}}},\"id\":310,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2429:24:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory\",\"typeString\":\"bytes memory[] memory\"}},\"src\":\"2419:34:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes memory[] memory\"}},\"id\":312,\"nodeType\":\"ExpressionStatement\",\"src\":\"2419:34:3\"},{\"body\":{\"id\":347,\"nodeType\":\"Block\",\"src\":\"2501:161:3\",\"statements\":[{\"assignments\":[325,327],\"declarations\":[{\"constant\":false,\"id\":325,\"name\":\"success\",\"nodeType\":\"VariableDeclaration\",\"scope\":347,\"src\":\"2516:12:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":324,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2516:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":327,\"name\":\"result\",\"nodeType\":\"VariableDeclaration\",\"scope\":347,\"src\":\"2530:19:3\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":326,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2530:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":336,\"initialValue\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":332,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2580:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_calldata_$dyn_calldata_ptr\",\"typeString\":\"bytes calldata[] calldata\"}},\"id\":334,\"indexExpression\":{\"argumentTypes\":null,\"id\":333,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":314,\"src\":\"2585:1:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"IndexAccess\",\"src\":\"2580:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata\",\"typeString\":\"bytes calldata\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bytes_calldata\",\"typeString\":\"bytes calldata\"}],\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":329,\"name\":\"this\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":4242,\"src\":\"2561:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_contract$_PublicResolver_$353\",\"typeString\":\"contract PublicResolver\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_contract$_PublicResolver_$353\",\"typeString\":\"contract PublicResolver\"}],\"id\":328,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"lValueRequested\":false,\"nodeType\":\"ElementaryTypeNameExpression\",\"src\":\"2553:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_type$_t_address_$\",\"typeString\":\"type(address)\"},\"typeName\":\"address\"},\"id\":330,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"typeConversion\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2553:13:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"id\":331,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"delegatecall\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2553:26:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_baredelegatecall_nonpayable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$\",\"typeString\":\"function (bytes memory) returns (bool,bytes memory)\"}},\"id\":335,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2553:35:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$_t_bool_$_t_bytes_memory_ptr_$\",\"typeString\":\"tuple(bool,bytes memory)\"}},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2515:73:3\"},{\"expression\":{\"argumentTypes\":null,\"arguments\":[{\"argumentTypes\":null,\"id\":338,\"name\":\"success\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":325,\"src\":\"2610:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}}],\"expression\":{\"argumentTypes\":[{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}],\"id\":337,\"name\":\"require\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[4193,4194],\"referencedDeclaration\":4193,\"src\":\"2602:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_function_require_pure$_t_bool_$returns$__$\",\"typeString\":\"function (bool) pure\"}},\"id\":339,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"kind\":\"functionCall\",\"lValueRequested\":false,\"names\":[],\"nodeType\":\"FunctionCall\",\"src\":\"2602:16:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_tuple$__$\",\"typeString\":\"tuple()\"}},\"id\":340,\"nodeType\":\"ExpressionStatement\",\"src\":\"2602:16:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":345,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftHandSide\":{\"argumentTypes\":null,\"baseExpression\":{\"argumentTypes\":null,\"id\":341,\"name\":\"results\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":302,\"src\":\"2632:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes memory[] memory\"}},\"id\":343,\"indexExpression\":{\"argumentTypes\":null,\"id\":342,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":314,\"src\":\"2640:1:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"isConstant\":false,\"isLValue\":true,\"isPure\":false,\"lValueRequested\":true,\"nodeType\":\"IndexAccess\",\"src\":\"2632:10:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory\",\"typeString\":\"bytes memory\"}},\"nodeType\":\"Assignment\",\"operator\":\"=\",\"rightHandSide\":{\"argumentTypes\":null,\"id\":344,\"name\":\"result\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":327,\"src\":\"2645:6:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes memory\"}},\"src\":\"2632:19:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory\",\"typeString\":\"bytes memory\"}},\"id\":346,\"nodeType\":\"ExpressionStatement\",\"src\":\"2632:19:3\"}]},\"condition\":{\"argumentTypes\":null,\"commonType\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"id\":320,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"leftExpression\":{\"argumentTypes\":null,\"id\":317,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":314,\"src\":\"2479:1:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"nodeType\":\"BinaryOperation\",\"operator\":\"<\",\"rightExpression\":{\"argumentTypes\":null,\"expression\":{\"argumentTypes\":null,\"id\":318,\"name\":\"data\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":298,\"src\":\"2483:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_calldata_$dyn_calldata_ptr\",\"typeString\":\"bytes calldata[] calldata\"}},\"id\":319,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"memberName\":\"length\",\"nodeType\":\"MemberAccess\",\"referencedDeclaration\":null,\"src\":\"2483:11:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"src\":\"2479:15:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"id\":348,\"initializationExpression\":{\"assignments\":[314],\"declarations\":[{\"constant\":false,\"id\":314,\"name\":\"i\",\"nodeType\":\"VariableDeclaration\",\"scope\":348,\"src\":\"2467:6:3\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":313,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2467:4:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"id\":316,\"initialValue\":{\"argumentTypes\":null,\"hexValue\":\"30\",\"id\":315,\"isConstant\":false,\"isLValue\":false,\"isPure\":true,\"kind\":\"number\",\"lValueRequested\":false,\"nodeType\":\"Literal\",\"src\":\"2476:1:3\",\"subdenomination\":null,\"typeDescriptions\":{\"typeIdentifier\":\"t_rational_0_by_1\",\"typeString\":\"int_const 0\"},\"value\":\"0\"},\"nodeType\":\"VariableDeclarationStatement\",\"src\":\"2467:10:3\"},\"loopExpression\":{\"expression\":{\"argumentTypes\":null,\"id\":322,\"isConstant\":false,\"isLValue\":false,\"isPure\":false,\"lValueRequested\":false,\"nodeType\":\"UnaryOperation\",\"operator\":\"++\",\"prefix\":false,\"src\":\"2496:3:3\",\"subExpression\":{\"argumentTypes\":null,\"id\":321,\"name\":\"i\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":314,\"src\":\"2496:1:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"id\":323,\"nodeType\":\"ExpressionStatement\",\"src\":\"2496:3:3\"},\"nodeType\":\"ForStatement\",\"src\":\"2463:199:3\"},{\"expression\":{\"argumentTypes\":null,\"id\":349,\"name\":\"results\",\"nodeType\":\"Identifier\",\"overloadedDeclarations\":[],\"referencedDeclaration\":302,\"src\":\"2678:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes memory[] memory\"}},\"functionReturnParameters\":303,\"id\":350,\"nodeType\":\"Return\",\"src\":\"2671:14:3\"}]},\"documentation\":null,\"id\":352,\"implemented\":true,\"kind\":\"function\",\"modifiers\":[],\"name\":\"multicall\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":299,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":298,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":352,\"src\":\"2345:21:3\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_calldata_$dyn_calldata_ptr\",\"typeString\":\"bytes[]\"},\"typeName\":{\"baseType\":{\"id\":296,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2345:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"id\":297,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"2345:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_storage_$dyn_storage_ptr\",\"typeString\":\"bytes[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2344:23:3\"},\"returnParameters\":{\"id\":303,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":302,\"name\":\"results\",\"nodeType\":\"VariableDeclaration\",\"scope\":352,\"src\":\"2385:22:3\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_memory_$dyn_memory_ptr\",\"typeString\":\"bytes[]\"},\"typeName\":{\"baseType\":{\"id\":300,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2385:5:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"id\":301,\"length\":null,\"nodeType\":\"ArrayTypeName\",\"src\":\"2385:7:3\",\"typeDescriptions\":{\"typeIdentifier\":\"t_array$_t_bytes_storage_$dyn_storage_ptr\",\"typeString\":\"bytes[]\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2384:24:3\"},\"scope\":353,\"src\":\"2326:366:3\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":354,\"src\":\"520:2174:3\"}],\"src\":\"0:2695:3\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.8+commit.23d335f2.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.16\",\"updatedAt\":\"2020-01-30T08:50:02.471Z\",\"devdoc\":{\"methods\":{\"ABI(bytes32,uint256)\":{\"params\":{\"contentTypes\":\"A bitwise OR of the ABI formats accepted by the caller.\",\"node\":\"The ENS node to query\"},\"return\":\"contentType The content type of the return valuedata The ABI data\"},\"addr(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated address.\"},\"clearDNSZone(bytes32)\":{\"params\":{\"node\":\"the namehash of the node for which to clear the zone\"}},\"contenthash(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated contenthash.\"},\"dnsRecord(bytes32,bytes32,uint16)\":{\"params\":{\"name\":\"the keccak-256 hash of the fully-qualified name for which to fetch the record\",\"node\":\"the namehash of the node for which to fetch the record\",\"resource\":\"the ID of the resource as per https://en.wikipedia.org/wiki/List_of_DNS_record_types\"},\"return\":\"the DNS record in wire format if present, otherwise empty\"},\"hasDNSRecords(bytes32,bytes32)\":{\"params\":{\"name\":\"the namehash of the node for which to check the records\",\"node\":\"the namehash of the node for which to check the records\"}},\"interfaceImplementer(bytes32,bytes4)\":{\"params\":{\"interfaceID\":\"The EIP 168 interface ID to check for.\",\"node\":\"The ENS node to query.\"},\"return\":\"The address that implements this interface, or 0 if the interface is unsupported.\"},\"name(bytes32)\":{\"params\":{\"node\":\"The ENS node to query.\"},\"return\":\"The associated name.\"},\"pubkey(bytes32)\":{\"params\":{\"node\":\"The ENS node to query\"},\"return\":\"x, y the X and Y coordinates of the curve point for the public key.\"},\"setABI(bytes32,uint256,bytes)\":{\"params\":{\"contentType\":\"The content type of the ABI\",\"data\":\"The ABI data.\",\"node\":\"The node to update.\"}},\"setAddr(bytes32,address)\":{\"params\":{\"a\":\"The address to set.\",\"node\":\"The node to update.\"}},\"setAuthorisation(bytes32,address,bool)\":{\"details\":\"Sets or clears an authorisation. Authorisations are specific to the caller. Any account can set an authorisation for any name, but the authorisation that is checked will be that of the current owner of a name. Thus, transferring a name effectively clears any existing authorisations, and new authorisations can be set in advance of an ownership transfer if desired.\",\"params\":{\"isAuthorised\":\"True if the address should be authorised, or false if it should be deauthorised.\",\"node\":\"The name to change the authorisation on.\",\"target\":\"The address that is to be authorised or deauthorised.\"}},\"setContenthash(bytes32,bytes)\":{\"params\":{\"hash\":\"The contenthash to set\",\"node\":\"The node to update.\"}},\"setDNSRecords(bytes32,bytes)\":{\"params\":{\"data\":\"the DNS wire format records to set\",\"node\":\"the namehash of the node for which to set the records\"}},\"setInterface(bytes32,bytes4,address)\":{\"params\":{\"implementer\":\"The address of a contract that implements this interface for this node.\",\"interfaceID\":\"The EIP 168 interface ID.\",\"node\":\"The node to update.\"}},\"setName(bytes32,string)\":{\"params\":{\"name\":\"The name to set.\",\"node\":\"The node to update.\"}},\"setPubkey(bytes32,bytes32,bytes32)\":{\"params\":{\"node\":\"The ENS node to query\",\"x\":\"the X coordinate of the curve point for the public key.\",\"y\":\"the Y coordinate of the curve point for the public key.\"}},\"setText(bytes32,string,string)\":{\"params\":{\"key\":\"The key to set.\",\"node\":\"The node to update.\",\"value\":\"The text data value to set.\"}},\"text(bytes32,string)\":{\"params\":{\"key\":\"The text data key to query.\",\"node\":\"The ENS node to query.\"},\"return\":\"The associated text data.\"}}},\"userdoc\":{\"methods\":{\"ABI(bytes32,uint256)\":{\"notice\":\"Returns the ABI associated with an ENS node. Defined in EIP205.\"},\"addr(bytes32)\":{\"notice\":\"Returns the address associated with an ENS node.\"},\"clearDNSZone(bytes32)\":{\"notice\":\"Clear all information for a DNS zone.\"},\"contenthash(bytes32)\":{\"notice\":\"Returns the contenthash associated with an ENS node.\"},\"dnsRecord(bytes32,bytes32,uint16)\":{\"notice\":\"Obtain a DNS record.\"},\"hasDNSRecords(bytes32,bytes32)\":{\"notice\":\"Check if a given node has records.\"},\"interfaceImplementer(bytes32,bytes4)\":{\"notice\":\"Returns the address of a contract that implements the specified interface for this name. If an implementer has not been set for this interfaceID and name, the resolver will query the contract at `addr()`. If `addr()` is set, a contract exists at that address, and that contract implements EIP168 and returns `true` for the specified interfaceID, its address will be returned.\"},\"name(bytes32)\":{\"notice\":\"Returns the name associated with an ENS node, for reverse records. Defined in EIP181.\"},\"pubkey(bytes32)\":{\"notice\":\"Returns the SECP256k1 public key associated with an ENS node. Defined in EIP 619.\"},\"setABI(bytes32,uint256,bytes)\":{\"notice\":\"Sets the ABI associated with an ENS node. Nodes may have one ABI of each content type. To remove an ABI, set it to the empty string.\"},\"setAddr(bytes32,address)\":{\"notice\":\"Sets the address associated with an ENS node. May only be called by the owner of that node in the ENS registry.\"},\"setContenthash(bytes32,bytes)\":{\"notice\":\"Sets the contenthash associated with an ENS node. May only be called by the owner of that node in the ENS registry.\"},\"setDNSRecords(bytes32,bytes)\":{\"notice\":\"Set one or more DNS records.  Records are supplied in wire-format. Records with the same node/name/resource must be supplied one after the other to ensure the data is updated correctly. For example, if the data was supplied:    a.example.com IN A 1.2.3.4    a.example.com IN A 5.6.7.8    www.example.com IN CNAME a.example.com. then this would store the two A records for a.example.com correctly as a single RRSET, however if the data was supplied:    a.example.com IN A 1.2.3.4    www.example.com IN CNAME a.example.com.    a.example.com IN A 5.6.7.8 then this would store the first A record, the CNAME, then the second A record which would overwrite the first.\"},\"setInterface(bytes32,bytes4,address)\":{\"notice\":\"Sets an interface associated with a name. Setting the address to 0 restores the default behaviour of querying the contract at `addr()` for interface support.\"},\"setName(bytes32,string)\":{\"notice\":\"Sets the name associated with an ENS node, for reverse records. May only be called by the owner of that node in the ENS registry.\"},\"setPubkey(bytes32,bytes32,bytes32)\":{\"notice\":\"Sets the SECP256k1 public key associated with an ENS node.\"},\"setText(bytes32,string,string)\":{\"notice\":\"Sets the text data associated with an ENS node and key. May only be called by the owner of that node in the ENS registry.\"},\"text(bytes32,string)\":{\"notice\":\"Returns the text data associated with an ENS node and key.\"}},\"notice\":\"A simple resolver anyone can use; only allows the owner of a node to set its address.\"}}");

/***/ }),

/***/ 404301:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contractName\":\"Resolver\",\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"a\",\"type\":\"address\"}],\"name\":\"AddrChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"coinType\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newAddress\",\"type\":\"bytes\"}],\"name\":\"AddressChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NameChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"contentType\",\"type\":\"uint256\"}],\"name\":\"ABIChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"x\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"PubkeyChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"indexedKey\",\"type\":\"string\"},{\"indexed\":false,\"name\":\"key\",\"type\":\"string\"}],\"name\":\"TextChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"ContenthashChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"node\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"ContentChanged\",\"type\":\"event\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentTypes\",\"type\":\"uint256\"}],\"name\":\"ABI\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"},{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"coinType\",\"type\":\"uint256\"}],\"name\":\"addr\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"contenthash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"dnsrr\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"name\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"pubkey\",\"outputs\":[{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"}],\"name\":\"text\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"interfaceImplementer\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"contentType\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setABI\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"coinType\",\"type\":\"uint256\"},{\"name\":\"a\",\"type\":\"bytes\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"setAddr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"setContenthash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"setDnsrr\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"_name\",\"type\":\"string\"}],\"name\":\"setName\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"x\",\"type\":\"bytes32\"},{\"name\":\"y\",\"type\":\"bytes32\"}],\"name\":\"setPubkey\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"value\",\"type\":\"string\"}],\"name\":\"setText\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"interfaceID\",\"type\":\"bytes4\"},{\"name\":\"implementer\",\"type\":\"address\"}],\"name\":\"setInterface\",\"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\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"content\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"}],\"name\":\"multihash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes32\"}],\"name\":\"setContent\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"node\",\"type\":\"bytes32\"},{\"name\":\"hash\",\"type\":\"bytes\"}],\"name\":\"setMultihash\",\"outputs\":[],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"metadata\":\"{\\\"compiler\\\":{\\\"version\\\":\\\"0.5.8+commit.23d335f2\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"}],\\\"name\\\":\\\"supportsInterface\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"},{\\\"name\\\":\\\"value\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setText\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"}],\\\"name\\\":\\\"interfaceImplementer\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"dnsrr\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"contentTypes\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ABI\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"setPubkey\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"content\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setContenthash\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"addr\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"text\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"contentType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setABI\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"name\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"string\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"data\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setDnsrr\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"_name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"setName\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setAddr\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"setMultihash\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"contenthash\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"setContent\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"pubkey\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"addr\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setAddr\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":false,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"interfaceID\\\",\\\"type\\\":\\\"bytes4\\\"},{\\\"name\\\":\\\"implementer\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"setInterface\\\",\\\"outputs\\\":[],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"multihash\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"constant\\\":true,\\\"inputs\\\":[{\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"addr\\\",\\\"outputs\\\":[{\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"payable\\\":false,\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"a\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"AddrChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"coinType\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"newAddress\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"AddressChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"name\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"NameChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"contentType\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"ABIChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"x\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"y\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"PubkeyChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":true,\\\"name\\\":\\\"indexedKey\\\",\\\"type\\\":\\\"string\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"key\\\",\\\"type\\\":\\\"string\\\"}],\\\"name\\\":\\\"TextChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"ContenthashChanged\\\",\\\"type\\\":\\\"event\\\"},{\\\"anonymous\\\":false,\\\"inputs\\\":[{\\\"indexed\\\":true,\\\"name\\\":\\\"node\\\",\\\"type\\\":\\\"bytes32\\\"},{\\\"indexed\\\":false,\\\"name\\\":\\\"hash\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"name\\\":\\\"ContentChanged\\\",\\\"type\\\":\\\"event\\\"}],\\\"devdoc\\\":{\\\"methods\\\":{}},\\\"userdoc\\\":{\\\"methods\\\":{},\\\"notice\\\":\\\"A generic resolver interface which includes all the functions including the ones deprecated\\\"}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/Resolver.sol\\\":\\\"Resolver\\\"},\\\"evmVersion\\\":\\\"petersburg\\\",\\\"libraries\\\":{},\\\"optimizer\\\":{\\\"enabled\\\":false,\\\"runs\\\":200},\\\"remappings\\\":[]},\\\"sources\\\":{\\\"/Users/makoto/work/ens/migration/resolvers/contracts/Resolver.sol\\\":{\\\"keccak256\\\":\\\"0x90d735646724ed7449118d65cc94dc4979a286a93dd771b0c1f5d7bd9553db94\\\",\\\"urls\\\":[\\\"bzzr://ac661dc1360c7c9febf5cbe706be33c009f62ac8e77d929446ef428bbe78aad7\\\"]}},\\\"version\\\":1}\",\"bytecode\":\"0x\",\"deployedBytecode\":\"0x\",\"sourceMap\":\"\",\"deployedSourceMap\":\"\",\"source\":\"pragma solidity >=0.4.25;\\n\\n/**\\n * A generic resolver interface which includes all the functions including the ones deprecated\\n */\\ninterface Resolver{\\n    event AddrChanged(bytes32 indexed node, address a);\\n    event AddressChanged(bytes32 indexed node, uint coinType, bytes newAddress);\\n    event NameChanged(bytes32 indexed node, string name);\\n    event ABIChanged(bytes32 indexed node, uint256 indexed contentType);\\n    event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);\\n    event TextChanged(bytes32 indexed node, string indexed indexedKey, string key);\\n    event ContenthashChanged(bytes32 indexed node, bytes hash);\\n    /* Deprecated events */\\n    event ContentChanged(bytes32 indexed node, bytes32 hash);\\n\\n    function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256, bytes memory);\\n    function addr(bytes32 node) external view returns (address);\\n    function addr(bytes32 node, uint coinType) external view returns(bytes memory);\\n    function contenthash(bytes32 node) external view returns (bytes memory);\\n    function dnsrr(bytes32 node) external view returns (bytes memory);\\n    function name(bytes32 node) external view returns (string memory);\\n    function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y);\\n    function text(bytes32 node, string calldata key) external view returns (string memory);\\n    function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address);\\n    function setABI(bytes32 node, uint256 contentType, bytes calldata data) external;\\n    function setAddr(bytes32 node, address addr) external;\\n    function setAddr(bytes32 node, uint coinType, bytes calldata a) external;\\n    function setContenthash(bytes32 node, bytes calldata hash) external;\\n    function setDnsrr(bytes32 node, bytes calldata data) external;\\n    function setName(bytes32 node, string calldata _name) external;\\n    function setPubkey(bytes32 node, bytes32 x, bytes32 y) external;\\n    function setText(bytes32 node, string calldata key, string calldata value) external;\\n    function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external;\\n    function supportsInterface(bytes4 interfaceID) external pure returns (bool);\\n\\n    /* Deprecated functions */\\n    function content(bytes32 node) external view returns (bytes32);\\n    function multihash(bytes32 node) external view returns (bytes memory);\\n    function setContent(bytes32 node, bytes32 hash) external;\\n    function setMultihash(bytes32 node, bytes calldata hash) external;\\n}\\n\",\"sourcePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/Resolver.sol\",\"ast\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/Resolver.sol\",\"exportedSymbols\":{\"Resolver\":[593]},\"id\":594,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":355,\"literals\":[\"solidity\",\">=\",\"0.4\",\".25\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:4\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"interface\",\"documentation\":\"A generic resolver interface which includes all the functions including the ones deprecated\",\"fullyImplemented\":false,\"id\":593,\"linearizedBaseContracts\":[593],\"name\":\"Resolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"anonymous\":false,\"documentation\":null,\"id\":361,\"name\":\"AddrChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":360,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":357,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":361,\"src\":\"172:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":356,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"172:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":359,\"indexed\":false,\"name\":\"a\",\"nodeType\":\"VariableDeclaration\",\"scope\":361,\"src\":\"194:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":358,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"194:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"171:33:4\"},\"src\":\"154:51:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":369,\"name\":\"AddressChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":368,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":363,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":369,\"src\":\"231:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":362,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"231:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":365,\"indexed\":false,\"name\":\"coinType\",\"nodeType\":\"VariableDeclaration\",\"scope\":369,\"src\":\"253:13:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":364,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"253:4:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":367,\"indexed\":false,\"name\":\"newAddress\",\"nodeType\":\"VariableDeclaration\",\"scope\":369,\"src\":\"268:16:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":366,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"268:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"230:55:4\"},\"src\":\"210:76:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":375,\"name\":\"NameChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":374,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":371,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":375,\"src\":\"309:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":370,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"309:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":373,\"indexed\":false,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":375,\"src\":\"331:11:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":372,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"331:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"308:35:4\"},\"src\":\"291:53:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":381,\"name\":\"ABIChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":380,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":377,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":381,\"src\":\"366:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":376,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"366:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":379,\"indexed\":true,\"name\":\"contentType\",\"nodeType\":\"VariableDeclaration\",\"scope\":381,\"src\":\"388:27:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":378,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"388:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"365:51:4\"},\"src\":\"349:68:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":389,\"name\":\"PubkeyChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":388,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":383,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":389,\"src\":\"442:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":382,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"442:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":385,\"indexed\":false,\"name\":\"x\",\"nodeType\":\"VariableDeclaration\",\"scope\":389,\"src\":\"464:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":384,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"464:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":387,\"indexed\":false,\"name\":\"y\",\"nodeType\":\"VariableDeclaration\",\"scope\":389,\"src\":\"475:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":386,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"475:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"441:44:4\"},\"src\":\"422:64:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":397,\"name\":\"TextChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":396,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":391,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":397,\"src\":\"509:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":390,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"509:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":393,\"indexed\":true,\"name\":\"indexedKey\",\"nodeType\":\"VariableDeclaration\",\"scope\":397,\"src\":\"531:25:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":392,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"531:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":395,\"indexed\":false,\"name\":\"key\",\"nodeType\":\"VariableDeclaration\",\"scope\":397,\"src\":\"558:10:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":394,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"558:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"508:61:4\"},\"src\":\"491:79:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":403,\"name\":\"ContenthashChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":402,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":399,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":403,\"src\":\"600:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":398,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"600:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":401,\"indexed\":false,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":403,\"src\":\"622:10:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":400,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"622:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"599:34:4\"},\"src\":\"575:59:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":409,\"name\":\"ContentChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":408,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":405,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":409,\"src\":\"688:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":404,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"688:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":407,\"indexed\":false,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":409,\"src\":\"710:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":406,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"710:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"687:36:4\"},\"src\":\"667:57:4\"},{\"body\":null,\"documentation\":null,\"id\":420,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"ABI\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":414,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":411,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":420,\"src\":\"743:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":410,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"743:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":413,\"name\":\"contentTypes\",\"nodeType\":\"VariableDeclaration\",\"scope\":420,\"src\":\"757:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":412,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"757:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"742:36:4\"},\"returnParameters\":{\"id\":419,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":416,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":420,\"src\":\"802:7:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":415,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"802:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":418,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":420,\"src\":\"811:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":417,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"811:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"801:23:4\"},\"scope\":593,\"src\":\"730:95:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":427,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"addr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":423,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":422,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":427,\"src\":\"844:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":421,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"844:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"843:14:4\"},\"returnParameters\":{\"id\":426,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":425,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":427,\"src\":\"881:7:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":424,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"881:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"880:9:4\"},\"scope\":593,\"src\":\"830:60:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":436,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"addr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":432,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":429,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":436,\"src\":\"909:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":428,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"909:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":431,\"name\":\"coinType\",\"nodeType\":\"VariableDeclaration\",\"scope\":436,\"src\":\"923:13:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":430,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"923:4:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"908:29:4\"},\"returnParameters\":{\"id\":435,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":434,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":436,\"src\":\"960:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":433,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"960:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"959:14:4\"},\"scope\":593,\"src\":\"895:79:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":443,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"contenthash\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":439,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":438,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":443,\"src\":\"1000:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":437,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1000:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"999:14:4\"},\"returnParameters\":{\"id\":442,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":441,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":443,\"src\":\"1037:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":440,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1037:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1036:14:4\"},\"scope\":593,\"src\":\"979:72:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":450,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"dnsrr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":446,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":445,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":450,\"src\":\"1071:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":444,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1071:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1070:14:4\"},\"returnParameters\":{\"id\":449,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":448,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":450,\"src\":\"1108:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":447,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1108:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1107:14:4\"},\"scope\":593,\"src\":\"1056:66:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":457,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"name\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":453,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":452,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":457,\"src\":\"1141:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":451,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1141:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1140:14:4\"},\"returnParameters\":{\"id\":456,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":455,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":457,\"src\":\"1178:13:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":454,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1178:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1177:15:4\"},\"scope\":593,\"src\":\"1127:66:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":466,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"pubkey\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":460,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":459,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":466,\"src\":\"1214:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":458,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1214:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1213:14:4\"},\"returnParameters\":{\"id\":465,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":462,\"name\":\"x\",\"nodeType\":\"VariableDeclaration\",\"scope\":466,\"src\":\"1251:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":461,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1251:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":464,\"name\":\"y\",\"nodeType\":\"VariableDeclaration\",\"scope\":466,\"src\":\"1262:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":463,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1262:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1250:22:4\"},\"scope\":593,\"src\":\"1198:75:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":475,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"text\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":471,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":468,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":475,\"src\":\"1292:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":467,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1292:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":470,\"name\":\"key\",\"nodeType\":\"VariableDeclaration\",\"scope\":475,\"src\":\"1306:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":469,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1306:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1291:35:4\"},\"returnParameters\":{\"id\":474,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":473,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":475,\"src\":\"1350:13:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":472,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1350:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1349:15:4\"},\"scope\":593,\"src\":\"1278:87:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":484,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"interfaceImplementer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":480,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":477,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":484,\"src\":\"1400:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":476,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1400:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":479,\"name\":\"interfaceID\",\"nodeType\":\"VariableDeclaration\",\"scope\":484,\"src\":\"1414:18:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":478,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1414:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1399:34:4\"},\"returnParameters\":{\"id\":483,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":482,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":484,\"src\":\"1457:7:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":481,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1457:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1456:9:4\"},\"scope\":593,\"src\":\"1370:96:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":493,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setABI\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":491,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":486,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":493,\"src\":\"1487:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":485,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1487:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":488,\"name\":\"contentType\",\"nodeType\":\"VariableDeclaration\",\"scope\":493,\"src\":\"1501:19:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":487,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1501:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":490,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":493,\"src\":\"1522:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":489,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1522:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1486:56:4\"},\"returnParameters\":{\"id\":492,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1551:0:4\"},\"scope\":593,\"src\":\"1471:81:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":500,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setAddr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":498,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":495,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":500,\"src\":\"1574:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":494,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1574:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":497,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":500,\"src\":\"1588:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":496,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1588:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1573:28:4\"},\"returnParameters\":{\"id\":499,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1610:0:4\"},\"scope\":593,\"src\":\"1557:54:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":509,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setAddr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":507,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":502,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":509,\"src\":\"1633:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":501,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1633:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":504,\"name\":\"coinType\",\"nodeType\":\"VariableDeclaration\",\"scope\":509,\"src\":\"1647:13:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":503,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1647:4:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":506,\"name\":\"a\",\"nodeType\":\"VariableDeclaration\",\"scope\":509,\"src\":\"1662:16:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":505,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1662:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1632:47:4\"},\"returnParameters\":{\"id\":508,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1688:0:4\"},\"scope\":593,\"src\":\"1616:73:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":516,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setContenthash\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":514,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":511,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":516,\"src\":\"1718:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":510,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1718:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":513,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":516,\"src\":\"1732:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":512,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1732:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1717:35:4\"},\"returnParameters\":{\"id\":515,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1761:0:4\"},\"scope\":593,\"src\":\"1694:68:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":523,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setDnsrr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":521,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":518,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":523,\"src\":\"1785:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":517,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1785:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":520,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":523,\"src\":\"1799:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":519,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1799:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1784:35:4\"},\"returnParameters\":{\"id\":522,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1828:0:4\"},\"scope\":593,\"src\":\"1767:62:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":530,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":528,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":525,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":530,\"src\":\"1851:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":524,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1851:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":527,\"name\":\"_name\",\"nodeType\":\"VariableDeclaration\",\"scope\":530,\"src\":\"1865:21:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":526,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1865:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1850:37:4\"},\"returnParameters\":{\"id\":529,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1896:0:4\"},\"scope\":593,\"src\":\"1834:63:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":539,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setPubkey\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":537,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":532,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":539,\"src\":\"1921:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":531,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1921:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":534,\"name\":\"x\",\"nodeType\":\"VariableDeclaration\",\"scope\":539,\"src\":\"1935:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":533,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1935:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":536,\"name\":\"y\",\"nodeType\":\"VariableDeclaration\",\"scope\":539,\"src\":\"1946:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":535,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1946:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1920:36:4\"},\"returnParameters\":{\"id\":538,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1965:0:4\"},\"scope\":593,\"src\":\"1902:64:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":548,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setText\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":546,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":541,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1988:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":540,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1988:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":543,\"name\":\"key\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"2002:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":542,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2002:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":545,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"2023:21:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":544,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2023:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1987:58:4\"},\"returnParameters\":{\"id\":547,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2054:0:4\"},\"scope\":593,\"src\":\"1971:84:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":557,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setInterface\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":555,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":550,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":557,\"src\":\"2082:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":549,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2082:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":552,\"name\":\"interfaceID\",\"nodeType\":\"VariableDeclaration\",\"scope\":557,\"src\":\"2096:18:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":551,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2096:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":554,\"name\":\"implementer\",\"nodeType\":\"VariableDeclaration\",\"scope\":557,\"src\":\"2116:19:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":553,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2116:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2081:55:4\"},\"returnParameters\":{\"id\":556,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2145:0:4\"},\"scope\":593,\"src\":\"2060:86:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":564,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"supportsInterface\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":560,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":559,\"name\":\"interfaceID\",\"nodeType\":\"VariableDeclaration\",\"scope\":564,\"src\":\"2178:18:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":558,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2178:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2177:20:4\"},\"returnParameters\":{\"id\":563,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":562,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":564,\"src\":\"2221:4:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":561,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2221:4:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2220:6:4\"},\"scope\":593,\"src\":\"2151:76:4\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":571,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"content\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":567,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":566,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":571,\"src\":\"2281:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":565,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2281:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2280:14:4\"},\"returnParameters\":{\"id\":570,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":569,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":571,\"src\":\"2318:7:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":568,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2318:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2317:9:4\"},\"scope\":593,\"src\":\"2264:63:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":578,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"multihash\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":574,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":573,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":578,\"src\":\"2351:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":572,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2351:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2350:14:4\"},\"returnParameters\":{\"id\":577,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":576,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":578,\"src\":\"2388:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":575,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2388:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2387:14:4\"},\"scope\":593,\"src\":\"2332:70:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":585,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setContent\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":583,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":580,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":585,\"src\":\"2427:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":579,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2427:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":582,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":585,\"src\":\"2441:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":581,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2441:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2426:28:4\"},\"returnParameters\":{\"id\":584,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2463:0:4\"},\"scope\":593,\"src\":\"2407:57:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":592,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setMultihash\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":590,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":587,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":592,\"src\":\"2491:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":586,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2491:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":589,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":592,\"src\":\"2505:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":588,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2505:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2490:35:4\"},\"returnParameters\":{\"id\":591,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2534:0:4\"},\"scope\":593,\"src\":\"2469:66:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":594,\"src\":\"130:2407:4\"}],\"src\":\"0:2538:4\"},\"legacyAST\":{\"absolutePath\":\"/Users/makoto/work/ens/migration/resolvers/contracts/Resolver.sol\",\"exportedSymbols\":{\"Resolver\":[593]},\"id\":594,\"nodeType\":\"SourceUnit\",\"nodes\":[{\"id\":355,\"literals\":[\"solidity\",\">=\",\"0.4\",\".25\"],\"nodeType\":\"PragmaDirective\",\"src\":\"0:25:4\"},{\"baseContracts\":[],\"contractDependencies\":[],\"contractKind\":\"interface\",\"documentation\":\"A generic resolver interface which includes all the functions including the ones deprecated\",\"fullyImplemented\":false,\"id\":593,\"linearizedBaseContracts\":[593],\"name\":\"Resolver\",\"nodeType\":\"ContractDefinition\",\"nodes\":[{\"anonymous\":false,\"documentation\":null,\"id\":361,\"name\":\"AddrChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":360,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":357,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":361,\"src\":\"172:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":356,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"172:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":359,\"indexed\":false,\"name\":\"a\",\"nodeType\":\"VariableDeclaration\",\"scope\":361,\"src\":\"194:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":358,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"194:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"171:33:4\"},\"src\":\"154:51:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":369,\"name\":\"AddressChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":368,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":363,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":369,\"src\":\"231:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":362,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"231:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":365,\"indexed\":false,\"name\":\"coinType\",\"nodeType\":\"VariableDeclaration\",\"scope\":369,\"src\":\"253:13:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":364,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"253:4:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":367,\"indexed\":false,\"name\":\"newAddress\",\"nodeType\":\"VariableDeclaration\",\"scope\":369,\"src\":\"268:16:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":366,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"268:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"230:55:4\"},\"src\":\"210:76:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":375,\"name\":\"NameChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":374,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":371,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":375,\"src\":\"309:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":370,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"309:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":373,\"indexed\":false,\"name\":\"name\",\"nodeType\":\"VariableDeclaration\",\"scope\":375,\"src\":\"331:11:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":372,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"331:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"308:35:4\"},\"src\":\"291:53:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":381,\"name\":\"ABIChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":380,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":377,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":381,\"src\":\"366:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":376,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"366:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":379,\"indexed\":true,\"name\":\"contentType\",\"nodeType\":\"VariableDeclaration\",\"scope\":381,\"src\":\"388:27:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":378,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"388:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"365:51:4\"},\"src\":\"349:68:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":389,\"name\":\"PubkeyChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":388,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":383,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":389,\"src\":\"442:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":382,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"442:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":385,\"indexed\":false,\"name\":\"x\",\"nodeType\":\"VariableDeclaration\",\"scope\":389,\"src\":\"464:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":384,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"464:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":387,\"indexed\":false,\"name\":\"y\",\"nodeType\":\"VariableDeclaration\",\"scope\":389,\"src\":\"475:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":386,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"475:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"441:44:4\"},\"src\":\"422:64:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":397,\"name\":\"TextChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":396,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":391,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":397,\"src\":\"509:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":390,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"509:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":393,\"indexed\":true,\"name\":\"indexedKey\",\"nodeType\":\"VariableDeclaration\",\"scope\":397,\"src\":\"531:25:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":392,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"531:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":395,\"indexed\":false,\"name\":\"key\",\"nodeType\":\"VariableDeclaration\",\"scope\":397,\"src\":\"558:10:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":394,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"558:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"508:61:4\"},\"src\":\"491:79:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":403,\"name\":\"ContenthashChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":402,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":399,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":403,\"src\":\"600:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":398,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"600:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":401,\"indexed\":false,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":403,\"src\":\"622:10:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":400,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"622:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"599:34:4\"},\"src\":\"575:59:4\"},{\"anonymous\":false,\"documentation\":null,\"id\":409,\"name\":\"ContentChanged\",\"nodeType\":\"EventDefinition\",\"parameters\":{\"id\":408,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":405,\"indexed\":true,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":409,\"src\":\"688:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":404,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"688:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":407,\"indexed\":false,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":409,\"src\":\"710:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":406,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"710:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"687:36:4\"},\"src\":\"667:57:4\"},{\"body\":null,\"documentation\":null,\"id\":420,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"ABI\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":414,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":411,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":420,\"src\":\"743:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":410,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"743:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":413,\"name\":\"contentTypes\",\"nodeType\":\"VariableDeclaration\",\"scope\":420,\"src\":\"757:20:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":412,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"757:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"742:36:4\"},\"returnParameters\":{\"id\":419,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":416,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":420,\"src\":\"802:7:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":415,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"802:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":418,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":420,\"src\":\"811:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":417,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"811:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"801:23:4\"},\"scope\":593,\"src\":\"730:95:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":427,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"addr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":423,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":422,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":427,\"src\":\"844:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":421,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"844:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"843:14:4\"},\"returnParameters\":{\"id\":426,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":425,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":427,\"src\":\"881:7:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":424,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"881:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"880:9:4\"},\"scope\":593,\"src\":\"830:60:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":436,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"addr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":432,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":429,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":436,\"src\":\"909:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":428,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"909:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":431,\"name\":\"coinType\",\"nodeType\":\"VariableDeclaration\",\"scope\":436,\"src\":\"923:13:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":430,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"923:4:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"908:29:4\"},\"returnParameters\":{\"id\":435,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":434,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":436,\"src\":\"960:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":433,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"960:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"959:14:4\"},\"scope\":593,\"src\":\"895:79:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":443,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"contenthash\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":439,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":438,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":443,\"src\":\"1000:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":437,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1000:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"999:14:4\"},\"returnParameters\":{\"id\":442,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":441,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":443,\"src\":\"1037:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":440,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1037:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1036:14:4\"},\"scope\":593,\"src\":\"979:72:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":450,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"dnsrr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":446,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":445,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":450,\"src\":\"1071:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":444,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1071:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1070:14:4\"},\"returnParameters\":{\"id\":449,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":448,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":450,\"src\":\"1108:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":447,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1108:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1107:14:4\"},\"scope\":593,\"src\":\"1056:66:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":457,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"name\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":453,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":452,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":457,\"src\":\"1141:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":451,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1141:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1140:14:4\"},\"returnParameters\":{\"id\":456,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":455,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":457,\"src\":\"1178:13:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":454,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1178:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1177:15:4\"},\"scope\":593,\"src\":\"1127:66:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":466,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"pubkey\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":460,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":459,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":466,\"src\":\"1214:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":458,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1214:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1213:14:4\"},\"returnParameters\":{\"id\":465,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":462,\"name\":\"x\",\"nodeType\":\"VariableDeclaration\",\"scope\":466,\"src\":\"1251:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":461,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1251:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":464,\"name\":\"y\",\"nodeType\":\"VariableDeclaration\",\"scope\":466,\"src\":\"1262:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":463,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1262:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1250:22:4\"},\"scope\":593,\"src\":\"1198:75:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":475,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"text\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":471,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":468,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":475,\"src\":\"1292:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":467,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1292:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":470,\"name\":\"key\",\"nodeType\":\"VariableDeclaration\",\"scope\":475,\"src\":\"1306:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":469,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1306:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1291:35:4\"},\"returnParameters\":{\"id\":474,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":473,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":475,\"src\":\"1350:13:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_memory_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":472,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1350:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1349:15:4\"},\"scope\":593,\"src\":\"1278:87:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":484,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"interfaceImplementer\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":480,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":477,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":484,\"src\":\"1400:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":476,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1400:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":479,\"name\":\"interfaceID\",\"nodeType\":\"VariableDeclaration\",\"scope\":484,\"src\":\"1414:18:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":478,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1414:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1399:34:4\"},\"returnParameters\":{\"id\":483,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":482,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":484,\"src\":\"1457:7:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":481,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1457:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1456:9:4\"},\"scope\":593,\"src\":\"1370:96:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":493,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setABI\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":491,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":486,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":493,\"src\":\"1487:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":485,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1487:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":488,\"name\":\"contentType\",\"nodeType\":\"VariableDeclaration\",\"scope\":493,\"src\":\"1501:19:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":487,\"name\":\"uint256\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1501:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":490,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":493,\"src\":\"1522:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":489,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1522:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1486:56:4\"},\"returnParameters\":{\"id\":492,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1551:0:4\"},\"scope\":593,\"src\":\"1471:81:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":500,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setAddr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":498,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":495,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":500,\"src\":\"1574:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":494,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1574:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":497,\"name\":\"addr\",\"nodeType\":\"VariableDeclaration\",\"scope\":500,\"src\":\"1588:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":496,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1588:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1573:28:4\"},\"returnParameters\":{\"id\":499,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1610:0:4\"},\"scope\":593,\"src\":\"1557:54:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":509,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setAddr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":507,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":502,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":509,\"src\":\"1633:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":501,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1633:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":504,\"name\":\"coinType\",\"nodeType\":\"VariableDeclaration\",\"scope\":509,\"src\":\"1647:13:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"},\"typeName\":{\"id\":503,\"name\":\"uint\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1647:4:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_uint256\",\"typeString\":\"uint256\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":506,\"name\":\"a\",\"nodeType\":\"VariableDeclaration\",\"scope\":509,\"src\":\"1662:16:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":505,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1662:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1632:47:4\"},\"returnParameters\":{\"id\":508,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1688:0:4\"},\"scope\":593,\"src\":\"1616:73:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":516,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setContenthash\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":514,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":511,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":516,\"src\":\"1718:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":510,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1718:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":513,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":516,\"src\":\"1732:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":512,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1732:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1717:35:4\"},\"returnParameters\":{\"id\":515,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1761:0:4\"},\"scope\":593,\"src\":\"1694:68:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":523,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setDnsrr\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":521,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":518,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":523,\"src\":\"1785:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":517,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1785:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":520,\"name\":\"data\",\"nodeType\":\"VariableDeclaration\",\"scope\":523,\"src\":\"1799:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":519,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1799:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1784:35:4\"},\"returnParameters\":{\"id\":522,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1828:0:4\"},\"scope\":593,\"src\":\"1767:62:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":530,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setName\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":528,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":525,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":530,\"src\":\"1851:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":524,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1851:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":527,\"name\":\"_name\",\"nodeType\":\"VariableDeclaration\",\"scope\":530,\"src\":\"1865:21:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":526,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1865:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1850:37:4\"},\"returnParameters\":{\"id\":529,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1896:0:4\"},\"scope\":593,\"src\":\"1834:63:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":539,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setPubkey\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":537,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":532,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":539,\"src\":\"1921:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":531,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1921:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":534,\"name\":\"x\",\"nodeType\":\"VariableDeclaration\",\"scope\":539,\"src\":\"1935:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":533,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1935:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":536,\"name\":\"y\",\"nodeType\":\"VariableDeclaration\",\"scope\":539,\"src\":\"1946:9:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":535,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1946:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1920:36:4\"},\"returnParameters\":{\"id\":538,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"1965:0:4\"},\"scope\":593,\"src\":\"1902:64:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":548,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setText\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":546,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":541,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"1988:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":540,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"1988:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":543,\"name\":\"key\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"2002:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":542,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2002:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":545,\"name\":\"value\",\"nodeType\":\"VariableDeclaration\",\"scope\":548,\"src\":\"2023:21:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_calldata_ptr\",\"typeString\":\"string\"},\"typeName\":{\"id\":544,\"name\":\"string\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2023:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_string_storage_ptr\",\"typeString\":\"string\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"1987:58:4\"},\"returnParameters\":{\"id\":547,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2054:0:4\"},\"scope\":593,\"src\":\"1971:84:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":557,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setInterface\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":555,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":550,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":557,\"src\":\"2082:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":549,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2082:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":552,\"name\":\"interfaceID\",\"nodeType\":\"VariableDeclaration\",\"scope\":557,\"src\":\"2096:18:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":551,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2096:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":554,\"name\":\"implementer\",\"nodeType\":\"VariableDeclaration\",\"scope\":557,\"src\":\"2116:19:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"},\"typeName\":{\"id\":553,\"name\":\"address\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2116:7:4\",\"stateMutability\":\"nonpayable\",\"typeDescriptions\":{\"typeIdentifier\":\"t_address\",\"typeString\":\"address\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2081:55:4\"},\"returnParameters\":{\"id\":556,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2145:0:4\"},\"scope\":593,\"src\":\"2060:86:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":564,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"supportsInterface\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":560,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":559,\"name\":\"interfaceID\",\"nodeType\":\"VariableDeclaration\",\"scope\":564,\"src\":\"2178:18:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"},\"typeName\":{\"id\":558,\"name\":\"bytes4\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2178:6:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes4\",\"typeString\":\"bytes4\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2177:20:4\"},\"returnParameters\":{\"id\":563,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":562,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":564,\"src\":\"2221:4:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"},\"typeName\":{\"id\":561,\"name\":\"bool\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2221:4:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bool\",\"typeString\":\"bool\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2220:6:4\"},\"scope\":593,\"src\":\"2151:76:4\",\"stateMutability\":\"pure\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":571,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"content\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":567,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":566,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":571,\"src\":\"2281:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":565,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2281:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2280:14:4\"},\"returnParameters\":{\"id\":570,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":569,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":571,\"src\":\"2318:7:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":568,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2318:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2317:9:4\"},\"scope\":593,\"src\":\"2264:63:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":578,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"multihash\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":574,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":573,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":578,\"src\":\"2351:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":572,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2351:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2350:14:4\"},\"returnParameters\":{\"id\":577,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":576,\"name\":\"\",\"nodeType\":\"VariableDeclaration\",\"scope\":578,\"src\":\"2388:12:4\",\"stateVariable\":false,\"storageLocation\":\"memory\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_memory_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":575,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2388:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2387:14:4\"},\"scope\":593,\"src\":\"2332:70:4\",\"stateMutability\":\"view\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":585,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setContent\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":583,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":580,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":585,\"src\":\"2427:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":579,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2427:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":582,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":585,\"src\":\"2441:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":581,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2441:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2426:28:4\"},\"returnParameters\":{\"id\":584,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2463:0:4\"},\"scope\":593,\"src\":\"2407:57:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"},{\"body\":null,\"documentation\":null,\"id\":592,\"implemented\":false,\"kind\":\"function\",\"modifiers\":[],\"name\":\"setMultihash\",\"nodeType\":\"FunctionDefinition\",\"parameters\":{\"id\":590,\"nodeType\":\"ParameterList\",\"parameters\":[{\"constant\":false,\"id\":587,\"name\":\"node\",\"nodeType\":\"VariableDeclaration\",\"scope\":592,\"src\":\"2491:12:4\",\"stateVariable\":false,\"storageLocation\":\"default\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"},\"typeName\":{\"id\":586,\"name\":\"bytes32\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2491:7:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes32\",\"typeString\":\"bytes32\"}},\"value\":null,\"visibility\":\"internal\"},{\"constant\":false,\"id\":589,\"name\":\"hash\",\"nodeType\":\"VariableDeclaration\",\"scope\":592,\"src\":\"2505:19:4\",\"stateVariable\":false,\"storageLocation\":\"calldata\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_calldata_ptr\",\"typeString\":\"bytes\"},\"typeName\":{\"id\":588,\"name\":\"bytes\",\"nodeType\":\"ElementaryTypeName\",\"src\":\"2505:5:4\",\"typeDescriptions\":{\"typeIdentifier\":\"t_bytes_storage_ptr\",\"typeString\":\"bytes\"}},\"value\":null,\"visibility\":\"internal\"}],\"src\":\"2490:35:4\"},\"returnParameters\":{\"id\":591,\"nodeType\":\"ParameterList\",\"parameters\":[],\"src\":\"2534:0:4\"},\"scope\":593,\"src\":\"2469:66:4\",\"stateMutability\":\"nonpayable\",\"superFunction\":null,\"visibility\":\"external\"}],\"scope\":594,\"src\":\"130:2407:4\"}],\"src\":\"0:2538:4\"},\"compiler\":{\"name\":\"solc\",\"version\":\"0.5.8+commit.23d335f2.Emscripten.clang\"},\"networks\":{},\"schemaVersion\":\"3.0.16\",\"updatedAt\":\"2019-12-20T15:49:26.090Z\",\"devdoc\":{\"methods\":{}},\"userdoc\":{\"methods\":{},\"notice\":\"A generic resolver interface which includes all the functions including the ones deprecated\"}}");

/***/ }),

/***/ 298121:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

const DNSResolver = __webpack_require__(196999)
const DefaultReverseResolver = __webpack_require__(169819)
const OwnedResolver = __webpack_require__(725781)
const PublicResolver = __webpack_require__(322315)
const Resolver = __webpack_require__(404301)

module.exports = {
  DNSResolver,
  DefaultReverseResolver,
  OwnedResolver,
  PublicResolver,
  Resolver
}


/***/ }),

/***/ 195752:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var path = __webpack_require__(385622);
var globby = __webpack_require__(30995);
var isPathCwd = __webpack_require__(678297);
var isPathInCwd = __webpack_require__(542297);
var objectAssign = __webpack_require__(727418);
var Promise = __webpack_require__(132818);
var pify = __webpack_require__(493075);
var rimraf = __webpack_require__(950984);

var rimrafP = pify(rimraf, Promise);

function safeCheck(file) {
	if (isPathCwd(file)) {
		throw new Error('Cannot delete the current working directory. Can be overriden with the `force` option.');
	}

	if (!isPathInCwd(file)) {
		throw new Error('Cannot delete files/folders outside the current working directory. Can be overriden with the `force` option.');
	}
}

module.exports = function (patterns, opts) {
	opts = objectAssign({}, opts);

	var force = opts.force;
	delete opts.force;

	var dryRun = opts.dryRun;
	delete opts.dryRun;

	return globby(patterns, opts).then(function (files) {
		return Promise.all(files.map(function (file) {
			if (!force) {
				safeCheck(file);
			}

			file = path.resolve(opts.cwd || '', file);

			if (dryRun) {
				return Promise.resolve(file);
			}

			return rimrafP(file).then(function () {
				return file;
			});
		}));
	});
};

module.exports.sync = function (patterns, opts) {
	opts = objectAssign({}, opts);

	var force = opts.force;
	delete opts.force;

	var dryRun = opts.dryRun;
	delete opts.dryRun;

	return globby.sync(patterns, opts).map(function (file) {
		if (!force) {
			safeCheck(file);
		}

		file = path.resolve(opts.cwd || '', file);

		if (!dryRun) {
			rimraf.sync(file);
		}

		return file;
	});
};


/***/ }),

/***/ 30995:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var Promise = __webpack_require__(132818);
var arrayUnion = __webpack_require__(893755);
var objectAssign = __webpack_require__(727418);
var glob = __webpack_require__(312884);
var arrify = __webpack_require__(561021);
var pify = __webpack_require__(493075);

var globP = pify(glob, Promise).bind(glob);

function isNegative(pattern) {
	return pattern[0] === '!';
}

function generateGlobTasks(patterns, opts) {
	var globTasks = [];

	patterns = arrify(patterns);
	opts = objectAssign({
		cache: Object.create(null),
		statCache: Object.create(null),
		realpathCache: Object.create(null),
		symlinks: Object.create(null),
		ignore: []
	}, opts);

	patterns.forEach(function (pattern, i) {
		if (isNegative(pattern)) {
			return;
		}

		var ignore = patterns.slice(i).filter(isNegative).map(function (pattern) {
			return pattern.slice(1);
		});

		globTasks.push({
			pattern: pattern,
			opts: objectAssign({}, opts, {
				ignore: opts.ignore.concat(ignore)
			})
		});
	});

	return globTasks;
}

module.exports = function (patterns, opts) {
	var globTasks = generateGlobTasks(patterns, opts);

	return Promise.all(globTasks.map(function (task) {
		return globP(task.pattern, task.opts);
	})).then(function (paths) {
		return arrayUnion.apply(null, paths);
	});
};

module.exports.sync = function (patterns, opts) {
	var globTasks = generateGlobTasks(patterns, opts);

	return globTasks.reduce(function (matches, task) {
		return arrayUnion(matches, glob.sync(task.pattern, task.opts));
	}, []);
};

module.exports.generateGlobTasks = generateGlobTasks;


/***/ }),

/***/ 493075:
/***/ ((module) => {

"use strict";


var processFn = function (fn, P, opts) {
	return function () {
		var that = this;
		var args = new Array(arguments.length);

		for (var i = 0; i < arguments.length; i++) {
			args[i] = arguments[i];
		}

		return new P(function (resolve, reject) {
			args.push(function (err, result) {
				if (err) {
					reject(err);
				} else if (opts.multiArgs) {
					var results = new Array(arguments.length - 1);

					for (var i = 1; i < arguments.length; i++) {
						results[i - 1] = arguments[i];
					}

					resolve(results);
				} else {
					resolve(result);
				}
			});

			fn.apply(that, args);
		});
	};
};

var pify = module.exports = function (obj, P, opts) {
	if (typeof P !== 'function') {
		opts = P;
		P = Promise;
	}

	opts = opts || {};
	opts.exclude = opts.exclude || [/.+Sync$/];

	var filter = function (key) {
		var match = function (pattern) {
			return typeof pattern === 'string' ? key === pattern : pattern.test(key);
		};

		return opts.include ? opts.include.some(match) : !opts.exclude.some(match);
	};

	var ret = typeof obj === 'function' ? function () {
		if (opts.excludeMain) {
			return obj.apply(this, arguments);
		}

		return processFn(obj, P, opts).apply(this, arguments);
	} : {};

	return Object.keys(obj).reduce(function (ret, key) {
		var x = obj[key];

		ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;

		return ret;
	}, ret);
};

pify.all = pify;


/***/ }),

/***/ 399983:
/***/ ((module) => {

"use strict";


// detect either spaces or tabs but not both to properly handle tabs
// for indentation and spaces for alignment
const INDENT_RE = /^(?:( )+|\t+)/;

function getMostUsed(indents) {
	let result = 0;
	let maxUsed = 0;
	let maxWeight = 0;

	for (const entry of indents) {
		// TODO: use destructuring when targeting Node.js 6
		const key = entry[0];
		const val = entry[1];

		const u = val[0];
		const w = val[1];

		if (u > maxUsed || (u === maxUsed && w > maxWeight)) {
			maxUsed = u;
			maxWeight = w;
			result = Number(key);
		}
	}

	return result;
}

module.exports = str => {
	if (typeof str !== 'string') {
		throw new TypeError('Expected a string');
	}

	// used to see if tabs or spaces are the most used
	let tabs = 0;
	let spaces = 0;

	// remember the size of previous line's indentation
	let prev = 0;

	// remember how many indents/unindents as occurred for a given size
	// and how much lines follow a given indentation
	//
	// indents = {
	//    3: [1, 0],
	//    4: [1, 5],
	//    5: [1, 0],
	//   12: [1, 0],
	// }
	const indents = new Map();

	// pointer to the array of last used indent
	let current;

	// whether the last action was an indent (opposed to an unindent)
	let isIndent;

	for (const line of str.split(/\n/g)) {
		if (!line) {
			// ignore empty lines
			continue;
		}

		let indent;
		const matches = line.match(INDENT_RE);

		if (matches) {
			indent = matches[0].length;

			if (matches[1]) {
				spaces++;
			} else {
				tabs++;
			}
		} else {
			indent = 0;
		}

		const diff = indent - prev;
		prev = indent;

		if (diff) {
			// an indent or unindent has been detected

			isIndent = diff > 0;

			current = indents.get(isIndent ? diff : -diff);

			if (current) {
				current[0]++;
			} else {
				current = [1, 0];
				indents.set(diff, current);
			}
		} else if (current) {
			// if the last action was an indent, increment the weight
			current[1] += Number(isIndent);
		}
	}

	const amount = getMostUsed(indents);

	let type;
	let indent;
	if (!amount) {
		type = null;
		indent = '';
	} else if (spaces >= tabs) {
		type = 'space';
		indent = ' '.repeat(amount);
	} else {
		type = 'tab';
		indent = '\t'.repeat(amount);
	}

	return {
		amount,
		type,
		indent
	};
};


/***/ }),

/***/ 409790:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*!
 * detect-installed <https://github.com/tunnckoCore/detect-installed>
 *
 * Copyright (c) Charlike Mike Reagent <@tunnckoCore> (http://i.am.charlike.online)
 * Released under the MIT license.
 */



const get = __webpack_require__(760466)

/**
 * > Detect if some package `name`is
 * installed globally or locally. By default checks
 * if it exists in globally installed modules, using [global-modules][].
 * Pass `opts.local` to check if it exists in locally installed modules
 * or in `opts.cwd` dir.
 *
 * **Example**
 *
 * ```js
 * const detectInstalled = require('detect-installed')
 *
 * detectInstalled('npm').then((exists) => {
 *   console.log(exists) // => true
 * })
 *
 * detectInstalled('foo-bar-barwerwlekrjw').then((exists) => {
 *   console.log(exists) // => false
 * })
 *
 * detectInstalled('npm', {
 *   local: true
 * }).then((exists) => {
 *   console.log(exists) // => false
 * })
 *
 * detectInstalled('global-modules', {
 *   local: true
 * }).then((exists) => {
 *   console.log(exists) // => true
 * })
 *
 * // If you are using it for some sub-directory
 * // pass `opts.cwd` to be where the `node_modules`
 * // folder is.
 * process.chidr('foo-bar-baz')
 * detectInstalled('global-modules', {
 *   local: true,
 *   cwd: '../'
 * }).then((exists) => console.log(exists)) // => true
 * ```
 *
 * @param  {String} `name` package name
 * @param  {Object} `opts` pass `opts.local` to check locally
 * @return {Promise} always resolved promise, never rejected
 * @api public
 */

module.exports = function detectInstalled (name, opts) {
  return new Promise((resolve, reject) => {
    get(name, opts).then(() => resolve(true), () => resolve(false))
  })
}

/**
 * > Synchronously check if package `name` exists
 * as locally or globally installed modules.
 *
 * **Example**
 *
 * ```js
 * const detectInstalled = require('detect-installed')
 *
 * const exists = detectInstalled.sync('npm') // => true
 * const result = detectInstalled.sync('global-modules', { local: true }) // => true
 * ```
 *
 * @name   .sync
 * @param  {String} `name` package name
 * @param  {Object} `opts` pass `opts.local` to check locally
 * @return {Boolean} false, if error or not exists globally/locally
 * @api public
 */

module.exports.sync = function detectInstalledSync (name, opts) {
  let result = null
  try {
    result = get.sync(name, opts)
  } catch (e) {
    return false
  }

  return typeof result === 'string'
}


/***/ }),

/***/ 760466:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*!
 * get-installed-path <https://github.com/tunnckoCore/get-installed-path>
 *
 * Copyright (c) Charlike Mike Reagent <@tunnckoCore> (http://i.am.charlike.online)
 * Released under the MIT license.
 */



const fs = __webpack_require__(935747)
const path = __webpack_require__(385622)
const modules = __webpack_require__(352101)

/**
 * > Get installed path of globally or locally `name` package.
 * By default it checks if `name` exists as directory in [global-modules][]
 * directory of the system. Pass `opts.local` to get path of `name`
 * package from local directory or from `opts.cwd`. Returns rejected
 * promise if module not found in global/local `node_modules` folder or
 * if it exist but is not a directory.
 *
 * **Example**
 *
 * ```js
 * const getInstalledPath = require('get-installed-path')
 *
 * getInstalledPath('npm').then((path) => {
 *   console.log(path)
 *   // => '/home/charlike/.nvm/path/to/lib/node_modules/npm'
 * })
 *
 * getInstalledPath('foo-bar-barwerwlekrjw').catch((err) => {
 *   console.log(err.message)
 *   // => 'module not found "foo-bar-barwerwlekrjw" in path ...'
 * })
 *
 * getInstalledPath('npm', {
 *   local: true
 * }).catch((err) => {
 *   console.log(err.message)
 *   // => 'module not found "foo-bar-barwerwlekrjw" in path ...'
 * })
 *
 * getInstalledPath('global-modules', {
 *   local: true
 * }).then((path) => {
 *   console.log(path)
 *   // => '~/code/get-installed-path/node_modules/global-modules'
 * })
 *
 * // If you are using it for some sub-directory
 * // pass `opts.cwd` to be where the `node_modules`
 * // folder is.
 * process.chidr('foo-bar-baz')
 * getInstalledPath('global-modules', {
 *   local: true,
 *   cwd: '../'
 * }).then((path) => {
 *   console.log(path)
 *   // => '~/code/get-installed-path/node_modules/global-modules'
 * })
 *
 * // When searching for the path of a package that is required
 * // by several other packages, its path may not be in the
 * // closest node_modules. In this case, to search recursively,
 * // you can use the following:
 * getInstalledPath('npm', {
 *  paths: process.mainModule.paths
 * }).then((path) => {
 *  // ...
 * })
 * // `process.mainModule` refers to the location of the current
 * // entry script.
 * ```
 *
 * @param  {String} `name` package name
 * @param  {Object} `opts` pass `opts.local` to check locally
 * @return {Promise} rejected promise if `name` not a string or is empty string
 * @api public
 */

module.exports = function getInstalledPath (name, opts) {
  return new Promise((resolve, reject) => {
    if (!isValidString(name)) {
      const message = 'get-installed-path: expect `name` to be string'
      return reject(new TypeError(message))
    }

    const targetPaths = defaults(name, opts)
    const statPath = (filepath) =>
      fs.stat(filepath, (e, stats) => {
        if (e && targetPaths.length > 0) {
          statPath(targetPaths.shift())
          return
        } else if (e) {
          const label = 'get-installed-path:'
          const msg = `${label} module not found "${name}" in path ${filepath}`
          return reject(new Error(msg))
        }

        if (stats.isDirectory()) {
          return resolve(filepath)
        }

        const msg = `Possibly "${name}" is not a directory: ${filepath}`
        let err = new Error('get-installed-path: some error occured! ' + msg)
        reject(err)
      })
    statPath(targetPaths.shift())
  })
}

/**
 * > Get installed path of a `name` package synchronous.
 *
 * **Example**
 *
 * ```js
 * const getInstalledPath = require('get-installed-path')
 *
 * const npmPath = getInstalledPath.sync('npm')
 * console.log(npmPath)
 * // => '/home/charlike/.nvm/path/to/lib/node_modules/npm'
 *
 * const gmPath = getInstalledPath.sync('global-modules', { local: true })
 * console.log(gmPath)
 * // => '~/code/get-installed-path/node_modules/global-modules'
 * ```
 *
 * @name   .sync
 * @param  {String} `name` package name
 * @param  {Object} `opts` pass `opts.local` to check locally
 * @return {Boolean} or throw `TypeError` if `name` not a string or is empty string
 * @api public
 */

module.exports.sync = function getInstalledPathSync (name, opts) {
  if (!isValidString(name)) {
    throw new TypeError('get-installed-path: expect `name` to be string')
  }

  const filePaths = defaults(name, opts)
  const firstPath = filePaths[0]
  const modulePath = filePaths.find((filePath) => {
    let stat = null

    try {
      stat = fs.statSync(filePath)
    } catch (e) {
      return false
    }

    if (stat.isDirectory()) {
      return true
    }

    const msg = `Possibly "${name}" is not a directory: ${filePath}`
    throw new Error('get-installed-path: some error occured! ' + msg)
  })

  if (!modulePath) {
    const label = 'get-installed-path:'
    const msg = `${label} module not found "${name}" in path ${firstPath}`
    throw new Error(msg)
  }

  return modulePath
}

function isValidString (val) {
  return typeof val === 'string' ? val.length > 0 : false
}

function defaults (name, opts) {
  opts = opts && typeof opts === 'object' ? opts : {}
  opts.cwd = typeof opts.cwd === 'string' ? opts.cwd : process.cwd()
  if (opts.paths) {
    return opts.paths.map((modulePath) => path.join(modulePath, name))
  } else if (opts.local) {
    return [path.join(opts.cwd, 'node_modules', name)]
  }
  return [path.join(modules, name)]
}


/***/ }),

/***/ 646138:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
  Module dependencies
*/
var ElementType = __webpack_require__(864431);
var entities = __webpack_require__(951091);

var unencodedElements = {
  __proto__: null,
  style: true,
  script: true,
  xmp: true,
  iframe: true,
  noembed: true,
  noframes: true,
  plaintext: true,
  noscript: true
};

/*
  Format attributes
*/
function formatAttrs(attributes, opts) {
  if (!attributes) return;

  var output = '',
      value;

  // Loop through the attributes
  for (var key in attributes) {
    value = attributes[key];
    if (output) {
      output += ' ';
    }

    output += key;
    if ((value !== null && value !== '') || opts.xmlMode) {
        output += '="' + (opts.decodeEntities ? entities.encodeXML(value) : value) + '"';
    }
  }

  return output;
}

/*
  Self-enclosing tags (stolen from node-htmlparser)
*/
var singleTag = {
  __proto__: null,
  area: true,
  base: true,
  basefont: true,
  br: true,
  col: true,
  command: true,
  embed: true,
  frame: true,
  hr: true,
  img: true,
  input: true,
  isindex: true,
  keygen: true,
  link: true,
  meta: true,
  param: true,
  source: true,
  track: true,
  wbr: true,
};


var render = module.exports = function(dom, opts) {
  if (!Array.isArray(dom) && !dom.cheerio) dom = [dom];
  opts = opts || {};

  var output = '';

  for(var i = 0; i < dom.length; i++){
    var elem = dom[i];

    if (elem.type === 'root')
      output += render(elem.children, opts);
    else if (ElementType.isTag(elem))
      output += renderTag(elem, opts);
    else if (elem.type === ElementType.Directive)
      output += renderDirective(elem);
    else if (elem.type === ElementType.Comment)
      output += renderComment(elem);
    else if (elem.type === ElementType.CDATA)
      output += renderCdata(elem);
    else
      output += renderText(elem, opts);
  }

  return output;
};

function renderTag(elem, opts) {
  // Handle SVG
  if (elem.name === "svg") opts = {decodeEntities: opts.decodeEntities, xmlMode: true};

  var tag = '<' + elem.name,
      attribs = formatAttrs(elem.attribs, opts);

  if (attribs) {
    tag += ' ' + attribs;
  }

  if (
    opts.xmlMode
    && (!elem.children || elem.children.length === 0)
  ) {
    tag += '/>';
  } else {
    tag += '>';
    if (elem.children) {
      tag += render(elem.children, opts);
    }

    if (!singleTag[elem.name] || opts.xmlMode) {
      tag += '</' + elem.name + '>';
    }
  }

  return tag;
}

function renderDirective(elem) {
  return '<' + elem.data + '>';
}

function renderText(elem, opts) {
  var data = elem.data || '';

  // if entities weren't decoded, no need to encode them back
  if (opts.decodeEntities && !(elem.parent && elem.parent.name in unencodedElements)) {
    data = entities.encodeXML(data);
  }

  return data;
}

function renderCdata(elem) {
  return '<![CDATA[' + elem.children[0].data + ']]>';
}

function renderComment(elem) {
  return '<!--' + elem.data + '-->';
}


/***/ }),

/***/ 864431:
/***/ ((module) => {

//Types of elements found in the DOM
module.exports = {
	Text: "text", //Text
	Directive: "directive", //<? ... ?>
	Comment: "comment", //<!-- ... -->
	Script: "script", //<script> tags
	Style: "style", //<style> tags
	Tag: "tag", //Any tag
	CDATA: "cdata", //<![CDATA[ ... ]]>
	Doctype: "doctype",

	isTag: function(elem){
		return elem.type === "tag" || elem.type === "script" || elem.type === "style";
	}
};


/***/ }),

/***/ 408753:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var ElementType = __webpack_require__(864431);

var re_whitespace = /\s+/g;
var NodePrototype = __webpack_require__(297790);
var ElementPrototype = __webpack_require__(74407);

function DomHandler(callback, options, elementCB){
	if(typeof callback === "object"){
		elementCB = options;
		options = callback;
		callback = null;
	} else if(typeof options === "function"){
		elementCB = options;
		options = defaultOpts;
	}
	this._callback = callback;
	this._options = options || defaultOpts;
	this._elementCB = elementCB;
	this.dom = [];
	this._done = false;
	this._tagStack = [];
	this._parser = this._parser || null;
}

//default options
var defaultOpts = {
	normalizeWhitespace: false, //Replace all whitespace with single spaces
	withStartIndices: false, //Add startIndex properties to nodes
	withEndIndices: false, //Add endIndex properties to nodes
};

DomHandler.prototype.onparserinit = function(parser){
	this._parser = parser;
};

//Resets the handler back to starting state
DomHandler.prototype.onreset = function(){
	DomHandler.call(this, this._callback, this._options, this._elementCB);
};

//Signals the handler that parsing is done
DomHandler.prototype.onend = function(){
	if(this._done) return;
	this._done = true;
	this._parser = null;
	this._handleCallback(null);
};

DomHandler.prototype._handleCallback =
DomHandler.prototype.onerror = function(error){
	if(typeof this._callback === "function"){
		this._callback(error, this.dom);
	} else {
		if(error) throw error;
	}
};

DomHandler.prototype.onclosetag = function(){
	//if(this._tagStack.pop().name !== name) this._handleCallback(Error("Tagname didn't match!"));
	
	var elem = this._tagStack.pop();

	if(this._options.withEndIndices && elem){
		elem.endIndex = this._parser.endIndex;
	}

	if(this._elementCB) this._elementCB(elem);
};

DomHandler.prototype._createDomElement = function(properties){
	if (!this._options.withDomLvl1) return properties;

	var element;
	if (properties.type === "tag") {
		element = Object.create(ElementPrototype);
	} else {
		element = Object.create(NodePrototype);
	}

	for (var key in properties) {
		if (properties.hasOwnProperty(key)) {
			element[key] = properties[key];
		}
	}

	return element;
};

DomHandler.prototype._addDomElement = function(element){
	var parent = this._tagStack[this._tagStack.length - 1];
	var siblings = parent ? parent.children : this.dom;
	var previousSibling = siblings[siblings.length - 1];

	element.next = null;

	if(this._options.withStartIndices){
		element.startIndex = this._parser.startIndex;
	}
	if(this._options.withEndIndices){
		element.endIndex = this._parser.endIndex;
	}

	if(previousSibling){
		element.prev = previousSibling;
		previousSibling.next = element;
	} else {
		element.prev = null;
	}

	siblings.push(element);
	element.parent = parent || null;
};

DomHandler.prototype.onopentag = function(name, attribs){
	var properties = {
		type: name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag,
		name: name,
		attribs: attribs,
		children: []
	};

	var element = this._createDomElement(properties);

	this._addDomElement(element);

	this._tagStack.push(element);
};

DomHandler.prototype.ontext = function(data){
	//the ignoreWhitespace is officially dropped, but for now,
	//it's an alias for normalizeWhitespace
	var normalize = this._options.normalizeWhitespace || this._options.ignoreWhitespace;

	var lastTag;

	if(!this._tagStack.length && this.dom.length && (lastTag = this.dom[this.dom.length-1]).type === ElementType.Text){
		if(normalize){
			lastTag.data = (lastTag.data + data).replace(re_whitespace, " ");
		} else {
			lastTag.data += data;
		}
	} else {
		if(
			this._tagStack.length &&
			(lastTag = this._tagStack[this._tagStack.length - 1]) &&
			(lastTag = lastTag.children[lastTag.children.length - 1]) &&
			lastTag.type === ElementType.Text
		){
			if(normalize){
				lastTag.data = (lastTag.data + data).replace(re_whitespace, " ");
			} else {
				lastTag.data += data;
			}
		} else {
			if(normalize){
				data = data.replace(re_whitespace, " ");
			}

			var element = this._createDomElement({
				data: data,
				type: ElementType.Text
			});

			this._addDomElement(element);
		}
	}
};

DomHandler.prototype.oncomment = function(data){
	var lastTag = this._tagStack[this._tagStack.length - 1];

	if(lastTag && lastTag.type === ElementType.Comment){
		lastTag.data += data;
		return;
	}

	var properties = {
		data: data,
		type: ElementType.Comment
	};

	var element = this._createDomElement(properties);

	this._addDomElement(element);
	this._tagStack.push(element);
};

DomHandler.prototype.oncdatastart = function(){
	var properties = {
		children: [{
			data: "",
			type: ElementType.Text
		}],
		type: ElementType.CDATA
	};

	var element = this._createDomElement(properties);

	this._addDomElement(element);
	this._tagStack.push(element);
};

DomHandler.prototype.oncommentend = DomHandler.prototype.oncdataend = function(){
	this._tagStack.pop();
};

DomHandler.prototype.onprocessinginstruction = function(name, data){
	var element = this._createDomElement({
		name: name,
		data: data,
		type: ElementType.Directive
	});

	this._addDomElement(element);
};

module.exports = DomHandler;


/***/ }),

/***/ 74407:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// DOM-Level-1-compliant structure
var NodePrototype = __webpack_require__(297790);
var ElementPrototype = module.exports = Object.create(NodePrototype);

var domLvl1 = {
	tagName: "name"
};

Object.keys(domLvl1).forEach(function(key) {
	var shorthand = domLvl1[key];
	Object.defineProperty(ElementPrototype, key, {
		get: function() {
			return this[shorthand] || null;
		},
		set: function(val) {
			this[shorthand] = val;
			return val;
		}
	});
});


/***/ }),

/***/ 297790:
/***/ ((module) => {

// This object will be used as the prototype for Nodes when creating a
// DOM-Level-1-compliant structure.
var NodePrototype = module.exports = {
	get firstChild() {
		var children = this.children;
		return children && children[0] || null;
	},
	get lastChild() {
		var children = this.children;
		return children && children[children.length - 1] || null;
	},
	get nodeType() {
		return nodeTypes[this.type] || nodeTypes.element;
	}
};

var domLvl1 = {
	tagName: "name",
	childNodes: "children",
	parentNode: "parent",
	previousSibling: "prev",
	nextSibling: "next",
	nodeValue: "data"
};

var nodeTypes = {
	element: 1,
	text: 3,
	cdata: 4,
	comment: 8
};

Object.keys(domLvl1).forEach(function(key) {
	var shorthand = domLvl1[key];
	Object.defineProperty(NodePrototype, key, {
		get: function() {
			return this[shorthand] || null;
		},
		set: function(val) {
			this[shorthand] = val;
			return val;
		}
	});
});


/***/ }),

/***/ 712417:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var DomUtils = module.exports;

[
	__webpack_require__(843346),
	__webpack_require__(585010),
	__webpack_require__(726765),
	__webpack_require__(798043),
	__webpack_require__(523905),
	__webpack_require__(774975)
].forEach(function(ext){
	Object.keys(ext).forEach(function(key){
		DomUtils[key] = ext[key].bind(DomUtils);
	});
});


/***/ }),

/***/ 774975:
/***/ ((__unused_webpack_module, exports) => {

// removeSubsets
// Given an array of nodes, remove any member that is contained by another.
exports.removeSubsets = function(nodes) {
	var idx = nodes.length, node, ancestor, replace;

	// Check if each node (or one of its ancestors) is already contained in the
	// array.
	while (--idx > -1) {
		node = ancestor = nodes[idx];

		// Temporarily remove the node under consideration
		nodes[idx] = null;
		replace = true;

		while (ancestor) {
			if (nodes.indexOf(ancestor) > -1) {
				replace = false;
				nodes.splice(idx, 1);
				break;
			}
			ancestor = ancestor.parent;
		}

		// If the node has been found to be unique, re-insert it.
		if (replace) {
			nodes[idx] = node;
		}
	}

	return nodes;
};

// Source: http://dom.spec.whatwg.org/#dom-node-comparedocumentposition
var POSITION = {
	DISCONNECTED: 1,
	PRECEDING: 2,
	FOLLOWING: 4,
	CONTAINS: 8,
	CONTAINED_BY: 16
};

// Compare the position of one node against another node in any other document.
// The return value is a bitmask with the following values:
//
// document order:
// > There is an ordering, document order, defined on all the nodes in the
// > document corresponding to the order in which the first character of the
// > XML representation of each node occurs in the XML representation of the
// > document after expansion of general entities. Thus, the document element
// > node will be the first node. Element nodes occur before their children.
// > Thus, document order orders element nodes in order of the occurrence of
// > their start-tag in the XML (after expansion of entities). The attribute
// > nodes of an element occur after the element and before its children. The
// > relative order of attribute nodes is implementation-dependent./
// Source:
// http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order
//
// @argument {Node} nodaA The first node to use in the comparison
// @argument {Node} nodeB The second node to use in the comparison
//
// @return {Number} A bitmask describing the input nodes' relative position.
//         See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for
//         a description of these values.
var comparePos = exports.compareDocumentPosition = function(nodeA, nodeB) {
	var aParents = [];
	var bParents = [];
	var current, sharedParent, siblings, aSibling, bSibling, idx;

	if (nodeA === nodeB) {
		return 0;
	}

	current = nodeA;
	while (current) {
		aParents.unshift(current);
		current = current.parent;
	}
	current = nodeB;
	while (current) {
		bParents.unshift(current);
		current = current.parent;
	}

	idx = 0;
	while (aParents[idx] === bParents[idx]) {
		idx++;
	}

	if (idx === 0) {
		return POSITION.DISCONNECTED;
	}

	sharedParent = aParents[idx - 1];
	siblings = sharedParent.children;
	aSibling = aParents[idx];
	bSibling = bParents[idx];

	if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {
		if (sharedParent === nodeB) {
			return POSITION.FOLLOWING | POSITION.CONTAINED_BY;
		}
		return POSITION.FOLLOWING;
	} else {
		if (sharedParent === nodeA) {
			return POSITION.PRECEDING | POSITION.CONTAINS;
		}
		return POSITION.PRECEDING;
	}
};

// Sort an array of nodes based on their relative position in the document and
// remove any duplicate nodes. If the array contains nodes that do not belong
// to the same document, sort order is unspecified.
//
// @argument {Array} nodes Array of DOM nodes
//
// @returns {Array} collection of unique nodes, sorted in document order
exports.uniqueSort = function(nodes) {
	var idx = nodes.length, node, position;

	nodes = nodes.slice();

	while (--idx > -1) {
		node = nodes[idx];
		position = nodes.indexOf(node);
		if (position > -1 && position < idx) {
			nodes.splice(idx, 1);
		}
	}
	nodes.sort(function(a, b) {
		var relative = comparePos(a, b);
		if (relative & POSITION.PRECEDING) {
			return -1;
		} else if (relative & POSITION.FOLLOWING) {
			return 1;
		}
		return 0;
	});

	return nodes;
};


/***/ }),

/***/ 523905:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

var ElementType = __webpack_require__(864431);
var isTag = exports.isTag = ElementType.isTag;

exports.testElement = function(options, element){
	for(var key in options){
		if(!options.hasOwnProperty(key));
		else if(key === "tag_name"){
			if(!isTag(element) || !options.tag_name(element.name)){
				return false;
			}
		} else if(key === "tag_type"){
			if(!options.tag_type(element.type)) return false;
		} else if(key === "tag_contains"){
			if(isTag(element) || !options.tag_contains(element.data)){
				return false;
			}
		} else if(!element.attribs || !options[key](element.attribs[key])){
			return false;
		}
	}
	return true;
};

var Checks = {
	tag_name: function(name){
		if(typeof name === "function"){
			return function(elem){ return isTag(elem) && name(elem.name); };
		} else if(name === "*"){
			return isTag;
		} else {
			return function(elem){ return isTag(elem) && elem.name === name; };
		}
	},
	tag_type: function(type){
		if(typeof type === "function"){
			return function(elem){ return type(elem.type); };
		} else {
			return function(elem){ return elem.type === type; };
		}
	},
	tag_contains: function(data){
		if(typeof data === "function"){
			return function(elem){ return !isTag(elem) && data(elem.data); };
		} else {
			return function(elem){ return !isTag(elem) && elem.data === data; };
		}
	}
};

function getAttribCheck(attrib, value){
	if(typeof value === "function"){
		return function(elem){ return elem.attribs && value(elem.attribs[attrib]); };
	} else {
		return function(elem){ return elem.attribs && elem.attribs[attrib] === value; };
	}
}

function combineFuncs(a, b){
	return function(elem){
		return a(elem) || b(elem);
	};
}

exports.getElements = function(options, element, recurse, limit){
	var funcs = Object.keys(options).map(function(key){
		var value = options[key];
		return key in Checks ? Checks[key](value) : getAttribCheck(key, value);
	});

	return funcs.length === 0 ? [] : this.filter(
		funcs.reduce(combineFuncs),
		element, recurse, limit
	);
};

exports.getElementById = function(id, element, recurse){
	if(!Array.isArray(element)) element = [element];
	return this.findOne(getAttribCheck("id", id), element, recurse !== false);
};

exports.getElementsByTagName = function(name, element, recurse, limit){
	return this.filter(Checks.tag_name(name), element, recurse, limit);
};

exports.getElementsByTagType = function(type, element, recurse, limit){
	return this.filter(Checks.tag_type(type), element, recurse, limit);
};


/***/ }),

/***/ 726765:
/***/ ((__unused_webpack_module, exports) => {

exports.removeElement = function(elem){
	if(elem.prev) elem.prev.next = elem.next;
	if(elem.next) elem.next.prev = elem.prev;

	if(elem.parent){
		var childs = elem.parent.children;
		childs.splice(childs.lastIndexOf(elem), 1);
	}
};

exports.replaceElement = function(elem, replacement){
	var prev = replacement.prev = elem.prev;
	if(prev){
		prev.next = replacement;
	}

	var next = replacement.next = elem.next;
	if(next){
		next.prev = replacement;
	}

	var parent = replacement.parent = elem.parent;
	if(parent){
		var childs = parent.children;
		childs[childs.lastIndexOf(elem)] = replacement;
	}
};

exports.appendChild = function(elem, child){
	child.parent = elem;

	if(elem.children.push(child) !== 1){
		var sibling = elem.children[elem.children.length - 2];
		sibling.next = child;
		child.prev = sibling;
		child.next = null;
	}
};

exports.append = function(elem, next){
	var parent = elem.parent,
		currNext = elem.next;

	next.next = currNext;
	next.prev = elem;
	elem.next = next;
	next.parent = parent;

	if(currNext){
		currNext.prev = next;
		if(parent){
			var childs = parent.children;
			childs.splice(childs.lastIndexOf(currNext), 0, next);
		}
	} else if(parent){
		parent.children.push(next);
	}
};

exports.prepend = function(elem, prev){
	var parent = elem.parent;
	if(parent){
		var childs = parent.children;
		childs.splice(childs.lastIndexOf(elem), 0, prev);
	}

	if(elem.prev){
		elem.prev.next = prev;
	}
	
	prev.parent = parent;
	prev.prev = elem.prev;
	prev.next = elem;
	elem.prev = prev;
};




/***/ }),

/***/ 798043:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var isTag = __webpack_require__(864431).isTag;

module.exports = {
	filter: filter,
	find: find,
	findOneChild: findOneChild,
	findOne: findOne,
	existsOne: existsOne,
	findAll: findAll
};

function filter(test, element, recurse, limit){
	if(!Array.isArray(element)) element = [element];

	if(typeof limit !== "number" || !isFinite(limit)){
		limit = Infinity;
	}
	return find(test, element, recurse !== false, limit);
}

function find(test, elems, recurse, limit){
	var result = [], childs;

	for(var i = 0, j = elems.length; i < j; i++){
		if(test(elems[i])){
			result.push(elems[i]);
			if(--limit <= 0) break;
		}

		childs = elems[i].children;
		if(recurse && childs && childs.length > 0){
			childs = find(test, childs, recurse, limit);
			result = result.concat(childs);
			limit -= childs.length;
			if(limit <= 0) break;
		}
	}

	return result;
}

function findOneChild(test, elems){
	for(var i = 0, l = elems.length; i < l; i++){
		if(test(elems[i])) return elems[i];
	}

	return null;
}

function findOne(test, elems){
	var elem = null;

	for(var i = 0, l = elems.length; i < l && !elem; i++){
		if(!isTag(elems[i])){
			continue;
		} else if(test(elems[i])){
			elem = elems[i];
		} else if(elems[i].children.length > 0){
			elem = findOne(test, elems[i].children);
		}
	}

	return elem;
}

function existsOne(test, elems){
	for(var i = 0, l = elems.length; i < l; i++){
		if(
			isTag(elems[i]) && (
				test(elems[i]) || (
					elems[i].children.length > 0 &&
					existsOne(test, elems[i].children)
				)
			)
		){
			return true;
		}
	}

	return false;
}

function findAll(test, elems){
	var result = [];
	for(var i = 0, j = elems.length; i < j; i++){
		if(!isTag(elems[i])) continue;
		if(test(elems[i])) result.push(elems[i]);

		if(elems[i].children.length > 0){
			result = result.concat(findAll(test, elems[i].children));
		}
	}
	return result;
}


/***/ }),

/***/ 843346:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var ElementType = __webpack_require__(864431),
    getOuterHTML = __webpack_require__(178322),
    isTag = ElementType.isTag;

module.exports = {
	getInnerHTML: getInnerHTML,
	getOuterHTML: getOuterHTML,
	getText: getText
};

function getInnerHTML(elem, opts){
	return elem.children ? elem.children.map(function(elem){
		return getOuterHTML(elem, opts);
	}).join("") : "";
}

function getText(elem){
	if(Array.isArray(elem)) return elem.map(getText).join("");
	if(isTag(elem) || elem.type === ElementType.CDATA) return getText(elem.children);
	if(elem.type === ElementType.Text) return elem.data;
	return "";
}


/***/ }),

/***/ 585010:
/***/ ((__unused_webpack_module, exports) => {

var getChildren = exports.getChildren = function(elem){
	return elem.children;
};

var getParent = exports.getParent = function(elem){
	return elem.parent;
};

exports.getSiblings = function(elem){
	var parent = getParent(elem);
	return parent ? getChildren(parent) : [elem];
};

exports.getAttributeValue = function(elem, name){
	return elem.attribs && elem.attribs[name];
};

exports.hasAttrib = function(elem, name){
	return !!elem.attribs && hasOwnProperty.call(elem.attribs, name);
};

exports.getName = function(elem){
	return elem.name;
};


/***/ }),

/***/ 220386:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"elementNames\":{\"altglyph\":\"altGlyph\",\"altglyphdef\":\"altGlyphDef\",\"altglyphitem\":\"altGlyphItem\",\"animatecolor\":\"animateColor\",\"animatemotion\":\"animateMotion\",\"animatetransform\":\"animateTransform\",\"clippath\":\"clipPath\",\"feblend\":\"feBlend\",\"fecolormatrix\":\"feColorMatrix\",\"fecomponenttransfer\":\"feComponentTransfer\",\"fecomposite\":\"feComposite\",\"feconvolvematrix\":\"feConvolveMatrix\",\"fediffuselighting\":\"feDiffuseLighting\",\"fedisplacementmap\":\"feDisplacementMap\",\"fedistantlight\":\"feDistantLight\",\"fedropshadow\":\"feDropShadow\",\"feflood\":\"feFlood\",\"fefunca\":\"feFuncA\",\"fefuncb\":\"feFuncB\",\"fefuncg\":\"feFuncG\",\"fefuncr\":\"feFuncR\",\"fegaussianblur\":\"feGaussianBlur\",\"feimage\":\"feImage\",\"femerge\":\"feMerge\",\"femergenode\":\"feMergeNode\",\"femorphology\":\"feMorphology\",\"feoffset\":\"feOffset\",\"fepointlight\":\"fePointLight\",\"fespecularlighting\":\"feSpecularLighting\",\"fespotlight\":\"feSpotLight\",\"fetile\":\"feTile\",\"feturbulence\":\"feTurbulence\",\"foreignobject\":\"foreignObject\",\"glyphref\":\"glyphRef\",\"lineargradient\":\"linearGradient\",\"radialgradient\":\"radialGradient\",\"textpath\":\"textPath\"},\"attributeNames\":{\"definitionurl\":\"definitionURL\",\"attributename\":\"attributeName\",\"attributetype\":\"attributeType\",\"basefrequency\":\"baseFrequency\",\"baseprofile\":\"baseProfile\",\"calcmode\":\"calcMode\",\"clippathunits\":\"clipPathUnits\",\"diffuseconstant\":\"diffuseConstant\",\"edgemode\":\"edgeMode\",\"filterunits\":\"filterUnits\",\"glyphref\":\"glyphRef\",\"gradienttransform\":\"gradientTransform\",\"gradientunits\":\"gradientUnits\",\"kernelmatrix\":\"kernelMatrix\",\"kernelunitlength\":\"kernelUnitLength\",\"keypoints\":\"keyPoints\",\"keysplines\":\"keySplines\",\"keytimes\":\"keyTimes\",\"lengthadjust\":\"lengthAdjust\",\"limitingconeangle\":\"limitingConeAngle\",\"markerheight\":\"markerHeight\",\"markerunits\":\"markerUnits\",\"markerwidth\":\"markerWidth\",\"maskcontentunits\":\"maskContentUnits\",\"maskunits\":\"maskUnits\",\"numoctaves\":\"numOctaves\",\"pathlength\":\"pathLength\",\"patterncontentunits\":\"patternContentUnits\",\"patterntransform\":\"patternTransform\",\"patternunits\":\"patternUnits\",\"pointsatx\":\"pointsAtX\",\"pointsaty\":\"pointsAtY\",\"pointsatz\":\"pointsAtZ\",\"preservealpha\":\"preserveAlpha\",\"preserveaspectratio\":\"preserveAspectRatio\",\"primitiveunits\":\"primitiveUnits\",\"refx\":\"refX\",\"refy\":\"refY\",\"repeatcount\":\"repeatCount\",\"repeatdur\":\"repeatDur\",\"requiredextensions\":\"requiredExtensions\",\"requiredfeatures\":\"requiredFeatures\",\"specularconstant\":\"specularConstant\",\"specularexponent\":\"specularExponent\",\"spreadmethod\":\"spreadMethod\",\"startoffset\":\"startOffset\",\"stddeviation\":\"stdDeviation\",\"stitchtiles\":\"stitchTiles\",\"surfacescale\":\"surfaceScale\",\"systemlanguage\":\"systemLanguage\",\"tablevalues\":\"tableValues\",\"targetx\":\"targetX\",\"targety\":\"targetY\",\"textlength\":\"textLength\",\"viewbox\":\"viewBox\",\"viewtarget\":\"viewTarget\",\"xchannelselector\":\"xChannelSelector\",\"ychannelselector\":\"yChannelSelector\",\"zoomandpan\":\"zoomAndPan\"}}");

/***/ }),

/***/ 178322:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
  Module dependencies
*/
var ElementType = __webpack_require__(768671);
var entities = __webpack_require__(605796);

/* mixed-case SVG and MathML tags & attributes
   recognized by the HTML parser, see
   https://html.spec.whatwg.org/multipage/parsing.html#parsing-main-inforeign
*/
var foreignNames = __webpack_require__(220386);
foreignNames.elementNames.__proto__ = null; /* use as a simple dictionary */
foreignNames.attributeNames.__proto__ = null;

var unencodedElements = {
  __proto__: null,
  style: true,
  script: true,
  xmp: true,
  iframe: true,
  noembed: true,
  noframes: true,
  plaintext: true,
  noscript: true
};

/*
  Format attributes
*/
function formatAttrs(attributes, opts) {
  if (!attributes) return;

  var output = '';
  var value;

  // Loop through the attributes
  for (var key in attributes) {
    value = attributes[key];
    if (output) {
      output += ' ';
    }

    if (opts.xmlMode === 'foreign') {
      /* fix up mixed-case attribute names */
      key = foreignNames.attributeNames[key] || key;
    }
    output += key;
    if ((value !== null && value !== '') || opts.xmlMode) {
      output +=
        '="' +
        (opts.decodeEntities
          ? entities.encodeXML(value)
          : value.replace(/\"/g, '&quot;')) +
        '"';
    }
  }

  return output;
}

/*
  Self-enclosing tags (stolen from node-htmlparser)
*/
var singleTag = {
  __proto__: null,
  area: true,
  base: true,
  basefont: true,
  br: true,
  col: true,
  command: true,
  embed: true,
  frame: true,
  hr: true,
  img: true,
  input: true,
  isindex: true,
  keygen: true,
  link: true,
  meta: true,
  param: true,
  source: true,
  track: true,
  wbr: true
};

var render = (module.exports = function(dom, opts) {
  if (!Array.isArray(dom) && !dom.cheerio) dom = [dom];
  opts = opts || {};

  var output = '';

  for (var i = 0; i < dom.length; i++) {
    var elem = dom[i];

    if (elem.type === 'root') output += render(elem.children, opts);
    else if (ElementType.isTag(elem)) output += renderTag(elem, opts);
    else if (elem.type === ElementType.Directive)
      output += renderDirective(elem);
    else if (elem.type === ElementType.Comment) output += renderComment(elem);
    else if (elem.type === ElementType.CDATA) output += renderCdata(elem);
    else output += renderText(elem, opts);
  }

  return output;
});

var foreignModeIntegrationPoints = [
  'mi',
  'mo',
  'mn',
  'ms',
  'mtext',
  'annotation-xml',
  'foreignObject',
  'desc',
  'title'
];

function renderTag(elem, opts) {
  // Handle SVG / MathML in HTML
  if (opts.xmlMode === 'foreign') {
    /* fix up mixed-case element names */
    elem.name = foreignNames.elementNames[elem.name] || elem.name;
    /* exit foreign mode at integration points */
    if (
      elem.parent &&
      foreignModeIntegrationPoints.indexOf(elem.parent.name) >= 0
    )
      opts = Object.assign({}, opts, { xmlMode: false });
  }
  if (!opts.xmlMode && ['svg', 'math'].indexOf(elem.name) >= 0) {
    opts = Object.assign({}, opts, { xmlMode: 'foreign' });
  }

  var tag = '<' + elem.name;
  var attribs = formatAttrs(elem.attribs, opts);

  if (attribs) {
    tag += ' ' + attribs;
  }

  if (opts.xmlMode && (!elem.children || elem.children.length === 0)) {
    tag += '/>';
  } else {
    tag += '>';
    if (elem.children) {
      tag += render(elem.children, opts);
    }

    if (!singleTag[elem.name] || opts.xmlMode) {
      tag += '</' + elem.name + '>';
    }
  }

  return tag;
}

function renderDirective(elem) {
  return '<' + elem.data + '>';
}

function renderText(elem, opts) {
  var data = elem.data || '';

  // if entities weren't decoded, no need to encode them back
  if (
    opts.decodeEntities &&
    !(elem.parent && elem.parent.name in unencodedElements)
  ) {
    data = entities.encodeXML(data);
  }

  return data;
}

function renderCdata(elem) {
  return '<![CDATA[' + elem.children[0].data + ']]>';
}

function renderComment(elem) {
  return '<!--' + elem.data + '-->';
}


/***/ }),

/***/ 768671:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
/**
 * Tests whether an element is a tag or not.
 *
 * @param elem Element to test
 */
function isTag(elem) {
    return (elem.type === "tag" /* Tag */ ||
        elem.type === "script" /* Script */ ||
        elem.type === "style" /* Style */);
}
exports.isTag = isTag;
// Exports for backwards compatibility
exports.Text = "text" /* Text */; //Text
exports.Directive = "directive" /* Directive */; //<? ... ?>
exports.Comment = "comment" /* Comment */; //<!-- ... -->
exports.Script = "script" /* Script */; //<script> tags
exports.Style = "style" /* Style */; //<style> tags
exports.Tag = "tag" /* Tag */; //Any tag
exports.CDATA = "cdata" /* CDATA */; //<![CDATA[ ... ]]>
exports.Doctype = "doctype" /* Doctype */;


/***/ }),

/***/ 121119:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var entities_json_1 = __importDefault(__webpack_require__(347209));
var legacy_json_1 = __importDefault(__webpack_require__(835282));
var xml_json_1 = __importDefault(__webpack_require__(477761));
var decode_codepoint_1 = __importDefault(__webpack_require__(864351));
exports.decodeXML = getStrictDecoder(xml_json_1.default);
exports.decodeHTMLStrict = getStrictDecoder(entities_json_1.default);
function getStrictDecoder(map) {
    var keys = Object.keys(map).join("|");
    var replace = getReplacer(map);
    keys += "|#[xX][\\da-fA-F]+|#\\d+";
    var re = new RegExp("&(?:" + keys + ");", "g");
    return function (str) { return String(str).replace(re, replace); };
}
var sorter = function (a, b) { return (a < b ? 1 : -1); };
exports.decodeHTML = (function () {
    var legacy = Object.keys(legacy_json_1.default).sort(sorter);
    var keys = Object.keys(entities_json_1.default).sort(sorter);
    for (var i = 0, j = 0; i < keys.length; i++) {
        if (legacy[j] === keys[i]) {
            keys[i] += ";?";
            j++;
        }
        else {
            keys[i] += ";";
        }
    }
    var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g");
    var replace = getReplacer(entities_json_1.default);
    function replacer(str) {
        if (str.substr(-1) !== ";")
            str += ";";
        return replace(str);
    }
    //TODO consider creating a merged map
    return function (str) {
        return String(str).replace(re, replacer);
    };
})();
function getReplacer(map) {
    return function replace(str) {
        if (str.charAt(1) === "#") {
            if (str.charAt(2) === "X" || str.charAt(2) === "x") {
                return decode_codepoint_1.default(parseInt(str.substr(3), 16));
            }
            return decode_codepoint_1.default(parseInt(str.substr(2), 10));
        }
        return map[str.slice(1, -1)];
    };
}


/***/ }),

/***/ 864351:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var decode_json_1 = __importDefault(__webpack_require__(448049));
// modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119
function decodeCodePoint(codePoint) {
    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
        return "\uFFFD";
    }
    if (codePoint in decode_json_1.default) {
        // @ts-ignore
        codePoint = decode_json_1.default[codePoint];
    }
    var output = "";
    if (codePoint > 0xffff) {
        codePoint -= 0x10000;
        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
        codePoint = 0xdc00 | (codePoint & 0x3ff);
    }
    output += String.fromCharCode(codePoint);
    return output;
}
exports.default = decodeCodePoint;


/***/ }),

/***/ 443173:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var xml_json_1 = __importDefault(__webpack_require__(477761));
var inverseXML = getInverseObj(xml_json_1.default);
var xmlReplacer = getInverseReplacer(inverseXML);
exports.encodeXML = getInverse(inverseXML, xmlReplacer);
var entities_json_1 = __importDefault(__webpack_require__(347209));
var inverseHTML = getInverseObj(entities_json_1.default);
var htmlReplacer = getInverseReplacer(inverseHTML);
exports.encodeHTML = getInverse(inverseHTML, htmlReplacer);
function getInverseObj(obj) {
    return Object.keys(obj)
        .sort()
        .reduce(function (inverse, name) {
        inverse[obj[name]] = "&" + name + ";";
        return inverse;
    }, {});
}
function getInverseReplacer(inverse) {
    var single = [];
    var multiple = [];
    Object.keys(inverse).forEach(function (k) {
        return k.length === 1
            ? // Add value to single array
                single.push("\\" + k)
            : // Add value to multiple array
                multiple.push(k);
    });
    //TODO add ranges
    multiple.unshift("[" + single.join("") + "]");
    return new RegExp(multiple.join("|"), "g");
}
var reNonASCII = /[^\0-\x7F]/g;
var reAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
function singleCharReplacer(c) {
    return "&#x" + c
        .charCodeAt(0)
        .toString(16)
        .toUpperCase() + ";";
}
// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-explicit-any
function astralReplacer(c, _) {
    // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
    var high = c.charCodeAt(0);
    var low = c.charCodeAt(1);
    var codePoint = (high - 0xd800) * 0x400 + low - 0xdc00 + 0x10000;
    return "&#x" + codePoint.toString(16).toUpperCase() + ";";
}
function getInverse(inverse, re) {
    return function (data) {
        return data
            .replace(re, function (name) { return inverse[name]; })
            .replace(reAstralSymbols, astralReplacer)
            .replace(reNonASCII, singleCharReplacer);
    };
}
var reXmlChars = getInverseReplacer(inverseXML);
function escape(data) {
    return data
        .replace(reXmlChars, singleCharReplacer)
        .replace(reAstralSymbols, astralReplacer)
        .replace(reNonASCII, singleCharReplacer);
}
exports.escape = escape;


/***/ }),

/***/ 605796:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var decode_1 = __webpack_require__(121119);
var encode_1 = __webpack_require__(443173);
function decode(data, level) {
    return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTML)(data);
}
exports.decode = decode;
function decodeStrict(data, level) {
    return (!level || level <= 0 ? decode_1.decodeXML : decode_1.decodeHTMLStrict)(data);
}
exports.decodeStrict = decodeStrict;
function encode(data, level) {
    return (!level || level <= 0 ? encode_1.encodeXML : encode_1.encodeHTML)(data);
}
exports.encode = encode;
var encode_2 = __webpack_require__(443173);
exports.encodeXML = encode_2.encodeXML;
exports.encodeHTML = encode_2.encodeHTML;
exports.escape = encode_2.escape;
// Legacy aliases
exports.encodeHTML4 = encode_2.encodeHTML;
exports.encodeHTML5 = encode_2.encodeHTML;
var decode_2 = __webpack_require__(121119);
exports.decodeXML = decode_2.decodeXML;
exports.decodeHTML = decode_2.decodeHTML;
exports.decodeHTMLStrict = decode_2.decodeHTMLStrict;
// Legacy aliases
exports.decodeHTML4 = decode_2.decodeHTML;
exports.decodeHTML5 = decode_2.decodeHTML;
exports.decodeHTML4Strict = decode_2.decodeHTMLStrict;
exports.decodeHTML5Strict = decode_2.decodeHTMLStrict;
exports.decodeXMLStrict = decode_2.decodeXML;


/***/ }),

/***/ 448049:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"0\":65533,\"128\":8364,\"130\":8218,\"131\":402,\"132\":8222,\"133\":8230,\"134\":8224,\"135\":8225,\"136\":710,\"137\":8240,\"138\":352,\"139\":8249,\"140\":338,\"142\":381,\"145\":8216,\"146\":8217,\"147\":8220,\"148\":8221,\"149\":8226,\"150\":8211,\"151\":8212,\"152\":732,\"153\":8482,\"154\":353,\"155\":8250,\"156\":339,\"158\":382,\"159\":376}");

/***/ }),

/***/ 347209:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"Aacute\":\"Á\",\"aacute\":\"á\",\"Abreve\":\"Ă\",\"abreve\":\"ă\",\"ac\":\"∾\",\"acd\":\"∿\",\"acE\":\"∾̳\",\"Acirc\":\"Â\",\"acirc\":\"â\",\"acute\":\"´\",\"Acy\":\"А\",\"acy\":\"а\",\"AElig\":\"Æ\",\"aelig\":\"æ\",\"af\":\"⁡\",\"Afr\":\"𝔄\",\"afr\":\"𝔞\",\"Agrave\":\"À\",\"agrave\":\"à\",\"alefsym\":\"ℵ\",\"aleph\":\"ℵ\",\"Alpha\":\"Α\",\"alpha\":\"α\",\"Amacr\":\"Ā\",\"amacr\":\"ā\",\"amalg\":\"⨿\",\"amp\":\"&\",\"AMP\":\"&\",\"andand\":\"⩕\",\"And\":\"⩓\",\"and\":\"∧\",\"andd\":\"⩜\",\"andslope\":\"⩘\",\"andv\":\"⩚\",\"ang\":\"∠\",\"ange\":\"⦤\",\"angle\":\"∠\",\"angmsdaa\":\"⦨\",\"angmsdab\":\"⦩\",\"angmsdac\":\"⦪\",\"angmsdad\":\"⦫\",\"angmsdae\":\"⦬\",\"angmsdaf\":\"⦭\",\"angmsdag\":\"⦮\",\"angmsdah\":\"⦯\",\"angmsd\":\"∡\",\"angrt\":\"∟\",\"angrtvb\":\"⊾\",\"angrtvbd\":\"⦝\",\"angsph\":\"∢\",\"angst\":\"Å\",\"angzarr\":\"⍼\",\"Aogon\":\"Ą\",\"aogon\":\"ą\",\"Aopf\":\"𝔸\",\"aopf\":\"𝕒\",\"apacir\":\"⩯\",\"ap\":\"≈\",\"apE\":\"⩰\",\"ape\":\"≊\",\"apid\":\"≋\",\"apos\":\"'\",\"ApplyFunction\":\"⁡\",\"approx\":\"≈\",\"approxeq\":\"≊\",\"Aring\":\"Å\",\"aring\":\"å\",\"Ascr\":\"𝒜\",\"ascr\":\"𝒶\",\"Assign\":\"≔\",\"ast\":\"*\",\"asymp\":\"≈\",\"asympeq\":\"≍\",\"Atilde\":\"Ã\",\"atilde\":\"ã\",\"Auml\":\"Ä\",\"auml\":\"ä\",\"awconint\":\"∳\",\"awint\":\"⨑\",\"backcong\":\"≌\",\"backepsilon\":\"϶\",\"backprime\":\"‵\",\"backsim\":\"∽\",\"backsimeq\":\"⋍\",\"Backslash\":\"∖\",\"Barv\":\"⫧\",\"barvee\":\"⊽\",\"barwed\":\"⌅\",\"Barwed\":\"⌆\",\"barwedge\":\"⌅\",\"bbrk\":\"⎵\",\"bbrktbrk\":\"⎶\",\"bcong\":\"≌\",\"Bcy\":\"Б\",\"bcy\":\"б\",\"bdquo\":\"„\",\"becaus\":\"∵\",\"because\":\"∵\",\"Because\":\"∵\",\"bemptyv\":\"⦰\",\"bepsi\":\"϶\",\"bernou\":\"ℬ\",\"Bernoullis\":\"ℬ\",\"Beta\":\"Β\",\"beta\":\"β\",\"beth\":\"ℶ\",\"between\":\"≬\",\"Bfr\":\"𝔅\",\"bfr\":\"𝔟\",\"bigcap\":\"⋂\",\"bigcirc\":\"◯\",\"bigcup\":\"⋃\",\"bigodot\":\"⨀\",\"bigoplus\":\"⨁\",\"bigotimes\":\"⨂\",\"bigsqcup\":\"⨆\",\"bigstar\":\"★\",\"bigtriangledown\":\"▽\",\"bigtriangleup\":\"△\",\"biguplus\":\"⨄\",\"bigvee\":\"⋁\",\"bigwedge\":\"⋀\",\"bkarow\":\"⤍\",\"blacklozenge\":\"⧫\",\"blacksquare\":\"▪\",\"blacktriangle\":\"▴\",\"blacktriangledown\":\"▾\",\"blacktriangleleft\":\"◂\",\"blacktriangleright\":\"▸\",\"blank\":\"␣\",\"blk12\":\"▒\",\"blk14\":\"░\",\"blk34\":\"▓\",\"block\":\"█\",\"bne\":\"=⃥\",\"bnequiv\":\"≡⃥\",\"bNot\":\"⫭\",\"bnot\":\"⌐\",\"Bopf\":\"𝔹\",\"bopf\":\"𝕓\",\"bot\":\"⊥\",\"bottom\":\"⊥\",\"bowtie\":\"⋈\",\"boxbox\":\"⧉\",\"boxdl\":\"┐\",\"boxdL\":\"╕\",\"boxDl\":\"╖\",\"boxDL\":\"╗\",\"boxdr\":\"┌\",\"boxdR\":\"╒\",\"boxDr\":\"╓\",\"boxDR\":\"╔\",\"boxh\":\"─\",\"boxH\":\"═\",\"boxhd\":\"┬\",\"boxHd\":\"╤\",\"boxhD\":\"╥\",\"boxHD\":\"╦\",\"boxhu\":\"┴\",\"boxHu\":\"╧\",\"boxhU\":\"╨\",\"boxHU\":\"╩\",\"boxminus\":\"⊟\",\"boxplus\":\"⊞\",\"boxtimes\":\"⊠\",\"boxul\":\"┘\",\"boxuL\":\"╛\",\"boxUl\":\"╜\",\"boxUL\":\"╝\",\"boxur\":\"└\",\"boxuR\":\"╘\",\"boxUr\":\"╙\",\"boxUR\":\"╚\",\"boxv\":\"│\",\"boxV\":\"║\",\"boxvh\":\"┼\",\"boxvH\":\"╪\",\"boxVh\":\"╫\",\"boxVH\":\"╬\",\"boxvl\":\"┤\",\"boxvL\":\"╡\",\"boxVl\":\"╢\",\"boxVL\":\"╣\",\"boxvr\":\"├\",\"boxvR\":\"╞\",\"boxVr\":\"╟\",\"boxVR\":\"╠\",\"bprime\":\"‵\",\"breve\":\"˘\",\"Breve\":\"˘\",\"brvbar\":\"¦\",\"bscr\":\"𝒷\",\"Bscr\":\"ℬ\",\"bsemi\":\"⁏\",\"bsim\":\"∽\",\"bsime\":\"⋍\",\"bsolb\":\"⧅\",\"bsol\":\"\\\\\",\"bsolhsub\":\"⟈\",\"bull\":\"•\",\"bullet\":\"•\",\"bump\":\"≎\",\"bumpE\":\"⪮\",\"bumpe\":\"≏\",\"Bumpeq\":\"≎\",\"bumpeq\":\"≏\",\"Cacute\":\"Ć\",\"cacute\":\"ć\",\"capand\":\"⩄\",\"capbrcup\":\"⩉\",\"capcap\":\"⩋\",\"cap\":\"∩\",\"Cap\":\"⋒\",\"capcup\":\"⩇\",\"capdot\":\"⩀\",\"CapitalDifferentialD\":\"ⅅ\",\"caps\":\"∩︀\",\"caret\":\"⁁\",\"caron\":\"ˇ\",\"Cayleys\":\"ℭ\",\"ccaps\":\"⩍\",\"Ccaron\":\"Č\",\"ccaron\":\"č\",\"Ccedil\":\"Ç\",\"ccedil\":\"ç\",\"Ccirc\":\"Ĉ\",\"ccirc\":\"ĉ\",\"Cconint\":\"∰\",\"ccups\":\"⩌\",\"ccupssm\":\"⩐\",\"Cdot\":\"Ċ\",\"cdot\":\"ċ\",\"cedil\":\"¸\",\"Cedilla\":\"¸\",\"cemptyv\":\"⦲\",\"cent\":\"¢\",\"centerdot\":\"·\",\"CenterDot\":\"·\",\"cfr\":\"𝔠\",\"Cfr\":\"ℭ\",\"CHcy\":\"Ч\",\"chcy\":\"ч\",\"check\":\"✓\",\"checkmark\":\"✓\",\"Chi\":\"Χ\",\"chi\":\"χ\",\"circ\":\"ˆ\",\"circeq\":\"≗\",\"circlearrowleft\":\"↺\",\"circlearrowright\":\"↻\",\"circledast\":\"⊛\",\"circledcirc\":\"⊚\",\"circleddash\":\"⊝\",\"CircleDot\":\"⊙\",\"circledR\":\"®\",\"circledS\":\"Ⓢ\",\"CircleMinus\":\"⊖\",\"CirclePlus\":\"⊕\",\"CircleTimes\":\"⊗\",\"cir\":\"○\",\"cirE\":\"⧃\",\"cire\":\"≗\",\"cirfnint\":\"⨐\",\"cirmid\":\"⫯\",\"cirscir\":\"⧂\",\"ClockwiseContourIntegral\":\"∲\",\"CloseCurlyDoubleQuote\":\"”\",\"CloseCurlyQuote\":\"’\",\"clubs\":\"♣\",\"clubsuit\":\"♣\",\"colon\":\":\",\"Colon\":\"∷\",\"Colone\":\"⩴\",\"colone\":\"≔\",\"coloneq\":\"≔\",\"comma\":\",\",\"commat\":\"@\",\"comp\":\"∁\",\"compfn\":\"∘\",\"complement\":\"∁\",\"complexes\":\"ℂ\",\"cong\":\"≅\",\"congdot\":\"⩭\",\"Congruent\":\"≡\",\"conint\":\"∮\",\"Conint\":\"∯\",\"ContourIntegral\":\"∮\",\"copf\":\"𝕔\",\"Copf\":\"ℂ\",\"coprod\":\"∐\",\"Coproduct\":\"∐\",\"copy\":\"©\",\"COPY\":\"©\",\"copysr\":\"℗\",\"CounterClockwiseContourIntegral\":\"∳\",\"crarr\":\"↵\",\"cross\":\"✗\",\"Cross\":\"⨯\",\"Cscr\":\"𝒞\",\"cscr\":\"𝒸\",\"csub\":\"⫏\",\"csube\":\"⫑\",\"csup\":\"⫐\",\"csupe\":\"⫒\",\"ctdot\":\"⋯\",\"cudarrl\":\"⤸\",\"cudarrr\":\"⤵\",\"cuepr\":\"⋞\",\"cuesc\":\"⋟\",\"cularr\":\"↶\",\"cularrp\":\"⤽\",\"cupbrcap\":\"⩈\",\"cupcap\":\"⩆\",\"CupCap\":\"≍\",\"cup\":\"∪\",\"Cup\":\"⋓\",\"cupcup\":\"⩊\",\"cupdot\":\"⊍\",\"cupor\":\"⩅\",\"cups\":\"∪︀\",\"curarr\":\"↷\",\"curarrm\":\"⤼\",\"curlyeqprec\":\"⋞\",\"curlyeqsucc\":\"⋟\",\"curlyvee\":\"⋎\",\"curlywedge\":\"⋏\",\"curren\":\"¤\",\"curvearrowleft\":\"↶\",\"curvearrowright\":\"↷\",\"cuvee\":\"⋎\",\"cuwed\":\"⋏\",\"cwconint\":\"∲\",\"cwint\":\"∱\",\"cylcty\":\"⌭\",\"dagger\":\"†\",\"Dagger\":\"‡\",\"daleth\":\"ℸ\",\"darr\":\"↓\",\"Darr\":\"↡\",\"dArr\":\"⇓\",\"dash\":\"‐\",\"Dashv\":\"⫤\",\"dashv\":\"⊣\",\"dbkarow\":\"⤏\",\"dblac\":\"˝\",\"Dcaron\":\"Ď\",\"dcaron\":\"ď\",\"Dcy\":\"Д\",\"dcy\":\"д\",\"ddagger\":\"‡\",\"ddarr\":\"⇊\",\"DD\":\"ⅅ\",\"dd\":\"ⅆ\",\"DDotrahd\":\"⤑\",\"ddotseq\":\"⩷\",\"deg\":\"°\",\"Del\":\"∇\",\"Delta\":\"Δ\",\"delta\":\"δ\",\"demptyv\":\"⦱\",\"dfisht\":\"⥿\",\"Dfr\":\"𝔇\",\"dfr\":\"𝔡\",\"dHar\":\"⥥\",\"dharl\":\"⇃\",\"dharr\":\"⇂\",\"DiacriticalAcute\":\"´\",\"DiacriticalDot\":\"˙\",\"DiacriticalDoubleAcute\":\"˝\",\"DiacriticalGrave\":\"`\",\"DiacriticalTilde\":\"˜\",\"diam\":\"⋄\",\"diamond\":\"⋄\",\"Diamond\":\"⋄\",\"diamondsuit\":\"♦\",\"diams\":\"♦\",\"die\":\"¨\",\"DifferentialD\":\"ⅆ\",\"digamma\":\"ϝ\",\"disin\":\"⋲\",\"div\":\"÷\",\"divide\":\"÷\",\"divideontimes\":\"⋇\",\"divonx\":\"⋇\",\"DJcy\":\"Ђ\",\"djcy\":\"ђ\",\"dlcorn\":\"⌞\",\"dlcrop\":\"⌍\",\"dollar\":\"$\",\"Dopf\":\"𝔻\",\"dopf\":\"𝕕\",\"Dot\":\"¨\",\"dot\":\"˙\",\"DotDot\":\"⃜\",\"doteq\":\"≐\",\"doteqdot\":\"≑\",\"DotEqual\":\"≐\",\"dotminus\":\"∸\",\"dotplus\":\"∔\",\"dotsquare\":\"⊡\",\"doublebarwedge\":\"⌆\",\"DoubleContourIntegral\":\"∯\",\"DoubleDot\":\"¨\",\"DoubleDownArrow\":\"⇓\",\"DoubleLeftArrow\":\"⇐\",\"DoubleLeftRightArrow\":\"⇔\",\"DoubleLeftTee\":\"⫤\",\"DoubleLongLeftArrow\":\"⟸\",\"DoubleLongLeftRightArrow\":\"⟺\",\"DoubleLongRightArrow\":\"⟹\",\"DoubleRightArrow\":\"⇒\",\"DoubleRightTee\":\"⊨\",\"DoubleUpArrow\":\"⇑\",\"DoubleUpDownArrow\":\"⇕\",\"DoubleVerticalBar\":\"∥\",\"DownArrowBar\":\"⤓\",\"downarrow\":\"↓\",\"DownArrow\":\"↓\",\"Downarrow\":\"⇓\",\"DownArrowUpArrow\":\"⇵\",\"DownBreve\":\"̑\",\"downdownarrows\":\"⇊\",\"downharpoonleft\":\"⇃\",\"downharpoonright\":\"⇂\",\"DownLeftRightVector\":\"⥐\",\"DownLeftTeeVector\":\"⥞\",\"DownLeftVectorBar\":\"⥖\",\"DownLeftVector\":\"↽\",\"DownRightTeeVector\":\"⥟\",\"DownRightVectorBar\":\"⥗\",\"DownRightVector\":\"⇁\",\"DownTeeArrow\":\"↧\",\"DownTee\":\"⊤\",\"drbkarow\":\"⤐\",\"drcorn\":\"⌟\",\"drcrop\":\"⌌\",\"Dscr\":\"𝒟\",\"dscr\":\"𝒹\",\"DScy\":\"Ѕ\",\"dscy\":\"ѕ\",\"dsol\":\"⧶\",\"Dstrok\":\"Đ\",\"dstrok\":\"đ\",\"dtdot\":\"⋱\",\"dtri\":\"▿\",\"dtrif\":\"▾\",\"duarr\":\"⇵\",\"duhar\":\"⥯\",\"dwangle\":\"⦦\",\"DZcy\":\"Џ\",\"dzcy\":\"џ\",\"dzigrarr\":\"⟿\",\"Eacute\":\"É\",\"eacute\":\"é\",\"easter\":\"⩮\",\"Ecaron\":\"Ě\",\"ecaron\":\"ě\",\"Ecirc\":\"Ê\",\"ecirc\":\"ê\",\"ecir\":\"≖\",\"ecolon\":\"≕\",\"Ecy\":\"Э\",\"ecy\":\"э\",\"eDDot\":\"⩷\",\"Edot\":\"Ė\",\"edot\":\"ė\",\"eDot\":\"≑\",\"ee\":\"ⅇ\",\"efDot\":\"≒\",\"Efr\":\"𝔈\",\"efr\":\"𝔢\",\"eg\":\"⪚\",\"Egrave\":\"È\",\"egrave\":\"è\",\"egs\":\"⪖\",\"egsdot\":\"⪘\",\"el\":\"⪙\",\"Element\":\"∈\",\"elinters\":\"⏧\",\"ell\":\"ℓ\",\"els\":\"⪕\",\"elsdot\":\"⪗\",\"Emacr\":\"Ē\",\"emacr\":\"ē\",\"empty\":\"∅\",\"emptyset\":\"∅\",\"EmptySmallSquare\":\"◻\",\"emptyv\":\"∅\",\"EmptyVerySmallSquare\":\"▫\",\"emsp13\":\" \",\"emsp14\":\" \",\"emsp\":\" \",\"ENG\":\"Ŋ\",\"eng\":\"ŋ\",\"ensp\":\" \",\"Eogon\":\"Ę\",\"eogon\":\"ę\",\"Eopf\":\"𝔼\",\"eopf\":\"𝕖\",\"epar\":\"⋕\",\"eparsl\":\"⧣\",\"eplus\":\"⩱\",\"epsi\":\"ε\",\"Epsilon\":\"Ε\",\"epsilon\":\"ε\",\"epsiv\":\"ϵ\",\"eqcirc\":\"≖\",\"eqcolon\":\"≕\",\"eqsim\":\"≂\",\"eqslantgtr\":\"⪖\",\"eqslantless\":\"⪕\",\"Equal\":\"⩵\",\"equals\":\"=\",\"EqualTilde\":\"≂\",\"equest\":\"≟\",\"Equilibrium\":\"⇌\",\"equiv\":\"≡\",\"equivDD\":\"⩸\",\"eqvparsl\":\"⧥\",\"erarr\":\"⥱\",\"erDot\":\"≓\",\"escr\":\"ℯ\",\"Escr\":\"ℰ\",\"esdot\":\"≐\",\"Esim\":\"⩳\",\"esim\":\"≂\",\"Eta\":\"Η\",\"eta\":\"η\",\"ETH\":\"Ð\",\"eth\":\"ð\",\"Euml\":\"Ë\",\"euml\":\"ë\",\"euro\":\"€\",\"excl\":\"!\",\"exist\":\"∃\",\"Exists\":\"∃\",\"expectation\":\"ℰ\",\"exponentiale\":\"ⅇ\",\"ExponentialE\":\"ⅇ\",\"fallingdotseq\":\"≒\",\"Fcy\":\"Ф\",\"fcy\":\"ф\",\"female\":\"♀\",\"ffilig\":\"ﬃ\",\"fflig\":\"ﬀ\",\"ffllig\":\"ﬄ\",\"Ffr\":\"𝔉\",\"ffr\":\"𝔣\",\"filig\":\"ﬁ\",\"FilledSmallSquare\":\"◼\",\"FilledVerySmallSquare\":\"▪\",\"fjlig\":\"fj\",\"flat\":\"♭\",\"fllig\":\"ﬂ\",\"fltns\":\"▱\",\"fnof\":\"ƒ\",\"Fopf\":\"𝔽\",\"fopf\":\"𝕗\",\"forall\":\"∀\",\"ForAll\":\"∀\",\"fork\":\"⋔\",\"forkv\":\"⫙\",\"Fouriertrf\":\"ℱ\",\"fpartint\":\"⨍\",\"frac12\":\"½\",\"frac13\":\"⅓\",\"frac14\":\"¼\",\"frac15\":\"⅕\",\"frac16\":\"⅙\",\"frac18\":\"⅛\",\"frac23\":\"⅔\",\"frac25\":\"⅖\",\"frac34\":\"¾\",\"frac35\":\"⅗\",\"frac38\":\"⅜\",\"frac45\":\"⅘\",\"frac56\":\"⅚\",\"frac58\":\"⅝\",\"frac78\":\"⅞\",\"frasl\":\"⁄\",\"frown\":\"⌢\",\"fscr\":\"𝒻\",\"Fscr\":\"ℱ\",\"gacute\":\"ǵ\",\"Gamma\":\"Γ\",\"gamma\":\"γ\",\"Gammad\":\"Ϝ\",\"gammad\":\"ϝ\",\"gap\":\"⪆\",\"Gbreve\":\"Ğ\",\"gbreve\":\"ğ\",\"Gcedil\":\"Ģ\",\"Gcirc\":\"Ĝ\",\"gcirc\":\"ĝ\",\"Gcy\":\"Г\",\"gcy\":\"г\",\"Gdot\":\"Ġ\",\"gdot\":\"ġ\",\"ge\":\"≥\",\"gE\":\"≧\",\"gEl\":\"⪌\",\"gel\":\"⋛\",\"geq\":\"≥\",\"geqq\":\"≧\",\"geqslant\":\"⩾\",\"gescc\":\"⪩\",\"ges\":\"⩾\",\"gesdot\":\"⪀\",\"gesdoto\":\"⪂\",\"gesdotol\":\"⪄\",\"gesl\":\"⋛︀\",\"gesles\":\"⪔\",\"Gfr\":\"𝔊\",\"gfr\":\"𝔤\",\"gg\":\"≫\",\"Gg\":\"⋙\",\"ggg\":\"⋙\",\"gimel\":\"ℷ\",\"GJcy\":\"Ѓ\",\"gjcy\":\"ѓ\",\"gla\":\"⪥\",\"gl\":\"≷\",\"glE\":\"⪒\",\"glj\":\"⪤\",\"gnap\":\"⪊\",\"gnapprox\":\"⪊\",\"gne\":\"⪈\",\"gnE\":\"≩\",\"gneq\":\"⪈\",\"gneqq\":\"≩\",\"gnsim\":\"⋧\",\"Gopf\":\"𝔾\",\"gopf\":\"𝕘\",\"grave\":\"`\",\"GreaterEqual\":\"≥\",\"GreaterEqualLess\":\"⋛\",\"GreaterFullEqual\":\"≧\",\"GreaterGreater\":\"⪢\",\"GreaterLess\":\"≷\",\"GreaterSlantEqual\":\"⩾\",\"GreaterTilde\":\"≳\",\"Gscr\":\"𝒢\",\"gscr\":\"ℊ\",\"gsim\":\"≳\",\"gsime\":\"⪎\",\"gsiml\":\"⪐\",\"gtcc\":\"⪧\",\"gtcir\":\"⩺\",\"gt\":\">\",\"GT\":\">\",\"Gt\":\"≫\",\"gtdot\":\"⋗\",\"gtlPar\":\"⦕\",\"gtquest\":\"⩼\",\"gtrapprox\":\"⪆\",\"gtrarr\":\"⥸\",\"gtrdot\":\"⋗\",\"gtreqless\":\"⋛\",\"gtreqqless\":\"⪌\",\"gtrless\":\"≷\",\"gtrsim\":\"≳\",\"gvertneqq\":\"≩︀\",\"gvnE\":\"≩︀\",\"Hacek\":\"ˇ\",\"hairsp\":\" \",\"half\":\"½\",\"hamilt\":\"ℋ\",\"HARDcy\":\"Ъ\",\"hardcy\":\"ъ\",\"harrcir\":\"⥈\",\"harr\":\"↔\",\"hArr\":\"⇔\",\"harrw\":\"↭\",\"Hat\":\"^\",\"hbar\":\"ℏ\",\"Hcirc\":\"Ĥ\",\"hcirc\":\"ĥ\",\"hearts\":\"♥\",\"heartsuit\":\"♥\",\"hellip\":\"…\",\"hercon\":\"⊹\",\"hfr\":\"𝔥\",\"Hfr\":\"ℌ\",\"HilbertSpace\":\"ℋ\",\"hksearow\":\"⤥\",\"hkswarow\":\"⤦\",\"hoarr\":\"⇿\",\"homtht\":\"∻\",\"hookleftarrow\":\"↩\",\"hookrightarrow\":\"↪\",\"hopf\":\"𝕙\",\"Hopf\":\"ℍ\",\"horbar\":\"―\",\"HorizontalLine\":\"─\",\"hscr\":\"𝒽\",\"Hscr\":\"ℋ\",\"hslash\":\"ℏ\",\"Hstrok\":\"Ħ\",\"hstrok\":\"ħ\",\"HumpDownHump\":\"≎\",\"HumpEqual\":\"≏\",\"hybull\":\"⁃\",\"hyphen\":\"‐\",\"Iacute\":\"Í\",\"iacute\":\"í\",\"ic\":\"⁣\",\"Icirc\":\"Î\",\"icirc\":\"î\",\"Icy\":\"И\",\"icy\":\"и\",\"Idot\":\"İ\",\"IEcy\":\"Е\",\"iecy\":\"е\",\"iexcl\":\"¡\",\"iff\":\"⇔\",\"ifr\":\"𝔦\",\"Ifr\":\"ℑ\",\"Igrave\":\"Ì\",\"igrave\":\"ì\",\"ii\":\"ⅈ\",\"iiiint\":\"⨌\",\"iiint\":\"∭\",\"iinfin\":\"⧜\",\"iiota\":\"℩\",\"IJlig\":\"Ĳ\",\"ijlig\":\"ĳ\",\"Imacr\":\"Ī\",\"imacr\":\"ī\",\"image\":\"ℑ\",\"ImaginaryI\":\"ⅈ\",\"imagline\":\"ℐ\",\"imagpart\":\"ℑ\",\"imath\":\"ı\",\"Im\":\"ℑ\",\"imof\":\"⊷\",\"imped\":\"Ƶ\",\"Implies\":\"⇒\",\"incare\":\"℅\",\"in\":\"∈\",\"infin\":\"∞\",\"infintie\":\"⧝\",\"inodot\":\"ı\",\"intcal\":\"⊺\",\"int\":\"∫\",\"Int\":\"∬\",\"integers\":\"ℤ\",\"Integral\":\"∫\",\"intercal\":\"⊺\",\"Intersection\":\"⋂\",\"intlarhk\":\"⨗\",\"intprod\":\"⨼\",\"InvisibleComma\":\"⁣\",\"InvisibleTimes\":\"⁢\",\"IOcy\":\"Ё\",\"iocy\":\"ё\",\"Iogon\":\"Į\",\"iogon\":\"į\",\"Iopf\":\"𝕀\",\"iopf\":\"𝕚\",\"Iota\":\"Ι\",\"iota\":\"ι\",\"iprod\":\"⨼\",\"iquest\":\"¿\",\"iscr\":\"𝒾\",\"Iscr\":\"ℐ\",\"isin\":\"∈\",\"isindot\":\"⋵\",\"isinE\":\"⋹\",\"isins\":\"⋴\",\"isinsv\":\"⋳\",\"isinv\":\"∈\",\"it\":\"⁢\",\"Itilde\":\"Ĩ\",\"itilde\":\"ĩ\",\"Iukcy\":\"І\",\"iukcy\":\"і\",\"Iuml\":\"Ï\",\"iuml\":\"ï\",\"Jcirc\":\"Ĵ\",\"jcirc\":\"ĵ\",\"Jcy\":\"Й\",\"jcy\":\"й\",\"Jfr\":\"𝔍\",\"jfr\":\"𝔧\",\"jmath\":\"ȷ\",\"Jopf\":\"𝕁\",\"jopf\":\"𝕛\",\"Jscr\":\"𝒥\",\"jscr\":\"𝒿\",\"Jsercy\":\"Ј\",\"jsercy\":\"ј\",\"Jukcy\":\"Є\",\"jukcy\":\"є\",\"Kappa\":\"Κ\",\"kappa\":\"κ\",\"kappav\":\"ϰ\",\"Kcedil\":\"Ķ\",\"kcedil\":\"ķ\",\"Kcy\":\"К\",\"kcy\":\"к\",\"Kfr\":\"𝔎\",\"kfr\":\"𝔨\",\"kgreen\":\"ĸ\",\"KHcy\":\"Х\",\"khcy\":\"х\",\"KJcy\":\"Ќ\",\"kjcy\":\"ќ\",\"Kopf\":\"𝕂\",\"kopf\":\"𝕜\",\"Kscr\":\"𝒦\",\"kscr\":\"𝓀\",\"lAarr\":\"⇚\",\"Lacute\":\"Ĺ\",\"lacute\":\"ĺ\",\"laemptyv\":\"⦴\",\"lagran\":\"ℒ\",\"Lambda\":\"Λ\",\"lambda\":\"λ\",\"lang\":\"⟨\",\"Lang\":\"⟪\",\"langd\":\"⦑\",\"langle\":\"⟨\",\"lap\":\"⪅\",\"Laplacetrf\":\"ℒ\",\"laquo\":\"«\",\"larrb\":\"⇤\",\"larrbfs\":\"⤟\",\"larr\":\"←\",\"Larr\":\"↞\",\"lArr\":\"⇐\",\"larrfs\":\"⤝\",\"larrhk\":\"↩\",\"larrlp\":\"↫\",\"larrpl\":\"⤹\",\"larrsim\":\"⥳\",\"larrtl\":\"↢\",\"latail\":\"⤙\",\"lAtail\":\"⤛\",\"lat\":\"⪫\",\"late\":\"⪭\",\"lates\":\"⪭︀\",\"lbarr\":\"⤌\",\"lBarr\":\"⤎\",\"lbbrk\":\"❲\",\"lbrace\":\"{\",\"lbrack\":\"[\",\"lbrke\":\"⦋\",\"lbrksld\":\"⦏\",\"lbrkslu\":\"⦍\",\"Lcaron\":\"Ľ\",\"lcaron\":\"ľ\",\"Lcedil\":\"Ļ\",\"lcedil\":\"ļ\",\"lceil\":\"⌈\",\"lcub\":\"{\",\"Lcy\":\"Л\",\"lcy\":\"л\",\"ldca\":\"⤶\",\"ldquo\":\"“\",\"ldquor\":\"„\",\"ldrdhar\":\"⥧\",\"ldrushar\":\"⥋\",\"ldsh\":\"↲\",\"le\":\"≤\",\"lE\":\"≦\",\"LeftAngleBracket\":\"⟨\",\"LeftArrowBar\":\"⇤\",\"leftarrow\":\"←\",\"LeftArrow\":\"←\",\"Leftarrow\":\"⇐\",\"LeftArrowRightArrow\":\"⇆\",\"leftarrowtail\":\"↢\",\"LeftCeiling\":\"⌈\",\"LeftDoubleBracket\":\"⟦\",\"LeftDownTeeVector\":\"⥡\",\"LeftDownVectorBar\":\"⥙\",\"LeftDownVector\":\"⇃\",\"LeftFloor\":\"⌊\",\"leftharpoondown\":\"↽\",\"leftharpoonup\":\"↼\",\"leftleftarrows\":\"⇇\",\"leftrightarrow\":\"↔\",\"LeftRightArrow\":\"↔\",\"Leftrightarrow\":\"⇔\",\"leftrightarrows\":\"⇆\",\"leftrightharpoons\":\"⇋\",\"leftrightsquigarrow\":\"↭\",\"LeftRightVector\":\"⥎\",\"LeftTeeArrow\":\"↤\",\"LeftTee\":\"⊣\",\"LeftTeeVector\":\"⥚\",\"leftthreetimes\":\"⋋\",\"LeftTriangleBar\":\"⧏\",\"LeftTriangle\":\"⊲\",\"LeftTriangleEqual\":\"⊴\",\"LeftUpDownVector\":\"⥑\",\"LeftUpTeeVector\":\"⥠\",\"LeftUpVectorBar\":\"⥘\",\"LeftUpVector\":\"↿\",\"LeftVectorBar\":\"⥒\",\"LeftVector\":\"↼\",\"lEg\":\"⪋\",\"leg\":\"⋚\",\"leq\":\"≤\",\"leqq\":\"≦\",\"leqslant\":\"⩽\",\"lescc\":\"⪨\",\"les\":\"⩽\",\"lesdot\":\"⩿\",\"lesdoto\":\"⪁\",\"lesdotor\":\"⪃\",\"lesg\":\"⋚︀\",\"lesges\":\"⪓\",\"lessapprox\":\"⪅\",\"lessdot\":\"⋖\",\"lesseqgtr\":\"⋚\",\"lesseqqgtr\":\"⪋\",\"LessEqualGreater\":\"⋚\",\"LessFullEqual\":\"≦\",\"LessGreater\":\"≶\",\"lessgtr\":\"≶\",\"LessLess\":\"⪡\",\"lesssim\":\"≲\",\"LessSlantEqual\":\"⩽\",\"LessTilde\":\"≲\",\"lfisht\":\"⥼\",\"lfloor\":\"⌊\",\"Lfr\":\"𝔏\",\"lfr\":\"𝔩\",\"lg\":\"≶\",\"lgE\":\"⪑\",\"lHar\":\"⥢\",\"lhard\":\"↽\",\"lharu\":\"↼\",\"lharul\":\"⥪\",\"lhblk\":\"▄\",\"LJcy\":\"Љ\",\"ljcy\":\"љ\",\"llarr\":\"⇇\",\"ll\":\"≪\",\"Ll\":\"⋘\",\"llcorner\":\"⌞\",\"Lleftarrow\":\"⇚\",\"llhard\":\"⥫\",\"lltri\":\"◺\",\"Lmidot\":\"Ŀ\",\"lmidot\":\"ŀ\",\"lmoustache\":\"⎰\",\"lmoust\":\"⎰\",\"lnap\":\"⪉\",\"lnapprox\":\"⪉\",\"lne\":\"⪇\",\"lnE\":\"≨\",\"lneq\":\"⪇\",\"lneqq\":\"≨\",\"lnsim\":\"⋦\",\"loang\":\"⟬\",\"loarr\":\"⇽\",\"lobrk\":\"⟦\",\"longleftarrow\":\"⟵\",\"LongLeftArrow\":\"⟵\",\"Longleftarrow\":\"⟸\",\"longleftrightarrow\":\"⟷\",\"LongLeftRightArrow\":\"⟷\",\"Longleftrightarrow\":\"⟺\",\"longmapsto\":\"⟼\",\"longrightarrow\":\"⟶\",\"LongRightArrow\":\"⟶\",\"Longrightarrow\":\"⟹\",\"looparrowleft\":\"↫\",\"looparrowright\":\"↬\",\"lopar\":\"⦅\",\"Lopf\":\"𝕃\",\"lopf\":\"𝕝\",\"loplus\":\"⨭\",\"lotimes\":\"⨴\",\"lowast\":\"∗\",\"lowbar\":\"_\",\"LowerLeftArrow\":\"↙\",\"LowerRightArrow\":\"↘\",\"loz\":\"◊\",\"lozenge\":\"◊\",\"lozf\":\"⧫\",\"lpar\":\"(\",\"lparlt\":\"⦓\",\"lrarr\":\"⇆\",\"lrcorner\":\"⌟\",\"lrhar\":\"⇋\",\"lrhard\":\"⥭\",\"lrm\":\"‎\",\"lrtri\":\"⊿\",\"lsaquo\":\"‹\",\"lscr\":\"𝓁\",\"Lscr\":\"ℒ\",\"lsh\":\"↰\",\"Lsh\":\"↰\",\"lsim\":\"≲\",\"lsime\":\"⪍\",\"lsimg\":\"⪏\",\"lsqb\":\"[\",\"lsquo\":\"‘\",\"lsquor\":\"‚\",\"Lstrok\":\"Ł\",\"lstrok\":\"ł\",\"ltcc\":\"⪦\",\"ltcir\":\"⩹\",\"lt\":\"<\",\"LT\":\"<\",\"Lt\":\"≪\",\"ltdot\":\"⋖\",\"lthree\":\"⋋\",\"ltimes\":\"⋉\",\"ltlarr\":\"⥶\",\"ltquest\":\"⩻\",\"ltri\":\"◃\",\"ltrie\":\"⊴\",\"ltrif\":\"◂\",\"ltrPar\":\"⦖\",\"lurdshar\":\"⥊\",\"luruhar\":\"⥦\",\"lvertneqq\":\"≨︀\",\"lvnE\":\"≨︀\",\"macr\":\"¯\",\"male\":\"♂\",\"malt\":\"✠\",\"maltese\":\"✠\",\"Map\":\"⤅\",\"map\":\"↦\",\"mapsto\":\"↦\",\"mapstodown\":\"↧\",\"mapstoleft\":\"↤\",\"mapstoup\":\"↥\",\"marker\":\"▮\",\"mcomma\":\"⨩\",\"Mcy\":\"М\",\"mcy\":\"м\",\"mdash\":\"—\",\"mDDot\":\"∺\",\"measuredangle\":\"∡\",\"MediumSpace\":\" \",\"Mellintrf\":\"ℳ\",\"Mfr\":\"𝔐\",\"mfr\":\"𝔪\",\"mho\":\"℧\",\"micro\":\"µ\",\"midast\":\"*\",\"midcir\":\"⫰\",\"mid\":\"∣\",\"middot\":\"·\",\"minusb\":\"⊟\",\"minus\":\"−\",\"minusd\":\"∸\",\"minusdu\":\"⨪\",\"MinusPlus\":\"∓\",\"mlcp\":\"⫛\",\"mldr\":\"…\",\"mnplus\":\"∓\",\"models\":\"⊧\",\"Mopf\":\"𝕄\",\"mopf\":\"𝕞\",\"mp\":\"∓\",\"mscr\":\"𝓂\",\"Mscr\":\"ℳ\",\"mstpos\":\"∾\",\"Mu\":\"Μ\",\"mu\":\"μ\",\"multimap\":\"⊸\",\"mumap\":\"⊸\",\"nabla\":\"∇\",\"Nacute\":\"Ń\",\"nacute\":\"ń\",\"nang\":\"∠⃒\",\"nap\":\"≉\",\"napE\":\"⩰̸\",\"napid\":\"≋̸\",\"napos\":\"ŉ\",\"napprox\":\"≉\",\"natural\":\"♮\",\"naturals\":\"ℕ\",\"natur\":\"♮\",\"nbsp\":\" \",\"nbump\":\"≎̸\",\"nbumpe\":\"≏̸\",\"ncap\":\"⩃\",\"Ncaron\":\"Ň\",\"ncaron\":\"ň\",\"Ncedil\":\"Ņ\",\"ncedil\":\"ņ\",\"ncong\":\"≇\",\"ncongdot\":\"⩭̸\",\"ncup\":\"⩂\",\"Ncy\":\"Н\",\"ncy\":\"н\",\"ndash\":\"–\",\"nearhk\":\"⤤\",\"nearr\":\"↗\",\"neArr\":\"⇗\",\"nearrow\":\"↗\",\"ne\":\"≠\",\"nedot\":\"≐̸\",\"NegativeMediumSpace\":\"​\",\"NegativeThickSpace\":\"​\",\"NegativeThinSpace\":\"​\",\"NegativeVeryThinSpace\":\"​\",\"nequiv\":\"≢\",\"nesear\":\"⤨\",\"nesim\":\"≂̸\",\"NestedGreaterGreater\":\"≫\",\"NestedLessLess\":\"≪\",\"NewLine\":\"\\n\",\"nexist\":\"∄\",\"nexists\":\"∄\",\"Nfr\":\"𝔑\",\"nfr\":\"𝔫\",\"ngE\":\"≧̸\",\"nge\":\"≱\",\"ngeq\":\"≱\",\"ngeqq\":\"≧̸\",\"ngeqslant\":\"⩾̸\",\"nges\":\"⩾̸\",\"nGg\":\"⋙̸\",\"ngsim\":\"≵\",\"nGt\":\"≫⃒\",\"ngt\":\"≯\",\"ngtr\":\"≯\",\"nGtv\":\"≫̸\",\"nharr\":\"↮\",\"nhArr\":\"⇎\",\"nhpar\":\"⫲\",\"ni\":\"∋\",\"nis\":\"⋼\",\"nisd\":\"⋺\",\"niv\":\"∋\",\"NJcy\":\"Њ\",\"njcy\":\"њ\",\"nlarr\":\"↚\",\"nlArr\":\"⇍\",\"nldr\":\"‥\",\"nlE\":\"≦̸\",\"nle\":\"≰\",\"nleftarrow\":\"↚\",\"nLeftarrow\":\"⇍\",\"nleftrightarrow\":\"↮\",\"nLeftrightarrow\":\"⇎\",\"nleq\":\"≰\",\"nleqq\":\"≦̸\",\"nleqslant\":\"⩽̸\",\"nles\":\"⩽̸\",\"nless\":\"≮\",\"nLl\":\"⋘̸\",\"nlsim\":\"≴\",\"nLt\":\"≪⃒\",\"nlt\":\"≮\",\"nltri\":\"⋪\",\"nltrie\":\"⋬\",\"nLtv\":\"≪̸\",\"nmid\":\"∤\",\"NoBreak\":\"⁠\",\"NonBreakingSpace\":\" \",\"nopf\":\"𝕟\",\"Nopf\":\"ℕ\",\"Not\":\"⫬\",\"not\":\"¬\",\"NotCongruent\":\"≢\",\"NotCupCap\":\"≭\",\"NotDoubleVerticalBar\":\"∦\",\"NotElement\":\"∉\",\"NotEqual\":\"≠\",\"NotEqualTilde\":\"≂̸\",\"NotExists\":\"∄\",\"NotGreater\":\"≯\",\"NotGreaterEqual\":\"≱\",\"NotGreaterFullEqual\":\"≧̸\",\"NotGreaterGreater\":\"≫̸\",\"NotGreaterLess\":\"≹\",\"NotGreaterSlantEqual\":\"⩾̸\",\"NotGreaterTilde\":\"≵\",\"NotHumpDownHump\":\"≎̸\",\"NotHumpEqual\":\"≏̸\",\"notin\":\"∉\",\"notindot\":\"⋵̸\",\"notinE\":\"⋹̸\",\"notinva\":\"∉\",\"notinvb\":\"⋷\",\"notinvc\":\"⋶\",\"NotLeftTriangleBar\":\"⧏̸\",\"NotLeftTriangle\":\"⋪\",\"NotLeftTriangleEqual\":\"⋬\",\"NotLess\":\"≮\",\"NotLessEqual\":\"≰\",\"NotLessGreater\":\"≸\",\"NotLessLess\":\"≪̸\",\"NotLessSlantEqual\":\"⩽̸\",\"NotLessTilde\":\"≴\",\"NotNestedGreaterGreater\":\"⪢̸\",\"NotNestedLessLess\":\"⪡̸\",\"notni\":\"∌\",\"notniva\":\"∌\",\"notnivb\":\"⋾\",\"notnivc\":\"⋽\",\"NotPrecedes\":\"⊀\",\"NotPrecedesEqual\":\"⪯̸\",\"NotPrecedesSlantEqual\":\"⋠\",\"NotReverseElement\":\"∌\",\"NotRightTriangleBar\":\"⧐̸\",\"NotRightTriangle\":\"⋫\",\"NotRightTriangleEqual\":\"⋭\",\"NotSquareSubset\":\"⊏̸\",\"NotSquareSubsetEqual\":\"⋢\",\"NotSquareSuperset\":\"⊐̸\",\"NotSquareSupersetEqual\":\"⋣\",\"NotSubset\":\"⊂⃒\",\"NotSubsetEqual\":\"⊈\",\"NotSucceeds\":\"⊁\",\"NotSucceedsEqual\":\"⪰̸\",\"NotSucceedsSlantEqual\":\"⋡\",\"NotSucceedsTilde\":\"≿̸\",\"NotSuperset\":\"⊃⃒\",\"NotSupersetEqual\":\"⊉\",\"NotTilde\":\"≁\",\"NotTildeEqual\":\"≄\",\"NotTildeFullEqual\":\"≇\",\"NotTildeTilde\":\"≉\",\"NotVerticalBar\":\"∤\",\"nparallel\":\"∦\",\"npar\":\"∦\",\"nparsl\":\"⫽⃥\",\"npart\":\"∂̸\",\"npolint\":\"⨔\",\"npr\":\"⊀\",\"nprcue\":\"⋠\",\"nprec\":\"⊀\",\"npreceq\":\"⪯̸\",\"npre\":\"⪯̸\",\"nrarrc\":\"⤳̸\",\"nrarr\":\"↛\",\"nrArr\":\"⇏\",\"nrarrw\":\"↝̸\",\"nrightarrow\":\"↛\",\"nRightarrow\":\"⇏\",\"nrtri\":\"⋫\",\"nrtrie\":\"⋭\",\"nsc\":\"⊁\",\"nsccue\":\"⋡\",\"nsce\":\"⪰̸\",\"Nscr\":\"𝒩\",\"nscr\":\"𝓃\",\"nshortmid\":\"∤\",\"nshortparallel\":\"∦\",\"nsim\":\"≁\",\"nsime\":\"≄\",\"nsimeq\":\"≄\",\"nsmid\":\"∤\",\"nspar\":\"∦\",\"nsqsube\":\"⋢\",\"nsqsupe\":\"⋣\",\"nsub\":\"⊄\",\"nsubE\":\"⫅̸\",\"nsube\":\"⊈\",\"nsubset\":\"⊂⃒\",\"nsubseteq\":\"⊈\",\"nsubseteqq\":\"⫅̸\",\"nsucc\":\"⊁\",\"nsucceq\":\"⪰̸\",\"nsup\":\"⊅\",\"nsupE\":\"⫆̸\",\"nsupe\":\"⊉\",\"nsupset\":\"⊃⃒\",\"nsupseteq\":\"⊉\",\"nsupseteqq\":\"⫆̸\",\"ntgl\":\"≹\",\"Ntilde\":\"Ñ\",\"ntilde\":\"ñ\",\"ntlg\":\"≸\",\"ntriangleleft\":\"⋪\",\"ntrianglelefteq\":\"⋬\",\"ntriangleright\":\"⋫\",\"ntrianglerighteq\":\"⋭\",\"Nu\":\"Ν\",\"nu\":\"ν\",\"num\":\"#\",\"numero\":\"№\",\"numsp\":\" \",\"nvap\":\"≍⃒\",\"nvdash\":\"⊬\",\"nvDash\":\"⊭\",\"nVdash\":\"⊮\",\"nVDash\":\"⊯\",\"nvge\":\"≥⃒\",\"nvgt\":\">⃒\",\"nvHarr\":\"⤄\",\"nvinfin\":\"⧞\",\"nvlArr\":\"⤂\",\"nvle\":\"≤⃒\",\"nvlt\":\"<⃒\",\"nvltrie\":\"⊴⃒\",\"nvrArr\":\"⤃\",\"nvrtrie\":\"⊵⃒\",\"nvsim\":\"∼⃒\",\"nwarhk\":\"⤣\",\"nwarr\":\"↖\",\"nwArr\":\"⇖\",\"nwarrow\":\"↖\",\"nwnear\":\"⤧\",\"Oacute\":\"Ó\",\"oacute\":\"ó\",\"oast\":\"⊛\",\"Ocirc\":\"Ô\",\"ocirc\":\"ô\",\"ocir\":\"⊚\",\"Ocy\":\"О\",\"ocy\":\"о\",\"odash\":\"⊝\",\"Odblac\":\"Ő\",\"odblac\":\"ő\",\"odiv\":\"⨸\",\"odot\":\"⊙\",\"odsold\":\"⦼\",\"OElig\":\"Œ\",\"oelig\":\"œ\",\"ofcir\":\"⦿\",\"Ofr\":\"𝔒\",\"ofr\":\"𝔬\",\"ogon\":\"˛\",\"Ograve\":\"Ò\",\"ograve\":\"ò\",\"ogt\":\"⧁\",\"ohbar\":\"⦵\",\"ohm\":\"Ω\",\"oint\":\"∮\",\"olarr\":\"↺\",\"olcir\":\"⦾\",\"olcross\":\"⦻\",\"oline\":\"‾\",\"olt\":\"⧀\",\"Omacr\":\"Ō\",\"omacr\":\"ō\",\"Omega\":\"Ω\",\"omega\":\"ω\",\"Omicron\":\"Ο\",\"omicron\":\"ο\",\"omid\":\"⦶\",\"ominus\":\"⊖\",\"Oopf\":\"𝕆\",\"oopf\":\"𝕠\",\"opar\":\"⦷\",\"OpenCurlyDoubleQuote\":\"“\",\"OpenCurlyQuote\":\"‘\",\"operp\":\"⦹\",\"oplus\":\"⊕\",\"orarr\":\"↻\",\"Or\":\"⩔\",\"or\":\"∨\",\"ord\":\"⩝\",\"order\":\"ℴ\",\"orderof\":\"ℴ\",\"ordf\":\"ª\",\"ordm\":\"º\",\"origof\":\"⊶\",\"oror\":\"⩖\",\"orslope\":\"⩗\",\"orv\":\"⩛\",\"oS\":\"Ⓢ\",\"Oscr\":\"𝒪\",\"oscr\":\"ℴ\",\"Oslash\":\"Ø\",\"oslash\":\"ø\",\"osol\":\"⊘\",\"Otilde\":\"Õ\",\"otilde\":\"õ\",\"otimesas\":\"⨶\",\"Otimes\":\"⨷\",\"otimes\":\"⊗\",\"Ouml\":\"Ö\",\"ouml\":\"ö\",\"ovbar\":\"⌽\",\"OverBar\":\"‾\",\"OverBrace\":\"⏞\",\"OverBracket\":\"⎴\",\"OverParenthesis\":\"⏜\",\"para\":\"¶\",\"parallel\":\"∥\",\"par\":\"∥\",\"parsim\":\"⫳\",\"parsl\":\"⫽\",\"part\":\"∂\",\"PartialD\":\"∂\",\"Pcy\":\"П\",\"pcy\":\"п\",\"percnt\":\"%\",\"period\":\".\",\"permil\":\"‰\",\"perp\":\"⊥\",\"pertenk\":\"‱\",\"Pfr\":\"𝔓\",\"pfr\":\"𝔭\",\"Phi\":\"Φ\",\"phi\":\"φ\",\"phiv\":\"ϕ\",\"phmmat\":\"ℳ\",\"phone\":\"☎\",\"Pi\":\"Π\",\"pi\":\"π\",\"pitchfork\":\"⋔\",\"piv\":\"ϖ\",\"planck\":\"ℏ\",\"planckh\":\"ℎ\",\"plankv\":\"ℏ\",\"plusacir\":\"⨣\",\"plusb\":\"⊞\",\"pluscir\":\"⨢\",\"plus\":\"+\",\"plusdo\":\"∔\",\"plusdu\":\"⨥\",\"pluse\":\"⩲\",\"PlusMinus\":\"±\",\"plusmn\":\"±\",\"plussim\":\"⨦\",\"plustwo\":\"⨧\",\"pm\":\"±\",\"Poincareplane\":\"ℌ\",\"pointint\":\"⨕\",\"popf\":\"𝕡\",\"Popf\":\"ℙ\",\"pound\":\"£\",\"prap\":\"⪷\",\"Pr\":\"⪻\",\"pr\":\"≺\",\"prcue\":\"≼\",\"precapprox\":\"⪷\",\"prec\":\"≺\",\"preccurlyeq\":\"≼\",\"Precedes\":\"≺\",\"PrecedesEqual\":\"⪯\",\"PrecedesSlantEqual\":\"≼\",\"PrecedesTilde\":\"≾\",\"preceq\":\"⪯\",\"precnapprox\":\"⪹\",\"precneqq\":\"⪵\",\"precnsim\":\"⋨\",\"pre\":\"⪯\",\"prE\":\"⪳\",\"precsim\":\"≾\",\"prime\":\"′\",\"Prime\":\"″\",\"primes\":\"ℙ\",\"prnap\":\"⪹\",\"prnE\":\"⪵\",\"prnsim\":\"⋨\",\"prod\":\"∏\",\"Product\":\"∏\",\"profalar\":\"⌮\",\"profline\":\"⌒\",\"profsurf\":\"⌓\",\"prop\":\"∝\",\"Proportional\":\"∝\",\"Proportion\":\"∷\",\"propto\":\"∝\",\"prsim\":\"≾\",\"prurel\":\"⊰\",\"Pscr\":\"𝒫\",\"pscr\":\"𝓅\",\"Psi\":\"Ψ\",\"psi\":\"ψ\",\"puncsp\":\" \",\"Qfr\":\"𝔔\",\"qfr\":\"𝔮\",\"qint\":\"⨌\",\"qopf\":\"𝕢\",\"Qopf\":\"ℚ\",\"qprime\":\"⁗\",\"Qscr\":\"𝒬\",\"qscr\":\"𝓆\",\"quaternions\":\"ℍ\",\"quatint\":\"⨖\",\"quest\":\"?\",\"questeq\":\"≟\",\"quot\":\"\\\"\",\"QUOT\":\"\\\"\",\"rAarr\":\"⇛\",\"race\":\"∽̱\",\"Racute\":\"Ŕ\",\"racute\":\"ŕ\",\"radic\":\"√\",\"raemptyv\":\"⦳\",\"rang\":\"⟩\",\"Rang\":\"⟫\",\"rangd\":\"⦒\",\"range\":\"⦥\",\"rangle\":\"⟩\",\"raquo\":\"»\",\"rarrap\":\"⥵\",\"rarrb\":\"⇥\",\"rarrbfs\":\"⤠\",\"rarrc\":\"⤳\",\"rarr\":\"→\",\"Rarr\":\"↠\",\"rArr\":\"⇒\",\"rarrfs\":\"⤞\",\"rarrhk\":\"↪\",\"rarrlp\":\"↬\",\"rarrpl\":\"⥅\",\"rarrsim\":\"⥴\",\"Rarrtl\":\"⤖\",\"rarrtl\":\"↣\",\"rarrw\":\"↝\",\"ratail\":\"⤚\",\"rAtail\":\"⤜\",\"ratio\":\"∶\",\"rationals\":\"ℚ\",\"rbarr\":\"⤍\",\"rBarr\":\"⤏\",\"RBarr\":\"⤐\",\"rbbrk\":\"❳\",\"rbrace\":\"}\",\"rbrack\":\"]\",\"rbrke\":\"⦌\",\"rbrksld\":\"⦎\",\"rbrkslu\":\"⦐\",\"Rcaron\":\"Ř\",\"rcaron\":\"ř\",\"Rcedil\":\"Ŗ\",\"rcedil\":\"ŗ\",\"rceil\":\"⌉\",\"rcub\":\"}\",\"Rcy\":\"Р\",\"rcy\":\"р\",\"rdca\":\"⤷\",\"rdldhar\":\"⥩\",\"rdquo\":\"”\",\"rdquor\":\"”\",\"rdsh\":\"↳\",\"real\":\"ℜ\",\"realine\":\"ℛ\",\"realpart\":\"ℜ\",\"reals\":\"ℝ\",\"Re\":\"ℜ\",\"rect\":\"▭\",\"reg\":\"®\",\"REG\":\"®\",\"ReverseElement\":\"∋\",\"ReverseEquilibrium\":\"⇋\",\"ReverseUpEquilibrium\":\"⥯\",\"rfisht\":\"⥽\",\"rfloor\":\"⌋\",\"rfr\":\"𝔯\",\"Rfr\":\"ℜ\",\"rHar\":\"⥤\",\"rhard\":\"⇁\",\"rharu\":\"⇀\",\"rharul\":\"⥬\",\"Rho\":\"Ρ\",\"rho\":\"ρ\",\"rhov\":\"ϱ\",\"RightAngleBracket\":\"⟩\",\"RightArrowBar\":\"⇥\",\"rightarrow\":\"→\",\"RightArrow\":\"→\",\"Rightarrow\":\"⇒\",\"RightArrowLeftArrow\":\"⇄\",\"rightarrowtail\":\"↣\",\"RightCeiling\":\"⌉\",\"RightDoubleBracket\":\"⟧\",\"RightDownTeeVector\":\"⥝\",\"RightDownVectorBar\":\"⥕\",\"RightDownVector\":\"⇂\",\"RightFloor\":\"⌋\",\"rightharpoondown\":\"⇁\",\"rightharpoonup\":\"⇀\",\"rightleftarrows\":\"⇄\",\"rightleftharpoons\":\"⇌\",\"rightrightarrows\":\"⇉\",\"rightsquigarrow\":\"↝\",\"RightTeeArrow\":\"↦\",\"RightTee\":\"⊢\",\"RightTeeVector\":\"⥛\",\"rightthreetimes\":\"⋌\",\"RightTriangleBar\":\"⧐\",\"RightTriangle\":\"⊳\",\"RightTriangleEqual\":\"⊵\",\"RightUpDownVector\":\"⥏\",\"RightUpTeeVector\":\"⥜\",\"RightUpVectorBar\":\"⥔\",\"RightUpVector\":\"↾\",\"RightVectorBar\":\"⥓\",\"RightVector\":\"⇀\",\"ring\":\"˚\",\"risingdotseq\":\"≓\",\"rlarr\":\"⇄\",\"rlhar\":\"⇌\",\"rlm\":\"‏\",\"rmoustache\":\"⎱\",\"rmoust\":\"⎱\",\"rnmid\":\"⫮\",\"roang\":\"⟭\",\"roarr\":\"⇾\",\"robrk\":\"⟧\",\"ropar\":\"⦆\",\"ropf\":\"𝕣\",\"Ropf\":\"ℝ\",\"roplus\":\"⨮\",\"rotimes\":\"⨵\",\"RoundImplies\":\"⥰\",\"rpar\":\")\",\"rpargt\":\"⦔\",\"rppolint\":\"⨒\",\"rrarr\":\"⇉\",\"Rrightarrow\":\"⇛\",\"rsaquo\":\"›\",\"rscr\":\"𝓇\",\"Rscr\":\"ℛ\",\"rsh\":\"↱\",\"Rsh\":\"↱\",\"rsqb\":\"]\",\"rsquo\":\"’\",\"rsquor\":\"’\",\"rthree\":\"⋌\",\"rtimes\":\"⋊\",\"rtri\":\"▹\",\"rtrie\":\"⊵\",\"rtrif\":\"▸\",\"rtriltri\":\"⧎\",\"RuleDelayed\":\"⧴\",\"ruluhar\":\"⥨\",\"rx\":\"℞\",\"Sacute\":\"Ś\",\"sacute\":\"ś\",\"sbquo\":\"‚\",\"scap\":\"⪸\",\"Scaron\":\"Š\",\"scaron\":\"š\",\"Sc\":\"⪼\",\"sc\":\"≻\",\"sccue\":\"≽\",\"sce\":\"⪰\",\"scE\":\"⪴\",\"Scedil\":\"Ş\",\"scedil\":\"ş\",\"Scirc\":\"Ŝ\",\"scirc\":\"ŝ\",\"scnap\":\"⪺\",\"scnE\":\"⪶\",\"scnsim\":\"⋩\",\"scpolint\":\"⨓\",\"scsim\":\"≿\",\"Scy\":\"С\",\"scy\":\"с\",\"sdotb\":\"⊡\",\"sdot\":\"⋅\",\"sdote\":\"⩦\",\"searhk\":\"⤥\",\"searr\":\"↘\",\"seArr\":\"⇘\",\"searrow\":\"↘\",\"sect\":\"§\",\"semi\":\";\",\"seswar\":\"⤩\",\"setminus\":\"∖\",\"setmn\":\"∖\",\"sext\":\"✶\",\"Sfr\":\"𝔖\",\"sfr\":\"𝔰\",\"sfrown\":\"⌢\",\"sharp\":\"♯\",\"SHCHcy\":\"Щ\",\"shchcy\":\"щ\",\"SHcy\":\"Ш\",\"shcy\":\"ш\",\"ShortDownArrow\":\"↓\",\"ShortLeftArrow\":\"←\",\"shortmid\":\"∣\",\"shortparallel\":\"∥\",\"ShortRightArrow\":\"→\",\"ShortUpArrow\":\"↑\",\"shy\":\"­\",\"Sigma\":\"Σ\",\"sigma\":\"σ\",\"sigmaf\":\"ς\",\"sigmav\":\"ς\",\"sim\":\"∼\",\"simdot\":\"⩪\",\"sime\":\"≃\",\"simeq\":\"≃\",\"simg\":\"⪞\",\"simgE\":\"⪠\",\"siml\":\"⪝\",\"simlE\":\"⪟\",\"simne\":\"≆\",\"simplus\":\"⨤\",\"simrarr\":\"⥲\",\"slarr\":\"←\",\"SmallCircle\":\"∘\",\"smallsetminus\":\"∖\",\"smashp\":\"⨳\",\"smeparsl\":\"⧤\",\"smid\":\"∣\",\"smile\":\"⌣\",\"smt\":\"⪪\",\"smte\":\"⪬\",\"smtes\":\"⪬︀\",\"SOFTcy\":\"Ь\",\"softcy\":\"ь\",\"solbar\":\"⌿\",\"solb\":\"⧄\",\"sol\":\"/\",\"Sopf\":\"𝕊\",\"sopf\":\"𝕤\",\"spades\":\"♠\",\"spadesuit\":\"♠\",\"spar\":\"∥\",\"sqcap\":\"⊓\",\"sqcaps\":\"⊓︀\",\"sqcup\":\"⊔\",\"sqcups\":\"⊔︀\",\"Sqrt\":\"√\",\"sqsub\":\"⊏\",\"sqsube\":\"⊑\",\"sqsubset\":\"⊏\",\"sqsubseteq\":\"⊑\",\"sqsup\":\"⊐\",\"sqsupe\":\"⊒\",\"sqsupset\":\"⊐\",\"sqsupseteq\":\"⊒\",\"square\":\"□\",\"Square\":\"□\",\"SquareIntersection\":\"⊓\",\"SquareSubset\":\"⊏\",\"SquareSubsetEqual\":\"⊑\",\"SquareSuperset\":\"⊐\",\"SquareSupersetEqual\":\"⊒\",\"SquareUnion\":\"⊔\",\"squarf\":\"▪\",\"squ\":\"□\",\"squf\":\"▪\",\"srarr\":\"→\",\"Sscr\":\"𝒮\",\"sscr\":\"𝓈\",\"ssetmn\":\"∖\",\"ssmile\":\"⌣\",\"sstarf\":\"⋆\",\"Star\":\"⋆\",\"star\":\"☆\",\"starf\":\"★\",\"straightepsilon\":\"ϵ\",\"straightphi\":\"ϕ\",\"strns\":\"¯\",\"sub\":\"⊂\",\"Sub\":\"⋐\",\"subdot\":\"⪽\",\"subE\":\"⫅\",\"sube\":\"⊆\",\"subedot\":\"⫃\",\"submult\":\"⫁\",\"subnE\":\"⫋\",\"subne\":\"⊊\",\"subplus\":\"⪿\",\"subrarr\":\"⥹\",\"subset\":\"⊂\",\"Subset\":\"⋐\",\"subseteq\":\"⊆\",\"subseteqq\":\"⫅\",\"SubsetEqual\":\"⊆\",\"subsetneq\":\"⊊\",\"subsetneqq\":\"⫋\",\"subsim\":\"⫇\",\"subsub\":\"⫕\",\"subsup\":\"⫓\",\"succapprox\":\"⪸\",\"succ\":\"≻\",\"succcurlyeq\":\"≽\",\"Succeeds\":\"≻\",\"SucceedsEqual\":\"⪰\",\"SucceedsSlantEqual\":\"≽\",\"SucceedsTilde\":\"≿\",\"succeq\":\"⪰\",\"succnapprox\":\"⪺\",\"succneqq\":\"⪶\",\"succnsim\":\"⋩\",\"succsim\":\"≿\",\"SuchThat\":\"∋\",\"sum\":\"∑\",\"Sum\":\"∑\",\"sung\":\"♪\",\"sup1\":\"¹\",\"sup2\":\"²\",\"sup3\":\"³\",\"sup\":\"⊃\",\"Sup\":\"⋑\",\"supdot\":\"⪾\",\"supdsub\":\"⫘\",\"supE\":\"⫆\",\"supe\":\"⊇\",\"supedot\":\"⫄\",\"Superset\":\"⊃\",\"SupersetEqual\":\"⊇\",\"suphsol\":\"⟉\",\"suphsub\":\"⫗\",\"suplarr\":\"⥻\",\"supmult\":\"⫂\",\"supnE\":\"⫌\",\"supne\":\"⊋\",\"supplus\":\"⫀\",\"supset\":\"⊃\",\"Supset\":\"⋑\",\"supseteq\":\"⊇\",\"supseteqq\":\"⫆\",\"supsetneq\":\"⊋\",\"supsetneqq\":\"⫌\",\"supsim\":\"⫈\",\"supsub\":\"⫔\",\"supsup\":\"⫖\",\"swarhk\":\"⤦\",\"swarr\":\"↙\",\"swArr\":\"⇙\",\"swarrow\":\"↙\",\"swnwar\":\"⤪\",\"szlig\":\"ß\",\"Tab\":\"\\t\",\"target\":\"⌖\",\"Tau\":\"Τ\",\"tau\":\"τ\",\"tbrk\":\"⎴\",\"Tcaron\":\"Ť\",\"tcaron\":\"ť\",\"Tcedil\":\"Ţ\",\"tcedil\":\"ţ\",\"Tcy\":\"Т\",\"tcy\":\"т\",\"tdot\":\"⃛\",\"telrec\":\"⌕\",\"Tfr\":\"𝔗\",\"tfr\":\"𝔱\",\"there4\":\"∴\",\"therefore\":\"∴\",\"Therefore\":\"∴\",\"Theta\":\"Θ\",\"theta\":\"θ\",\"thetasym\":\"ϑ\",\"thetav\":\"ϑ\",\"thickapprox\":\"≈\",\"thicksim\":\"∼\",\"ThickSpace\":\"  \",\"ThinSpace\":\" \",\"thinsp\":\" \",\"thkap\":\"≈\",\"thksim\":\"∼\",\"THORN\":\"Þ\",\"thorn\":\"þ\",\"tilde\":\"˜\",\"Tilde\":\"∼\",\"TildeEqual\":\"≃\",\"TildeFullEqual\":\"≅\",\"TildeTilde\":\"≈\",\"timesbar\":\"⨱\",\"timesb\":\"⊠\",\"times\":\"×\",\"timesd\":\"⨰\",\"tint\":\"∭\",\"toea\":\"⤨\",\"topbot\":\"⌶\",\"topcir\":\"⫱\",\"top\":\"⊤\",\"Topf\":\"𝕋\",\"topf\":\"𝕥\",\"topfork\":\"⫚\",\"tosa\":\"⤩\",\"tprime\":\"‴\",\"trade\":\"™\",\"TRADE\":\"™\",\"triangle\":\"▵\",\"triangledown\":\"▿\",\"triangleleft\":\"◃\",\"trianglelefteq\":\"⊴\",\"triangleq\":\"≜\",\"triangleright\":\"▹\",\"trianglerighteq\":\"⊵\",\"tridot\":\"◬\",\"trie\":\"≜\",\"triminus\":\"⨺\",\"TripleDot\":\"⃛\",\"triplus\":\"⨹\",\"trisb\":\"⧍\",\"tritime\":\"⨻\",\"trpezium\":\"⏢\",\"Tscr\":\"𝒯\",\"tscr\":\"𝓉\",\"TScy\":\"Ц\",\"tscy\":\"ц\",\"TSHcy\":\"Ћ\",\"tshcy\":\"ћ\",\"Tstrok\":\"Ŧ\",\"tstrok\":\"ŧ\",\"twixt\":\"≬\",\"twoheadleftarrow\":\"↞\",\"twoheadrightarrow\":\"↠\",\"Uacute\":\"Ú\",\"uacute\":\"ú\",\"uarr\":\"↑\",\"Uarr\":\"↟\",\"uArr\":\"⇑\",\"Uarrocir\":\"⥉\",\"Ubrcy\":\"Ў\",\"ubrcy\":\"ў\",\"Ubreve\":\"Ŭ\",\"ubreve\":\"ŭ\",\"Ucirc\":\"Û\",\"ucirc\":\"û\",\"Ucy\":\"У\",\"ucy\":\"у\",\"udarr\":\"⇅\",\"Udblac\":\"Ű\",\"udblac\":\"ű\",\"udhar\":\"⥮\",\"ufisht\":\"⥾\",\"Ufr\":\"𝔘\",\"ufr\":\"𝔲\",\"Ugrave\":\"Ù\",\"ugrave\":\"ù\",\"uHar\":\"⥣\",\"uharl\":\"↿\",\"uharr\":\"↾\",\"uhblk\":\"▀\",\"ulcorn\":\"⌜\",\"ulcorner\":\"⌜\",\"ulcrop\":\"⌏\",\"ultri\":\"◸\",\"Umacr\":\"Ū\",\"umacr\":\"ū\",\"uml\":\"¨\",\"UnderBar\":\"_\",\"UnderBrace\":\"⏟\",\"UnderBracket\":\"⎵\",\"UnderParenthesis\":\"⏝\",\"Union\":\"⋃\",\"UnionPlus\":\"⊎\",\"Uogon\":\"Ų\",\"uogon\":\"ų\",\"Uopf\":\"𝕌\",\"uopf\":\"𝕦\",\"UpArrowBar\":\"⤒\",\"uparrow\":\"↑\",\"UpArrow\":\"↑\",\"Uparrow\":\"⇑\",\"UpArrowDownArrow\":\"⇅\",\"updownarrow\":\"↕\",\"UpDownArrow\":\"↕\",\"Updownarrow\":\"⇕\",\"UpEquilibrium\":\"⥮\",\"upharpoonleft\":\"↿\",\"upharpoonright\":\"↾\",\"uplus\":\"⊎\",\"UpperLeftArrow\":\"↖\",\"UpperRightArrow\":\"↗\",\"upsi\":\"υ\",\"Upsi\":\"ϒ\",\"upsih\":\"ϒ\",\"Upsilon\":\"Υ\",\"upsilon\":\"υ\",\"UpTeeArrow\":\"↥\",\"UpTee\":\"⊥\",\"upuparrows\":\"⇈\",\"urcorn\":\"⌝\",\"urcorner\":\"⌝\",\"urcrop\":\"⌎\",\"Uring\":\"Ů\",\"uring\":\"ů\",\"urtri\":\"◹\",\"Uscr\":\"𝒰\",\"uscr\":\"𝓊\",\"utdot\":\"⋰\",\"Utilde\":\"Ũ\",\"utilde\":\"ũ\",\"utri\":\"▵\",\"utrif\":\"▴\",\"uuarr\":\"⇈\",\"Uuml\":\"Ü\",\"uuml\":\"ü\",\"uwangle\":\"⦧\",\"vangrt\":\"⦜\",\"varepsilon\":\"ϵ\",\"varkappa\":\"ϰ\",\"varnothing\":\"∅\",\"varphi\":\"ϕ\",\"varpi\":\"ϖ\",\"varpropto\":\"∝\",\"varr\":\"↕\",\"vArr\":\"⇕\",\"varrho\":\"ϱ\",\"varsigma\":\"ς\",\"varsubsetneq\":\"⊊︀\",\"varsubsetneqq\":\"⫋︀\",\"varsupsetneq\":\"⊋︀\",\"varsupsetneqq\":\"⫌︀\",\"vartheta\":\"ϑ\",\"vartriangleleft\":\"⊲\",\"vartriangleright\":\"⊳\",\"vBar\":\"⫨\",\"Vbar\":\"⫫\",\"vBarv\":\"⫩\",\"Vcy\":\"В\",\"vcy\":\"в\",\"vdash\":\"⊢\",\"vDash\":\"⊨\",\"Vdash\":\"⊩\",\"VDash\":\"⊫\",\"Vdashl\":\"⫦\",\"veebar\":\"⊻\",\"vee\":\"∨\",\"Vee\":\"⋁\",\"veeeq\":\"≚\",\"vellip\":\"⋮\",\"verbar\":\"|\",\"Verbar\":\"‖\",\"vert\":\"|\",\"Vert\":\"‖\",\"VerticalBar\":\"∣\",\"VerticalLine\":\"|\",\"VerticalSeparator\":\"❘\",\"VerticalTilde\":\"≀\",\"VeryThinSpace\":\" \",\"Vfr\":\"𝔙\",\"vfr\":\"𝔳\",\"vltri\":\"⊲\",\"vnsub\":\"⊂⃒\",\"vnsup\":\"⊃⃒\",\"Vopf\":\"𝕍\",\"vopf\":\"𝕧\",\"vprop\":\"∝\",\"vrtri\":\"⊳\",\"Vscr\":\"𝒱\",\"vscr\":\"𝓋\",\"vsubnE\":\"⫋︀\",\"vsubne\":\"⊊︀\",\"vsupnE\":\"⫌︀\",\"vsupne\":\"⊋︀\",\"Vvdash\":\"⊪\",\"vzigzag\":\"⦚\",\"Wcirc\":\"Ŵ\",\"wcirc\":\"ŵ\",\"wedbar\":\"⩟\",\"wedge\":\"∧\",\"Wedge\":\"⋀\",\"wedgeq\":\"≙\",\"weierp\":\"℘\",\"Wfr\":\"𝔚\",\"wfr\":\"𝔴\",\"Wopf\":\"𝕎\",\"wopf\":\"𝕨\",\"wp\":\"℘\",\"wr\":\"≀\",\"wreath\":\"≀\",\"Wscr\":\"𝒲\",\"wscr\":\"𝓌\",\"xcap\":\"⋂\",\"xcirc\":\"◯\",\"xcup\":\"⋃\",\"xdtri\":\"▽\",\"Xfr\":\"𝔛\",\"xfr\":\"𝔵\",\"xharr\":\"⟷\",\"xhArr\":\"⟺\",\"Xi\":\"Ξ\",\"xi\":\"ξ\",\"xlarr\":\"⟵\",\"xlArr\":\"⟸\",\"xmap\":\"⟼\",\"xnis\":\"⋻\",\"xodot\":\"⨀\",\"Xopf\":\"𝕏\",\"xopf\":\"𝕩\",\"xoplus\":\"⨁\",\"xotime\":\"⨂\",\"xrarr\":\"⟶\",\"xrArr\":\"⟹\",\"Xscr\":\"𝒳\",\"xscr\":\"𝓍\",\"xsqcup\":\"⨆\",\"xuplus\":\"⨄\",\"xutri\":\"△\",\"xvee\":\"⋁\",\"xwedge\":\"⋀\",\"Yacute\":\"Ý\",\"yacute\":\"ý\",\"YAcy\":\"Я\",\"yacy\":\"я\",\"Ycirc\":\"Ŷ\",\"ycirc\":\"ŷ\",\"Ycy\":\"Ы\",\"ycy\":\"ы\",\"yen\":\"¥\",\"Yfr\":\"𝔜\",\"yfr\":\"𝔶\",\"YIcy\":\"Ї\",\"yicy\":\"ї\",\"Yopf\":\"𝕐\",\"yopf\":\"𝕪\",\"Yscr\":\"𝒴\",\"yscr\":\"𝓎\",\"YUcy\":\"Ю\",\"yucy\":\"ю\",\"yuml\":\"ÿ\",\"Yuml\":\"Ÿ\",\"Zacute\":\"Ź\",\"zacute\":\"ź\",\"Zcaron\":\"Ž\",\"zcaron\":\"ž\",\"Zcy\":\"З\",\"zcy\":\"з\",\"Zdot\":\"Ż\",\"zdot\":\"ż\",\"zeetrf\":\"ℨ\",\"ZeroWidthSpace\":\"​\",\"Zeta\":\"Ζ\",\"zeta\":\"ζ\",\"zfr\":\"𝔷\",\"Zfr\":\"ℨ\",\"ZHcy\":\"Ж\",\"zhcy\":\"ж\",\"zigrarr\":\"⇝\",\"zopf\":\"𝕫\",\"Zopf\":\"ℤ\",\"Zscr\":\"𝒵\",\"zscr\":\"𝓏\",\"zwj\":\"‍\",\"zwnj\":\"‌\"}");

/***/ }),

/***/ 835282:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"Aacute\":\"Á\",\"aacute\":\"á\",\"Acirc\":\"Â\",\"acirc\":\"â\",\"acute\":\"´\",\"AElig\":\"Æ\",\"aelig\":\"æ\",\"Agrave\":\"À\",\"agrave\":\"à\",\"amp\":\"&\",\"AMP\":\"&\",\"Aring\":\"Å\",\"aring\":\"å\",\"Atilde\":\"Ã\",\"atilde\":\"ã\",\"Auml\":\"Ä\",\"auml\":\"ä\",\"brvbar\":\"¦\",\"Ccedil\":\"Ç\",\"ccedil\":\"ç\",\"cedil\":\"¸\",\"cent\":\"¢\",\"copy\":\"©\",\"COPY\":\"©\",\"curren\":\"¤\",\"deg\":\"°\",\"divide\":\"÷\",\"Eacute\":\"É\",\"eacute\":\"é\",\"Ecirc\":\"Ê\",\"ecirc\":\"ê\",\"Egrave\":\"È\",\"egrave\":\"è\",\"ETH\":\"Ð\",\"eth\":\"ð\",\"Euml\":\"Ë\",\"euml\":\"ë\",\"frac12\":\"½\",\"frac14\":\"¼\",\"frac34\":\"¾\",\"gt\":\">\",\"GT\":\">\",\"Iacute\":\"Í\",\"iacute\":\"í\",\"Icirc\":\"Î\",\"icirc\":\"î\",\"iexcl\":\"¡\",\"Igrave\":\"Ì\",\"igrave\":\"ì\",\"iquest\":\"¿\",\"Iuml\":\"Ï\",\"iuml\":\"ï\",\"laquo\":\"«\",\"lt\":\"<\",\"LT\":\"<\",\"macr\":\"¯\",\"micro\":\"µ\",\"middot\":\"·\",\"nbsp\":\" \",\"not\":\"¬\",\"Ntilde\":\"Ñ\",\"ntilde\":\"ñ\",\"Oacute\":\"Ó\",\"oacute\":\"ó\",\"Ocirc\":\"Ô\",\"ocirc\":\"ô\",\"Ograve\":\"Ò\",\"ograve\":\"ò\",\"ordf\":\"ª\",\"ordm\":\"º\",\"Oslash\":\"Ø\",\"oslash\":\"ø\",\"Otilde\":\"Õ\",\"otilde\":\"õ\",\"Ouml\":\"Ö\",\"ouml\":\"ö\",\"para\":\"¶\",\"plusmn\":\"±\",\"pound\":\"£\",\"quot\":\"\\\"\",\"QUOT\":\"\\\"\",\"raquo\":\"»\",\"reg\":\"®\",\"REG\":\"®\",\"sect\":\"§\",\"shy\":\"­\",\"sup1\":\"¹\",\"sup2\":\"²\",\"sup3\":\"³\",\"szlig\":\"ß\",\"THORN\":\"Þ\",\"thorn\":\"þ\",\"times\":\"×\",\"Uacute\":\"Ú\",\"uacute\":\"ú\",\"Ucirc\":\"Û\",\"ucirc\":\"û\",\"Ugrave\":\"Ù\",\"ugrave\":\"ù\",\"uml\":\"¨\",\"Uuml\":\"Ü\",\"uuml\":\"ü\",\"Yacute\":\"Ý\",\"yacute\":\"ý\",\"yen\":\"¥\",\"yuml\":\"ÿ\"}");

/***/ }),

/***/ 477761:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"amp\":\"&\",\"apos\":\"'\",\"gt\":\">\",\"lt\":\"<\",\"quot\":\"\\\"\"}");

/***/ }),

/***/ 951091:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

var encode = __webpack_require__(387322),
    decode = __webpack_require__(444076);

exports.decode = function(data, level) {
    return (!level || level <= 0 ? decode.XML : decode.HTML)(data);
};

exports.decodeStrict = function(data, level) {
    return (!level || level <= 0 ? decode.XML : decode.HTMLStrict)(data);
};

exports.encode = function(data, level) {
    return (!level || level <= 0 ? encode.XML : encode.HTML)(data);
};

exports.encodeXML = encode.XML;

exports.encodeHTML4 = exports.encodeHTML5 = exports.encodeHTML = encode.HTML;

exports.decodeXML = exports.decodeXMLStrict = decode.XML;

exports.decodeHTML4 = exports.decodeHTML5 = exports.decodeHTML = decode.HTML;

exports.decodeHTML4Strict = exports.decodeHTML5Strict = exports.decodeHTMLStrict = decode.HTMLStrict;

exports.escape = encode.escape;


/***/ }),

/***/ 444076:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var entityMap = __webpack_require__(270752),
    legacyMap = __webpack_require__(485076),
    xmlMap = __webpack_require__(711083),
    decodeCodePoint = __webpack_require__(100026);

var decodeXMLStrict = getStrictDecoder(xmlMap),
    decodeHTMLStrict = getStrictDecoder(entityMap);

function getStrictDecoder(map) {
    var keys = Object.keys(map).join("|"),
        replace = getReplacer(map);

    keys += "|#[xX][\\da-fA-F]+|#\\d+";

    var re = new RegExp("&(?:" + keys + ");", "g");

    return function(str) {
        return String(str).replace(re, replace);
    };
}

var decodeHTML = (function() {
    var legacy = Object.keys(legacyMap).sort(sorter);

    var keys = Object.keys(entityMap).sort(sorter);

    for (var i = 0, j = 0; i < keys.length; i++) {
        if (legacy[j] === keys[i]) {
            keys[i] += ";?";
            j++;
        } else {
            keys[i] += ";";
        }
    }

    var re = new RegExp("&(?:" + keys.join("|") + "|#[xX][\\da-fA-F]+;?|#\\d+;?)", "g"),
        replace = getReplacer(entityMap);

    function replacer(str) {
        if (str.substr(-1) !== ";") str += ";";
        return replace(str);
    }

    //TODO consider creating a merged map
    return function(str) {
        return String(str).replace(re, replacer);
    };
})();

function sorter(a, b) {
    return a < b ? 1 : -1;
}

function getReplacer(map) {
    return function replace(str) {
        if (str.charAt(1) === "#") {
            if (str.charAt(2) === "X" || str.charAt(2) === "x") {
                return decodeCodePoint(parseInt(str.substr(3), 16));
            }
            return decodeCodePoint(parseInt(str.substr(2), 10));
        }
        return map[str.slice(1, -1)];
    };
}

module.exports = {
    XML: decodeXMLStrict,
    HTML: decodeHTML,
    HTMLStrict: decodeHTMLStrict
};


/***/ }),

/***/ 100026:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var decodeMap = __webpack_require__(772549);

module.exports = decodeCodePoint;

// modified version of https://github.com/mathiasbynens/he/blob/master/src/he.js#L94-L119
function decodeCodePoint(codePoint) {
    if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) {
        return "\uFFFD";
    }

    if (codePoint in decodeMap) {
        codePoint = decodeMap[codePoint];
    }

    var output = "";

    if (codePoint > 0xffff) {
        codePoint -= 0x10000;
        output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800);
        codePoint = 0xdc00 | (codePoint & 0x3ff);
    }

    output += String.fromCharCode(codePoint);
    return output;
}


/***/ }),

/***/ 387322:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

var inverseXML = getInverseObj(__webpack_require__(711083)),
    xmlReplacer = getInverseReplacer(inverseXML);

exports.XML = getInverse(inverseXML, xmlReplacer);

var inverseHTML = getInverseObj(__webpack_require__(270752)),
    htmlReplacer = getInverseReplacer(inverseHTML);

exports.HTML = getInverse(inverseHTML, htmlReplacer);

function getInverseObj(obj) {
    return Object.keys(obj)
        .sort()
        .reduce(function(inverse, name) {
            inverse[obj[name]] = "&" + name + ";";
            return inverse;
        }, {});
}

function getInverseReplacer(inverse) {
    var single = [],
        multiple = [];

    Object.keys(inverse).forEach(function(k) {
        if (k.length === 1) {
            single.push("\\" + k);
        } else {
            multiple.push(k);
        }
    });

    //TODO add ranges
    multiple.unshift("[" + single.join("") + "]");

    return new RegExp(multiple.join("|"), "g");
}

var re_nonASCII = /[^\0-\x7F]/g,
    re_astralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;

function singleCharReplacer(c) {
    return (
        "&#x" +
        c
            .charCodeAt(0)
            .toString(16)
            .toUpperCase() +
        ";"
    );
}

function astralReplacer(c) {
    // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
    var high = c.charCodeAt(0);
    var low = c.charCodeAt(1);
    var codePoint = (high - 0xd800) * 0x400 + low - 0xdc00 + 0x10000;
    return "&#x" + codePoint.toString(16).toUpperCase() + ";";
}

function getInverse(inverse, re) {
    function func(name) {
        return inverse[name];
    }

    return function(data) {
        return data
            .replace(re, func)
            .replace(re_astralSymbols, astralReplacer)
            .replace(re_nonASCII, singleCharReplacer);
    };
}

var re_xmlChars = getInverseReplacer(inverseXML);

function escapeXML(data) {
    return data
        .replace(re_xmlChars, singleCharReplacer)
        .replace(re_astralSymbols, astralReplacer)
        .replace(re_nonASCII, singleCharReplacer);
}

exports.escape = escapeXML;


/***/ }),

/***/ 772549:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"0\":65533,\"128\":8364,\"130\":8218,\"131\":402,\"132\":8222,\"133\":8230,\"134\":8224,\"135\":8225,\"136\":710,\"137\":8240,\"138\":352,\"139\":8249,\"140\":338,\"142\":381,\"145\":8216,\"146\":8217,\"147\":8220,\"148\":8221,\"149\":8226,\"150\":8211,\"151\":8212,\"152\":732,\"153\":8482,\"154\":353,\"155\":8250,\"156\":339,\"158\":382,\"159\":376}");

/***/ }),

/***/ 270752:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"Aacute\":\"Á\",\"aacute\":\"á\",\"Abreve\":\"Ă\",\"abreve\":\"ă\",\"ac\":\"∾\",\"acd\":\"∿\",\"acE\":\"∾̳\",\"Acirc\":\"Â\",\"acirc\":\"â\",\"acute\":\"´\",\"Acy\":\"А\",\"acy\":\"а\",\"AElig\":\"Æ\",\"aelig\":\"æ\",\"af\":\"⁡\",\"Afr\":\"𝔄\",\"afr\":\"𝔞\",\"Agrave\":\"À\",\"agrave\":\"à\",\"alefsym\":\"ℵ\",\"aleph\":\"ℵ\",\"Alpha\":\"Α\",\"alpha\":\"α\",\"Amacr\":\"Ā\",\"amacr\":\"ā\",\"amalg\":\"⨿\",\"amp\":\"&\",\"AMP\":\"&\",\"andand\":\"⩕\",\"And\":\"⩓\",\"and\":\"∧\",\"andd\":\"⩜\",\"andslope\":\"⩘\",\"andv\":\"⩚\",\"ang\":\"∠\",\"ange\":\"⦤\",\"angle\":\"∠\",\"angmsdaa\":\"⦨\",\"angmsdab\":\"⦩\",\"angmsdac\":\"⦪\",\"angmsdad\":\"⦫\",\"angmsdae\":\"⦬\",\"angmsdaf\":\"⦭\",\"angmsdag\":\"⦮\",\"angmsdah\":\"⦯\",\"angmsd\":\"∡\",\"angrt\":\"∟\",\"angrtvb\":\"⊾\",\"angrtvbd\":\"⦝\",\"angsph\":\"∢\",\"angst\":\"Å\",\"angzarr\":\"⍼\",\"Aogon\":\"Ą\",\"aogon\":\"ą\",\"Aopf\":\"𝔸\",\"aopf\":\"𝕒\",\"apacir\":\"⩯\",\"ap\":\"≈\",\"apE\":\"⩰\",\"ape\":\"≊\",\"apid\":\"≋\",\"apos\":\"'\",\"ApplyFunction\":\"⁡\",\"approx\":\"≈\",\"approxeq\":\"≊\",\"Aring\":\"Å\",\"aring\":\"å\",\"Ascr\":\"𝒜\",\"ascr\":\"𝒶\",\"Assign\":\"≔\",\"ast\":\"*\",\"asymp\":\"≈\",\"asympeq\":\"≍\",\"Atilde\":\"Ã\",\"atilde\":\"ã\",\"Auml\":\"Ä\",\"auml\":\"ä\",\"awconint\":\"∳\",\"awint\":\"⨑\",\"backcong\":\"≌\",\"backepsilon\":\"϶\",\"backprime\":\"‵\",\"backsim\":\"∽\",\"backsimeq\":\"⋍\",\"Backslash\":\"∖\",\"Barv\":\"⫧\",\"barvee\":\"⊽\",\"barwed\":\"⌅\",\"Barwed\":\"⌆\",\"barwedge\":\"⌅\",\"bbrk\":\"⎵\",\"bbrktbrk\":\"⎶\",\"bcong\":\"≌\",\"Bcy\":\"Б\",\"bcy\":\"б\",\"bdquo\":\"„\",\"becaus\":\"∵\",\"because\":\"∵\",\"Because\":\"∵\",\"bemptyv\":\"⦰\",\"bepsi\":\"϶\",\"bernou\":\"ℬ\",\"Bernoullis\":\"ℬ\",\"Beta\":\"Β\",\"beta\":\"β\",\"beth\":\"ℶ\",\"between\":\"≬\",\"Bfr\":\"𝔅\",\"bfr\":\"𝔟\",\"bigcap\":\"⋂\",\"bigcirc\":\"◯\",\"bigcup\":\"⋃\",\"bigodot\":\"⨀\",\"bigoplus\":\"⨁\",\"bigotimes\":\"⨂\",\"bigsqcup\":\"⨆\",\"bigstar\":\"★\",\"bigtriangledown\":\"▽\",\"bigtriangleup\":\"△\",\"biguplus\":\"⨄\",\"bigvee\":\"⋁\",\"bigwedge\":\"⋀\",\"bkarow\":\"⤍\",\"blacklozenge\":\"⧫\",\"blacksquare\":\"▪\",\"blacktriangle\":\"▴\",\"blacktriangledown\":\"▾\",\"blacktriangleleft\":\"◂\",\"blacktriangleright\":\"▸\",\"blank\":\"␣\",\"blk12\":\"▒\",\"blk14\":\"░\",\"blk34\":\"▓\",\"block\":\"█\",\"bne\":\"=⃥\",\"bnequiv\":\"≡⃥\",\"bNot\":\"⫭\",\"bnot\":\"⌐\",\"Bopf\":\"𝔹\",\"bopf\":\"𝕓\",\"bot\":\"⊥\",\"bottom\":\"⊥\",\"bowtie\":\"⋈\",\"boxbox\":\"⧉\",\"boxdl\":\"┐\",\"boxdL\":\"╕\",\"boxDl\":\"╖\",\"boxDL\":\"╗\",\"boxdr\":\"┌\",\"boxdR\":\"╒\",\"boxDr\":\"╓\",\"boxDR\":\"╔\",\"boxh\":\"─\",\"boxH\":\"═\",\"boxhd\":\"┬\",\"boxHd\":\"╤\",\"boxhD\":\"╥\",\"boxHD\":\"╦\",\"boxhu\":\"┴\",\"boxHu\":\"╧\",\"boxhU\":\"╨\",\"boxHU\":\"╩\",\"boxminus\":\"⊟\",\"boxplus\":\"⊞\",\"boxtimes\":\"⊠\",\"boxul\":\"┘\",\"boxuL\":\"╛\",\"boxUl\":\"╜\",\"boxUL\":\"╝\",\"boxur\":\"└\",\"boxuR\":\"╘\",\"boxUr\":\"╙\",\"boxUR\":\"╚\",\"boxv\":\"│\",\"boxV\":\"║\",\"boxvh\":\"┼\",\"boxvH\":\"╪\",\"boxVh\":\"╫\",\"boxVH\":\"╬\",\"boxvl\":\"┤\",\"boxvL\":\"╡\",\"boxVl\":\"╢\",\"boxVL\":\"╣\",\"boxvr\":\"├\",\"boxvR\":\"╞\",\"boxVr\":\"╟\",\"boxVR\":\"╠\",\"bprime\":\"‵\",\"breve\":\"˘\",\"Breve\":\"˘\",\"brvbar\":\"¦\",\"bscr\":\"𝒷\",\"Bscr\":\"ℬ\",\"bsemi\":\"⁏\",\"bsim\":\"∽\",\"bsime\":\"⋍\",\"bsolb\":\"⧅\",\"bsol\":\"\\\\\",\"bsolhsub\":\"⟈\",\"bull\":\"•\",\"bullet\":\"•\",\"bump\":\"≎\",\"bumpE\":\"⪮\",\"bumpe\":\"≏\",\"Bumpeq\":\"≎\",\"bumpeq\":\"≏\",\"Cacute\":\"Ć\",\"cacute\":\"ć\",\"capand\":\"⩄\",\"capbrcup\":\"⩉\",\"capcap\":\"⩋\",\"cap\":\"∩\",\"Cap\":\"⋒\",\"capcup\":\"⩇\",\"capdot\":\"⩀\",\"CapitalDifferentialD\":\"ⅅ\",\"caps\":\"∩︀\",\"caret\":\"⁁\",\"caron\":\"ˇ\",\"Cayleys\":\"ℭ\",\"ccaps\":\"⩍\",\"Ccaron\":\"Č\",\"ccaron\":\"č\",\"Ccedil\":\"Ç\",\"ccedil\":\"ç\",\"Ccirc\":\"Ĉ\",\"ccirc\":\"ĉ\",\"Cconint\":\"∰\",\"ccups\":\"⩌\",\"ccupssm\":\"⩐\",\"Cdot\":\"Ċ\",\"cdot\":\"ċ\",\"cedil\":\"¸\",\"Cedilla\":\"¸\",\"cemptyv\":\"⦲\",\"cent\":\"¢\",\"centerdot\":\"·\",\"CenterDot\":\"·\",\"cfr\":\"𝔠\",\"Cfr\":\"ℭ\",\"CHcy\":\"Ч\",\"chcy\":\"ч\",\"check\":\"✓\",\"checkmark\":\"✓\",\"Chi\":\"Χ\",\"chi\":\"χ\",\"circ\":\"ˆ\",\"circeq\":\"≗\",\"circlearrowleft\":\"↺\",\"circlearrowright\":\"↻\",\"circledast\":\"⊛\",\"circledcirc\":\"⊚\",\"circleddash\":\"⊝\",\"CircleDot\":\"⊙\",\"circledR\":\"®\",\"circledS\":\"Ⓢ\",\"CircleMinus\":\"⊖\",\"CirclePlus\":\"⊕\",\"CircleTimes\":\"⊗\",\"cir\":\"○\",\"cirE\":\"⧃\",\"cire\":\"≗\",\"cirfnint\":\"⨐\",\"cirmid\":\"⫯\",\"cirscir\":\"⧂\",\"ClockwiseContourIntegral\":\"∲\",\"CloseCurlyDoubleQuote\":\"”\",\"CloseCurlyQuote\":\"’\",\"clubs\":\"♣\",\"clubsuit\":\"♣\",\"colon\":\":\",\"Colon\":\"∷\",\"Colone\":\"⩴\",\"colone\":\"≔\",\"coloneq\":\"≔\",\"comma\":\",\",\"commat\":\"@\",\"comp\":\"∁\",\"compfn\":\"∘\",\"complement\":\"∁\",\"complexes\":\"ℂ\",\"cong\":\"≅\",\"congdot\":\"⩭\",\"Congruent\":\"≡\",\"conint\":\"∮\",\"Conint\":\"∯\",\"ContourIntegral\":\"∮\",\"copf\":\"𝕔\",\"Copf\":\"ℂ\",\"coprod\":\"∐\",\"Coproduct\":\"∐\",\"copy\":\"©\",\"COPY\":\"©\",\"copysr\":\"℗\",\"CounterClockwiseContourIntegral\":\"∳\",\"crarr\":\"↵\",\"cross\":\"✗\",\"Cross\":\"⨯\",\"Cscr\":\"𝒞\",\"cscr\":\"𝒸\",\"csub\":\"⫏\",\"csube\":\"⫑\",\"csup\":\"⫐\",\"csupe\":\"⫒\",\"ctdot\":\"⋯\",\"cudarrl\":\"⤸\",\"cudarrr\":\"⤵\",\"cuepr\":\"⋞\",\"cuesc\":\"⋟\",\"cularr\":\"↶\",\"cularrp\":\"⤽\",\"cupbrcap\":\"⩈\",\"cupcap\":\"⩆\",\"CupCap\":\"≍\",\"cup\":\"∪\",\"Cup\":\"⋓\",\"cupcup\":\"⩊\",\"cupdot\":\"⊍\",\"cupor\":\"⩅\",\"cups\":\"∪︀\",\"curarr\":\"↷\",\"curarrm\":\"⤼\",\"curlyeqprec\":\"⋞\",\"curlyeqsucc\":\"⋟\",\"curlyvee\":\"⋎\",\"curlywedge\":\"⋏\",\"curren\":\"¤\",\"curvearrowleft\":\"↶\",\"curvearrowright\":\"↷\",\"cuvee\":\"⋎\",\"cuwed\":\"⋏\",\"cwconint\":\"∲\",\"cwint\":\"∱\",\"cylcty\":\"⌭\",\"dagger\":\"†\",\"Dagger\":\"‡\",\"daleth\":\"ℸ\",\"darr\":\"↓\",\"Darr\":\"↡\",\"dArr\":\"⇓\",\"dash\":\"‐\",\"Dashv\":\"⫤\",\"dashv\":\"⊣\",\"dbkarow\":\"⤏\",\"dblac\":\"˝\",\"Dcaron\":\"Ď\",\"dcaron\":\"ď\",\"Dcy\":\"Д\",\"dcy\":\"д\",\"ddagger\":\"‡\",\"ddarr\":\"⇊\",\"DD\":\"ⅅ\",\"dd\":\"ⅆ\",\"DDotrahd\":\"⤑\",\"ddotseq\":\"⩷\",\"deg\":\"°\",\"Del\":\"∇\",\"Delta\":\"Δ\",\"delta\":\"δ\",\"demptyv\":\"⦱\",\"dfisht\":\"⥿\",\"Dfr\":\"𝔇\",\"dfr\":\"𝔡\",\"dHar\":\"⥥\",\"dharl\":\"⇃\",\"dharr\":\"⇂\",\"DiacriticalAcute\":\"´\",\"DiacriticalDot\":\"˙\",\"DiacriticalDoubleAcute\":\"˝\",\"DiacriticalGrave\":\"`\",\"DiacriticalTilde\":\"˜\",\"diam\":\"⋄\",\"diamond\":\"⋄\",\"Diamond\":\"⋄\",\"diamondsuit\":\"♦\",\"diams\":\"♦\",\"die\":\"¨\",\"DifferentialD\":\"ⅆ\",\"digamma\":\"ϝ\",\"disin\":\"⋲\",\"div\":\"÷\",\"divide\":\"÷\",\"divideontimes\":\"⋇\",\"divonx\":\"⋇\",\"DJcy\":\"Ђ\",\"djcy\":\"ђ\",\"dlcorn\":\"⌞\",\"dlcrop\":\"⌍\",\"dollar\":\"$\",\"Dopf\":\"𝔻\",\"dopf\":\"𝕕\",\"Dot\":\"¨\",\"dot\":\"˙\",\"DotDot\":\"⃜\",\"doteq\":\"≐\",\"doteqdot\":\"≑\",\"DotEqual\":\"≐\",\"dotminus\":\"∸\",\"dotplus\":\"∔\",\"dotsquare\":\"⊡\",\"doublebarwedge\":\"⌆\",\"DoubleContourIntegral\":\"∯\",\"DoubleDot\":\"¨\",\"DoubleDownArrow\":\"⇓\",\"DoubleLeftArrow\":\"⇐\",\"DoubleLeftRightArrow\":\"⇔\",\"DoubleLeftTee\":\"⫤\",\"DoubleLongLeftArrow\":\"⟸\",\"DoubleLongLeftRightArrow\":\"⟺\",\"DoubleLongRightArrow\":\"⟹\",\"DoubleRightArrow\":\"⇒\",\"DoubleRightTee\":\"⊨\",\"DoubleUpArrow\":\"⇑\",\"DoubleUpDownArrow\":\"⇕\",\"DoubleVerticalBar\":\"∥\",\"DownArrowBar\":\"⤓\",\"downarrow\":\"↓\",\"DownArrow\":\"↓\",\"Downarrow\":\"⇓\",\"DownArrowUpArrow\":\"⇵\",\"DownBreve\":\"̑\",\"downdownarrows\":\"⇊\",\"downharpoonleft\":\"⇃\",\"downharpoonright\":\"⇂\",\"DownLeftRightVector\":\"⥐\",\"DownLeftTeeVector\":\"⥞\",\"DownLeftVectorBar\":\"⥖\",\"DownLeftVector\":\"↽\",\"DownRightTeeVector\":\"⥟\",\"DownRightVectorBar\":\"⥗\",\"DownRightVector\":\"⇁\",\"DownTeeArrow\":\"↧\",\"DownTee\":\"⊤\",\"drbkarow\":\"⤐\",\"drcorn\":\"⌟\",\"drcrop\":\"⌌\",\"Dscr\":\"𝒟\",\"dscr\":\"𝒹\",\"DScy\":\"Ѕ\",\"dscy\":\"ѕ\",\"dsol\":\"⧶\",\"Dstrok\":\"Đ\",\"dstrok\":\"đ\",\"dtdot\":\"⋱\",\"dtri\":\"▿\",\"dtrif\":\"▾\",\"duarr\":\"⇵\",\"duhar\":\"⥯\",\"dwangle\":\"⦦\",\"DZcy\":\"Џ\",\"dzcy\":\"џ\",\"dzigrarr\":\"⟿\",\"Eacute\":\"É\",\"eacute\":\"é\",\"easter\":\"⩮\",\"Ecaron\":\"Ě\",\"ecaron\":\"ě\",\"Ecirc\":\"Ê\",\"ecirc\":\"ê\",\"ecir\":\"≖\",\"ecolon\":\"≕\",\"Ecy\":\"Э\",\"ecy\":\"э\",\"eDDot\":\"⩷\",\"Edot\":\"Ė\",\"edot\":\"ė\",\"eDot\":\"≑\",\"ee\":\"ⅇ\",\"efDot\":\"≒\",\"Efr\":\"𝔈\",\"efr\":\"𝔢\",\"eg\":\"⪚\",\"Egrave\":\"È\",\"egrave\":\"è\",\"egs\":\"⪖\",\"egsdot\":\"⪘\",\"el\":\"⪙\",\"Element\":\"∈\",\"elinters\":\"⏧\",\"ell\":\"ℓ\",\"els\":\"⪕\",\"elsdot\":\"⪗\",\"Emacr\":\"Ē\",\"emacr\":\"ē\",\"empty\":\"∅\",\"emptyset\":\"∅\",\"EmptySmallSquare\":\"◻\",\"emptyv\":\"∅\",\"EmptyVerySmallSquare\":\"▫\",\"emsp13\":\" \",\"emsp14\":\" \",\"emsp\":\" \",\"ENG\":\"Ŋ\",\"eng\":\"ŋ\",\"ensp\":\" \",\"Eogon\":\"Ę\",\"eogon\":\"ę\",\"Eopf\":\"𝔼\",\"eopf\":\"𝕖\",\"epar\":\"⋕\",\"eparsl\":\"⧣\",\"eplus\":\"⩱\",\"epsi\":\"ε\",\"Epsilon\":\"Ε\",\"epsilon\":\"ε\",\"epsiv\":\"ϵ\",\"eqcirc\":\"≖\",\"eqcolon\":\"≕\",\"eqsim\":\"≂\",\"eqslantgtr\":\"⪖\",\"eqslantless\":\"⪕\",\"Equal\":\"⩵\",\"equals\":\"=\",\"EqualTilde\":\"≂\",\"equest\":\"≟\",\"Equilibrium\":\"⇌\",\"equiv\":\"≡\",\"equivDD\":\"⩸\",\"eqvparsl\":\"⧥\",\"erarr\":\"⥱\",\"erDot\":\"≓\",\"escr\":\"ℯ\",\"Escr\":\"ℰ\",\"esdot\":\"≐\",\"Esim\":\"⩳\",\"esim\":\"≂\",\"Eta\":\"Η\",\"eta\":\"η\",\"ETH\":\"Ð\",\"eth\":\"ð\",\"Euml\":\"Ë\",\"euml\":\"ë\",\"euro\":\"€\",\"excl\":\"!\",\"exist\":\"∃\",\"Exists\":\"∃\",\"expectation\":\"ℰ\",\"exponentiale\":\"ⅇ\",\"ExponentialE\":\"ⅇ\",\"fallingdotseq\":\"≒\",\"Fcy\":\"Ф\",\"fcy\":\"ф\",\"female\":\"♀\",\"ffilig\":\"ﬃ\",\"fflig\":\"ﬀ\",\"ffllig\":\"ﬄ\",\"Ffr\":\"𝔉\",\"ffr\":\"𝔣\",\"filig\":\"ﬁ\",\"FilledSmallSquare\":\"◼\",\"FilledVerySmallSquare\":\"▪\",\"fjlig\":\"fj\",\"flat\":\"♭\",\"fllig\":\"ﬂ\",\"fltns\":\"▱\",\"fnof\":\"ƒ\",\"Fopf\":\"𝔽\",\"fopf\":\"𝕗\",\"forall\":\"∀\",\"ForAll\":\"∀\",\"fork\":\"⋔\",\"forkv\":\"⫙\",\"Fouriertrf\":\"ℱ\",\"fpartint\":\"⨍\",\"frac12\":\"½\",\"frac13\":\"⅓\",\"frac14\":\"¼\",\"frac15\":\"⅕\",\"frac16\":\"⅙\",\"frac18\":\"⅛\",\"frac23\":\"⅔\",\"frac25\":\"⅖\",\"frac34\":\"¾\",\"frac35\":\"⅗\",\"frac38\":\"⅜\",\"frac45\":\"⅘\",\"frac56\":\"⅚\",\"frac58\":\"⅝\",\"frac78\":\"⅞\",\"frasl\":\"⁄\",\"frown\":\"⌢\",\"fscr\":\"𝒻\",\"Fscr\":\"ℱ\",\"gacute\":\"ǵ\",\"Gamma\":\"Γ\",\"gamma\":\"γ\",\"Gammad\":\"Ϝ\",\"gammad\":\"ϝ\",\"gap\":\"⪆\",\"Gbreve\":\"Ğ\",\"gbreve\":\"ğ\",\"Gcedil\":\"Ģ\",\"Gcirc\":\"Ĝ\",\"gcirc\":\"ĝ\",\"Gcy\":\"Г\",\"gcy\":\"г\",\"Gdot\":\"Ġ\",\"gdot\":\"ġ\",\"ge\":\"≥\",\"gE\":\"≧\",\"gEl\":\"⪌\",\"gel\":\"⋛\",\"geq\":\"≥\",\"geqq\":\"≧\",\"geqslant\":\"⩾\",\"gescc\":\"⪩\",\"ges\":\"⩾\",\"gesdot\":\"⪀\",\"gesdoto\":\"⪂\",\"gesdotol\":\"⪄\",\"gesl\":\"⋛︀\",\"gesles\":\"⪔\",\"Gfr\":\"𝔊\",\"gfr\":\"𝔤\",\"gg\":\"≫\",\"Gg\":\"⋙\",\"ggg\":\"⋙\",\"gimel\":\"ℷ\",\"GJcy\":\"Ѓ\",\"gjcy\":\"ѓ\",\"gla\":\"⪥\",\"gl\":\"≷\",\"glE\":\"⪒\",\"glj\":\"⪤\",\"gnap\":\"⪊\",\"gnapprox\":\"⪊\",\"gne\":\"⪈\",\"gnE\":\"≩\",\"gneq\":\"⪈\",\"gneqq\":\"≩\",\"gnsim\":\"⋧\",\"Gopf\":\"𝔾\",\"gopf\":\"𝕘\",\"grave\":\"`\",\"GreaterEqual\":\"≥\",\"GreaterEqualLess\":\"⋛\",\"GreaterFullEqual\":\"≧\",\"GreaterGreater\":\"⪢\",\"GreaterLess\":\"≷\",\"GreaterSlantEqual\":\"⩾\",\"GreaterTilde\":\"≳\",\"Gscr\":\"𝒢\",\"gscr\":\"ℊ\",\"gsim\":\"≳\",\"gsime\":\"⪎\",\"gsiml\":\"⪐\",\"gtcc\":\"⪧\",\"gtcir\":\"⩺\",\"gt\":\">\",\"GT\":\">\",\"Gt\":\"≫\",\"gtdot\":\"⋗\",\"gtlPar\":\"⦕\",\"gtquest\":\"⩼\",\"gtrapprox\":\"⪆\",\"gtrarr\":\"⥸\",\"gtrdot\":\"⋗\",\"gtreqless\":\"⋛\",\"gtreqqless\":\"⪌\",\"gtrless\":\"≷\",\"gtrsim\":\"≳\",\"gvertneqq\":\"≩︀\",\"gvnE\":\"≩︀\",\"Hacek\":\"ˇ\",\"hairsp\":\" \",\"half\":\"½\",\"hamilt\":\"ℋ\",\"HARDcy\":\"Ъ\",\"hardcy\":\"ъ\",\"harrcir\":\"⥈\",\"harr\":\"↔\",\"hArr\":\"⇔\",\"harrw\":\"↭\",\"Hat\":\"^\",\"hbar\":\"ℏ\",\"Hcirc\":\"Ĥ\",\"hcirc\":\"ĥ\",\"hearts\":\"♥\",\"heartsuit\":\"♥\",\"hellip\":\"…\",\"hercon\":\"⊹\",\"hfr\":\"𝔥\",\"Hfr\":\"ℌ\",\"HilbertSpace\":\"ℋ\",\"hksearow\":\"⤥\",\"hkswarow\":\"⤦\",\"hoarr\":\"⇿\",\"homtht\":\"∻\",\"hookleftarrow\":\"↩\",\"hookrightarrow\":\"↪\",\"hopf\":\"𝕙\",\"Hopf\":\"ℍ\",\"horbar\":\"―\",\"HorizontalLine\":\"─\",\"hscr\":\"𝒽\",\"Hscr\":\"ℋ\",\"hslash\":\"ℏ\",\"Hstrok\":\"Ħ\",\"hstrok\":\"ħ\",\"HumpDownHump\":\"≎\",\"HumpEqual\":\"≏\",\"hybull\":\"⁃\",\"hyphen\":\"‐\",\"Iacute\":\"Í\",\"iacute\":\"í\",\"ic\":\"⁣\",\"Icirc\":\"Î\",\"icirc\":\"î\",\"Icy\":\"И\",\"icy\":\"и\",\"Idot\":\"İ\",\"IEcy\":\"Е\",\"iecy\":\"е\",\"iexcl\":\"¡\",\"iff\":\"⇔\",\"ifr\":\"𝔦\",\"Ifr\":\"ℑ\",\"Igrave\":\"Ì\",\"igrave\":\"ì\",\"ii\":\"ⅈ\",\"iiiint\":\"⨌\",\"iiint\":\"∭\",\"iinfin\":\"⧜\",\"iiota\":\"℩\",\"IJlig\":\"Ĳ\",\"ijlig\":\"ĳ\",\"Imacr\":\"Ī\",\"imacr\":\"ī\",\"image\":\"ℑ\",\"ImaginaryI\":\"ⅈ\",\"imagline\":\"ℐ\",\"imagpart\":\"ℑ\",\"imath\":\"ı\",\"Im\":\"ℑ\",\"imof\":\"⊷\",\"imped\":\"Ƶ\",\"Implies\":\"⇒\",\"incare\":\"℅\",\"in\":\"∈\",\"infin\":\"∞\",\"infintie\":\"⧝\",\"inodot\":\"ı\",\"intcal\":\"⊺\",\"int\":\"∫\",\"Int\":\"∬\",\"integers\":\"ℤ\",\"Integral\":\"∫\",\"intercal\":\"⊺\",\"Intersection\":\"⋂\",\"intlarhk\":\"⨗\",\"intprod\":\"⨼\",\"InvisibleComma\":\"⁣\",\"InvisibleTimes\":\"⁢\",\"IOcy\":\"Ё\",\"iocy\":\"ё\",\"Iogon\":\"Į\",\"iogon\":\"į\",\"Iopf\":\"𝕀\",\"iopf\":\"𝕚\",\"Iota\":\"Ι\",\"iota\":\"ι\",\"iprod\":\"⨼\",\"iquest\":\"¿\",\"iscr\":\"𝒾\",\"Iscr\":\"ℐ\",\"isin\":\"∈\",\"isindot\":\"⋵\",\"isinE\":\"⋹\",\"isins\":\"⋴\",\"isinsv\":\"⋳\",\"isinv\":\"∈\",\"it\":\"⁢\",\"Itilde\":\"Ĩ\",\"itilde\":\"ĩ\",\"Iukcy\":\"І\",\"iukcy\":\"і\",\"Iuml\":\"Ï\",\"iuml\":\"ï\",\"Jcirc\":\"Ĵ\",\"jcirc\":\"ĵ\",\"Jcy\":\"Й\",\"jcy\":\"й\",\"Jfr\":\"𝔍\",\"jfr\":\"𝔧\",\"jmath\":\"ȷ\",\"Jopf\":\"𝕁\",\"jopf\":\"𝕛\",\"Jscr\":\"𝒥\",\"jscr\":\"𝒿\",\"Jsercy\":\"Ј\",\"jsercy\":\"ј\",\"Jukcy\":\"Є\",\"jukcy\":\"є\",\"Kappa\":\"Κ\",\"kappa\":\"κ\",\"kappav\":\"ϰ\",\"Kcedil\":\"Ķ\",\"kcedil\":\"ķ\",\"Kcy\":\"К\",\"kcy\":\"к\",\"Kfr\":\"𝔎\",\"kfr\":\"𝔨\",\"kgreen\":\"ĸ\",\"KHcy\":\"Х\",\"khcy\":\"х\",\"KJcy\":\"Ќ\",\"kjcy\":\"ќ\",\"Kopf\":\"𝕂\",\"kopf\":\"𝕜\",\"Kscr\":\"𝒦\",\"kscr\":\"𝓀\",\"lAarr\":\"⇚\",\"Lacute\":\"Ĺ\",\"lacute\":\"ĺ\",\"laemptyv\":\"⦴\",\"lagran\":\"ℒ\",\"Lambda\":\"Λ\",\"lambda\":\"λ\",\"lang\":\"⟨\",\"Lang\":\"⟪\",\"langd\":\"⦑\",\"langle\":\"⟨\",\"lap\":\"⪅\",\"Laplacetrf\":\"ℒ\",\"laquo\":\"«\",\"larrb\":\"⇤\",\"larrbfs\":\"⤟\",\"larr\":\"←\",\"Larr\":\"↞\",\"lArr\":\"⇐\",\"larrfs\":\"⤝\",\"larrhk\":\"↩\",\"larrlp\":\"↫\",\"larrpl\":\"⤹\",\"larrsim\":\"⥳\",\"larrtl\":\"↢\",\"latail\":\"⤙\",\"lAtail\":\"⤛\",\"lat\":\"⪫\",\"late\":\"⪭\",\"lates\":\"⪭︀\",\"lbarr\":\"⤌\",\"lBarr\":\"⤎\",\"lbbrk\":\"❲\",\"lbrace\":\"{\",\"lbrack\":\"[\",\"lbrke\":\"⦋\",\"lbrksld\":\"⦏\",\"lbrkslu\":\"⦍\",\"Lcaron\":\"Ľ\",\"lcaron\":\"ľ\",\"Lcedil\":\"Ļ\",\"lcedil\":\"ļ\",\"lceil\":\"⌈\",\"lcub\":\"{\",\"Lcy\":\"Л\",\"lcy\":\"л\",\"ldca\":\"⤶\",\"ldquo\":\"“\",\"ldquor\":\"„\",\"ldrdhar\":\"⥧\",\"ldrushar\":\"⥋\",\"ldsh\":\"↲\",\"le\":\"≤\",\"lE\":\"≦\",\"LeftAngleBracket\":\"⟨\",\"LeftArrowBar\":\"⇤\",\"leftarrow\":\"←\",\"LeftArrow\":\"←\",\"Leftarrow\":\"⇐\",\"LeftArrowRightArrow\":\"⇆\",\"leftarrowtail\":\"↢\",\"LeftCeiling\":\"⌈\",\"LeftDoubleBracket\":\"⟦\",\"LeftDownTeeVector\":\"⥡\",\"LeftDownVectorBar\":\"⥙\",\"LeftDownVector\":\"⇃\",\"LeftFloor\":\"⌊\",\"leftharpoondown\":\"↽\",\"leftharpoonup\":\"↼\",\"leftleftarrows\":\"⇇\",\"leftrightarrow\":\"↔\",\"LeftRightArrow\":\"↔\",\"Leftrightarrow\":\"⇔\",\"leftrightarrows\":\"⇆\",\"leftrightharpoons\":\"⇋\",\"leftrightsquigarrow\":\"↭\",\"LeftRightVector\":\"⥎\",\"LeftTeeArrow\":\"↤\",\"LeftTee\":\"⊣\",\"LeftTeeVector\":\"⥚\",\"leftthreetimes\":\"⋋\",\"LeftTriangleBar\":\"⧏\",\"LeftTriangle\":\"⊲\",\"LeftTriangleEqual\":\"⊴\",\"LeftUpDownVector\":\"⥑\",\"LeftUpTeeVector\":\"⥠\",\"LeftUpVectorBar\":\"⥘\",\"LeftUpVector\":\"↿\",\"LeftVectorBar\":\"⥒\",\"LeftVector\":\"↼\",\"lEg\":\"⪋\",\"leg\":\"⋚\",\"leq\":\"≤\",\"leqq\":\"≦\",\"leqslant\":\"⩽\",\"lescc\":\"⪨\",\"les\":\"⩽\",\"lesdot\":\"⩿\",\"lesdoto\":\"⪁\",\"lesdotor\":\"⪃\",\"lesg\":\"⋚︀\",\"lesges\":\"⪓\",\"lessapprox\":\"⪅\",\"lessdot\":\"⋖\",\"lesseqgtr\":\"⋚\",\"lesseqqgtr\":\"⪋\",\"LessEqualGreater\":\"⋚\",\"LessFullEqual\":\"≦\",\"LessGreater\":\"≶\",\"lessgtr\":\"≶\",\"LessLess\":\"⪡\",\"lesssim\":\"≲\",\"LessSlantEqual\":\"⩽\",\"LessTilde\":\"≲\",\"lfisht\":\"⥼\",\"lfloor\":\"⌊\",\"Lfr\":\"𝔏\",\"lfr\":\"𝔩\",\"lg\":\"≶\",\"lgE\":\"⪑\",\"lHar\":\"⥢\",\"lhard\":\"↽\",\"lharu\":\"↼\",\"lharul\":\"⥪\",\"lhblk\":\"▄\",\"LJcy\":\"Љ\",\"ljcy\":\"љ\",\"llarr\":\"⇇\",\"ll\":\"≪\",\"Ll\":\"⋘\",\"llcorner\":\"⌞\",\"Lleftarrow\":\"⇚\",\"llhard\":\"⥫\",\"lltri\":\"◺\",\"Lmidot\":\"Ŀ\",\"lmidot\":\"ŀ\",\"lmoustache\":\"⎰\",\"lmoust\":\"⎰\",\"lnap\":\"⪉\",\"lnapprox\":\"⪉\",\"lne\":\"⪇\",\"lnE\":\"≨\",\"lneq\":\"⪇\",\"lneqq\":\"≨\",\"lnsim\":\"⋦\",\"loang\":\"⟬\",\"loarr\":\"⇽\",\"lobrk\":\"⟦\",\"longleftarrow\":\"⟵\",\"LongLeftArrow\":\"⟵\",\"Longleftarrow\":\"⟸\",\"longleftrightarrow\":\"⟷\",\"LongLeftRightArrow\":\"⟷\",\"Longleftrightarrow\":\"⟺\",\"longmapsto\":\"⟼\",\"longrightarrow\":\"⟶\",\"LongRightArrow\":\"⟶\",\"Longrightarrow\":\"⟹\",\"looparrowleft\":\"↫\",\"looparrowright\":\"↬\",\"lopar\":\"⦅\",\"Lopf\":\"𝕃\",\"lopf\":\"𝕝\",\"loplus\":\"⨭\",\"lotimes\":\"⨴\",\"lowast\":\"∗\",\"lowbar\":\"_\",\"LowerLeftArrow\":\"↙\",\"LowerRightArrow\":\"↘\",\"loz\":\"◊\",\"lozenge\":\"◊\",\"lozf\":\"⧫\",\"lpar\":\"(\",\"lparlt\":\"⦓\",\"lrarr\":\"⇆\",\"lrcorner\":\"⌟\",\"lrhar\":\"⇋\",\"lrhard\":\"⥭\",\"lrm\":\"‎\",\"lrtri\":\"⊿\",\"lsaquo\":\"‹\",\"lscr\":\"𝓁\",\"Lscr\":\"ℒ\",\"lsh\":\"↰\",\"Lsh\":\"↰\",\"lsim\":\"≲\",\"lsime\":\"⪍\",\"lsimg\":\"⪏\",\"lsqb\":\"[\",\"lsquo\":\"‘\",\"lsquor\":\"‚\",\"Lstrok\":\"Ł\",\"lstrok\":\"ł\",\"ltcc\":\"⪦\",\"ltcir\":\"⩹\",\"lt\":\"<\",\"LT\":\"<\",\"Lt\":\"≪\",\"ltdot\":\"⋖\",\"lthree\":\"⋋\",\"ltimes\":\"⋉\",\"ltlarr\":\"⥶\",\"ltquest\":\"⩻\",\"ltri\":\"◃\",\"ltrie\":\"⊴\",\"ltrif\":\"◂\",\"ltrPar\":\"⦖\",\"lurdshar\":\"⥊\",\"luruhar\":\"⥦\",\"lvertneqq\":\"≨︀\",\"lvnE\":\"≨︀\",\"macr\":\"¯\",\"male\":\"♂\",\"malt\":\"✠\",\"maltese\":\"✠\",\"Map\":\"⤅\",\"map\":\"↦\",\"mapsto\":\"↦\",\"mapstodown\":\"↧\",\"mapstoleft\":\"↤\",\"mapstoup\":\"↥\",\"marker\":\"▮\",\"mcomma\":\"⨩\",\"Mcy\":\"М\",\"mcy\":\"м\",\"mdash\":\"—\",\"mDDot\":\"∺\",\"measuredangle\":\"∡\",\"MediumSpace\":\" \",\"Mellintrf\":\"ℳ\",\"Mfr\":\"𝔐\",\"mfr\":\"𝔪\",\"mho\":\"℧\",\"micro\":\"µ\",\"midast\":\"*\",\"midcir\":\"⫰\",\"mid\":\"∣\",\"middot\":\"·\",\"minusb\":\"⊟\",\"minus\":\"−\",\"minusd\":\"∸\",\"minusdu\":\"⨪\",\"MinusPlus\":\"∓\",\"mlcp\":\"⫛\",\"mldr\":\"…\",\"mnplus\":\"∓\",\"models\":\"⊧\",\"Mopf\":\"𝕄\",\"mopf\":\"𝕞\",\"mp\":\"∓\",\"mscr\":\"𝓂\",\"Mscr\":\"ℳ\",\"mstpos\":\"∾\",\"Mu\":\"Μ\",\"mu\":\"μ\",\"multimap\":\"⊸\",\"mumap\":\"⊸\",\"nabla\":\"∇\",\"Nacute\":\"Ń\",\"nacute\":\"ń\",\"nang\":\"∠⃒\",\"nap\":\"≉\",\"napE\":\"⩰̸\",\"napid\":\"≋̸\",\"napos\":\"ŉ\",\"napprox\":\"≉\",\"natural\":\"♮\",\"naturals\":\"ℕ\",\"natur\":\"♮\",\"nbsp\":\" \",\"nbump\":\"≎̸\",\"nbumpe\":\"≏̸\",\"ncap\":\"⩃\",\"Ncaron\":\"Ň\",\"ncaron\":\"ň\",\"Ncedil\":\"Ņ\",\"ncedil\":\"ņ\",\"ncong\":\"≇\",\"ncongdot\":\"⩭̸\",\"ncup\":\"⩂\",\"Ncy\":\"Н\",\"ncy\":\"н\",\"ndash\":\"–\",\"nearhk\":\"⤤\",\"nearr\":\"↗\",\"neArr\":\"⇗\",\"nearrow\":\"↗\",\"ne\":\"≠\",\"nedot\":\"≐̸\",\"NegativeMediumSpace\":\"​\",\"NegativeThickSpace\":\"​\",\"NegativeThinSpace\":\"​\",\"NegativeVeryThinSpace\":\"​\",\"nequiv\":\"≢\",\"nesear\":\"⤨\",\"nesim\":\"≂̸\",\"NestedGreaterGreater\":\"≫\",\"NestedLessLess\":\"≪\",\"NewLine\":\"\\n\",\"nexist\":\"∄\",\"nexists\":\"∄\",\"Nfr\":\"𝔑\",\"nfr\":\"𝔫\",\"ngE\":\"≧̸\",\"nge\":\"≱\",\"ngeq\":\"≱\",\"ngeqq\":\"≧̸\",\"ngeqslant\":\"⩾̸\",\"nges\":\"⩾̸\",\"nGg\":\"⋙̸\",\"ngsim\":\"≵\",\"nGt\":\"≫⃒\",\"ngt\":\"≯\",\"ngtr\":\"≯\",\"nGtv\":\"≫̸\",\"nharr\":\"↮\",\"nhArr\":\"⇎\",\"nhpar\":\"⫲\",\"ni\":\"∋\",\"nis\":\"⋼\",\"nisd\":\"⋺\",\"niv\":\"∋\",\"NJcy\":\"Њ\",\"njcy\":\"њ\",\"nlarr\":\"↚\",\"nlArr\":\"⇍\",\"nldr\":\"‥\",\"nlE\":\"≦̸\",\"nle\":\"≰\",\"nleftarrow\":\"↚\",\"nLeftarrow\":\"⇍\",\"nleftrightarrow\":\"↮\",\"nLeftrightarrow\":\"⇎\",\"nleq\":\"≰\",\"nleqq\":\"≦̸\",\"nleqslant\":\"⩽̸\",\"nles\":\"⩽̸\",\"nless\":\"≮\",\"nLl\":\"⋘̸\",\"nlsim\":\"≴\",\"nLt\":\"≪⃒\",\"nlt\":\"≮\",\"nltri\":\"⋪\",\"nltrie\":\"⋬\",\"nLtv\":\"≪̸\",\"nmid\":\"∤\",\"NoBreak\":\"⁠\",\"NonBreakingSpace\":\" \",\"nopf\":\"𝕟\",\"Nopf\":\"ℕ\",\"Not\":\"⫬\",\"not\":\"¬\",\"NotCongruent\":\"≢\",\"NotCupCap\":\"≭\",\"NotDoubleVerticalBar\":\"∦\",\"NotElement\":\"∉\",\"NotEqual\":\"≠\",\"NotEqualTilde\":\"≂̸\",\"NotExists\":\"∄\",\"NotGreater\":\"≯\",\"NotGreaterEqual\":\"≱\",\"NotGreaterFullEqual\":\"≧̸\",\"NotGreaterGreater\":\"≫̸\",\"NotGreaterLess\":\"≹\",\"NotGreaterSlantEqual\":\"⩾̸\",\"NotGreaterTilde\":\"≵\",\"NotHumpDownHump\":\"≎̸\",\"NotHumpEqual\":\"≏̸\",\"notin\":\"∉\",\"notindot\":\"⋵̸\",\"notinE\":\"⋹̸\",\"notinva\":\"∉\",\"notinvb\":\"⋷\",\"notinvc\":\"⋶\",\"NotLeftTriangleBar\":\"⧏̸\",\"NotLeftTriangle\":\"⋪\",\"NotLeftTriangleEqual\":\"⋬\",\"NotLess\":\"≮\",\"NotLessEqual\":\"≰\",\"NotLessGreater\":\"≸\",\"NotLessLess\":\"≪̸\",\"NotLessSlantEqual\":\"⩽̸\",\"NotLessTilde\":\"≴\",\"NotNestedGreaterGreater\":\"⪢̸\",\"NotNestedLessLess\":\"⪡̸\",\"notni\":\"∌\",\"notniva\":\"∌\",\"notnivb\":\"⋾\",\"notnivc\":\"⋽\",\"NotPrecedes\":\"⊀\",\"NotPrecedesEqual\":\"⪯̸\",\"NotPrecedesSlantEqual\":\"⋠\",\"NotReverseElement\":\"∌\",\"NotRightTriangleBar\":\"⧐̸\",\"NotRightTriangle\":\"⋫\",\"NotRightTriangleEqual\":\"⋭\",\"NotSquareSubset\":\"⊏̸\",\"NotSquareSubsetEqual\":\"⋢\",\"NotSquareSuperset\":\"⊐̸\",\"NotSquareSupersetEqual\":\"⋣\",\"NotSubset\":\"⊂⃒\",\"NotSubsetEqual\":\"⊈\",\"NotSucceeds\":\"⊁\",\"NotSucceedsEqual\":\"⪰̸\",\"NotSucceedsSlantEqual\":\"⋡\",\"NotSucceedsTilde\":\"≿̸\",\"NotSuperset\":\"⊃⃒\",\"NotSupersetEqual\":\"⊉\",\"NotTilde\":\"≁\",\"NotTildeEqual\":\"≄\",\"NotTildeFullEqual\":\"≇\",\"NotTildeTilde\":\"≉\",\"NotVerticalBar\":\"∤\",\"nparallel\":\"∦\",\"npar\":\"∦\",\"nparsl\":\"⫽⃥\",\"npart\":\"∂̸\",\"npolint\":\"⨔\",\"npr\":\"⊀\",\"nprcue\":\"⋠\",\"nprec\":\"⊀\",\"npreceq\":\"⪯̸\",\"npre\":\"⪯̸\",\"nrarrc\":\"⤳̸\",\"nrarr\":\"↛\",\"nrArr\":\"⇏\",\"nrarrw\":\"↝̸\",\"nrightarrow\":\"↛\",\"nRightarrow\":\"⇏\",\"nrtri\":\"⋫\",\"nrtrie\":\"⋭\",\"nsc\":\"⊁\",\"nsccue\":\"⋡\",\"nsce\":\"⪰̸\",\"Nscr\":\"𝒩\",\"nscr\":\"𝓃\",\"nshortmid\":\"∤\",\"nshortparallel\":\"∦\",\"nsim\":\"≁\",\"nsime\":\"≄\",\"nsimeq\":\"≄\",\"nsmid\":\"∤\",\"nspar\":\"∦\",\"nsqsube\":\"⋢\",\"nsqsupe\":\"⋣\",\"nsub\":\"⊄\",\"nsubE\":\"⫅̸\",\"nsube\":\"⊈\",\"nsubset\":\"⊂⃒\",\"nsubseteq\":\"⊈\",\"nsubseteqq\":\"⫅̸\",\"nsucc\":\"⊁\",\"nsucceq\":\"⪰̸\",\"nsup\":\"⊅\",\"nsupE\":\"⫆̸\",\"nsupe\":\"⊉\",\"nsupset\":\"⊃⃒\",\"nsupseteq\":\"⊉\",\"nsupseteqq\":\"⫆̸\",\"ntgl\":\"≹\",\"Ntilde\":\"Ñ\",\"ntilde\":\"ñ\",\"ntlg\":\"≸\",\"ntriangleleft\":\"⋪\",\"ntrianglelefteq\":\"⋬\",\"ntriangleright\":\"⋫\",\"ntrianglerighteq\":\"⋭\",\"Nu\":\"Ν\",\"nu\":\"ν\",\"num\":\"#\",\"numero\":\"№\",\"numsp\":\" \",\"nvap\":\"≍⃒\",\"nvdash\":\"⊬\",\"nvDash\":\"⊭\",\"nVdash\":\"⊮\",\"nVDash\":\"⊯\",\"nvge\":\"≥⃒\",\"nvgt\":\">⃒\",\"nvHarr\":\"⤄\",\"nvinfin\":\"⧞\",\"nvlArr\":\"⤂\",\"nvle\":\"≤⃒\",\"nvlt\":\"<⃒\",\"nvltrie\":\"⊴⃒\",\"nvrArr\":\"⤃\",\"nvrtrie\":\"⊵⃒\",\"nvsim\":\"∼⃒\",\"nwarhk\":\"⤣\",\"nwarr\":\"↖\",\"nwArr\":\"⇖\",\"nwarrow\":\"↖\",\"nwnear\":\"⤧\",\"Oacute\":\"Ó\",\"oacute\":\"ó\",\"oast\":\"⊛\",\"Ocirc\":\"Ô\",\"ocirc\":\"ô\",\"ocir\":\"⊚\",\"Ocy\":\"О\",\"ocy\":\"о\",\"odash\":\"⊝\",\"Odblac\":\"Ő\",\"odblac\":\"ő\",\"odiv\":\"⨸\",\"odot\":\"⊙\",\"odsold\":\"⦼\",\"OElig\":\"Œ\",\"oelig\":\"œ\",\"ofcir\":\"⦿\",\"Ofr\":\"𝔒\",\"ofr\":\"𝔬\",\"ogon\":\"˛\",\"Ograve\":\"Ò\",\"ograve\":\"ò\",\"ogt\":\"⧁\",\"ohbar\":\"⦵\",\"ohm\":\"Ω\",\"oint\":\"∮\",\"olarr\":\"↺\",\"olcir\":\"⦾\",\"olcross\":\"⦻\",\"oline\":\"‾\",\"olt\":\"⧀\",\"Omacr\":\"Ō\",\"omacr\":\"ō\",\"Omega\":\"Ω\",\"omega\":\"ω\",\"Omicron\":\"Ο\",\"omicron\":\"ο\",\"omid\":\"⦶\",\"ominus\":\"⊖\",\"Oopf\":\"𝕆\",\"oopf\":\"𝕠\",\"opar\":\"⦷\",\"OpenCurlyDoubleQuote\":\"“\",\"OpenCurlyQuote\":\"‘\",\"operp\":\"⦹\",\"oplus\":\"⊕\",\"orarr\":\"↻\",\"Or\":\"⩔\",\"or\":\"∨\",\"ord\":\"⩝\",\"order\":\"ℴ\",\"orderof\":\"ℴ\",\"ordf\":\"ª\",\"ordm\":\"º\",\"origof\":\"⊶\",\"oror\":\"⩖\",\"orslope\":\"⩗\",\"orv\":\"⩛\",\"oS\":\"Ⓢ\",\"Oscr\":\"𝒪\",\"oscr\":\"ℴ\",\"Oslash\":\"Ø\",\"oslash\":\"ø\",\"osol\":\"⊘\",\"Otilde\":\"Õ\",\"otilde\":\"õ\",\"otimesas\":\"⨶\",\"Otimes\":\"⨷\",\"otimes\":\"⊗\",\"Ouml\":\"Ö\",\"ouml\":\"ö\",\"ovbar\":\"⌽\",\"OverBar\":\"‾\",\"OverBrace\":\"⏞\",\"OverBracket\":\"⎴\",\"OverParenthesis\":\"⏜\",\"para\":\"¶\",\"parallel\":\"∥\",\"par\":\"∥\",\"parsim\":\"⫳\",\"parsl\":\"⫽\",\"part\":\"∂\",\"PartialD\":\"∂\",\"Pcy\":\"П\",\"pcy\":\"п\",\"percnt\":\"%\",\"period\":\".\",\"permil\":\"‰\",\"perp\":\"⊥\",\"pertenk\":\"‱\",\"Pfr\":\"𝔓\",\"pfr\":\"𝔭\",\"Phi\":\"Φ\",\"phi\":\"φ\",\"phiv\":\"ϕ\",\"phmmat\":\"ℳ\",\"phone\":\"☎\",\"Pi\":\"Π\",\"pi\":\"π\",\"pitchfork\":\"⋔\",\"piv\":\"ϖ\",\"planck\":\"ℏ\",\"planckh\":\"ℎ\",\"plankv\":\"ℏ\",\"plusacir\":\"⨣\",\"plusb\":\"⊞\",\"pluscir\":\"⨢\",\"plus\":\"+\",\"plusdo\":\"∔\",\"plusdu\":\"⨥\",\"pluse\":\"⩲\",\"PlusMinus\":\"±\",\"plusmn\":\"±\",\"plussim\":\"⨦\",\"plustwo\":\"⨧\",\"pm\":\"±\",\"Poincareplane\":\"ℌ\",\"pointint\":\"⨕\",\"popf\":\"𝕡\",\"Popf\":\"ℙ\",\"pound\":\"£\",\"prap\":\"⪷\",\"Pr\":\"⪻\",\"pr\":\"≺\",\"prcue\":\"≼\",\"precapprox\":\"⪷\",\"prec\":\"≺\",\"preccurlyeq\":\"≼\",\"Precedes\":\"≺\",\"PrecedesEqual\":\"⪯\",\"PrecedesSlantEqual\":\"≼\",\"PrecedesTilde\":\"≾\",\"preceq\":\"⪯\",\"precnapprox\":\"⪹\",\"precneqq\":\"⪵\",\"precnsim\":\"⋨\",\"pre\":\"⪯\",\"prE\":\"⪳\",\"precsim\":\"≾\",\"prime\":\"′\",\"Prime\":\"″\",\"primes\":\"ℙ\",\"prnap\":\"⪹\",\"prnE\":\"⪵\",\"prnsim\":\"⋨\",\"prod\":\"∏\",\"Product\":\"∏\",\"profalar\":\"⌮\",\"profline\":\"⌒\",\"profsurf\":\"⌓\",\"prop\":\"∝\",\"Proportional\":\"∝\",\"Proportion\":\"∷\",\"propto\":\"∝\",\"prsim\":\"≾\",\"prurel\":\"⊰\",\"Pscr\":\"𝒫\",\"pscr\":\"𝓅\",\"Psi\":\"Ψ\",\"psi\":\"ψ\",\"puncsp\":\" \",\"Qfr\":\"𝔔\",\"qfr\":\"𝔮\",\"qint\":\"⨌\",\"qopf\":\"𝕢\",\"Qopf\":\"ℚ\",\"qprime\":\"⁗\",\"Qscr\":\"𝒬\",\"qscr\":\"𝓆\",\"quaternions\":\"ℍ\",\"quatint\":\"⨖\",\"quest\":\"?\",\"questeq\":\"≟\",\"quot\":\"\\\"\",\"QUOT\":\"\\\"\",\"rAarr\":\"⇛\",\"race\":\"∽̱\",\"Racute\":\"Ŕ\",\"racute\":\"ŕ\",\"radic\":\"√\",\"raemptyv\":\"⦳\",\"rang\":\"⟩\",\"Rang\":\"⟫\",\"rangd\":\"⦒\",\"range\":\"⦥\",\"rangle\":\"⟩\",\"raquo\":\"»\",\"rarrap\":\"⥵\",\"rarrb\":\"⇥\",\"rarrbfs\":\"⤠\",\"rarrc\":\"⤳\",\"rarr\":\"→\",\"Rarr\":\"↠\",\"rArr\":\"⇒\",\"rarrfs\":\"⤞\",\"rarrhk\":\"↪\",\"rarrlp\":\"↬\",\"rarrpl\":\"⥅\",\"rarrsim\":\"⥴\",\"Rarrtl\":\"⤖\",\"rarrtl\":\"↣\",\"rarrw\":\"↝\",\"ratail\":\"⤚\",\"rAtail\":\"⤜\",\"ratio\":\"∶\",\"rationals\":\"ℚ\",\"rbarr\":\"⤍\",\"rBarr\":\"⤏\",\"RBarr\":\"⤐\",\"rbbrk\":\"❳\",\"rbrace\":\"}\",\"rbrack\":\"]\",\"rbrke\":\"⦌\",\"rbrksld\":\"⦎\",\"rbrkslu\":\"⦐\",\"Rcaron\":\"Ř\",\"rcaron\":\"ř\",\"Rcedil\":\"Ŗ\",\"rcedil\":\"ŗ\",\"rceil\":\"⌉\",\"rcub\":\"}\",\"Rcy\":\"Р\",\"rcy\":\"р\",\"rdca\":\"⤷\",\"rdldhar\":\"⥩\",\"rdquo\":\"”\",\"rdquor\":\"”\",\"rdsh\":\"↳\",\"real\":\"ℜ\",\"realine\":\"ℛ\",\"realpart\":\"ℜ\",\"reals\":\"ℝ\",\"Re\":\"ℜ\",\"rect\":\"▭\",\"reg\":\"®\",\"REG\":\"®\",\"ReverseElement\":\"∋\",\"ReverseEquilibrium\":\"⇋\",\"ReverseUpEquilibrium\":\"⥯\",\"rfisht\":\"⥽\",\"rfloor\":\"⌋\",\"rfr\":\"𝔯\",\"Rfr\":\"ℜ\",\"rHar\":\"⥤\",\"rhard\":\"⇁\",\"rharu\":\"⇀\",\"rharul\":\"⥬\",\"Rho\":\"Ρ\",\"rho\":\"ρ\",\"rhov\":\"ϱ\",\"RightAngleBracket\":\"⟩\",\"RightArrowBar\":\"⇥\",\"rightarrow\":\"→\",\"RightArrow\":\"→\",\"Rightarrow\":\"⇒\",\"RightArrowLeftArrow\":\"⇄\",\"rightarrowtail\":\"↣\",\"RightCeiling\":\"⌉\",\"RightDoubleBracket\":\"⟧\",\"RightDownTeeVector\":\"⥝\",\"RightDownVectorBar\":\"⥕\",\"RightDownVector\":\"⇂\",\"RightFloor\":\"⌋\",\"rightharpoondown\":\"⇁\",\"rightharpoonup\":\"⇀\",\"rightleftarrows\":\"⇄\",\"rightleftharpoons\":\"⇌\",\"rightrightarrows\":\"⇉\",\"rightsquigarrow\":\"↝\",\"RightTeeArrow\":\"↦\",\"RightTee\":\"⊢\",\"RightTeeVector\":\"⥛\",\"rightthreetimes\":\"⋌\",\"RightTriangleBar\":\"⧐\",\"RightTriangle\":\"⊳\",\"RightTriangleEqual\":\"⊵\",\"RightUpDownVector\":\"⥏\",\"RightUpTeeVector\":\"⥜\",\"RightUpVectorBar\":\"⥔\",\"RightUpVector\":\"↾\",\"RightVectorBar\":\"⥓\",\"RightVector\":\"⇀\",\"ring\":\"˚\",\"risingdotseq\":\"≓\",\"rlarr\":\"⇄\",\"rlhar\":\"⇌\",\"rlm\":\"‏\",\"rmoustache\":\"⎱\",\"rmoust\":\"⎱\",\"rnmid\":\"⫮\",\"roang\":\"⟭\",\"roarr\":\"⇾\",\"robrk\":\"⟧\",\"ropar\":\"⦆\",\"ropf\":\"𝕣\",\"Ropf\":\"ℝ\",\"roplus\":\"⨮\",\"rotimes\":\"⨵\",\"RoundImplies\":\"⥰\",\"rpar\":\")\",\"rpargt\":\"⦔\",\"rppolint\":\"⨒\",\"rrarr\":\"⇉\",\"Rrightarrow\":\"⇛\",\"rsaquo\":\"›\",\"rscr\":\"𝓇\",\"Rscr\":\"ℛ\",\"rsh\":\"↱\",\"Rsh\":\"↱\",\"rsqb\":\"]\",\"rsquo\":\"’\",\"rsquor\":\"’\",\"rthree\":\"⋌\",\"rtimes\":\"⋊\",\"rtri\":\"▹\",\"rtrie\":\"⊵\",\"rtrif\":\"▸\",\"rtriltri\":\"⧎\",\"RuleDelayed\":\"⧴\",\"ruluhar\":\"⥨\",\"rx\":\"℞\",\"Sacute\":\"Ś\",\"sacute\":\"ś\",\"sbquo\":\"‚\",\"scap\":\"⪸\",\"Scaron\":\"Š\",\"scaron\":\"š\",\"Sc\":\"⪼\",\"sc\":\"≻\",\"sccue\":\"≽\",\"sce\":\"⪰\",\"scE\":\"⪴\",\"Scedil\":\"Ş\",\"scedil\":\"ş\",\"Scirc\":\"Ŝ\",\"scirc\":\"ŝ\",\"scnap\":\"⪺\",\"scnE\":\"⪶\",\"scnsim\":\"⋩\",\"scpolint\":\"⨓\",\"scsim\":\"≿\",\"Scy\":\"С\",\"scy\":\"с\",\"sdotb\":\"⊡\",\"sdot\":\"⋅\",\"sdote\":\"⩦\",\"searhk\":\"⤥\",\"searr\":\"↘\",\"seArr\":\"⇘\",\"searrow\":\"↘\",\"sect\":\"§\",\"semi\":\";\",\"seswar\":\"⤩\",\"setminus\":\"∖\",\"setmn\":\"∖\",\"sext\":\"✶\",\"Sfr\":\"𝔖\",\"sfr\":\"𝔰\",\"sfrown\":\"⌢\",\"sharp\":\"♯\",\"SHCHcy\":\"Щ\",\"shchcy\":\"щ\",\"SHcy\":\"Ш\",\"shcy\":\"ш\",\"ShortDownArrow\":\"↓\",\"ShortLeftArrow\":\"←\",\"shortmid\":\"∣\",\"shortparallel\":\"∥\",\"ShortRightArrow\":\"→\",\"ShortUpArrow\":\"↑\",\"shy\":\"­\",\"Sigma\":\"Σ\",\"sigma\":\"σ\",\"sigmaf\":\"ς\",\"sigmav\":\"ς\",\"sim\":\"∼\",\"simdot\":\"⩪\",\"sime\":\"≃\",\"simeq\":\"≃\",\"simg\":\"⪞\",\"simgE\":\"⪠\",\"siml\":\"⪝\",\"simlE\":\"⪟\",\"simne\":\"≆\",\"simplus\":\"⨤\",\"simrarr\":\"⥲\",\"slarr\":\"←\",\"SmallCircle\":\"∘\",\"smallsetminus\":\"∖\",\"smashp\":\"⨳\",\"smeparsl\":\"⧤\",\"smid\":\"∣\",\"smile\":\"⌣\",\"smt\":\"⪪\",\"smte\":\"⪬\",\"smtes\":\"⪬︀\",\"SOFTcy\":\"Ь\",\"softcy\":\"ь\",\"solbar\":\"⌿\",\"solb\":\"⧄\",\"sol\":\"/\",\"Sopf\":\"𝕊\",\"sopf\":\"𝕤\",\"spades\":\"♠\",\"spadesuit\":\"♠\",\"spar\":\"∥\",\"sqcap\":\"⊓\",\"sqcaps\":\"⊓︀\",\"sqcup\":\"⊔\",\"sqcups\":\"⊔︀\",\"Sqrt\":\"√\",\"sqsub\":\"⊏\",\"sqsube\":\"⊑\",\"sqsubset\":\"⊏\",\"sqsubseteq\":\"⊑\",\"sqsup\":\"⊐\",\"sqsupe\":\"⊒\",\"sqsupset\":\"⊐\",\"sqsupseteq\":\"⊒\",\"square\":\"□\",\"Square\":\"□\",\"SquareIntersection\":\"⊓\",\"SquareSubset\":\"⊏\",\"SquareSubsetEqual\":\"⊑\",\"SquareSuperset\":\"⊐\",\"SquareSupersetEqual\":\"⊒\",\"SquareUnion\":\"⊔\",\"squarf\":\"▪\",\"squ\":\"□\",\"squf\":\"▪\",\"srarr\":\"→\",\"Sscr\":\"𝒮\",\"sscr\":\"𝓈\",\"ssetmn\":\"∖\",\"ssmile\":\"⌣\",\"sstarf\":\"⋆\",\"Star\":\"⋆\",\"star\":\"☆\",\"starf\":\"★\",\"straightepsilon\":\"ϵ\",\"straightphi\":\"ϕ\",\"strns\":\"¯\",\"sub\":\"⊂\",\"Sub\":\"⋐\",\"subdot\":\"⪽\",\"subE\":\"⫅\",\"sube\":\"⊆\",\"subedot\":\"⫃\",\"submult\":\"⫁\",\"subnE\":\"⫋\",\"subne\":\"⊊\",\"subplus\":\"⪿\",\"subrarr\":\"⥹\",\"subset\":\"⊂\",\"Subset\":\"⋐\",\"subseteq\":\"⊆\",\"subseteqq\":\"⫅\",\"SubsetEqual\":\"⊆\",\"subsetneq\":\"⊊\",\"subsetneqq\":\"⫋\",\"subsim\":\"⫇\",\"subsub\":\"⫕\",\"subsup\":\"⫓\",\"succapprox\":\"⪸\",\"succ\":\"≻\",\"succcurlyeq\":\"≽\",\"Succeeds\":\"≻\",\"SucceedsEqual\":\"⪰\",\"SucceedsSlantEqual\":\"≽\",\"SucceedsTilde\":\"≿\",\"succeq\":\"⪰\",\"succnapprox\":\"⪺\",\"succneqq\":\"⪶\",\"succnsim\":\"⋩\",\"succsim\":\"≿\",\"SuchThat\":\"∋\",\"sum\":\"∑\",\"Sum\":\"∑\",\"sung\":\"♪\",\"sup1\":\"¹\",\"sup2\":\"²\",\"sup3\":\"³\",\"sup\":\"⊃\",\"Sup\":\"⋑\",\"supdot\":\"⪾\",\"supdsub\":\"⫘\",\"supE\":\"⫆\",\"supe\":\"⊇\",\"supedot\":\"⫄\",\"Superset\":\"⊃\",\"SupersetEqual\":\"⊇\",\"suphsol\":\"⟉\",\"suphsub\":\"⫗\",\"suplarr\":\"⥻\",\"supmult\":\"⫂\",\"supnE\":\"⫌\",\"supne\":\"⊋\",\"supplus\":\"⫀\",\"supset\":\"⊃\",\"Supset\":\"⋑\",\"supseteq\":\"⊇\",\"supseteqq\":\"⫆\",\"supsetneq\":\"⊋\",\"supsetneqq\":\"⫌\",\"supsim\":\"⫈\",\"supsub\":\"⫔\",\"supsup\":\"⫖\",\"swarhk\":\"⤦\",\"swarr\":\"↙\",\"swArr\":\"⇙\",\"swarrow\":\"↙\",\"swnwar\":\"⤪\",\"szlig\":\"ß\",\"Tab\":\"\\t\",\"target\":\"⌖\",\"Tau\":\"Τ\",\"tau\":\"τ\",\"tbrk\":\"⎴\",\"Tcaron\":\"Ť\",\"tcaron\":\"ť\",\"Tcedil\":\"Ţ\",\"tcedil\":\"ţ\",\"Tcy\":\"Т\",\"tcy\":\"т\",\"tdot\":\"⃛\",\"telrec\":\"⌕\",\"Tfr\":\"𝔗\",\"tfr\":\"𝔱\",\"there4\":\"∴\",\"therefore\":\"∴\",\"Therefore\":\"∴\",\"Theta\":\"Θ\",\"theta\":\"θ\",\"thetasym\":\"ϑ\",\"thetav\":\"ϑ\",\"thickapprox\":\"≈\",\"thicksim\":\"∼\",\"ThickSpace\":\"  \",\"ThinSpace\":\" \",\"thinsp\":\" \",\"thkap\":\"≈\",\"thksim\":\"∼\",\"THORN\":\"Þ\",\"thorn\":\"þ\",\"tilde\":\"˜\",\"Tilde\":\"∼\",\"TildeEqual\":\"≃\",\"TildeFullEqual\":\"≅\",\"TildeTilde\":\"≈\",\"timesbar\":\"⨱\",\"timesb\":\"⊠\",\"times\":\"×\",\"timesd\":\"⨰\",\"tint\":\"∭\",\"toea\":\"⤨\",\"topbot\":\"⌶\",\"topcir\":\"⫱\",\"top\":\"⊤\",\"Topf\":\"𝕋\",\"topf\":\"𝕥\",\"topfork\":\"⫚\",\"tosa\":\"⤩\",\"tprime\":\"‴\",\"trade\":\"™\",\"TRADE\":\"™\",\"triangle\":\"▵\",\"triangledown\":\"▿\",\"triangleleft\":\"◃\",\"trianglelefteq\":\"⊴\",\"triangleq\":\"≜\",\"triangleright\":\"▹\",\"trianglerighteq\":\"⊵\",\"tridot\":\"◬\",\"trie\":\"≜\",\"triminus\":\"⨺\",\"TripleDot\":\"⃛\",\"triplus\":\"⨹\",\"trisb\":\"⧍\",\"tritime\":\"⨻\",\"trpezium\":\"⏢\",\"Tscr\":\"𝒯\",\"tscr\":\"𝓉\",\"TScy\":\"Ц\",\"tscy\":\"ц\",\"TSHcy\":\"Ћ\",\"tshcy\":\"ћ\",\"Tstrok\":\"Ŧ\",\"tstrok\":\"ŧ\",\"twixt\":\"≬\",\"twoheadleftarrow\":\"↞\",\"twoheadrightarrow\":\"↠\",\"Uacute\":\"Ú\",\"uacute\":\"ú\",\"uarr\":\"↑\",\"Uarr\":\"↟\",\"uArr\":\"⇑\",\"Uarrocir\":\"⥉\",\"Ubrcy\":\"Ў\",\"ubrcy\":\"ў\",\"Ubreve\":\"Ŭ\",\"ubreve\":\"ŭ\",\"Ucirc\":\"Û\",\"ucirc\":\"û\",\"Ucy\":\"У\",\"ucy\":\"у\",\"udarr\":\"⇅\",\"Udblac\":\"Ű\",\"udblac\":\"ű\",\"udhar\":\"⥮\",\"ufisht\":\"⥾\",\"Ufr\":\"𝔘\",\"ufr\":\"𝔲\",\"Ugrave\":\"Ù\",\"ugrave\":\"ù\",\"uHar\":\"⥣\",\"uharl\":\"↿\",\"uharr\":\"↾\",\"uhblk\":\"▀\",\"ulcorn\":\"⌜\",\"ulcorner\":\"⌜\",\"ulcrop\":\"⌏\",\"ultri\":\"◸\",\"Umacr\":\"Ū\",\"umacr\":\"ū\",\"uml\":\"¨\",\"UnderBar\":\"_\",\"UnderBrace\":\"⏟\",\"UnderBracket\":\"⎵\",\"UnderParenthesis\":\"⏝\",\"Union\":\"⋃\",\"UnionPlus\":\"⊎\",\"Uogon\":\"Ų\",\"uogon\":\"ų\",\"Uopf\":\"𝕌\",\"uopf\":\"𝕦\",\"UpArrowBar\":\"⤒\",\"uparrow\":\"↑\",\"UpArrow\":\"↑\",\"Uparrow\":\"⇑\",\"UpArrowDownArrow\":\"⇅\",\"updownarrow\":\"↕\",\"UpDownArrow\":\"↕\",\"Updownarrow\":\"⇕\",\"UpEquilibrium\":\"⥮\",\"upharpoonleft\":\"↿\",\"upharpoonright\":\"↾\",\"uplus\":\"⊎\",\"UpperLeftArrow\":\"↖\",\"UpperRightArrow\":\"↗\",\"upsi\":\"υ\",\"Upsi\":\"ϒ\",\"upsih\":\"ϒ\",\"Upsilon\":\"Υ\",\"upsilon\":\"υ\",\"UpTeeArrow\":\"↥\",\"UpTee\":\"⊥\",\"upuparrows\":\"⇈\",\"urcorn\":\"⌝\",\"urcorner\":\"⌝\",\"urcrop\":\"⌎\",\"Uring\":\"Ů\",\"uring\":\"ů\",\"urtri\":\"◹\",\"Uscr\":\"𝒰\",\"uscr\":\"𝓊\",\"utdot\":\"⋰\",\"Utilde\":\"Ũ\",\"utilde\":\"ũ\",\"utri\":\"▵\",\"utrif\":\"▴\",\"uuarr\":\"⇈\",\"Uuml\":\"Ü\",\"uuml\":\"ü\",\"uwangle\":\"⦧\",\"vangrt\":\"⦜\",\"varepsilon\":\"ϵ\",\"varkappa\":\"ϰ\",\"varnothing\":\"∅\",\"varphi\":\"ϕ\",\"varpi\":\"ϖ\",\"varpropto\":\"∝\",\"varr\":\"↕\",\"vArr\":\"⇕\",\"varrho\":\"ϱ\",\"varsigma\":\"ς\",\"varsubsetneq\":\"⊊︀\",\"varsubsetneqq\":\"⫋︀\",\"varsupsetneq\":\"⊋︀\",\"varsupsetneqq\":\"⫌︀\",\"vartheta\":\"ϑ\",\"vartriangleleft\":\"⊲\",\"vartriangleright\":\"⊳\",\"vBar\":\"⫨\",\"Vbar\":\"⫫\",\"vBarv\":\"⫩\",\"Vcy\":\"В\",\"vcy\":\"в\",\"vdash\":\"⊢\",\"vDash\":\"⊨\",\"Vdash\":\"⊩\",\"VDash\":\"⊫\",\"Vdashl\":\"⫦\",\"veebar\":\"⊻\",\"vee\":\"∨\",\"Vee\":\"⋁\",\"veeeq\":\"≚\",\"vellip\":\"⋮\",\"verbar\":\"|\",\"Verbar\":\"‖\",\"vert\":\"|\",\"Vert\":\"‖\",\"VerticalBar\":\"∣\",\"VerticalLine\":\"|\",\"VerticalSeparator\":\"❘\",\"VerticalTilde\":\"≀\",\"VeryThinSpace\":\" \",\"Vfr\":\"𝔙\",\"vfr\":\"𝔳\",\"vltri\":\"⊲\",\"vnsub\":\"⊂⃒\",\"vnsup\":\"⊃⃒\",\"Vopf\":\"𝕍\",\"vopf\":\"𝕧\",\"vprop\":\"∝\",\"vrtri\":\"⊳\",\"Vscr\":\"𝒱\",\"vscr\":\"𝓋\",\"vsubnE\":\"⫋︀\",\"vsubne\":\"⊊︀\",\"vsupnE\":\"⫌︀\",\"vsupne\":\"⊋︀\",\"Vvdash\":\"⊪\",\"vzigzag\":\"⦚\",\"Wcirc\":\"Ŵ\",\"wcirc\":\"ŵ\",\"wedbar\":\"⩟\",\"wedge\":\"∧\",\"Wedge\":\"⋀\",\"wedgeq\":\"≙\",\"weierp\":\"℘\",\"Wfr\":\"𝔚\",\"wfr\":\"𝔴\",\"Wopf\":\"𝕎\",\"wopf\":\"𝕨\",\"wp\":\"℘\",\"wr\":\"≀\",\"wreath\":\"≀\",\"Wscr\":\"𝒲\",\"wscr\":\"𝓌\",\"xcap\":\"⋂\",\"xcirc\":\"◯\",\"xcup\":\"⋃\",\"xdtri\":\"▽\",\"Xfr\":\"𝔛\",\"xfr\":\"𝔵\",\"xharr\":\"⟷\",\"xhArr\":\"⟺\",\"Xi\":\"Ξ\",\"xi\":\"ξ\",\"xlarr\":\"⟵\",\"xlArr\":\"⟸\",\"xmap\":\"⟼\",\"xnis\":\"⋻\",\"xodot\":\"⨀\",\"Xopf\":\"𝕏\",\"xopf\":\"𝕩\",\"xoplus\":\"⨁\",\"xotime\":\"⨂\",\"xrarr\":\"⟶\",\"xrArr\":\"⟹\",\"Xscr\":\"𝒳\",\"xscr\":\"𝓍\",\"xsqcup\":\"⨆\",\"xuplus\":\"⨄\",\"xutri\":\"△\",\"xvee\":\"⋁\",\"xwedge\":\"⋀\",\"Yacute\":\"Ý\",\"yacute\":\"ý\",\"YAcy\":\"Я\",\"yacy\":\"я\",\"Ycirc\":\"Ŷ\",\"ycirc\":\"ŷ\",\"Ycy\":\"Ы\",\"ycy\":\"ы\",\"yen\":\"¥\",\"Yfr\":\"𝔜\",\"yfr\":\"𝔶\",\"YIcy\":\"Ї\",\"yicy\":\"ї\",\"Yopf\":\"𝕐\",\"yopf\":\"𝕪\",\"Yscr\":\"𝒴\",\"yscr\":\"𝓎\",\"YUcy\":\"Ю\",\"yucy\":\"ю\",\"yuml\":\"ÿ\",\"Yuml\":\"Ÿ\",\"Zacute\":\"Ź\",\"zacute\":\"ź\",\"Zcaron\":\"Ž\",\"zcaron\":\"ž\",\"Zcy\":\"З\",\"zcy\":\"з\",\"Zdot\":\"Ż\",\"zdot\":\"ż\",\"zeetrf\":\"ℨ\",\"ZeroWidthSpace\":\"​\",\"Zeta\":\"Ζ\",\"zeta\":\"ζ\",\"zfr\":\"𝔷\",\"Zfr\":\"ℨ\",\"ZHcy\":\"Ж\",\"zhcy\":\"ж\",\"zigrarr\":\"⇝\",\"zopf\":\"𝕫\",\"Zopf\":\"ℤ\",\"Zscr\":\"𝒵\",\"zscr\":\"𝓏\",\"zwj\":\"‍\",\"zwnj\":\"‌\"}");

/***/ }),

/***/ 485076:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"Aacute\":\"Á\",\"aacute\":\"á\",\"Acirc\":\"Â\",\"acirc\":\"â\",\"acute\":\"´\",\"AElig\":\"Æ\",\"aelig\":\"æ\",\"Agrave\":\"À\",\"agrave\":\"à\",\"amp\":\"&\",\"AMP\":\"&\",\"Aring\":\"Å\",\"aring\":\"å\",\"Atilde\":\"Ã\",\"atilde\":\"ã\",\"Auml\":\"Ä\",\"auml\":\"ä\",\"brvbar\":\"¦\",\"Ccedil\":\"Ç\",\"ccedil\":\"ç\",\"cedil\":\"¸\",\"cent\":\"¢\",\"copy\":\"©\",\"COPY\":\"©\",\"curren\":\"¤\",\"deg\":\"°\",\"divide\":\"÷\",\"Eacute\":\"É\",\"eacute\":\"é\",\"Ecirc\":\"Ê\",\"ecirc\":\"ê\",\"Egrave\":\"È\",\"egrave\":\"è\",\"ETH\":\"Ð\",\"eth\":\"ð\",\"Euml\":\"Ë\",\"euml\":\"ë\",\"frac12\":\"½\",\"frac14\":\"¼\",\"frac34\":\"¾\",\"gt\":\">\",\"GT\":\">\",\"Iacute\":\"Í\",\"iacute\":\"í\",\"Icirc\":\"Î\",\"icirc\":\"î\",\"iexcl\":\"¡\",\"Igrave\":\"Ì\",\"igrave\":\"ì\",\"iquest\":\"¿\",\"Iuml\":\"Ï\",\"iuml\":\"ï\",\"laquo\":\"«\",\"lt\":\"<\",\"LT\":\"<\",\"macr\":\"¯\",\"micro\":\"µ\",\"middot\":\"·\",\"nbsp\":\" \",\"not\":\"¬\",\"Ntilde\":\"Ñ\",\"ntilde\":\"ñ\",\"Oacute\":\"Ó\",\"oacute\":\"ó\",\"Ocirc\":\"Ô\",\"ocirc\":\"ô\",\"Ograve\":\"Ò\",\"ograve\":\"ò\",\"ordf\":\"ª\",\"ordm\":\"º\",\"Oslash\":\"Ø\",\"oslash\":\"ø\",\"Otilde\":\"Õ\",\"otilde\":\"õ\",\"Ouml\":\"Ö\",\"ouml\":\"ö\",\"para\":\"¶\",\"plusmn\":\"±\",\"pound\":\"£\",\"quot\":\"\\\"\",\"QUOT\":\"\\\"\",\"raquo\":\"»\",\"reg\":\"®\",\"REG\":\"®\",\"sect\":\"§\",\"shy\":\"­\",\"sup1\":\"¹\",\"sup2\":\"²\",\"sup3\":\"³\",\"szlig\":\"ß\",\"THORN\":\"Þ\",\"thorn\":\"þ\",\"times\":\"×\",\"Uacute\":\"Ú\",\"uacute\":\"ú\",\"Ucirc\":\"Û\",\"ucirc\":\"û\",\"Ugrave\":\"Ù\",\"ugrave\":\"ù\",\"uml\":\"¨\",\"Uuml\":\"Ü\",\"uuml\":\"ü\",\"Yacute\":\"Ý\",\"yacute\":\"ý\",\"yen\":\"¥\",\"yuml\":\"ÿ\"}");

/***/ }),

/***/ 711083:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"amp\":\"&\",\"apos\":\"'\",\"gt\":\">\",\"lt\":\"<\",\"quot\":\"\\\"\"}");

/***/ }),

/***/ 297442:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
    This file is part of ethereum-ens.
    ethereum-ens is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    ethereum-ens is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with ethereum-ens.  If not, see <http://www.gnu.org/licenses/>.
*/

var namehash = __webpack_require__(159873)
var pako = __webpack_require__(999591);
var Promise = __webpack_require__(93786);
var _ = __webpack_require__(513469);
var Web3 = __webpack_require__(734046);
var utils = __webpack_require__(897740);
var abi = __webpack_require__(349812);

var registryInterface = abi.registryInterface;
var resolverInterface = abi.resolverInterface;

var registryAddresses = {
  // Mainnet
  "1": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
  // Ropsten
  "3": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
  // Rinkeby
  "4": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
  // Goerli
  "5": "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",
};

var abiDecoders = {
  1: function(data) {
    data  = utils.strFromUtf8Ab(data);
    return JSON.parse(data);
  },
  2: function(data) {
    data = pako.inflate(data, {to: 'string'});
    return JSON.parse(data);
  }
};

var supportedDecoders = _.reduce(_.keys(abiDecoders), function(memo, val) { return memo | val; });

/**
 * Wrapper function that returns a version of ENS that is compatible
 * with the provided version of Web3
 */
function ENS (provider, address, Web3js) {
  if (Web3js !== undefined) {
    Web3 = Web3js;
  }
  if (!!/^0\./.exec(Web3.version || (new Web3(provider)).version.api)) {
    return utils.construct(ENS_0, [provider, address]);
  } else {
    return utils.construct(ENS_1, [provider, address]);
  }
}

ENS.NameNotFound = Error("ENS name not found");

/**
 * @class
 */
function Resolver_1(ens, node, contract) {
    this.ens = ens;
    this.node = node;
    this.instancePromise = ens.registryPromise.then(function(registry) {
      return registry.methods.resolver(node).call().then(function(address) {
        if(address == "0x0000000000000000000000000000000000000000") {
          return Promise.reject(ENS.NameNotFound);
        }

        contract.options.address = address;
        return contract;
      });
    });


    _.each(contract.methods, function(method, signature) {

        this[signature] = function() {
          var args = Array.prototype.slice.call(arguments);
          var params;
          return this.instancePromise.then(function(instance) {
            // Check abi interface for constant methods
            var asyncObj = instance._jsonInterface.reduce(function(acc, curr) {
              if (acc) {
                return acc;
              } else {
                return curr.name === signature && !curr.constant ? curr : null;
              }
            }, null)

            // Call if it's a constant method, send (with params) if it's not
            if (asyncObj === null) {
              return _.partial(instance.methods[signature], node).apply(instance.methods, args).call();
            } else {
              if (asyncObj.inputs.length < args.length + 1) {
                params = args.splice(args.length - 1)[0];
              }
              return ens.web3.eth.getAccounts().then(function(accounts) {
                return _.partial(instance.methods[signature], node).apply(instance.methods, args).send(params ? params : {from: accounts[0]});
              })
            }
          }).bind(this);
        }.bind(this);
    }.bind(this));
}

/**
 * resolverAddress returns the address of the resolver.
 * @returns A promise for the address of the resolver.
 */
Resolver_1.prototype.resolverAddress = function() {
  return this.instancePromise.then(function(instance) {
    return instance._address;
  });
}

/**
 * reverseAddr looks up the reverse record for the address returned by the resolver's addr()
 * @returns A promise for the Resolver for the reverse record.
 */
Resolver_1.prototype.reverseAddr = function() {
    return this.addr().then(function(addr) {
      return this.ens.reverse(addr);
    }).bind(this);
}

/**
 * abi returns the ABI associated with the name. Automatically looks for an ABI on the
 *     reverse record if none is found on the name itself.
 * @param {bool} Optional. If false, do not look up the ABI on the reverse entry.
 * @returns {object} A promise for the contract ABI.
 */
Resolver_1.prototype.abi = function(reverse) {
  return this.instancePromise.then(function(instance) {
    return instance.methods.ABI(this.node, supportedDecoders).call().then(function(result) {;
      if(result[0] == 0) {
        if(reverse == false) return null;
        return this.reverseAddr().then(function(reverse) {
          return reverse.abi(false);
        });
      } else {
        return abiDecoders[result[0]](utils.fromHex(result[1]));
      }
    }.bind(this));
  }.bind(this));
};

/**
 * contract returns a web3 contract object. The address is that returned by this resolver's
 * `addr()`, and the ABI is loaded from this resolver's `ABI()` method, or the ABI on the
 * reverse record if that's not found. Returns null if no address is specified or no ABI
 * was found. The returned contract object will not be promisifed or otherwise modified.
 * @returns {object} A promise for the contract instance.
 */
Resolver_1.prototype.contract = function() {
  return Promise.join(this.abi(), this.addr(), function(abi, addr) {
    return new this.ens.web3.eth.Contract(abi, addr);
  }.bind(this));
};

/**
 * @class
 *
 * @description Provides an easy-to-use interface to the Ethereum Name Service.
 *
 * Example usage:
 *
 *     var ENS = require('ethereum-ens');
 *     var Web3 = require('web3');
 *
 *     var web3 = new Web3();
 *     var ens = new ENS(web3);
 *
 *     var address = ens.resolver('foo.eth').addr().then(function(addr) { ... });
 *
 * Functions that require communicating with the node return promises, rather than
 * using callbacks. A promise has a `then` function, which takes a callback and will
 * call it when the promise is fulfilled; `then` returns another promise, so you can
 * chain callbacks. For more details, see http://bluebirdjs.com/.
 *
 * Notably, the `resolver` method returns a resolver instance immediately; lookup of
 * the resolver address is done in the background or when you first call an asynchronous
 * method on the resolver.
 *
 * Functions that create transactions also take an optional 'options' argument;
 * this has the same parameters as web3.
 *
 * @author Nick Johnson <nick@ethereum.org>
 * @date 2016
 * @license LGPL
 *
 * @param {object} provider A web3 provider to use to communicate with the blockchain.
 * @param {address} address Optional. The address of the ENS registry. Defaults to the public ENS registry.
 */
function ENS_1(provider, address) {
    // Ensures backwards compatibility
    if (provider.currentProvider) {
        provider = provider.currentProvider;
    }

    this.web3 = new Web3(provider);
    var registryContract = new this.web3.eth.Contract(registryInterface);
    if (address != undefined) {
      registryContract.options.address = address;
      this.registryPromise = Promise.resolve(registryContract);
    } else {
      this.registryPromise = new Promise((resolve) => {
        this.web3.eth.net.getId().then(function(version) {
            registryContract.options.address = registryAddresses[version];
            resolve(registryContract);
        });
      })
    }
}

ENS_1.NameNotFound = Error("ENS name not found");

/**
 * resolver returns a resolver object for the specified name, throwing
 * ENS.NameNotFound if the name does not exist in ENS.
 * Resolver objects are wrappers around web3 contract objects, with the
 * first argument - always the node ID in an ENS resolver - automatically
 * supplied. So, to call the `addr(node)` function on a standard resolver,
 * you only have to call `addr()`. Returned objects are also 'promisified' - they
 * return a Bluebird Promise object instead of taking a callback.
 * @param {string} name The name to look up.
 * @param {list} abi Optional. The JSON ABI definition to use for the resolver.
 *        if none is supplied, a default definition implementing `has`, `addr`, `name`,
 *        `setName` and `setAddr` is supplied.
 * @returns The resolver object.
 */
ENS_1.prototype.resolver = function(name, abi) {
    abi = abi || resolverInterface;
    var node = namehash.hash(name);
    return new Resolver_1(this, node, new this.web3.eth.Contract(abi));
};

/**
 * reverse returns a resolver object for the reverse resolution of the specified address,
 * throwing ENS.NameNotFound if the reverse record does not exist in ENS.
 * Resolver objects are wrappers around web3 contract objects, with the
 * first argument - always the node ID in an ENS resolver - automatically
 * supplied. So, to call the `addr(node)` function on a standard resolver,
 * you only have to call `addr()`. Returned objects are also 'promisified' - they
 * return a Bluebird Promise object instead of taking a callback.
 * @param {string} address The address to look up.
 * @param {list} abi Optional. The JSON ABI definition to use for the resolver.
 *        if none is supplied, a default definition implementing `has`, `addr`, `name`,
 *        `setName` and `setAddr` is supplied.
 * @returns The resolver object.
 */
ENS_1.prototype.reverse = function(address, abi) {
    if(address.startsWith("0x"))
      address = address.slice(2);
    return this.resolver(address.toLowerCase() + ".addr.reverse", abi);
};

/**
 * setResolver sets the address of the resolver contract for the specified name.
 * The calling account must be the owner of the name in order for this call to
 * succeed.
 * @param {string} name The name to update
 * @param {address} address The address of the resolver
 * @param {object} options An optional dict of parameters to pass to web3.
 * @returns A promise that returns the transaction ID when the transaction is mined.
 */
ENS_1.prototype.setResolver = function(name, addr, params) {
    var node = namehash.hash(name);

    return this.registryPromise.then(function(registry) {
      return this.web3.eth.getAccounts().then(function(accounts) {
        return registry.methods.setResolver(node, addr).send(params ? params : {from: accounts[0]});
      });
    }.bind(this));
}

/**
 * owner returns the address of the owner of the specified name.
 * @param {string} name The name to look up.
 * @returns A promise returning the owner address of the specified name.
 */
ENS_1.prototype.owner = function(name, callback) {
    var node = namehash.hash(name);

    return this.registryPromise.then(function(registry) {
      return registry.methods.owner(node).call();
    });
}

/**
 * setOwner sets the owner of the specified name. Only the owner may call
 * setResolver or setSubnodeOwner. The calling account must be the current
 * owner of the name in order for this call to succeed.
 * @param {string} name The name to update
 * @param {address} address The address of the new owner
 * @param {object} options An optional dict of parameters to pass to web3.
 * @returns A promise returning the transaction ID of the transaction, once mined.
 */
ENS_1.prototype.setOwner = function(name, addr, params) {
    var node = namehash.hash(name);
    return this.registryPromise.then(function(registry) {
      return this.web3.eth.getAccounts().then(function(accounts) {
        return registry.methods.setOwner(node, addr).send(params ? params : {from: accounts[0]});
      });
    }.bind(this));
}

/**
 * setSubnodeOwner sets the owner of the specified name. The calling account
 * must be the owner of the parent name in order for this call to succeed -
 * for example, to call setSubnodeOwner on 'foo.bar.eth', the caller must be
 * the owner of 'bar.eth'.
 * @param {string} name The name to update
 * @param {address} address The address of the new owner
 * @param {object} options An optional dict of parameters to pass to web3.
 * @returns A promise returning the transaction ID of the transaction, once mined.
 */
ENS_1.prototype.setSubnodeOwner = function(name, addr, params) {
    var node = utils.parentNamehash(name);

    return this.registryPromise.then(function(registry) {
      return this.web3.eth.getAccounts().then(function(accounts) {
        return registry.methods.setSubnodeOwner(node[1], node[0], addr).send(params ? params : {from: accounts[0]});
      });
    }.bind(this));
}


// TODO: ADD A BOUNDARY


/**
 * @class
 */
function Resolver_0(ens, node, contract) {
    this.ens = ens;
    this.node = node;
    this.instancePromise = ens.registryPromise.then(function(registry) {
      return registry.resolverAsync(node).then(function(address) {
        if(address == "0x0000000000000000000000000000000000000000") {
          return Promise.reject(ENS.NameNotFound);
        }
        return Promise.promisifyAll(contract.at(address));
      });
    });

    _.each(contract.abi, function(signature) {
        this[signature.name] = function() {
          var args = arguments;
          return this.instancePromise.then(function(instance) {
            return _.partial(instance[signature.name + 'Async'], node).apply(instance, args);
          }).bind(this);
        }.bind(this);
    }.bind(this));
}

/**
 * resolverAddress returns the address of the resolver.
 * @returns A promise for the address of the resolver.
 */
Resolver_0.prototype.resolverAddress = function() {
  return this.instancePromise.then(function(instance) {
    return instance.address;
  });
}

/**
 * reverseAddr looks up the reverse record for the address returned by the resolver's addr()
 * @returns A promise for the Resolver for the reverse record.
 */
Resolver_0.prototype.reverseAddr = function() {
    return this.addr().then(function(addr) {
      return this.ens.reverse(addr);
    }).bind(this);
}

/**
 * abi returns the ABI associated with the name. Automatically looks for an ABI on the
 *     reverse record if none is found on the name itself.
 * @param {bool} Optional. If false, do not look up the ABI on the reverse entry.
 * @returns {object} A promise for the contract ABI.
 */
Resolver_0.prototype.abi = function(reverse) {
  return this.instancePromise.then(function(instance) {
    return instance.ABIAsync(this.node, supportedDecoders).then(function(result) {
      if(result[0] == 0) {
        if(reverse == false) return null;
        return this.reverseAddr().then(function(reverse) {
          return reverse.abi(false);
        });
      } else {
        return abiDecoders[result[0]](utils.fromHex(result[1]));
      }
    }.bind(this));
  }.bind(this));
};

/**
 * contract returns a web3 contract object. The address is that returned by this resolver's
 * `addr()`, and the ABI is loaded from this resolver's `ABI()` method, or the ABI on the
 * reverse record if that's not found. Returns null if no address is specified or no ABI
 * was found. The returned contract object will not be promisifed or otherwise modified.
 * @returns {object} A promise for the contract instance.
 */
Resolver_0.prototype.contract = function() {
  return Promise.join(this.abi(), this.addr(), function(abi, addr) {
    return this.ens.web3.eth.contract(abi).at(addr);
  }.bind(this));
};

/**
 * @class
 *
 * @description Provides an easy-to-use interface to the Ethereum Name Service.
 *
 * Example usage:
 *
 *     var ENS = require('ethereum-ens');
 *     var Web3 = require('web3');
 *
 *     var web3 = new Web3();
 *     var ens = new ENS(web3);
 *
 *     var address = ens.resolver('foo.eth').addr().then(function(addr) { ... });
 *
 * Functions that require communicating with the node return promises, rather than
 * using callbacks. A promise has a `then` function, which takes a callback and will
 * call it when the promise is fulfilled; `then` returns another promise, so you can
 * chain callbacks. For more details, see http://bluebirdjs.com/.
 *
 * Notably, the `resolver` method returns a resolver instance immediately; lookup of
 * the resolver address is done in the background or when you first call an asynchronous
 * method on the resolver.
 *
 * Functions that create transactions also take an optional 'options' argument;
 * this has the same parameters as web3.
 *
 * @author Nick Johnson <nick@ethereum.org>
 * @date 2016
 * @license LGPL
 *
 * @param {object} provider A web3 provider to use to communicate with the blockchain.
 * @param {address} address Optional. The address of the ENS registry. Defaults to the public ENS registry.
 */
function ENS_0(provider, address) {
    // Ensures backwards compatibility
    if (provider.currentProvider) {
        provider = provider.currentProvider;
    }

    this.web3 = new Web3(provider);
    var registryContract = this.web3.eth.contract(registryInterface);
    if(address != undefined) {
      this.registryPromise = Promise.resolve(Promise.promisifyAll(registryContract.at(address)));
    } else {
      this.registryPromise = Promise.promisify(this.web3.version.getNetwork)().then(function(version) {
        return Promise.promisifyAll(registryContract.at(registryAddresses[version]));
      });
    }
}

ENS_0.NameNotFound = Error("ENS name not found");

/**
 * resolver returns a resolver object for the specified name, throwing
 * ENS.NameNotFound if the name does not exist in ENS.
 * Resolver objects are wrappers around web3 contract objects, with the
 * first argument - always the node ID in an ENS resolver - automatically
 * supplied. So, to call the `addr(node)` function on a standard resolver,
 * you only have to call `addr()`. Returned objects are also 'promisified' - they
 * return a Bluebird Promise object instead of taking a callback.
 * @param {string} name The name to look up.
 * @param {list} abi Optional. The JSON ABI definition to use for the resolver.
 *        if none is supplied, a default definition implementing `has`, `addr`, `name`,
 *        `setName` and `setAddr` is supplied.
 * @returns The resolver object.
 */
ENS_0.prototype.resolver = function(name, abi) {
    abi = abi || resolverInterface;
    var node = namehash.hash(name);
    return new Resolver_0(this, node, this.web3.eth.contract(abi));
};

/**
 * reverse returns a resolver object for the reverse resolution of the specified address,
 * throwing ENS.NameNotFound if the reverse record does not exist in ENS.
 * Resolver objects are wrappers around web3 contract objects, with the
 * first argument - always the node ID in an ENS resolver - automatically
 * supplied. So, to call the `addr(node)` function on a standard resolver,
 * you only have to call `addr()`. Returned objects are also 'promisified' - they
 * return a Bluebird Promise object instead of taking a callback.
 * @param {string} address The address to look up.
 * @param {list} abi Optional. The JSON ABI definition to use for the resolver.
 *        if none is supplied, a default definition implementing `has`, `addr`, `name`,
 *        `setName` and `setAddr` is supplied.
 * @returns The resolver object.
 */
ENS_0.prototype.reverse = function(address, abi) {
    if(address.startsWith("0x"))
      address = address.slice(2);
    return this.resolver(address.toLowerCase() + ".addr.reverse", abi);
};

/**
 * setResolver sets the address of the resolver contract for the specified name.
 * The calling account must be the owner of the name in order for this call to
 * succeed.
 * @param {string} name The name to update
 * @param {address} address The address of the resolver
 * @param {object} options An optional dict of parameters to pass to web3.
 * @returns A promise that returns the transaction ID when the transaction is mined.
 */
ENS_0.prototype.setResolver = function(name, addr, params) {
    var node = namehash.hash(name);

    return this.registryPromise.then(function(registry) {
      return registry.setResolverAsync(node, addr, params);
    });
}

/**
 * owner returns the address of the owner of the specified name.
 * @param {string} name The name to look up.
 * @returns A promise returning the owner address of the specified name.
 */
ENS_0.prototype.owner = function(name, callback) {
    var node = namehash.hash(name);

    return this.registryPromise.then(function(registry) {
      return registry.ownerAsync(node);
    });
}

/**
 * setOwner sets the owner of the specified name. Only the owner may call
 * setResolver or setSubnodeOwner. The calling account must be the current
 * owner of the name in order for this call to succeed.
 * @param {string} name The name to update
 * @param {address} address The address of the new owner
 * @param {object} options An optional dict of parameters to pass to web3.
 * @returns A promise returning the transaction ID of the transaction, once mined.
 */
ENS_0.prototype.setOwner = function(name, addr, params) {
    var node = namehash.hash(name);

    return this.registryPromise.then(function(registry) {
      return registry.setOwnerAsync(node, addr, params);
    });
}

/**
 * setSubnodeOwner sets the owner of the specified name. The calling account
 * must be the owner of the parent name in order for this call to succeed -
 * for example, to call setSubnodeOwner on 'foo.bar.eth', the caller must be
 * the owner of 'bar.eth'.
 * @param {string} name The name to update
 * @param {address} address The address of the new owner
 * @param {object} options An optional dict of parameters to pass to web3.
 * @returns A promise returning the transaction ID of the transaction, once mined.
 */
ENS_0.prototype.setSubnodeOwner = function(name, addr, params) {
    var node = utils.parentNamehash(name);

    return this.registryPromise.then(function(registry) {
      return registry.setSubnodeOwnerAsync(node[1], node[0], addr, params);
    });
}

module.exports = ENS;


/***/ }),

/***/ 443835:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

var Bytes = __webpack_require__(94161);
var Nat = __webpack_require__(194536);
var elliptic = __webpack_require__(186266);
var rlp = __webpack_require__(19714);
var secp256k1 = new elliptic.ec("secp256k1"); // eslint-disable-line

var _require = __webpack_require__(172324),
    keccak256 = _require.keccak256,
    keccak256s = _require.keccak256s;

var create = function create(entropy) {
  var innerHex = keccak256(Bytes.concat(Bytes.random(32), entropy || Bytes.random(32)));
  var middleHex = Bytes.concat(Bytes.concat(Bytes.random(32), innerHex), Bytes.random(32));
  var outerHex = keccak256(middleHex);
  return fromPrivate(outerHex);
};

var toChecksum = function toChecksum(address) {
  var addressHash = keccak256s(address.slice(2));
  var checksumAddress = "0x";
  for (var i = 0; i < 40; i++) {
    checksumAddress += parseInt(addressHash[i + 2], 16) > 7 ? address[i + 2].toUpperCase() : address[i + 2];
  }return checksumAddress;
};

var fromPrivate = function fromPrivate(privateKey) {
  var buffer = new Buffer(privateKey.slice(2), "hex");
  var ecKey = secp256k1.keyFromPrivate(buffer);
  var publicKey = "0x" + ecKey.getPublic(false, 'hex').slice(2);
  var publicHash = keccak256(publicKey);
  var address = toChecksum("0x" + publicHash.slice(-40));
  return {
    address: address,
    privateKey: privateKey
  };
};

var encodeSignature = function encodeSignature(_ref) {
  var _ref2 = _slicedToArray(_ref, 3),
      v = _ref2[0],
      r = Bytes.pad(32, _ref2[1]),
      s = Bytes.pad(32, _ref2[2]);

  return Bytes.flatten([r, s, v]);
};

var decodeSignature = function decodeSignature(hex) {
  return [Bytes.slice(64, Bytes.length(hex), hex), Bytes.slice(0, 32, hex), Bytes.slice(32, 64, hex)];
};

var makeSigner = function makeSigner(addToV) {
  return function (hash, privateKey) {
    var signature = secp256k1.keyFromPrivate(new Buffer(privateKey.slice(2), "hex")).sign(new Buffer(hash.slice(2), "hex"), { canonical: true });
    return encodeSignature([Nat.fromString(Bytes.fromNumber(addToV + signature.recoveryParam)), Bytes.pad(32, Bytes.fromNat("0x" + signature.r.toString(16))), Bytes.pad(32, Bytes.fromNat("0x" + signature.s.toString(16)))]);
  };
};

var sign = makeSigner(27); // v=27|28 instead of 0|1...

var recover = function recover(hash, signature) {
  var vals = decodeSignature(signature);
  var vrs = { v: Bytes.toNumber(vals[0]), r: vals[1].slice(2), s: vals[2].slice(2) };
  var ecPublicKey = secp256k1.recoverPubKey(new Buffer(hash.slice(2), "hex"), vrs, vrs.v < 2 ? vrs.v : 1 - vrs.v % 2); // because odd vals mean v=0... sadly that means v=0 means v=1... I hate that
  var publicKey = "0x" + ecPublicKey.encode("hex", false).slice(2);
  var publicHash = keccak256(publicKey);
  var address = toChecksum("0x" + publicHash.slice(-40));
  return address;
};

module.exports = {
  create: create,
  toChecksum: toChecksum,
  fromPrivate: fromPrivate,
  sign: sign,
  makeSigner: makeSigner,
  recover: recover,
  encodeSignature: encodeSignature,
  decodeSignature: decodeSignature
};

/***/ }),

/***/ 572025:
/***/ ((module) => {

var generate = function generate(num, fn) {
  var a = [];
  for (var i = 0; i < num; ++i) {
    a.push(fn(i));
  }return a;
};

var replicate = function replicate(num, val) {
  return generate(num, function () {
    return val;
  });
};

var concat = function concat(a, b) {
  return a.concat(b);
};

var flatten = function flatten(a) {
  var r = [];
  for (var j = 0, J = a.length; j < J; ++j) {
    for (var i = 0, I = a[j].length; i < I; ++i) {
      r.push(a[j][i]);
    }
  }return r;
};

var chunksOf = function chunksOf(n, a) {
  var b = [];
  for (var i = 0, l = a.length; i < l; i += n) {
    b.push(a.slice(i, i + n));
  }return b;
};

module.exports = {
  generate: generate,
  replicate: replicate,
  concat: concat,
  flatten: flatten,
  chunksOf: chunksOf
};

/***/ }),

/***/ 94161:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var A = __webpack_require__(572025);

var at = function at(bytes, index) {
  return parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16);
};

var random = function random(bytes) {
  var rnd = void 0;
  if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (true) rnd = __webpack_require__(676417).randomBytes(bytes);else {}
  var hex = "0x";
  for (var i = 0; i < bytes; ++i) {
    hex += ("00" + rnd[i].toString(16)).slice(-2);
  }return hex;
};

var length = function length(a) {
  return (a.length - 2) / 2;
};

var flatten = function flatten(a) {
  return "0x" + a.reduce(function (r, s) {
    return r + s.slice(2);
  }, "");
};

var slice = function slice(i, j, bs) {
  return "0x" + bs.slice(i * 2 + 2, j * 2 + 2);
};

var reverse = function reverse(hex) {
  var rev = "0x";
  for (var i = 0, l = length(hex); i < l; ++i) {
    rev += hex.slice((l - i) * 2, (l - i + 1) * 2);
  }
  return rev;
};

var pad = function pad(l, hex) {
  return hex.length === l * 2 + 2 ? hex : pad(l, "0x" + "0" + hex.slice(2));
};

var padRight = function padRight(l, hex) {
  return hex.length === l * 2 + 2 ? hex : padRight(l, hex + "0");
};

var toArray = function toArray(hex) {
  var arr = [];
  for (var i = 2, l = hex.length; i < l; i += 2) {
    arr.push(parseInt(hex.slice(i, i + 2), 16));
  }return arr;
};

var fromArray = function fromArray(arr) {
  var hex = "0x";
  for (var i = 0, l = arr.length; i < l; ++i) {
    var b = arr[i];
    hex += (b < 16 ? "0" : "") + b.toString(16);
  }
  return hex;
};

var toUint8Array = function toUint8Array(hex) {
  return new Uint8Array(toArray(hex));
};

var fromUint8Array = function fromUint8Array(arr) {
  return fromArray([].slice.call(arr, 0));
};

var fromNumber = function fromNumber(num) {
  var hex = num.toString(16);
  return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex;
};

var toNumber = function toNumber(hex) {
  return parseInt(hex.slice(2), 16);
};

var concat = function concat(a, b) {
  return a.concat(b.slice(2));
};

var fromNat = function fromNat(bn) {
  return bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2);
};

var toNat = function toNat(bn) {
  return bn[2] === "0" ? "0x" + bn.slice(3) : bn;
};

var fromAscii = function fromAscii(ascii) {
  var hex = "0x";
  for (var i = 0; i < ascii.length; ++i) {
    hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2);
  }return hex;
};

var toAscii = function toAscii(hex) {
  var ascii = "";
  for (var i = 2; i < hex.length; i += 2) {
    ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16));
  }return ascii;
};

// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330
var fromString = function fromString(s) {
  var makeByte = function makeByte(uint8) {
    var b = uint8.toString(16);
    return b.length < 2 ? "0" + b : b;
  };
  var bytes = "0x";
  for (var ci = 0; ci != s.length; ci++) {
    var c = s.charCodeAt(ci);
    if (c < 128) {
      bytes += makeByte(c);
      continue;
    }
    if (c < 2048) {
      bytes += makeByte(c >> 6 | 192);
    } else {
      if (c > 0xd7ff && c < 0xdc00) {
        if (++ci == s.length) return null;
        var c2 = s.charCodeAt(ci);
        if (c2 < 0xdc00 || c2 > 0xdfff) return null;
        c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);
        bytes += makeByte(c >> 18 | 240);
        bytes += makeByte(c >> 12 & 63 | 128);
      } else {
        // c <= 0xffff
        bytes += makeByte(c >> 12 | 224);
      }
      bytes += makeByte(c >> 6 & 63 | 128);
    }
    bytes += makeByte(c & 63 | 128);
  }
  return bytes;
};

var toString = function toString(bytes) {
  var s = '';
  var i = 0;
  var l = length(bytes);
  while (i < l) {
    var c = at(bytes, i++);
    if (c > 127) {
      if (c > 191 && c < 224) {
        if (i >= l) return null;
        c = (c & 31) << 6 | at(bytes, i) & 63;
      } else if (c > 223 && c < 240) {
        if (i + 1 >= l) return null;
        c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63;
      } else if (c > 239 && c < 248) {
        if (i + 2 >= l) return null;
        c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63;
      } else return null;
      ++i;
    }
    if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) {
      c -= 0x10000;
      s += String.fromCharCode(c >> 10 | 0xd800);
      s += String.fromCharCode(c & 0x3FF | 0xdc00);
    } else return null;
  }
  return s;
};

module.exports = {
  random: random,
  length: length,
  concat: concat,
  flatten: flatten,
  slice: slice,
  reverse: reverse,
  pad: pad,
  padRight: padRight,
  fromAscii: fromAscii,
  toAscii: toAscii,
  fromString: fromString,
  toString: toString,
  fromNumber: fromNumber,
  toNumber: toNumber,
  fromNat: fromNat,
  toNat: toNat,
  fromArray: fromArray,
  toArray: toArray,
  fromUint8Array: fromUint8Array,
  toUint8Array: toUint8Array
};

/***/ }),

/***/ 172324:
/***/ ((module) => {

// This was ported from https://github.com/emn178/js-sha3, with some minor
// modifications and pruning. It is licensed under MIT:
//
// Copyright 2015-2016 Chen, Yi-Cyuan
//  
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

var HEX_CHARS = '0123456789abcdef'.split('');
var KECCAK_PADDING = [1, 256, 65536, 16777216];
var SHIFT = [0, 8, 16, 24];
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];

var Keccak = function Keccak(bits) {
  return {
    blocks: [],
    reset: true,
    block: 0,
    start: 0,
    blockCount: 1600 - (bits << 1) >> 5,
    outputBlocks: bits >> 5,
    s: function (s) {
      return [].concat(s, s, s, s, s);
    }([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  };
};

var update = function update(state, message) {
  var length = message.length,
      blocks = state.blocks,
      byteCount = state.blockCount << 2,
      blockCount = state.blockCount,
      outputBlocks = state.outputBlocks,
      s = state.s,
      index = 0,
      i,
      code;

  // update
  while (index < length) {
    if (state.reset) {
      state.reset = false;
      blocks[0] = state.block;
      for (i = 1; i < blockCount + 1; ++i) {
        blocks[i] = 0;
      }
    }
    if (typeof message !== "string") {
      for (i = state.start; index < length && i < byteCount; ++index) {
        blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
      }
    } else {
      for (i = state.start; index < length && i < byteCount; ++index) {
        code = message.charCodeAt(index);
        if (code < 0x80) {
          blocks[i >> 2] |= code << SHIFT[i++ & 3];
        } else if (code < 0x800) {
          blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        } else if (code < 0xd800 || code >= 0xe000) {
          blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        } else {
          code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);
          blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        }
      }
    }
    state.lastByteIndex = i;
    if (i >= byteCount) {
      state.start = i - byteCount;
      state.block = blocks[blockCount];
      for (i = 0; i < blockCount; ++i) {
        s[i] ^= blocks[i];
      }
      f(s);
      state.reset = true;
    } else {
      state.start = i;
    }
  }

  // finalize
  i = state.lastByteIndex;
  blocks[i >> 2] |= KECCAK_PADDING[i & 3];
  if (state.lastByteIndex === byteCount) {
    blocks[0] = blocks[blockCount];
    for (i = 1; i < blockCount + 1; ++i) {
      blocks[i] = 0;
    }
  }
  blocks[blockCount - 1] |= 0x80000000;
  for (i = 0; i < blockCount; ++i) {
    s[i] ^= blocks[i];
  }
  f(s);

  // toString
  var hex = '',
      i = 0,
      j = 0,
      block;
  while (j < outputBlocks) {
    for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
      block = s[i];
      hex += HEX_CHARS[block >> 4 & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[block >> 12 & 0x0F] + HEX_CHARS[block >> 8 & 0x0F] + HEX_CHARS[block >> 20 & 0x0F] + HEX_CHARS[block >> 16 & 0x0F] + HEX_CHARS[block >> 28 & 0x0F] + HEX_CHARS[block >> 24 & 0x0F];
    }
    if (j % blockCount === 0) {
      f(s);
      i = 0;
    }
  }
  return "0x" + hex;
};

var f = function f(s) {
  var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;

  for (n = 0; n < 48; n += 2) {
    c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
    c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
    c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
    c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
    c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
    c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
    c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
    c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
    c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
    c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];

    h = c8 ^ (c2 << 1 | c3 >>> 31);
    l = c9 ^ (c3 << 1 | c2 >>> 31);
    s[0] ^= h;
    s[1] ^= l;
    s[10] ^= h;
    s[11] ^= l;
    s[20] ^= h;
    s[21] ^= l;
    s[30] ^= h;
    s[31] ^= l;
    s[40] ^= h;
    s[41] ^= l;
    h = c0 ^ (c4 << 1 | c5 >>> 31);
    l = c1 ^ (c5 << 1 | c4 >>> 31);
    s[2] ^= h;
    s[3] ^= l;
    s[12] ^= h;
    s[13] ^= l;
    s[22] ^= h;
    s[23] ^= l;
    s[32] ^= h;
    s[33] ^= l;
    s[42] ^= h;
    s[43] ^= l;
    h = c2 ^ (c6 << 1 | c7 >>> 31);
    l = c3 ^ (c7 << 1 | c6 >>> 31);
    s[4] ^= h;
    s[5] ^= l;
    s[14] ^= h;
    s[15] ^= l;
    s[24] ^= h;
    s[25] ^= l;
    s[34] ^= h;
    s[35] ^= l;
    s[44] ^= h;
    s[45] ^= l;
    h = c4 ^ (c8 << 1 | c9 >>> 31);
    l = c5 ^ (c9 << 1 | c8 >>> 31);
    s[6] ^= h;
    s[7] ^= l;
    s[16] ^= h;
    s[17] ^= l;
    s[26] ^= h;
    s[27] ^= l;
    s[36] ^= h;
    s[37] ^= l;
    s[46] ^= h;
    s[47] ^= l;
    h = c6 ^ (c0 << 1 | c1 >>> 31);
    l = c7 ^ (c1 << 1 | c0 >>> 31);
    s[8] ^= h;
    s[9] ^= l;
    s[18] ^= h;
    s[19] ^= l;
    s[28] ^= h;
    s[29] ^= l;
    s[38] ^= h;
    s[39] ^= l;
    s[48] ^= h;
    s[49] ^= l;

    b0 = s[0];
    b1 = s[1];
    b32 = s[11] << 4 | s[10] >>> 28;
    b33 = s[10] << 4 | s[11] >>> 28;
    b14 = s[20] << 3 | s[21] >>> 29;
    b15 = s[21] << 3 | s[20] >>> 29;
    b46 = s[31] << 9 | s[30] >>> 23;
    b47 = s[30] << 9 | s[31] >>> 23;
    b28 = s[40] << 18 | s[41] >>> 14;
    b29 = s[41] << 18 | s[40] >>> 14;
    b20 = s[2] << 1 | s[3] >>> 31;
    b21 = s[3] << 1 | s[2] >>> 31;
    b2 = s[13] << 12 | s[12] >>> 20;
    b3 = s[12] << 12 | s[13] >>> 20;
    b34 = s[22] << 10 | s[23] >>> 22;
    b35 = s[23] << 10 | s[22] >>> 22;
    b16 = s[33] << 13 | s[32] >>> 19;
    b17 = s[32] << 13 | s[33] >>> 19;
    b48 = s[42] << 2 | s[43] >>> 30;
    b49 = s[43] << 2 | s[42] >>> 30;
    b40 = s[5] << 30 | s[4] >>> 2;
    b41 = s[4] << 30 | s[5] >>> 2;
    b22 = s[14] << 6 | s[15] >>> 26;
    b23 = s[15] << 6 | s[14] >>> 26;
    b4 = s[25] << 11 | s[24] >>> 21;
    b5 = s[24] << 11 | s[25] >>> 21;
    b36 = s[34] << 15 | s[35] >>> 17;
    b37 = s[35] << 15 | s[34] >>> 17;
    b18 = s[45] << 29 | s[44] >>> 3;
    b19 = s[44] << 29 | s[45] >>> 3;
    b10 = s[6] << 28 | s[7] >>> 4;
    b11 = s[7] << 28 | s[6] >>> 4;
    b42 = s[17] << 23 | s[16] >>> 9;
    b43 = s[16] << 23 | s[17] >>> 9;
    b24 = s[26] << 25 | s[27] >>> 7;
    b25 = s[27] << 25 | s[26] >>> 7;
    b6 = s[36] << 21 | s[37] >>> 11;
    b7 = s[37] << 21 | s[36] >>> 11;
    b38 = s[47] << 24 | s[46] >>> 8;
    b39 = s[46] << 24 | s[47] >>> 8;
    b30 = s[8] << 27 | s[9] >>> 5;
    b31 = s[9] << 27 | s[8] >>> 5;
    b12 = s[18] << 20 | s[19] >>> 12;
    b13 = s[19] << 20 | s[18] >>> 12;
    b44 = s[29] << 7 | s[28] >>> 25;
    b45 = s[28] << 7 | s[29] >>> 25;
    b26 = s[38] << 8 | s[39] >>> 24;
    b27 = s[39] << 8 | s[38] >>> 24;
    b8 = s[48] << 14 | s[49] >>> 18;
    b9 = s[49] << 14 | s[48] >>> 18;

    s[0] = b0 ^ ~b2 & b4;
    s[1] = b1 ^ ~b3 & b5;
    s[10] = b10 ^ ~b12 & b14;
    s[11] = b11 ^ ~b13 & b15;
    s[20] = b20 ^ ~b22 & b24;
    s[21] = b21 ^ ~b23 & b25;
    s[30] = b30 ^ ~b32 & b34;
    s[31] = b31 ^ ~b33 & b35;
    s[40] = b40 ^ ~b42 & b44;
    s[41] = b41 ^ ~b43 & b45;
    s[2] = b2 ^ ~b4 & b6;
    s[3] = b3 ^ ~b5 & b7;
    s[12] = b12 ^ ~b14 & b16;
    s[13] = b13 ^ ~b15 & b17;
    s[22] = b22 ^ ~b24 & b26;
    s[23] = b23 ^ ~b25 & b27;
    s[32] = b32 ^ ~b34 & b36;
    s[33] = b33 ^ ~b35 & b37;
    s[42] = b42 ^ ~b44 & b46;
    s[43] = b43 ^ ~b45 & b47;
    s[4] = b4 ^ ~b6 & b8;
    s[5] = b5 ^ ~b7 & b9;
    s[14] = b14 ^ ~b16 & b18;
    s[15] = b15 ^ ~b17 & b19;
    s[24] = b24 ^ ~b26 & b28;
    s[25] = b25 ^ ~b27 & b29;
    s[34] = b34 ^ ~b36 & b38;
    s[35] = b35 ^ ~b37 & b39;
    s[44] = b44 ^ ~b46 & b48;
    s[45] = b45 ^ ~b47 & b49;
    s[6] = b6 ^ ~b8 & b0;
    s[7] = b7 ^ ~b9 & b1;
    s[16] = b16 ^ ~b18 & b10;
    s[17] = b17 ^ ~b19 & b11;
    s[26] = b26 ^ ~b28 & b20;
    s[27] = b27 ^ ~b29 & b21;
    s[36] = b36 ^ ~b38 & b30;
    s[37] = b37 ^ ~b39 & b31;
    s[46] = b46 ^ ~b48 & b40;
    s[47] = b47 ^ ~b49 & b41;
    s[8] = b8 ^ ~b0 & b2;
    s[9] = b9 ^ ~b1 & b3;
    s[18] = b18 ^ ~b10 & b12;
    s[19] = b19 ^ ~b11 & b13;
    s[28] = b28 ^ ~b20 & b22;
    s[29] = b29 ^ ~b21 & b23;
    s[38] = b38 ^ ~b30 & b32;
    s[39] = b39 ^ ~b31 & b33;
    s[48] = b48 ^ ~b40 & b42;
    s[49] = b49 ^ ~b41 & b43;

    s[0] ^= RC[n];
    s[1] ^= RC[n + 1];
  }
};

var keccak = function keccak(bits) {
  return function (str) {
    var msg;
    if (str.slice(0, 2) === "0x") {
      msg = [];
      for (var i = 2, l = str.length; i < l; i += 2) {
        msg.push(parseInt(str.slice(i, i + 2), 16));
      }
    } else {
      msg = str;
    }
    return update(Keccak(bits, bits), msg);
  };
};

module.exports = {
  keccak256: keccak(256),
  keccak512: keccak(512),
  keccak256s: keccak(256),
  keccak512s: keccak(512)
};

/***/ }),

/***/ 194536:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var BN = __webpack_require__(213550);
var Bytes = __webpack_require__(94161);

var fromBN = function fromBN(bn) {
  return "0x" + bn.toString("hex");
};

var toBN = function toBN(str) {
  return new BN(str.slice(2), 16);
};

var fromString = function fromString(str) {
  var bn = "0x" + (str.slice(0, 2) === "0x" ? new BN(str.slice(2), 16) : new BN(str, 10)).toString("hex");
  return bn === "0x0" ? "0x" : bn;
};

var toEther = function toEther(wei) {
  return toNumber(div(wei, fromString("10000000000"))) / 100000000;
};

var fromEther = function fromEther(eth) {
  return mul(fromNumber(Math.floor(eth * 100000000)), fromString("10000000000"));
};

var toString = function toString(a) {
  return toBN(a).toString(10);
};

var fromNumber = function fromNumber(a) {
  return typeof a === "string" ? /^0x/.test(a) ? a : "0x" + a : "0x" + new BN(a).toString("hex");
};

var toNumber = function toNumber(a) {
  return toBN(a).toNumber();
};

var toUint256 = function toUint256(a) {
  return Bytes.pad(32, a);
};

var bin = function bin(method) {
  return function (a, b) {
    return fromBN(toBN(a)[method](toBN(b)));
  };
};

var add = bin("add");
var mul = bin("mul");
var div = bin("div");
var sub = bin("sub");

module.exports = {
  toString: toString,
  fromString: fromString,
  toNumber: toNumber,
  fromNumber: fromNumber,
  toEther: toEther,
  fromEther: fromEther,
  toUint256: toUint256,
  add: add,
  mul: mul,
  div: div,
  sub: sub
};

/***/ }),

/***/ 19714:
/***/ ((module) => {

// The RLP format
// Serialization and deserialization for the BytesTree type, under the following grammar:
// | First byte | Meaning                                                                    |
// | ---------- | -------------------------------------------------------------------------- |
// | 0   to 127 | HEX(leaf)                                                                  |
// | 128 to 183 | HEX(length_of_leaf + 128) + HEX(leaf)                                      |
// | 184 to 191 | HEX(length_of_length_of_leaf + 128 + 55) + HEX(length_of_leaf) + HEX(leaf) |
// | 192 to 247 | HEX(length_of_node + 192) + HEX(node)                                      |
// | 248 to 255 | HEX(length_of_length_of_node + 128 + 55) + HEX(length_of_node) + HEX(node) |

var encode = function encode(tree) {
  var padEven = function padEven(str) {
    return str.length % 2 === 0 ? str : "0" + str;
  };

  var uint = function uint(num) {
    return padEven(num.toString(16));
  };

  var length = function length(len, add) {
    return len < 56 ? uint(add + len) : uint(add + uint(len).length / 2 + 55) + uint(len);
  };

  var dataTree = function dataTree(tree) {
    if (typeof tree === "string") {
      var hex = tree.slice(2);
      var pre = hex.length != 2 || hex >= "80" ? length(hex.length / 2, 128) : "";
      return pre + hex;
    } else {
      var _hex = tree.map(dataTree).join("");
      var _pre = length(_hex.length / 2, 192);
      return _pre + _hex;
    }
  };

  return "0x" + dataTree(tree);
};

var decode = function decode(hex) {
  var i = 2;

  var parseTree = function parseTree() {
    if (i >= hex.length) throw "";
    var head = hex.slice(i, i + 2);
    return head < "80" ? (i += 2, "0x" + head) : head < "c0" ? parseHex() : parseList();
  };

  var parseLength = function parseLength() {
    var len = parseInt(hex.slice(i, i += 2), 16) % 64;
    return len < 56 ? len : parseInt(hex.slice(i, i += (len - 55) * 2), 16);
  };

  var parseHex = function parseHex() {
    var len = parseLength();
    return "0x" + hex.slice(i, i += len * 2);
  };

  var parseList = function parseList() {
    var lim = parseLength() * 2 + i;
    var list = [];
    while (i < lim) {
      list.push(parseTree());
    }return list;
  };

  try {
    return parseTree();
  } catch (e) {
    return [];
  }
};

module.exports = { encode: encode, decode: decode };

/***/ }),

/***/ 502072:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = function (d, b) {
        extendStatics = Object.setPrototypeOf ||
            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
        return extendStatics(d, b);
    };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
var ethereumjs_util_1 = __webpack_require__(351826);
var buffer_1 = __webpack_require__(764293);
var transaction_1 = __webpack_require__(700259);
/**
 * Creates a new transaction object that doesn't need to be signed.
 *
 * @param data - A transaction can be initialized with its rlp representation, an array containing
 * the value of its fields in order, or an object containing them by name.
 *
 * @param opts - The transaction's options, used to indicate the chain and hardfork the
 * transactions belongs to.
 *
 * @see Transaction
 */
var FakeTransaction = /** @class */ (function (_super) {
    __extends(FakeTransaction, _super);
    function FakeTransaction(data, opts) {
        if (data === void 0) { data = {}; }
        if (opts === void 0) { opts = {}; }
        var _this = _super.call(this, data, opts) || this;
        Object.defineProperty(_this, 'from', {
            enumerable: true,
            configurable: true,
            get: function () { return _this.getSenderAddress(); },
            set: function (val) {
                if (val) {
                    _this._from = ethereumjs_util_1.toBuffer(val);
                }
            },
        });
        var txData = data;
        if (txData.from) {
            _this.from = ethereumjs_util_1.toBuffer(txData.from);
        }
        return _this;
    }
    /**
     * Computes a sha3-256 hash of the serialized tx, using the sender address to generate a fake
     * signature.
     *
     * @param includeSignature - Whether or not to include the signature
     */
    FakeTransaction.prototype.hash = function (includeSignature) {
        if (includeSignature === void 0) { includeSignature = true; }
        if (includeSignature && this._from && this._from.toString('hex') !== '') {
            // include a fake signature using the from address as a private key
            var fakeKey = buffer_1.Buffer.concat([this._from, this._from.slice(0, 12)]);
            this.sign(fakeKey);
        }
        return _super.prototype.hash.call(this, includeSignature);
    };
    return FakeTransaction;
}(transaction_1.default));
exports.default = FakeTransaction;
//# sourceMappingURL=fake.js.map

/***/ }),

/***/ 213665:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";
var __webpack_unused_export__;

__webpack_unused_export__ = ({ value: true });
var transaction_1 = __webpack_require__(700259);
exports.YW = transaction_1.default;
var fake_1 = __webpack_require__(502072);
__webpack_unused_export__ = fake_1.default;
//# sourceMappingURL=index.js.map

/***/ }),

/***/ 700259:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var ethereumjs_util_1 = __webpack_require__(351826);
var ethereumjs_common_1 = __webpack_require__(265982);
var buffer_1 = __webpack_require__(764293);
// secp256k1n/2
var N_DIV_2 = new ethereumjs_util_1.BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16);
/**
 * An Ethereum transaction.
 */
var Transaction = /** @class */ (function () {
    /**
     * Creates a new transaction from an object with its fields' values.
     *
     * @param data - A transaction can be initialized with its rlp representation, an array containing
     * the value of its fields in order, or an object containing them by name.
     *
     * @param opts - The transaction's options, used to indicate the chain and hardfork the
     * transactions belongs to.
     *
     * @note Transaction objects implement EIP155 by default. To disable it, use the constructor's
     * second parameter to set a chain and hardfork before EIP155 activation (i.e. before Spurious
     * Dragon.)
     *
     * @example
     * ```js
     * const txData = {
     *   nonce: '0x00',
     *   gasPrice: '0x09184e72a000',
     *   gasLimit: '0x2710',
     *   to: '0x0000000000000000000000000000000000000000',
     *   value: '0x00',
     *   data: '0x7f7465737432000000000000000000000000000000000000000000000000000000600057',
     *   v: '0x1c',
     *   r: '0x5e1d3a76fbf824220eafc8c79ad578ad2b67d01b0c2425eb1f1347e8f50882ab',
     *   s: '0x5bd428537f05f9830e93792f90ea6a3e2d1ee84952dd96edbae9f658f831ab13'
     * };
     * const tx = new Transaction(txData);
     * ```
     */
    function Transaction(data, opts) {
        if (data === void 0) { data = {}; }
        if (opts === void 0) { opts = {}; }
        // instantiate Common class instance based on passed options
        if (opts.common) {
            if (opts.chain || opts.hardfork) {
                throw new Error('Instantiation with both opts.common, and opts.chain and opts.hardfork parameter not allowed!');
            }
            this._common = opts.common;
        }
        else {
            var chain = opts.chain ? opts.chain : 'mainnet';
            var hardfork = opts.hardfork ? opts.hardfork : 'petersburg';
            this._common = new ethereumjs_common_1.default(chain, hardfork);
        }
        // Define Properties
        var fields = [
            {
                name: 'nonce',
                length: 32,
                allowLess: true,
                default: new buffer_1.Buffer([]),
            },
            {
                name: 'gasPrice',
                length: 32,
                allowLess: true,
                default: new buffer_1.Buffer([]),
            },
            {
                name: 'gasLimit',
                alias: 'gas',
                length: 32,
                allowLess: true,
                default: new buffer_1.Buffer([]),
            },
            {
                name: 'to',
                allowZero: true,
                length: 20,
                default: new buffer_1.Buffer([]),
            },
            {
                name: 'value',
                length: 32,
                allowLess: true,
                default: new buffer_1.Buffer([]),
            },
            {
                name: 'data',
                alias: 'input',
                allowZero: true,
                default: new buffer_1.Buffer([]),
            },
            {
                name: 'v',
                allowZero: true,
                default: new buffer_1.Buffer([]),
            },
            {
                name: 'r',
                length: 32,
                allowZero: true,
                allowLess: true,
                default: new buffer_1.Buffer([]),
            },
            {
                name: 's',
                length: 32,
                allowZero: true,
                allowLess: true,
                default: new buffer_1.Buffer([]),
            },
        ];
        // attached serialize
        ethereumjs_util_1.defineProperties(this, fields, data);
        /**
         * @property {Buffer} from (read only) sender address of this transaction, mathematically derived from other parameters.
         * @name from
         * @memberof Transaction
         */
        Object.defineProperty(this, 'from', {
            enumerable: true,
            configurable: true,
            get: this.getSenderAddress.bind(this),
        });
        this._validateV(this.v);
        this._overrideVSetterWithValidation();
    }
    /**
     * If the tx's `to` is to the creation address
     */
    Transaction.prototype.toCreationAddress = function () {
        return this.to.toString('hex') === '';
    };
    /**
     * Computes a sha3-256 hash of the serialized tx
     * @param includeSignature - Whether or not to include the signature
     */
    Transaction.prototype.hash = function (includeSignature) {
        if (includeSignature === void 0) { includeSignature = true; }
        var items;
        if (includeSignature) {
            items = this.raw;
        }
        else {
            if (this._implementsEIP155()) {
                items = this.raw.slice(0, 6).concat([
                    ethereumjs_util_1.toBuffer(this.getChainId()),
                    // TODO: stripping zeros should probably be a responsibility of the rlp module
                    ethereumjs_util_1.stripZeros(ethereumjs_util_1.toBuffer(0)),
                    ethereumjs_util_1.stripZeros(ethereumjs_util_1.toBuffer(0)),
                ]);
            }
            else {
                items = this.raw.slice(0, 6);
            }
        }
        // create hash
        return ethereumjs_util_1.rlphash(items);
    };
    /**
     * returns chain ID
     */
    Transaction.prototype.getChainId = function () {
        return this._common.chainId();
    };
    /**
     * returns the sender's address
     */
    Transaction.prototype.getSenderAddress = function () {
        if (this._from) {
            return this._from;
        }
        var pubkey = this.getSenderPublicKey();
        this._from = ethereumjs_util_1.publicToAddress(pubkey);
        return this._from;
    };
    /**
     * returns the public key of the sender
     */
    Transaction.prototype.getSenderPublicKey = function () {
        if (!this.verifySignature()) {
            throw new Error('Invalid Signature');
        }
        // If the signature was verified successfully the _senderPubKey field is defined
        return this._senderPubKey;
    };
    /**
     * Determines if the signature is valid
     */
    Transaction.prototype.verifySignature = function () {
        var msgHash = this.hash(false);
        // All transaction signatures whose s-value is greater than secp256k1n/2 are considered invalid.
        if (this._common.gteHardfork('homestead') && new ethereumjs_util_1.BN(this.s).cmp(N_DIV_2) === 1) {
            return false;
        }
        try {
            var v = ethereumjs_util_1.bufferToInt(this.v);
            var useChainIdWhileRecoveringPubKey = v >= this.getChainId() * 2 + 35 && this._common.gteHardfork('spuriousDragon');
            this._senderPubKey = ethereumjs_util_1.ecrecover(msgHash, v, this.r, this.s, useChainIdWhileRecoveringPubKey ? this.getChainId() : undefined);
        }
        catch (e) {
            return false;
        }
        return !!this._senderPubKey;
    };
    /**
     * sign a transaction with a given private key
     * @param privateKey - Must be 32 bytes in length
     */
    Transaction.prototype.sign = function (privateKey) {
        // We clear any previous signature before signing it. Otherwise, _implementsEIP155's can give
        // different results if this tx was already signed.
        this.v = new buffer_1.Buffer([]);
        this.s = new buffer_1.Buffer([]);
        this.r = new buffer_1.Buffer([]);
        var msgHash = this.hash(false);
        var sig = ethereumjs_util_1.ecsign(msgHash, privateKey);
        if (this._implementsEIP155()) {
            sig.v += this.getChainId() * 2 + 8;
        }
        Object.assign(this, sig);
    };
    /**
     * The amount of gas paid for the data in this tx
     */
    Transaction.prototype.getDataFee = function () {
        var data = this.raw[5];
        var cost = new ethereumjs_util_1.BN(0);
        for (var i = 0; i < data.length; i++) {
            data[i] === 0
                ? cost.iaddn(this._common.param('gasPrices', 'txDataZero'))
                : cost.iaddn(this._common.param('gasPrices', 'txDataNonZero'));
        }
        return cost;
    };
    /**
     * the minimum amount of gas the tx must have (DataFee + TxFee + Creation Fee)
     */
    Transaction.prototype.getBaseFee = function () {
        var fee = this.getDataFee().iaddn(this._common.param('gasPrices', 'tx'));
        if (this._common.gteHardfork('homestead') && this.toCreationAddress()) {
            fee.iaddn(this._common.param('gasPrices', 'txCreation'));
        }
        return fee;
    };
    /**
     * the up front amount that an account must have for this transaction to be valid
     */
    Transaction.prototype.getUpfrontCost = function () {
        return new ethereumjs_util_1.BN(this.gasLimit).imul(new ethereumjs_util_1.BN(this.gasPrice)).iadd(new ethereumjs_util_1.BN(this.value));
    };
    Transaction.prototype.validate = function (stringError) {
        if (stringError === void 0) { stringError = false; }
        var errors = [];
        if (!this.verifySignature()) {
            errors.push('Invalid Signature');
        }
        if (this.getBaseFee().cmp(new ethereumjs_util_1.BN(this.gasLimit)) > 0) {
            errors.push(["gas limit is too low. Need at least " + this.getBaseFee()]);
        }
        if (stringError === false) {
            return errors.length === 0;
        }
        else {
            return errors.join(' ');
        }
    };
    /**
     * Returns the rlp encoding of the transaction
     */
    Transaction.prototype.serialize = function () {
        // Note: This never gets executed, defineProperties overwrites it.
        return ethereumjs_util_1.rlp.encode(this.raw);
    };
    /**
     * Returns the transaction in JSON format
     * @see {@link https://github.com/ethereumjs/ethereumjs-util/blob/master/docs/index.md#defineproperties|ethereumjs-util}
     */
    Transaction.prototype.toJSON = function (labels) {
        if (labels === void 0) { labels = false; }
        // Note: This never gets executed, defineProperties overwrites it.
        return {};
    };
    Transaction.prototype._validateV = function (v) {
        if (v === undefined || v.length === 0) {
            return;
        }
        if (!this._common.gteHardfork('spuriousDragon')) {
            return;
        }
        var vInt = ethereumjs_util_1.bufferToInt(v);
        if (vInt === 27 || vInt === 28) {
            return;
        }
        var isValidEIP155V = vInt === this.getChainId() * 2 + 35 || vInt === this.getChainId() * 2 + 36;
        if (!isValidEIP155V) {
            throw new Error("Incompatible EIP155-based V " + vInt + " and chain id " + this.getChainId() + ". See the second parameter of the Transaction constructor to set the chain id.");
        }
    };
    Transaction.prototype._isSigned = function () {
        return this.v.length > 0 && this.r.length > 0 && this.s.length > 0;
    };
    Transaction.prototype._overrideVSetterWithValidation = function () {
        var _this = this;
        var vDescriptor = Object.getOwnPropertyDescriptor(this, 'v');
        Object.defineProperty(this, 'v', __assign({}, vDescriptor, { set: function (v) {
                if (v !== undefined) {
                    _this._validateV(ethereumjs_util_1.toBuffer(v));
                }
                vDescriptor.set(v);
            } }));
    };
    Transaction.prototype._implementsEIP155 = function () {
        var onEIP155BlockOrLater = this._common.gteHardfork('spuriousDragon');
        if (!this._isSigned()) {
            // We sign with EIP155 all unsigned transactions after spuriousDragon
            return onEIP155BlockOrLater;
        }
        // EIP155 spec:
        // If block.number >= 2,675,000 and v = CHAIN_ID * 2 + 35 or v = CHAIN_ID * 2 + 36, then when computing
        // the hash of a transaction for purposes of signing or recovering, instead of hashing only the first six
        // elements (i.e. nonce, gasprice, startgas, to, value, data), hash nine elements, with v replaced by
        // CHAIN_ID, r = 0 and s = 0.
        var v = ethereumjs_util_1.bufferToInt(this.v);
        var vAndChainIdMeetEIP155Conditions = v === this.getChainId() * 2 + 35 || v === this.getChainId() * 2 + 36;
        return vAndChainIdMeetEIP155Conditions && onEIP155BlockOrLater;
    };
    return Transaction;
}());
exports.default = Transaction;
//# sourceMappingURL=transaction.js.map

/***/ }),

/***/ 155390:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var assert = __webpack_require__(742357);
var ethjsUtil = __webpack_require__(180884);
var secp256k1 = __webpack_require__(907972);
var BN = __webpack_require__(213550);
var bytes_1 = __webpack_require__(714670);
var hash_1 = __webpack_require__(693869);
/**
 * Returns a zero address.
 */
exports.zeroAddress = function () {
    var addressLength = 20;
    var addr = bytes_1.zeros(addressLength);
    return bytes_1.bufferToHex(addr);
};
/**
 * Checks if the address is a valid. Accepts checksummed addresses too.
 */
exports.isValidAddress = function (address) {
    return /^0x[0-9a-fA-F]{40}$/.test(address);
};
/**
 * Checks if a given address is a zero address.
 */
exports.isZeroAddress = function (address) {
    var zeroAddr = exports.zeroAddress();
    return zeroAddr === bytes_1.addHexPrefix(address);
};
/**
 * Returns a checksummed address.
 *
 * If a eip1191ChainId is provided, the chainId will be included in the checksum calculation. This
 * has the effect of checksummed addresses for one chain having invalid checksums for others.
 * For more details, consult EIP-1191.
 *
 * WARNING: Checksums with and without the chainId will differ. As of 2019-06-26, the most commonly
 * used variation in Ethereum was without the chainId. This may change in the future.
 */
exports.toChecksumAddress = function (address, eip1191ChainId) {
    address = ethjsUtil.stripHexPrefix(address).toLowerCase();
    var prefix = eip1191ChainId !== undefined ? eip1191ChainId.toString() + '0x' : '';
    var hash = hash_1.keccak(prefix + address).toString('hex');
    var ret = '0x';
    for (var i = 0; i < address.length; i++) {
        if (parseInt(hash[i], 16) >= 8) {
            ret += address[i].toUpperCase();
        }
        else {
            ret += address[i];
        }
    }
    return ret;
};
/**
 * Checks if the address is a valid checksummed address.
 *
 * See toChecksumAddress' documentation for details about the eip1191ChainId parameter.
 */
exports.isValidChecksumAddress = function (address, eip1191ChainId) {
    return exports.isValidAddress(address) && exports.toChecksumAddress(address, eip1191ChainId) === address;
};
/**
 * Generates an address of a newly created contract.
 * @param from The address which is creating this new address
 * @param nonce The nonce of the from account
 */
exports.generateAddress = function (from, nonce) {
    from = bytes_1.toBuffer(from);
    var nonceBN = new BN(nonce);
    if (nonceBN.isZero()) {
        // in RLP we want to encode null in the case of zero nonce
        // read the RLP documentation for an answer if you dare
        return hash_1.rlphash([from, null]).slice(-20);
    }
    // Only take the lower 160bits of the hash
    return hash_1.rlphash([from, Buffer.from(nonceBN.toArray())]).slice(-20);
};
/**
 * Generates an address for a contract created using CREATE2.
 * @param from The address which is creating this new address
 * @param salt A salt
 * @param initCode The init code of the contract being created
 */
exports.generateAddress2 = function (from, salt, initCode) {
    var fromBuf = bytes_1.toBuffer(from);
    var saltBuf = bytes_1.toBuffer(salt);
    var initCodeBuf = bytes_1.toBuffer(initCode);
    assert(fromBuf.length === 20);
    assert(saltBuf.length === 32);
    var address = hash_1.keccak256(Buffer.concat([Buffer.from('ff', 'hex'), fromBuf, saltBuf, hash_1.keccak256(initCodeBuf)]));
    return address.slice(-20);
};
/**
 * Returns true if the supplied address belongs to a precompiled account (Byzantium).
 */
exports.isPrecompiled = function (address) {
    var a = bytes_1.unpad(address);
    return a.length === 1 && a[0] >= 1 && a[0] <= 8;
};
/**
 * Checks if the private key satisfies the rules of the curve secp256k1.
 */
exports.isValidPrivate = function (privateKey) {
    return secp256k1.privateKeyVerify(privateKey);
};
/**
 * Checks if the public key satisfies the rules of the curve secp256k1
 * and the requirements of Ethereum.
 * @param publicKey The two points of an uncompressed key, unless sanitize is enabled
 * @param sanitize Accept public keys in other formats
 */
exports.isValidPublic = function (publicKey, sanitize) {
    if (sanitize === void 0) { sanitize = false; }
    if (publicKey.length === 64) {
        // Convert to SEC1 for secp256k1
        return secp256k1.publicKeyVerify(Buffer.concat([Buffer.from([4]), publicKey]));
    }
    if (!sanitize) {
        return false;
    }
    return secp256k1.publicKeyVerify(publicKey);
};
/**
 * Returns the ethereum address of a given public key.
 * Accepts "Ethereum public keys" and SEC1 encoded keys.
 * @param pubKey The two points of an uncompressed key, unless sanitize is enabled
 * @param sanitize Accept public keys in other formats
 */
exports.pubToAddress = function (pubKey, sanitize) {
    if (sanitize === void 0) { sanitize = false; }
    pubKey = bytes_1.toBuffer(pubKey);
    if (sanitize && pubKey.length !== 64) {
        pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1);
    }
    assert(pubKey.length === 64);
    // Only take the lower 160bits of the hash
    return hash_1.keccak(pubKey).slice(-20);
};
exports.publicToAddress = exports.pubToAddress;
/**
 * Returns the ethereum address of a given private key.
 * @param privateKey A private key must be 256 bits wide
 */
exports.privateToAddress = function (privateKey) {
    return exports.publicToAddress(exports.privateToPublic(privateKey));
};
/**
 * Returns the ethereum public key of a given private key.
 * @param privateKey A private key must be 256 bits wide
 */
exports.privateToPublic = function (privateKey) {
    privateKey = bytes_1.toBuffer(privateKey);
    // skip the type flag and use the X, Y points
    return secp256k1.publicKeyCreate(privateKey, false).slice(1);
};
/**
 * Converts a public key to the Ethereum format.
 */
exports.importPublic = function (publicKey) {
    publicKey = bytes_1.toBuffer(publicKey);
    if (publicKey.length !== 64) {
        publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1);
    }
    return publicKey;
};
//# sourceMappingURL=account.js.map

/***/ }),

/***/ 714670:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var ethjsUtil = __webpack_require__(180884);
var BN = __webpack_require__(213550);
/**
 * Returns a buffer filled with 0s.
 * @param bytes the number of bytes the buffer should be
 */
exports.zeros = function (bytes) {
    return Buffer.allocUnsafe(bytes).fill(0);
};
/**
 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
 * Or it truncates the beginning if it exceeds.
 * @param msg the value to pad (Buffer|Array)
 * @param length the number of bytes the output should be
 * @param right whether to start padding form the left or right
 * @return (Buffer|Array)
 */
exports.setLengthLeft = function (msg, length, right) {
    if (right === void 0) { right = false; }
    var buf = exports.zeros(length);
    msg = exports.toBuffer(msg);
    if (right) {
        if (msg.length < length) {
            msg.copy(buf);
            return buf;
        }
        return msg.slice(0, length);
    }
    else {
        if (msg.length < length) {
            msg.copy(buf, length - msg.length);
            return buf;
        }
        return msg.slice(-length);
    }
};
exports.setLength = exports.setLengthLeft;
/**
 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
 * Or it truncates the beginning if it exceeds.
 * @param msg the value to pad (Buffer|Array)
 * @param length the number of bytes the output should be
 * @return (Buffer|Array)
 */
exports.setLengthRight = function (msg, length) {
    return exports.setLength(msg, length, true);
};
/**
 * Trims leading zeros from a `Buffer` or an `Array`.
 * @param a (Buffer|Array|String)
 * @return (Buffer|Array|String)
 */
exports.unpad = function (a) {
    a = ethjsUtil.stripHexPrefix(a);
    var first = a[0];
    while (a.length > 0 && first.toString() === '0') {
        a = a.slice(1);
        first = a[0];
    }
    return a;
};
exports.stripZeros = exports.unpad;
/**
 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
 * @param v the value
 */
exports.toBuffer = function (v) {
    if (!Buffer.isBuffer(v)) {
        if (Array.isArray(v)) {
            v = Buffer.from(v);
        }
        else if (typeof v === 'string') {
            if (ethjsUtil.isHexString(v)) {
                v = Buffer.from(ethjsUtil.padToEven(ethjsUtil.stripHexPrefix(v)), 'hex');
            }
            else {
                throw new Error("Cannot convert string to buffer. toBuffer only supports 0x-prefixed hex strings and this string was given: " + v);
            }
        }
        else if (typeof v === 'number') {
            v = ethjsUtil.intToBuffer(v);
        }
        else if (v === null || v === undefined) {
            v = Buffer.allocUnsafe(0);
        }
        else if (BN.isBN(v)) {
            v = v.toArrayLike(Buffer);
        }
        else if (v.toArray) {
            // converts a BN to a Buffer
            v = Buffer.from(v.toArray());
        }
        else {
            throw new Error('invalid type');
        }
    }
    return v;
};
/**
 * Converts a `Buffer` to a `Number`.
 * @param buf `Buffer` object to convert
 * @throws If the input number exceeds 53 bits.
 */
exports.bufferToInt = function (buf) {
    return new BN(exports.toBuffer(buf)).toNumber();
};
/**
 * Converts a `Buffer` into a `0x`-prefixed hex `String`.
 * @param buf `Buffer` object to convert
 */
exports.bufferToHex = function (buf) {
    buf = exports.toBuffer(buf);
    return '0x' + buf.toString('hex');
};
/**
 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
 * @param num Signed integer value
 */
exports.fromSigned = function (num) {
    return new BN(num).fromTwos(256);
};
/**
 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
 * @param num
 */
exports.toUnsigned = function (num) {
    return Buffer.from(num.toTwos(256).toArray());
};
/**
 * Adds "0x" to a given `String` if it does not already start with "0x".
 */
exports.addHexPrefix = function (str) {
    if (typeof str !== 'string') {
        return str;
    }
    return ethjsUtil.isHexPrefixed(str) ? str : '0x' + str;
};
/**
 * Converts a `Buffer` or `Array` to JSON.
 * @param ba (Buffer|Array)
 * @return (Array|String|null)
 */
exports.baToJSON = function (ba) {
    if (Buffer.isBuffer(ba)) {
        return "0x" + ba.toString('hex');
    }
    else if (ba instanceof Array) {
        var array = [];
        for (var i = 0; i < ba.length; i++) {
            array.push(exports.baToJSON(ba[i]));
        }
        return array;
    }
};
//# sourceMappingURL=bytes.js.map

/***/ }),

/***/ 420573:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var BN = __webpack_require__(213550);
/**
 * The max integer that this VM can handle
 */
exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16);
/**
 * 2^256
 */
exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16);
/**
 * Keccak-256 hash of null
 */
exports.KECCAK256_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';
/**
 * Keccak-256 hash of null
 */
exports.KECCAK256_NULL = Buffer.from(exports.KECCAK256_NULL_S, 'hex');
/**
 * Keccak-256 of an RLP of an empty array
 */
exports.KECCAK256_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347';
/**
 * Keccak-256 of an RLP of an empty array
 */
exports.KECCAK256_RLP_ARRAY = Buffer.from(exports.KECCAK256_RLP_ARRAY_S, 'hex');
/**
 * Keccak-256 hash of the RLP of null
 */
exports.KECCAK256_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421';
/**
 * Keccak-256 hash of the RLP of null
 */
exports.KECCAK256_RLP = Buffer.from(exports.KECCAK256_RLP_S, 'hex');
//# sourceMappingURL=constants.js.map

/***/ }),

/***/ 693869:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var createKeccakHash = __webpack_require__(116907);
var createHash = __webpack_require__(189913);
var ethjsUtil = __webpack_require__(180884);
var rlp = __webpack_require__(6636);
var bytes_1 = __webpack_require__(714670);
/**
 * Creates Keccak hash of the input
 * @param a The input data (Buffer|Array|String|Number) If the string is a 0x-prefixed hex value
 * it's interpreted as hexadecimal, otherwise as utf8.
 * @param bits The Keccak width
 */
exports.keccak = function (a, bits) {
    if (bits === void 0) { bits = 256; }
    if (typeof a === 'string' && !ethjsUtil.isHexString(a)) {
        a = Buffer.from(a, 'utf8');
    }
    else {
        a = bytes_1.toBuffer(a);
    }
    if (!bits)
        bits = 256;
    return createKeccakHash("keccak" + bits)
        .update(a)
        .digest();
};
/**
 * Creates Keccak-256 hash of the input, alias for keccak(a, 256).
 * @param a The input data (Buffer|Array|String|Number)
 */
exports.keccak256 = function (a) {
    return exports.keccak(a);
};
/**
 * Creates SHA256 hash of the input.
 * @param a The input data (Buffer|Array|String|Number)
 */
exports.sha256 = function (a) {
    a = bytes_1.toBuffer(a);
    return createHash('sha256')
        .update(a)
        .digest();
};
/**
 * Creates RIPEMD160 hash of the input.
 * @param a The input data (Buffer|Array|String|Number)
 * @param padded Whether it should be padded to 256 bits or not
 */
exports.ripemd160 = function (a, padded) {
    a = bytes_1.toBuffer(a);
    var hash = createHash('rmd160')
        .update(a)
        .digest();
    if (padded === true) {
        return bytes_1.setLength(hash, 32);
    }
    else {
        return hash;
    }
};
/**
 * Creates SHA-3 hash of the RLP encoded version of the input.
 * @param a The input data
 */
exports.rlphash = function (a) {
    return exports.keccak(rlp.encode(a));
};
//# sourceMappingURL=hash.js.map

/***/ }),

/***/ 351826:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

function __export(m) {
    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
Object.defineProperty(exports, "__esModule", ({ value: true }));
var secp256k1 = __webpack_require__(907972);
exports.secp256k1 = secp256k1;
var ethjsUtil = __webpack_require__(180884);
var BN = __webpack_require__(213550);
exports.BN = BN;
var rlp = __webpack_require__(6636);
exports.rlp = rlp;
Object.assign(exports, ethjsUtil);
/**
 * Constants
 */
__export(__webpack_require__(420573));
/**
 * Public-key cryptography (secp256k1) and addresses
 */
__export(__webpack_require__(155390));
/**
 * Hash functions
 */
__export(__webpack_require__(693869));
/**
 * ECDSA signature
 */
__export(__webpack_require__(400989));
/**
 * Utilities for manipulating Buffers, byte arrays, etc.
 */
__export(__webpack_require__(714670));
/**
 * Function for definining properties on an object
 */
__export(__webpack_require__(238529));
//# sourceMappingURL=index.js.map

/***/ }),

/***/ 238529:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var assert = __webpack_require__(742357);
var ethjsUtil = __webpack_require__(180884);
var rlp = __webpack_require__(6636);
var bytes_1 = __webpack_require__(714670);
/**
 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
 * @param self the `Object` to define properties on
 * @param fields an array fields to define. Fields can contain:
 * * `name` - the name of the properties
 * * `length` - the number of bytes the field can have
 * * `allowLess` - if the field can be less than the length
 * * `allowEmpty`
 * @param data data to be validated against the definitions
 * @deprecated
 */
exports.defineProperties = function (self, fields, data) {
    self.raw = [];
    self._fields = [];
    // attach the `toJSON`
    self.toJSON = function (label) {
        if (label === void 0) { label = false; }
        if (label) {
            var obj_1 = {};
            self._fields.forEach(function (field) {
                obj_1[field] = "0x" + self[field].toString('hex');
            });
            return obj_1;
        }
        return bytes_1.baToJSON(self.raw);
    };
    self.serialize = function serialize() {
        return rlp.encode(self.raw);
    };
    fields.forEach(function (field, i) {
        self._fields.push(field.name);
        function getter() {
            return self.raw[i];
        }
        function setter(v) {
            v = bytes_1.toBuffer(v);
            if (v.toString('hex') === '00' && !field.allowZero) {
                v = Buffer.allocUnsafe(0);
            }
            if (field.allowLess && field.length) {
                v = bytes_1.stripZeros(v);
                assert(field.length >= v.length, "The field " + field.name + " must not have more " + field.length + " bytes");
            }
            else if (!(field.allowZero && v.length === 0) && field.length) {
                assert(field.length === v.length, "The field " + field.name + " must have byte length of " + field.length);
            }
            self.raw[i] = v;
        }
        Object.defineProperty(self, field.name, {
            enumerable: true,
            configurable: true,
            get: getter,
            set: setter,
        });
        if (field.default) {
            self[field.name] = field.default;
        }
        // attach alias
        if (field.alias) {
            Object.defineProperty(self, field.alias, {
                enumerable: false,
                configurable: true,
                set: setter,
                get: getter,
            });
        }
    });
    // if the constuctor is passed data
    if (data) {
        if (typeof data === 'string') {
            data = Buffer.from(ethjsUtil.stripHexPrefix(data), 'hex');
        }
        if (Buffer.isBuffer(data)) {
            data = rlp.decode(data);
        }
        if (Array.isArray(data)) {
            if (data.length > self._fields.length) {
                throw new Error('wrong number of fields in data');
            }
            // make sure all the items are buffers
            data.forEach(function (d, i) {
                self[self._fields[i]] = bytes_1.toBuffer(d);
            });
        }
        else if (typeof data === 'object') {
            var keys_1 = Object.keys(data);
            fields.forEach(function (field) {
                if (keys_1.indexOf(field.name) !== -1)
                    self[field.name] = data[field.name];
                if (keys_1.indexOf(field.alias) !== -1)
                    self[field.alias] = data[field.alias];
            });
        }
        else {
            throw new Error('invalid data');
        }
    }
};
//# sourceMappingURL=object.js.map

/***/ }),

/***/ 400989:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var secp256k1 = __webpack_require__(907972);
var BN = __webpack_require__(213550);
var bytes_1 = __webpack_require__(714670);
var hash_1 = __webpack_require__(693869);
/**
 * Returns the ECDSA signature of a message hash.
 */
exports.ecsign = function (msgHash, privateKey, chainId) {
    var sig = secp256k1.sign(msgHash, privateKey);
    var recovery = sig.recovery;
    var ret = {
        r: sig.signature.slice(0, 32),
        s: sig.signature.slice(32, 64),
        v: chainId ? recovery + (chainId * 2 + 35) : recovery + 27,
    };
    return ret;
};
/**
 * ECDSA public key recovery from signature.
 * @returns Recovered public key
 */
exports.ecrecover = function (msgHash, v, r, s, chainId) {
    var signature = Buffer.concat([bytes_1.setLength(r, 32), bytes_1.setLength(s, 32)], 64);
    var recovery = calculateSigRecovery(v, chainId);
    if (!isValidSigRecovery(recovery)) {
        throw new Error('Invalid signature v value');
    }
    var senderPubKey = secp256k1.recover(msgHash, signature, recovery);
    return secp256k1.publicKeyConvert(senderPubKey, false).slice(1);
};
/**
 * Convert signature parameters into the format of `eth_sign` RPC method.
 * @returns Signature
 */
exports.toRpcSig = function (v, r, s, chainId) {
    var recovery = calculateSigRecovery(v, chainId);
    if (!isValidSigRecovery(recovery)) {
        throw new Error('Invalid signature v value');
    }
    // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
    return bytes_1.bufferToHex(Buffer.concat([bytes_1.setLengthLeft(r, 32), bytes_1.setLengthLeft(s, 32), bytes_1.toBuffer(v)]));
};
/**
 * Convert signature format of the `eth_sign` RPC method to signature parameters
 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
 */
exports.fromRpcSig = function (sig) {
    var buf = bytes_1.toBuffer(sig);
    // NOTE: with potential introduction of chainId this might need to be updated
    if (buf.length !== 65) {
        throw new Error('Invalid signature length');
    }
    var v = buf[64];
    // support both versions of `eth_sign` responses
    if (v < 27) {
        v += 27;
    }
    return {
        v: v,
        r: buf.slice(0, 32),
        s: buf.slice(32, 64),
    };
};
/**
 * Validate a ECDSA signature.
 * @param homesteadOrLater Indicates whether this is being used on either the homestead hardfork or a later one
 */
exports.isValidSignature = function (v, r, s, homesteadOrLater, chainId) {
    if (homesteadOrLater === void 0) { homesteadOrLater = true; }
    var SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16);
    var SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16);
    if (r.length !== 32 || s.length !== 32) {
        return false;
    }
    if (!isValidSigRecovery(calculateSigRecovery(v, chainId))) {
        return false;
    }
    var rBN = new BN(r);
    var sBN = new BN(s);
    if (rBN.isZero() || rBN.gt(SECP256K1_N) || sBN.isZero() || sBN.gt(SECP256K1_N)) {
        return false;
    }
    if (homesteadOrLater && sBN.cmp(SECP256K1_N_DIV_2) === 1) {
        return false;
    }
    return true;
};
/**
 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
 * used to produce the signature.
 */
exports.hashPersonalMessage = function (message) {
    var prefix = Buffer.from("\u0019Ethereum Signed Message:\n" + message.length.toString(), 'utf-8');
    return hash_1.keccak(Buffer.concat([prefix, message]));
};
function calculateSigRecovery(v, chainId) {
    return chainId ? v - (2 * chainId + 35) : v - 27;
}
function isValidSigRecovery(recovery) {
    return recovery === 0 || recovery === 1;
}
//# sourceMappingURL=signature.js.map

/***/ }),

/***/ 404235:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI
var address_1 = __webpack_require__(341606);
var bignumber_1 = __webpack_require__(738638);
var bytes_1 = __webpack_require__(90530);
var utf8_1 = __webpack_require__(816356);
var properties_1 = __webpack_require__(114564);
var errors = __importStar(__webpack_require__(6955));
var paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);
var paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);
var paramTypeArray = new RegExp(/^(.*)\[([0-9]*)\]$/);
exports.defaultCoerceFunc = function (type, value) {
    var match = type.match(paramTypeNumber);
    if (match && parseInt(match[2]) <= 48) {
        return value.toNumber();
    }
    return value;
};
///////////////////////////////////
// Parsing for Solidity Signatures
var regexParen = new RegExp("^([^)(]*)\\((.*)\\)([^)(]*)$");
var regexIdentifier = new RegExp("^[A-Za-z_][A-Za-z0-9_]*$");
function verifyType(type) {
    // These need to be transformed to their full description
    if (type.match(/^uint($|[^1-9])/)) {
        type = 'uint256' + type.substring(4);
    }
    else if (type.match(/^int($|[^1-9])/)) {
        type = 'int256' + type.substring(3);
    }
    return type;
}
function parseParam(param, allowIndexed) {
    function throwError(i) {
        throw new Error('unexpected character "' + param[i] + '" at position ' + i + ' in "' + param + '"');
    }
    var parent = { type: '', name: '', state: { allowType: true } };
    var node = parent;
    for (var i = 0; i < param.length; i++) {
        var c = param[i];
        switch (c) {
            case '(':
                if (!node.state.allowParams) {
                    throwError(i);
                }
                node.state.allowType = false;
                node.type = verifyType(node.type);
                node.components = [{ type: '', name: '', parent: node, state: { allowType: true } }];
                node = node.components[0];
                break;
            case ')':
                delete node.state;
                if (allowIndexed && node.name === 'indexed') {
                    node.indexed = true;
                    node.name = '';
                }
                node.type = verifyType(node.type);
                var child = node;
                node = node.parent;
                if (!node) {
                    throwError(i);
                }
                delete child.parent;
                node.state.allowParams = false;
                node.state.allowName = true;
                node.state.allowArray = true;
                break;
            case ',':
                delete node.state;
                if (allowIndexed && node.name === 'indexed') {
                    node.indexed = true;
                    node.name = '';
                }
                node.type = verifyType(node.type);
                var sibling = { type: '', name: '', parent: node.parent, state: { allowType: true } };
                node.parent.components.push(sibling);
                delete node.parent;
                node = sibling;
                break;
            // Hit a space...
            case ' ':
                // If reading type, the type is done and may read a param or name
                if (node.state.allowType) {
                    if (node.type !== '') {
                        node.type = verifyType(node.type);
                        delete node.state.allowType;
                        node.state.allowName = true;
                        node.state.allowParams = true;
                    }
                }
                // If reading name, the name is done
                if (node.state.allowName) {
                    if (node.name !== '') {
                        if (allowIndexed && node.name === 'indexed') {
                            node.indexed = true;
                            node.name = '';
                        }
                        else {
                            node.state.allowName = false;
                        }
                    }
                }
                break;
            case '[':
                if (!node.state.allowArray) {
                    throwError(i);
                }
                node.type += c;
                node.state.allowArray = false;
                node.state.allowName = false;
                node.state.readArray = true;
                break;
            case ']':
                if (!node.state.readArray) {
                    throwError(i);
                }
                node.type += c;
                node.state.readArray = false;
                node.state.allowArray = true;
                node.state.allowName = true;
                break;
            default:
                if (node.state.allowType) {
                    node.type += c;
                    node.state.allowParams = true;
                    node.state.allowArray = true;
                }
                else if (node.state.allowName) {
                    node.name += c;
                    delete node.state.allowArray;
                }
                else if (node.state.readArray) {
                    node.type += c;
                }
                else {
                    throwError(i);
                }
        }
    }
    if (node.parent) {
        throw new Error("unexpected eof");
    }
    delete parent.state;
    if (allowIndexed && node.name === 'indexed') {
        node.indexed = true;
        node.name = '';
    }
    parent.type = verifyType(parent.type);
    return parent;
}
// @TODO: Better return type
function parseSignatureEvent(fragment) {
    var abi = {
        anonymous: false,
        inputs: [],
        name: '',
        type: 'event'
    };
    var match = fragment.match(regexParen);
    if (!match) {
        throw new Error('invalid event: ' + fragment);
    }
    abi.name = match[1].trim();
    splitNesting(match[2]).forEach(function (param) {
        param = parseParam(param, true);
        param.indexed = !!param.indexed;
        abi.inputs.push(param);
    });
    match[3].split(' ').forEach(function (modifier) {
        switch (modifier) {
            case 'anonymous':
                abi.anonymous = true;
                break;
            case '':
                break;
            default:
                console.log('unknown modifier: ' + modifier);
        }
    });
    if (abi.name && !abi.name.match(regexIdentifier)) {
        throw new Error('invalid identifier: "' + abi.name + '"');
    }
    return abi;
}
function parseSignatureFunction(fragment) {
    var abi = {
        constant: false,
        inputs: [],
        name: '',
        outputs: [],
        payable: false,
        stateMutability: null,
        type: 'function'
    };
    var comps = fragment.split(' returns ');
    var left = comps[0].match(regexParen);
    if (!left) {
        throw new Error('invalid signature');
    }
    abi.name = left[1].trim();
    if (!abi.name.match(regexIdentifier)) {
        throw new Error('invalid identifier: "' + left[1] + '"');
    }
    splitNesting(left[2]).forEach(function (param) {
        abi.inputs.push(parseParam(param));
    });
    left[3].split(' ').forEach(function (modifier) {
        switch (modifier) {
            case 'constant':
                abi.constant = true;
                break;
            case 'payable':
                abi.payable = true;
                break;
            case 'pure':
                abi.constant = true;
                abi.stateMutability = 'pure';
                break;
            case 'view':
                abi.constant = true;
                abi.stateMutability = 'view';
                break;
            case '':
                break;
            default:
                console.log('unknown modifier: ' + modifier);
        }
    });
    // We have outputs
    if (comps.length > 1) {
        var right = comps[1].match(regexParen);
        if (right[1].trim() != '' || right[3].trim() != '') {
            throw new Error('unexpected tokens');
        }
        splitNesting(right[2]).forEach(function (param) {
            abi.outputs.push(parseParam(param));
        });
    }
    return abi;
}
function parseParamType(type) {
    return parseParam(type, true);
}
exports.parseParamType = parseParamType;
// @TODO: Allow a second boolean to expose names
function formatParamType(paramType) {
    return getParamCoder(exports.defaultCoerceFunc, paramType).type;
}
exports.formatParamType = formatParamType;
// @TODO: Allow a second boolean to expose names and modifiers
function formatSignature(fragment) {
    return fragment.name + '(' + fragment.inputs.map(function (i) { return formatParamType(i); }).join(',') + ')';
}
exports.formatSignature = formatSignature;
function parseSignature(fragment) {
    if (typeof (fragment) === 'string') {
        // Make sure the "returns" is surrounded by a space and all whitespace is exactly one space
        fragment = fragment.replace(/\(/g, ' (').replace(/\)/g, ') ').replace(/\s+/g, ' ');
        fragment = fragment.trim();
        if (fragment.substring(0, 6) === 'event ') {
            return parseSignatureEvent(fragment.substring(6).trim());
        }
        else {
            if (fragment.substring(0, 9) === 'function ') {
                fragment = fragment.substring(9);
            }
            return parseSignatureFunction(fragment.trim());
        }
    }
    throw new Error('unknown signature');
}
exports.parseSignature = parseSignature;
var Coder = /** @class */ (function () {
    function Coder(coerceFunc, name, type, localName, dynamic) {
        this.coerceFunc = coerceFunc;
        this.name = name;
        this.type = type;
        this.localName = localName;
        this.dynamic = dynamic;
    }
    return Coder;
}());
// Clones the functionality of an existing Coder, but without a localName
var CoderAnonymous = /** @class */ (function (_super) {
    __extends(CoderAnonymous, _super);
    function CoderAnonymous(coder) {
        var _this = _super.call(this, coder.coerceFunc, coder.name, coder.type, undefined, coder.dynamic) || this;
        properties_1.defineReadOnly(_this, 'coder', coder);
        return _this;
    }
    CoderAnonymous.prototype.encode = function (value) { return this.coder.encode(value); };
    CoderAnonymous.prototype.decode = function (data, offset) { return this.coder.decode(data, offset); };
    return CoderAnonymous;
}(Coder));
var CoderNull = /** @class */ (function (_super) {
    __extends(CoderNull, _super);
    function CoderNull(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'null', '', localName, false) || this;
    }
    CoderNull.prototype.encode = function (value) {
        return bytes_1.arrayify([]);
    };
    CoderNull.prototype.decode = function (data, offset) {
        if (offset > data.length) {
            throw new Error('invalid null');
        }
        return {
            consumed: 0,
            value: this.coerceFunc('null', undefined)
        };
    };
    return CoderNull;
}(Coder));
var CoderNumber = /** @class */ (function (_super) {
    __extends(CoderNumber, _super);
    function CoderNumber(coerceFunc, size, signed, localName) {
        var _this = this;
        var name = ((signed ? 'int' : 'uint') + (size * 8));
        _this = _super.call(this, coerceFunc, name, name, localName, false) || this;
        _this.size = size;
        _this.signed = signed;
        return _this;
    }
    CoderNumber.prototype.encode = function (value) {
        try {
            var v = bignumber_1.bigNumberify(value);
            v = v.toTwos(this.size * 8).maskn(this.size * 8);
            //value = value.toTwos(size * 8).maskn(size * 8);
            if (this.signed) {
                v = v.fromTwos(this.size * 8).toTwos(256);
            }
            return bytes_1.padZeros(bytes_1.arrayify(v), 32);
        }
        catch (error) {
            errors.throwError('invalid number value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: this.name,
                value: value
            });
        }
        return null;
    };
    CoderNumber.prototype.decode = function (data, offset) {
        if (data.length < offset + 32) {
            errors.throwError('insufficient data for ' + this.name + ' type', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: this.name,
                value: bytes_1.hexlify(data.slice(offset, offset + 32))
            });
        }
        var junkLength = 32 - this.size;
        var value = bignumber_1.bigNumberify(data.slice(offset + junkLength, offset + 32));
        if (this.signed) {
            value = value.fromTwos(this.size * 8);
        }
        else {
            value = value.maskn(this.size * 8);
        }
        return {
            consumed: 32,
            value: this.coerceFunc(this.name, value),
        };
    };
    return CoderNumber;
}(Coder));
var uint256Coder = new CoderNumber(function (type, value) { return value; }, 32, false, 'none');
var CoderBoolean = /** @class */ (function (_super) {
    __extends(CoderBoolean, _super);
    function CoderBoolean(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'bool', 'bool', localName, false) || this;
    }
    CoderBoolean.prototype.encode = function (value) {
        return uint256Coder.encode(!!value ? 1 : 0);
    };
    CoderBoolean.prototype.decode = function (data, offset) {
        try {
            var result = uint256Coder.decode(data, offset);
        }
        catch (error) {
            if (error.reason === 'insufficient data for uint256 type') {
                errors.throwError('insufficient data for boolean type', errors.INVALID_ARGUMENT, {
                    arg: this.localName,
                    coderType: 'boolean',
                    value: error.value
                });
            }
            throw error;
        }
        return {
            consumed: result.consumed,
            value: this.coerceFunc('bool', !result.value.isZero())
        };
    };
    return CoderBoolean;
}(Coder));
var CoderFixedBytes = /** @class */ (function (_super) {
    __extends(CoderFixedBytes, _super);
    function CoderFixedBytes(coerceFunc, length, localName) {
        var _this = this;
        var name = ('bytes' + length);
        _this = _super.call(this, coerceFunc, name, name, localName, false) || this;
        _this.length = length;
        return _this;
    }
    CoderFixedBytes.prototype.encode = function (value) {
        var result = new Uint8Array(32);
        try {
            var data = bytes_1.arrayify(value);
            if (data.length > 32) {
                throw new Error();
            }
            result.set(data);
        }
        catch (error) {
            errors.throwError('invalid ' + this.name + ' value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: this.name,
                value: (error.value || value)
            });
        }
        return result;
    };
    CoderFixedBytes.prototype.decode = function (data, offset) {
        if (data.length < offset + 32) {
            errors.throwError('insufficient data for ' + name + ' type', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: this.name,
                value: bytes_1.hexlify(data.slice(offset, offset + 32))
            });
        }
        return {
            consumed: 32,
            value: this.coerceFunc(this.name, bytes_1.hexlify(data.slice(offset, offset + this.length)))
        };
    };
    return CoderFixedBytes;
}(Coder));
var CoderAddress = /** @class */ (function (_super) {
    __extends(CoderAddress, _super);
    function CoderAddress(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'address', 'address', localName, false) || this;
    }
    CoderAddress.prototype.encode = function (value) {
        var result = new Uint8Array(32);
        try {
            result.set(bytes_1.arrayify(address_1.getAddress(value)), 12);
        }
        catch (error) {
            errors.throwError('invalid address', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'address',
                value: value
            });
        }
        return result;
    };
    CoderAddress.prototype.decode = function (data, offset) {
        if (data.length < offset + 32) {
            errors.throwError('insufficuent data for address type', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'address',
                value: bytes_1.hexlify(data.slice(offset, offset + 32))
            });
        }
        return {
            consumed: 32,
            value: this.coerceFunc('address', address_1.getAddress(bytes_1.hexlify(data.slice(offset + 12, offset + 32))))
        };
    };
    return CoderAddress;
}(Coder));
function _encodeDynamicBytes(value) {
    var dataLength = 32 * Math.ceil(value.length / 32);
    var padding = new Uint8Array(dataLength - value.length);
    return bytes_1.concat([
        uint256Coder.encode(value.length),
        value,
        padding
    ]);
}
function _decodeDynamicBytes(data, offset, localName) {
    if (data.length < offset + 32) {
        errors.throwError('insufficient data for dynamicBytes length', errors.INVALID_ARGUMENT, {
            arg: localName,
            coderType: 'dynamicBytes',
            value: bytes_1.hexlify(data.slice(offset, offset + 32))
        });
    }
    var length = uint256Coder.decode(data, offset).value;
    try {
        length = length.toNumber();
    }
    catch (error) {
        errors.throwError('dynamic bytes count too large', errors.INVALID_ARGUMENT, {
            arg: localName,
            coderType: 'dynamicBytes',
            value: length.toString()
        });
    }
    if (data.length < offset + 32 + length) {
        errors.throwError('insufficient data for dynamicBytes type', errors.INVALID_ARGUMENT, {
            arg: localName,
            coderType: 'dynamicBytes',
            value: bytes_1.hexlify(data.slice(offset, offset + 32 + length))
        });
    }
    return {
        consumed: 32 + 32 * Math.ceil(length / 32),
        value: data.slice(offset + 32, offset + 32 + length),
    };
}
var CoderDynamicBytes = /** @class */ (function (_super) {
    __extends(CoderDynamicBytes, _super);
    function CoderDynamicBytes(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'bytes', 'bytes', localName, true) || this;
    }
    CoderDynamicBytes.prototype.encode = function (value) {
        try {
            return _encodeDynamicBytes(bytes_1.arrayify(value));
        }
        catch (error) {
            errors.throwError('invalid bytes value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'bytes',
                value: error.value
            });
        }
        return null;
    };
    CoderDynamicBytes.prototype.decode = function (data, offset) {
        var result = _decodeDynamicBytes(data, offset, this.localName);
        result.value = this.coerceFunc('bytes', bytes_1.hexlify(result.value));
        return result;
    };
    return CoderDynamicBytes;
}(Coder));
var CoderString = /** @class */ (function (_super) {
    __extends(CoderString, _super);
    function CoderString(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'string', 'string', localName, true) || this;
    }
    CoderString.prototype.encode = function (value) {
        if (typeof (value) !== 'string') {
            errors.throwError('invalid string value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'string',
                value: value
            });
        }
        return _encodeDynamicBytes(utf8_1.toUtf8Bytes(value));
    };
    CoderString.prototype.decode = function (data, offset) {
        var result = _decodeDynamicBytes(data, offset, this.localName);
        result.value = this.coerceFunc('string', utf8_1.toUtf8String(result.value));
        return result;
    };
    return CoderString;
}(Coder));
function alignSize(size) {
    return 32 * Math.ceil(size / 32);
}
function pack(coders, values) {
    if (Array.isArray(values)) {
        // do nothing
    }
    else if (values && typeof (values) === 'object') {
        var arrayValues = [];
        coders.forEach(function (coder) {
            arrayValues.push(values[coder.localName]);
        });
        values = arrayValues;
    }
    else {
        errors.throwError('invalid tuple value', errors.INVALID_ARGUMENT, {
            coderType: 'tuple',
            value: values
        });
    }
    if (coders.length !== values.length) {
        errors.throwError('types/value length mismatch', errors.INVALID_ARGUMENT, {
            coderType: 'tuple',
            value: values
        });
    }
    var parts = [];
    coders.forEach(function (coder, index) {
        parts.push({ dynamic: coder.dynamic, value: coder.encode(values[index]) });
    });
    var staticSize = 0, dynamicSize = 0;
    parts.forEach(function (part) {
        if (part.dynamic) {
            staticSize += 32;
            dynamicSize += alignSize(part.value.length);
        }
        else {
            staticSize += alignSize(part.value.length);
        }
    });
    var offset = 0, dynamicOffset = staticSize;
    var data = new Uint8Array(staticSize + dynamicSize);
    parts.forEach(function (part) {
        if (part.dynamic) {
            //uint256Coder.encode(dynamicOffset).copy(data, offset);
            data.set(uint256Coder.encode(dynamicOffset), offset);
            offset += 32;
            //part.value.copy(data, dynamicOffset);  @TODO
            data.set(part.value, dynamicOffset);
            dynamicOffset += alignSize(part.value.length);
        }
        else {
            //part.value.copy(data, offset);  @TODO
            data.set(part.value, offset);
            offset += alignSize(part.value.length);
        }
    });
    return data;
}
function unpack(coders, data, offset) {
    var baseOffset = offset;
    var consumed = 0;
    var value = [];
    coders.forEach(function (coder) {
        if (coder.dynamic) {
            var dynamicOffset = uint256Coder.decode(data, offset);
            var result = coder.decode(data, baseOffset + dynamicOffset.value.toNumber());
            // The dynamic part is leap-frogged somewhere else; doesn't count towards size
            result.consumed = dynamicOffset.consumed;
        }
        else {
            var result = coder.decode(data, offset);
        }
        if (result.value != undefined) {
            value.push(result.value);
        }
        offset += result.consumed;
        consumed += result.consumed;
    });
    coders.forEach(function (coder, index) {
        var name = coder.localName;
        if (!name) {
            return;
        }
        if (name === 'length') {
            name = '_length';
        }
        if (value[name] != null) {
            return;
        }
        value[name] = value[index];
    });
    return {
        value: value,
        consumed: consumed
    };
}
var CoderArray = /** @class */ (function (_super) {
    __extends(CoderArray, _super);
    function CoderArray(coerceFunc, coder, length, localName) {
        var _this = this;
        var type = (coder.type + '[' + (length >= 0 ? length : '') + ']');
        var dynamic = (length === -1 || coder.dynamic);
        _this = _super.call(this, coerceFunc, 'array', type, localName, dynamic) || this;
        _this.coder = coder;
        _this.length = length;
        return _this;
    }
    CoderArray.prototype.encode = function (value) {
        if (!Array.isArray(value)) {
            errors.throwError('expected array value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'array',
                value: value
            });
        }
        var count = this.length;
        var result = new Uint8Array(0);
        if (count === -1) {
            count = value.length;
            result = uint256Coder.encode(count);
        }
        errors.checkArgumentCount(count, value.length, 'in coder array' + (this.localName ? (" " + this.localName) : ""));
        var coders = [];
        for (var i = 0; i < value.length; i++) {
            coders.push(this.coder);
        }
        return bytes_1.concat([result, pack(coders, value)]);
    };
    CoderArray.prototype.decode = function (data, offset) {
        // @TODO:
        //if (data.length < offset + length * 32) { throw new Error('invalid array'); }
        var consumed = 0;
        var count = this.length;
        if (count === -1) {
            try {
                var decodedLength = uint256Coder.decode(data, offset);
            }
            catch (error) {
                errors.throwError('insufficient data for dynamic array length', errors.INVALID_ARGUMENT, {
                    arg: this.localName,
                    coderType: 'array',
                    value: error.value
                });
            }
            try {
                count = decodedLength.value.toNumber();
            }
            catch (error) {
                errors.throwError('array count too large', errors.INVALID_ARGUMENT, {
                    arg: this.localName,
                    coderType: 'array',
                    value: decodedLength.value.toString()
                });
            }
            consumed += decodedLength.consumed;
            offset += decodedLength.consumed;
        }
        var coders = [];
        for (var i = 0; i < count; i++) {
            coders.push(new CoderAnonymous(this.coder));
        }
        var result = unpack(coders, data, offset);
        result.consumed += consumed;
        result.value = this.coerceFunc(this.type, result.value);
        return result;
    };
    return CoderArray;
}(Coder));
var CoderTuple = /** @class */ (function (_super) {
    __extends(CoderTuple, _super);
    function CoderTuple(coerceFunc, coders, localName) {
        var _this = this;
        var dynamic = false;
        var types = [];
        coders.forEach(function (coder) {
            if (coder.dynamic) {
                dynamic = true;
            }
            types.push(coder.type);
        });
        var type = ('tuple(' + types.join(',') + ')');
        _this = _super.call(this, coerceFunc, 'tuple', type, localName, dynamic) || this;
        _this.coders = coders;
        return _this;
    }
    CoderTuple.prototype.encode = function (value) {
        return pack(this.coders, value);
    };
    CoderTuple.prototype.decode = function (data, offset) {
        var result = unpack(this.coders, data, offset);
        result.value = this.coerceFunc(this.type, result.value);
        return result;
    };
    return CoderTuple;
}(Coder));
/*
function getTypes(coders) {
    var type = coderTuple(coders).type;
    return type.substring(6, type.length - 1);
}
*/
function splitNesting(value) {
    var result = [];
    var accum = '';
    var depth = 0;
    for (var offset = 0; offset < value.length; offset++) {
        var c = value[offset];
        if (c === ',' && depth === 0) {
            result.push(accum);
            accum = '';
        }
        else {
            accum += c;
            if (c === '(') {
                depth++;
            }
            else if (c === ')') {
                depth--;
                if (depth === -1) {
                    throw new Error('unbalanced parenthsis');
                }
            }
        }
    }
    result.push(accum);
    return result;
}
// @TODO: Is there a way to return "class"?
var paramTypeSimple = {
    address: CoderAddress,
    bool: CoderBoolean,
    string: CoderString,
    bytes: CoderDynamicBytes,
};
function getTupleParamCoder(coerceFunc, components, localName) {
    if (!components) {
        components = [];
    }
    var coders = [];
    components.forEach(function (component) {
        coders.push(getParamCoder(coerceFunc, component));
    });
    return new CoderTuple(coerceFunc, coders, localName);
}
function getParamCoder(coerceFunc, param) {
    var coder = paramTypeSimple[param.type];
    if (coder) {
        return new coder(coerceFunc, param.name);
    }
    var match = param.type.match(paramTypeNumber);
    if (match) {
        var size = parseInt(match[2] || "256");
        if (size === 0 || size > 256 || (size % 8) !== 0) {
            errors.throwError('invalid ' + match[1] + ' bit length', errors.INVALID_ARGUMENT, {
                arg: 'param',
                value: param
            });
        }
        return new CoderNumber(coerceFunc, size / 8, (match[1] === 'int'), param.name);
    }
    var match = param.type.match(paramTypeBytes);
    if (match) {
        var size = parseInt(match[1]);
        if (size === 0 || size > 32) {
            errors.throwError('invalid bytes length', errors.INVALID_ARGUMENT, {
                arg: 'param',
                value: param
            });
        }
        return new CoderFixedBytes(coerceFunc, size, param.name);
    }
    var match = param.type.match(paramTypeArray);
    if (match) {
        var size = parseInt(match[2] || "-1");
        param = properties_1.jsonCopy(param);
        param.type = match[1];
        return new CoderArray(coerceFunc, getParamCoder(coerceFunc, param), size, param.name);
    }
    if (param.type.substring(0, 5) === 'tuple') {
        return getTupleParamCoder(coerceFunc, param.components, param.name);
    }
    if (param.type === '') {
        return new CoderNull(coerceFunc, param.name);
    }
    errors.throwError('invalid type', errors.INVALID_ARGUMENT, {
        arg: 'type',
        value: param.type
    });
    return null;
}
var AbiCoder = /** @class */ (function () {
    function AbiCoder(coerceFunc) {
        errors.checkNew(this, AbiCoder);
        if (!coerceFunc) {
            coerceFunc = exports.defaultCoerceFunc;
        }
        properties_1.defineReadOnly(this, 'coerceFunc', coerceFunc);
    }
    AbiCoder.prototype.encode = function (types, values) {
        if (types.length !== values.length) {
            errors.throwError('types/values length mismatch', errors.INVALID_ARGUMENT, {
                count: { types: types.length, values: values.length },
                value: { types: types, values: values }
            });
        }
        var coders = [];
        types.forEach(function (type) {
            // Convert types to type objects
            //   - "uint foo" => { type: "uint", name: "foo" }
            //   - "tuple(uint, uint)" => { type: "tuple", components: [ { type: "uint" }, { type: "uint" }, ] }
            var typeObject = null;
            if (typeof (type) === 'string') {
                typeObject = parseParam(type);
            }
            else {
                typeObject = type;
            }
            coders.push(getParamCoder(this.coerceFunc, typeObject));
        }, this);
        return bytes_1.hexlify(new CoderTuple(this.coerceFunc, coders, '_').encode(values));
    };
    AbiCoder.prototype.decode = function (types, data) {
        var coders = [];
        types.forEach(function (type) {
            // See encode for details
            var typeObject = null;
            if (typeof (type) === 'string') {
                typeObject = parseParam(type);
            }
            else {
                typeObject = properties_1.jsonCopy(type);
            }
            coders.push(getParamCoder(this.coerceFunc, typeObject));
        }, this);
        return new CoderTuple(this.coerceFunc, coders, '_').decode(bytes_1.arrayify(data), 0).value;
    };
    return AbiCoder;
}());
exports.AbiCoder = AbiCoder;
exports.defaultAbiCoder = new AbiCoder();


/***/ }),

/***/ 341606:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
// We use this for base 36 maths
var bn_js_1 = __importDefault(__webpack_require__(213550));
var bytes_1 = __webpack_require__(90530);
var keccak256_1 = __webpack_require__(502786);
var rlp_1 = __webpack_require__(737261);
var errors = __webpack_require__(6955);
function getChecksumAddress(address) {
    if (typeof (address) !== 'string' || !address.match(/^0x[0-9A-Fa-f]{40}$/)) {
        errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
    }
    address = address.toLowerCase();
    var chars = address.substring(2).split('');
    var hashed = new Uint8Array(40);
    for (var i_1 = 0; i_1 < 40; i_1++) {
        hashed[i_1] = chars[i_1].charCodeAt(0);
    }
    hashed = bytes_1.arrayify(keccak256_1.keccak256(hashed));
    for (var i = 0; i < 40; i += 2) {
        if ((hashed[i >> 1] >> 4) >= 8) {
            chars[i] = chars[i].toUpperCase();
        }
        if ((hashed[i >> 1] & 0x0f) >= 8) {
            chars[i + 1] = chars[i + 1].toUpperCase();
        }
    }
    return '0x' + chars.join('');
}
// Shims for environments that are missing some required constants and functions
var MAX_SAFE_INTEGER = 0x1fffffffffffff;
function log10(x) {
    if (Math.log10) {
        return Math.log10(x);
    }
    return Math.log(x) / Math.LN10;
}
// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number
// Create lookup table
var ibanLookup = {};
for (var i = 0; i < 10; i++) {
    ibanLookup[String(i)] = String(i);
}
for (var i = 0; i < 26; i++) {
    ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);
}
// How many decimal digits can we process? (for 64-bit float, this is 15)
var safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));
function ibanChecksum(address) {
    address = address.toUpperCase();
    address = address.substring(4) + address.substring(0, 2) + '00';
    var expanded = '';
    address.split('').forEach(function (c) {
        expanded += ibanLookup[c];
    });
    // Javascript can handle integers safely up to 15 (decimal) digits
    while (expanded.length >= safeDigits) {
        var block = expanded.substring(0, safeDigits);
        expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);
    }
    var checksum = String(98 - (parseInt(expanded, 10) % 97));
    while (checksum.length < 2) {
        checksum = '0' + checksum;
    }
    return checksum;
}
;
function getAddress(address) {
    var result = null;
    if (typeof (address) !== 'string') {
        errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
    }
    if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {
        // Missing the 0x prefix
        if (address.substring(0, 2) !== '0x') {
            address = '0x' + address;
        }
        result = getChecksumAddress(address);
        // It is a checksummed address with a bad checksum
        if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {
            errors.throwError('bad address checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
        }
        // Maybe ICAP? (we only support direct mode)
    }
    else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {
        // It is an ICAP address with a bad checksum
        if (address.substring(2, 4) !== ibanChecksum(address)) {
            errors.throwError('bad icap checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
        }
        result = (new bn_js_1.default.BN(address.substring(4), 36)).toString(16);
        while (result.length < 40) {
            result = '0' + result;
        }
        result = getChecksumAddress('0x' + result);
    }
    else {
        errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
    }
    return result;
}
exports.getAddress = getAddress;
function getIcapAddress(address) {
    var base36 = (new bn_js_1.default.BN(getAddress(address).substring(2), 16)).toString(36).toUpperCase();
    while (base36.length < 30) {
        base36 = '0' + base36;
    }
    return 'XE' + ibanChecksum('XE00' + base36) + base36;
}
exports.getIcapAddress = getIcapAddress;
// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed
function getContractAddress(transaction) {
    if (!transaction.from) {
        throw new Error('missing from address');
    }
    var nonce = transaction.nonce;
    return getAddress('0x' + keccak256_1.keccak256(rlp_1.encode([
        getAddress(transaction.from),
        bytes_1.stripZeros(bytes_1.hexlify(nonce))
    ])).substring(26));
}
exports.getContractAddress = getContractAddress;


/***/ }),

/***/ 738638:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
/**
 *  BigNumber
 *
 *  A wrapper around the BN.js object. We use the BN.js library
 *  because it is used by elliptic, so it is required regardles.
 *
 */
var bn_js_1 = __importDefault(__webpack_require__(213550));
var bytes_1 = __webpack_require__(90530);
var properties_1 = __webpack_require__(114564);
var types_1 = __webpack_require__(919441);
var errors = __importStar(__webpack_require__(6955));
var BN_1 = new bn_js_1.default.BN(-1);
function toHex(bn) {
    var value = bn.toString(16);
    if (value[0] === '-') {
        if ((value.length % 2) === 0) {
            return '-0x0' + value.substring(1);
        }
        return "-0x" + value.substring(1);
    }
    if ((value.length % 2) === 1) {
        return '0x0' + value;
    }
    return '0x' + value;
}
function toBN(value) {
    return bigNumberify(value)._bn;
}
function toBigNumber(bn) {
    return new BigNumber(toHex(bn));
}
var BigNumber = /** @class */ (function (_super) {
    __extends(BigNumber, _super);
    function BigNumber(value) {
        var _this = _super.call(this) || this;
        errors.checkNew(_this, BigNumber);
        if (typeof (value) === 'string') {
            if (bytes_1.isHexString(value)) {
                if (value == '0x') {
                    value = '0x0';
                }
                properties_1.defineReadOnly(_this, '_hex', value);
            }
            else if (value[0] === '-' && bytes_1.isHexString(value.substring(1))) {
                properties_1.defineReadOnly(_this, '_hex', value);
            }
            else if (value.match(/^-?[0-9]*$/)) {
                if (value == '') {
                    value = '0';
                }
                properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(value)));
            }
            else {
                errors.throwError('invalid BigNumber string value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
            }
        }
        else if (typeof (value) === 'number') {
            if (parseInt(String(value)) !== value) {
                errors.throwError('underflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'underflow', value: value, outputValue: parseInt(String(value)) });
            }
            try {
                properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(value)));
            }
            catch (error) {
                errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });
            }
        }
        else if (value instanceof BigNumber) {
            properties_1.defineReadOnly(_this, '_hex', value._hex);
        }
        else if (value.toHexString) {
            properties_1.defineReadOnly(_this, '_hex', toHex(toBN(value.toHexString())));
        }
        else if (bytes_1.isArrayish(value)) {
            properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(bytes_1.hexlify(value).substring(2), 16)));
        }
        else {
            errors.throwError('invalid BigNumber value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        return _this;
    }
    Object.defineProperty(BigNumber.prototype, "_bn", {
        get: function () {
            if (this._hex[0] === '-') {
                return (new bn_js_1.default.BN(this._hex.substring(3), 16)).mul(BN_1);
            }
            return new bn_js_1.default.BN(this._hex.substring(2), 16);
        },
        enumerable: true,
        configurable: true
    });
    BigNumber.prototype.fromTwos = function (value) {
        return toBigNumber(this._bn.fromTwos(value));
    };
    BigNumber.prototype.toTwos = function (value) {
        return toBigNumber(this._bn.toTwos(value));
    };
    BigNumber.prototype.add = function (other) {
        return toBigNumber(this._bn.add(toBN(other)));
    };
    BigNumber.prototype.sub = function (other) {
        return toBigNumber(this._bn.sub(toBN(other)));
    };
    BigNumber.prototype.div = function (other) {
        var o = bigNumberify(other);
        if (o.isZero()) {
            errors.throwError('division by zero', errors.NUMERIC_FAULT, { operation: 'divide', fault: 'division by zero' });
        }
        return toBigNumber(this._bn.div(toBN(other)));
    };
    BigNumber.prototype.mul = function (other) {
        return toBigNumber(this._bn.mul(toBN(other)));
    };
    BigNumber.prototype.mod = function (other) {
        return toBigNumber(this._bn.mod(toBN(other)));
    };
    BigNumber.prototype.pow = function (other) {
        return toBigNumber(this._bn.pow(toBN(other)));
    };
    BigNumber.prototype.maskn = function (value) {
        return toBigNumber(this._bn.maskn(value));
    };
    BigNumber.prototype.eq = function (other) {
        return this._bn.eq(toBN(other));
    };
    BigNumber.prototype.lt = function (other) {
        return this._bn.lt(toBN(other));
    };
    BigNumber.prototype.lte = function (other) {
        return this._bn.lte(toBN(other));
    };
    BigNumber.prototype.gt = function (other) {
        return this._bn.gt(toBN(other));
    };
    BigNumber.prototype.gte = function (other) {
        return this._bn.gte(toBN(other));
    };
    BigNumber.prototype.isZero = function () {
        return this._bn.isZero();
    };
    BigNumber.prototype.toNumber = function () {
        try {
            return this._bn.toNumber();
        }
        catch (error) {
            errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });
        }
        return null;
    };
    BigNumber.prototype.toString = function () {
        return this._bn.toString(10);
    };
    BigNumber.prototype.toHexString = function () {
        return this._hex;
    };
    return BigNumber;
}(types_1.BigNumber));
function bigNumberify(value) {
    if (value instanceof BigNumber) {
        return value;
    }
    return new BigNumber(value);
}
exports.bigNumberify = bigNumberify;
exports.ConstantNegativeOne = bigNumberify(-1);
exports.ConstantZero = bigNumberify(0);
exports.ConstantOne = bigNumberify(1);
exports.ConstantTwo = bigNumberify(2);
exports.ConstantWeiPerEther = bigNumberify('1000000000000000000');


/***/ }),

/***/ 90530:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

/**
 *  Conversion Utilities
 *
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
var types_1 = __webpack_require__(919441);
var errors = __webpack_require__(6955);
exports.AddressZero = '0x0000000000000000000000000000000000000000';
exports.HashZero = '0x0000000000000000000000000000000000000000000000000000000000000000';
function isBigNumber(value) {
    return (value instanceof types_1.BigNumber);
}
function addSlice(array) {
    if (array.slice) {
        return array;
    }
    array.slice = function () {
        var args = Array.prototype.slice.call(arguments);
        return new Uint8Array(Array.prototype.slice.apply(array, args));
    };
    return array;
}
function isArrayish(value) {
    if (!value || parseInt(String(value.length)) != value.length || typeof (value) === 'string') {
        return false;
    }
    for (var i = 0; i < value.length; i++) {
        var v = value[i];
        if (v < 0 || v >= 256 || parseInt(String(v)) != v) {
            return false;
        }
    }
    return true;
}
exports.isArrayish = isArrayish;
function arrayify(value) {
    if (value == null) {
        errors.throwError('cannot convert null value to array', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    if (isBigNumber(value)) {
        value = value.toHexString();
    }
    if (typeof (value) === 'string') {
        var match = value.match(/^(0x)?[0-9a-fA-F]*$/);
        if (!match) {
            errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        if (match[1] !== '0x') {
            errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        value = value.substring(2);
        if (value.length % 2) {
            value = '0' + value;
        }
        var result = [];
        for (var i = 0; i < value.length; i += 2) {
            result.push(parseInt(value.substr(i, 2), 16));
        }
        return addSlice(new Uint8Array(result));
    }
    else if (typeof (value) === 'string') {
    }
    if (isArrayish(value)) {
        return addSlice(new Uint8Array(value));
    }
    errors.throwError('invalid arrayify value', null, { arg: 'value', value: value, type: typeof (value) });
    return null;
}
exports.arrayify = arrayify;
function concat(objects) {
    var arrays = [];
    var length = 0;
    for (var i = 0; i < objects.length; i++) {
        var object = arrayify(objects[i]);
        arrays.push(object);
        length += object.length;
    }
    var result = new Uint8Array(length);
    var offset = 0;
    for (var i = 0; i < arrays.length; i++) {
        result.set(arrays[i], offset);
        offset += arrays[i].length;
    }
    return addSlice(result);
}
exports.concat = concat;
function stripZeros(value) {
    var result = arrayify(value);
    if (result.length === 0) {
        return result;
    }
    // Find the first non-zero entry
    var start = 0;
    while (result[start] === 0) {
        start++;
    }
    // If we started with zeros, strip them
    if (start) {
        result = result.slice(start);
    }
    return result;
}
exports.stripZeros = stripZeros;
function padZeros(value, length) {
    value = arrayify(value);
    if (length < value.length) {
        throw new Error('cannot pad');
    }
    var result = new Uint8Array(length);
    result.set(value, length - value.length);
    return addSlice(result);
}
exports.padZeros = padZeros;
function isHexString(value, length) {
    if (typeof (value) !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
        return false;
    }
    if (length && value.length !== 2 + 2 * length) {
        return false;
    }
    return true;
}
exports.isHexString = isHexString;
var HexCharacters = '0123456789abcdef';
function hexlify(value) {
    if (isBigNumber(value)) {
        return value.toHexString();
    }
    if (typeof (value) === 'number') {
        if (value < 0) {
            errors.throwError('cannot hexlify negative value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        var hex = '';
        while (value) {
            hex = HexCharacters[value & 0x0f] + hex;
            value = Math.floor(value / 16);
        }
        if (hex.length) {
            if (hex.length % 2) {
                hex = '0' + hex;
            }
            return '0x' + hex;
        }
        return '0x00';
    }
    if (typeof (value) === 'string') {
        var match = value.match(/^(0x)?[0-9a-fA-F]*$/);
        if (!match) {
            errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        if (match[1] !== '0x') {
            errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        if (value.length % 2) {
            value = '0x0' + value.substring(2);
        }
        return value;
    }
    if (isArrayish(value)) {
        var result = [];
        for (var i = 0; i < value.length; i++) {
            var v = value[i];
            result.push(HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]);
        }
        return '0x' + result.join('');
    }
    errors.throwError('invalid hexlify value', null, { arg: 'value', value: value });
    return 'never';
}
exports.hexlify = hexlify;
function hexDataLength(data) {
    if (!isHexString(data) || (data.length % 2) !== 0) {
        return null;
    }
    return (data.length - 2) / 2;
}
exports.hexDataLength = hexDataLength;
function hexDataSlice(data, offset, length) {
    if (!isHexString(data)) {
        errors.throwError('invalid hex data', errors.INVALID_ARGUMENT, { arg: 'value', value: data });
    }
    if ((data.length % 2) !== 0) {
        errors.throwError('hex data length must be even', errors.INVALID_ARGUMENT, { arg: 'value', value: data });
    }
    offset = 2 + 2 * offset;
    if (length != null) {
        return '0x' + data.substring(offset, offset + 2 * length);
    }
    return '0x' + data.substring(offset);
}
exports.hexDataSlice = hexDataSlice;
function hexStripZeros(value) {
    if (!isHexString(value)) {
        errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    while (value.length > 3 && value.substring(0, 3) === '0x0') {
        value = '0x' + value.substring(3);
    }
    return value;
}
exports.hexStripZeros = hexStripZeros;
function hexZeroPad(value, length) {
    if (!isHexString(value)) {
        errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    while (value.length < 2 * length + 2) {
        value = '0x0' + value.substring(2);
    }
    return value;
}
exports.hexZeroPad = hexZeroPad;
function isSignature(value) {
    return (value && value.r != null && value.s != null);
}
function splitSignature(signature) {
    var v = 0;
    var r = '0x', s = '0x';
    if (isSignature(signature)) {
        if (signature.v == null && signature.recoveryParam == null) {
            errors.throwError('at least on of recoveryParam or v must be specified', errors.INVALID_ARGUMENT, { argument: 'signature', value: signature });
        }
        r = hexZeroPad(signature.r, 32);
        s = hexZeroPad(signature.s, 32);
        v = signature.v;
        if (typeof (v) === 'string') {
            v = parseInt(v, 16);
        }
        var recoveryParam = signature.recoveryParam;
        if (recoveryParam == null && signature.v != null) {
            recoveryParam = 1 - (v % 2);
        }
        v = 27 + recoveryParam;
    }
    else {
        var bytes = arrayify(signature);
        if (bytes.length !== 65) {
            throw new Error('invalid signature');
        }
        r = hexlify(bytes.slice(0, 32));
        s = hexlify(bytes.slice(32, 64));
        v = bytes[64];
        if (v !== 27 && v !== 28) {
            v = 27 + (v % 2);
        }
    }
    return {
        r: r,
        s: s,
        recoveryParam: (v - 27),
        v: v
    };
}
exports.splitSignature = splitSignature;
function joinSignature(signature) {
    signature = splitSignature(signature);
    return hexlify(concat([
        signature.r,
        signature.s,
        (signature.recoveryParam ? '0x1c' : '0x1b')
    ]));
}
exports.joinSignature = joinSignature;


/***/ }),

/***/ 6955:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
// Unknown Error
exports.UNKNOWN_ERROR = 'UNKNOWN_ERROR';
// Not implemented
exports.NOT_IMPLEMENTED = 'NOT_IMPLEMENTED';
// Missing new operator to an object
//  - name: The name of the class
exports.MISSING_NEW = 'MISSING_NEW';
// Call exception
//  - transaction: the transaction
//  - address?: the contract address
//  - args?: The arguments passed into the function
//  - method?: The Solidity method signature
//  - errorSignature?: The EIP848 error signature
//  - errorArgs?: The EIP848 error parameters
//  - reason: The reason (only for EIP848 "Error(string)")
exports.CALL_EXCEPTION = 'CALL_EXCEPTION';
// Response from a server was invalid
//   - response: The body of the response
//'BAD_RESPONSE',
// Invalid argument (e.g. value is incompatible with type) to a function:
//   - arg: The argument name that was invalid
//   - value: The value of the argument
exports.INVALID_ARGUMENT = 'INVALID_ARGUMENT';
// Missing argument to a function:
//   - count: The number of arguments received
//   - expectedCount: The number of arguments expected
exports.MISSING_ARGUMENT = 'MISSING_ARGUMENT';
// Too many arguments
//   - count: The number of arguments received
//   - expectedCount: The number of arguments expected
exports.UNEXPECTED_ARGUMENT = 'UNEXPECTED_ARGUMENT';
// Numeric Fault
//   - operation: the operation being executed
//   - fault: the reason this faulted
exports.NUMERIC_FAULT = 'NUMERIC_FAULT';
// Unsupported operation
//   - operation
exports.UNSUPPORTED_OPERATION = 'UNSUPPORTED_OPERATION';
var _permanentCensorErrors = false;
var _censorErrors = false;
// @TODO: Enum
function throwError(message, code, params) {
    if (_censorErrors) {
        throw new Error('unknown error');
    }
    if (!code) {
        code = exports.UNKNOWN_ERROR;
    }
    if (!params) {
        params = {};
    }
    var messageDetails = [];
    Object.keys(params).forEach(function (key) {
        try {
            messageDetails.push(key + '=' + JSON.stringify(params[key]));
        }
        catch (error) {
            messageDetails.push(key + '=' + JSON.stringify(params[key].toString()));
        }
    });
    var reason = message;
    if (messageDetails.length) {
        message += ' (' + messageDetails.join(', ') + ')';
    }
    // @TODO: Any??
    var error = new Error(message);
    error.reason = reason;
    error.code = code;
    Object.keys(params).forEach(function (key) {
        error[key] = params[key];
    });
    throw error;
}
exports.throwError = throwError;
function checkNew(self, kind) {
    if (!(self instanceof kind)) {
        throwError('missing new', exports.MISSING_NEW, { name: kind.name });
    }
}
exports.checkNew = checkNew;
function checkArgumentCount(count, expectedCount, suffix) {
    if (!suffix) {
        suffix = '';
    }
    if (count < expectedCount) {
        throwError('missing argument' + suffix, exports.MISSING_ARGUMENT, { count: count, expectedCount: expectedCount });
    }
    if (count > expectedCount) {
        throwError('too many arguments' + suffix, exports.UNEXPECTED_ARGUMENT, { count: count, expectedCount: expectedCount });
    }
}
exports.checkArgumentCount = checkArgumentCount;
function setCensorship(censorship, permanent) {
    if (_permanentCensorErrors) {
        throwError('error censorship permanent', exports.UNSUPPORTED_OPERATION, { operation: 'setCersorship' });
    }
    _censorErrors = !!censorship;
    _permanentCensorErrors = !!permanent;
}
exports.setCensorship = setCensorship;


/***/ }),

/***/ 502786:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var sha3 = __webpack_require__(591094);
var bytes_1 = __webpack_require__(90530);
function keccak256(data) {
    return '0x' + sha3.keccak_256(bytes_1.arrayify(data));
}
exports.keccak256 = keccak256;


/***/ }),

/***/ 114564:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
function defineReadOnly(object, name, value) {
    Object.defineProperty(object, name, {
        enumerable: true,
        value: value,
        writable: false,
    });
}
exports.defineReadOnly = defineReadOnly;
function defineFrozen(object, name, value) {
    var frozen = JSON.stringify(value);
    Object.defineProperty(object, name, {
        enumerable: true,
        get: function () { return JSON.parse(frozen); }
    });
}
exports.defineFrozen = defineFrozen;
function resolveProperties(object) {
    var result = {};
    var promises = [];
    Object.keys(object).forEach(function (key) {
        var value = object[key];
        if (value instanceof Promise) {
            promises.push(value.then(function (value) {
                result[key] = value;
                return null;
            }));
        }
        else {
            result[key] = value;
        }
    });
    return Promise.all(promises).then(function () {
        return result;
    });
}
exports.resolveProperties = resolveProperties;
function shallowCopy(object) {
    var result = {};
    for (var key in object) {
        result[key] = object[key];
    }
    return result;
}
exports.shallowCopy = shallowCopy;
function jsonCopy(object) {
    return JSON.parse(JSON.stringify(object));
}
exports.jsonCopy = jsonCopy;


/***/ }),

/***/ 737261:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

//See: https://github.com/ethereum/wiki/wiki/RLP
Object.defineProperty(exports, "__esModule", ({ value: true }));
var bytes_1 = __webpack_require__(90530);
function arrayifyInteger(value) {
    var result = [];
    while (value) {
        result.unshift(value & 0xff);
        value >>= 8;
    }
    return result;
}
function unarrayifyInteger(data, offset, length) {
    var result = 0;
    for (var i = 0; i < length; i++) {
        result = (result * 256) + data[offset + i];
    }
    return result;
}
function _encode(object) {
    if (Array.isArray(object)) {
        var payload = [];
        object.forEach(function (child) {
            payload = payload.concat(_encode(child));
        });
        if (payload.length <= 55) {
            payload.unshift(0xc0 + payload.length);
            return payload;
        }
        var length = arrayifyInteger(payload.length);
        length.unshift(0xf7 + length.length);
        return length.concat(payload);
    }
    var data = Array.prototype.slice.call(bytes_1.arrayify(object));
    if (data.length === 1 && data[0] <= 0x7f) {
        return data;
    }
    else if (data.length <= 55) {
        data.unshift(0x80 + data.length);
        return data;
    }
    var length = arrayifyInteger(data.length);
    length.unshift(0xb7 + length.length);
    return length.concat(data);
}
function encode(object) {
    return bytes_1.hexlify(_encode(object));
}
exports.encode = encode;
function _decodeChildren(data, offset, childOffset, length) {
    var result = [];
    while (childOffset < offset + 1 + length) {
        var decoded = _decode(data, childOffset);
        result.push(decoded.result);
        childOffset += decoded.consumed;
        if (childOffset > offset + 1 + length) {
            throw new Error('invalid rlp');
        }
    }
    return { consumed: (1 + length), result: result };
}
// returns { consumed: number, result: Object }
function _decode(data, offset) {
    if (data.length === 0) {
        throw new Error('invalid rlp data');
    }
    // Array with extra length prefix
    if (data[offset] >= 0xf8) {
        var lengthLength = data[offset] - 0xf7;
        if (offset + 1 + lengthLength > data.length) {
            throw new Error('too short');
        }
        var length = unarrayifyInteger(data, offset + 1, lengthLength);
        if (offset + 1 + lengthLength + length > data.length) {
            throw new Error('to short');
        }
        return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);
    }
    else if (data[offset] >= 0xc0) {
        var length = data[offset] - 0xc0;
        if (offset + 1 + length > data.length) {
            throw new Error('invalid rlp data');
        }
        return _decodeChildren(data, offset, offset + 1, length);
    }
    else if (data[offset] >= 0xb8) {
        var lengthLength = data[offset] - 0xb7;
        if (offset + 1 + lengthLength > data.length) {
            throw new Error('invalid rlp data');
        }
        var length = unarrayifyInteger(data, offset + 1, lengthLength);
        if (offset + 1 + lengthLength + length > data.length) {
            throw new Error('invalid rlp data');
        }
        var result = bytes_1.hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));
        return { consumed: (1 + lengthLength + length), result: result };
    }
    else if (data[offset] >= 0x80) {
        var length = data[offset] - 0x80;
        if (offset + 1 + length > data.length) {
            throw new Error('invlaid rlp data');
        }
        var result = bytes_1.hexlify(data.slice(offset + 1, offset + 1 + length));
        return { consumed: (1 + length), result: result };
    }
    return { consumed: 1, result: bytes_1.hexlify(data[offset]) };
}
function decode(data) {
    var bytes = bytes_1.arrayify(data);
    var decoded = _decode(bytes, 0);
    if (decoded.consumed !== bytes.length) {
        throw new Error('invalid rlp data');
    }
    return decoded.result;
}
exports.decode = decode;


/***/ }),

/***/ 919441:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

///////////////////////////////
// Bytes
Object.defineProperty(exports, "__esModule", ({ value: true }));
///////////////////////////////
// BigNumber
var BigNumber = /** @class */ (function () {
    function BigNumber() {
    }
    return BigNumber;
}());
exports.BigNumber = BigNumber;
;
;
;
///////////////////////////////
// Interface
var Indexed = /** @class */ (function () {
    function Indexed() {
    }
    return Indexed;
}());
exports.Indexed = Indexed;
/**
 *  Provider
 *
 *  Note: We use an abstract class so we can use instanceof to determine if an
 *        object is a Provider.
 */
var MinimalProvider = /** @class */ (function () {
    function MinimalProvider() {
    }
    return MinimalProvider;
}());
exports.MinimalProvider = MinimalProvider;
/**
 *  Signer
 *
 *  Note: We use an abstract class so we can use instanceof to determine if an
 *        object is a Signer.
 */
var Signer = /** @class */ (function () {
    function Signer() {
    }
    return Signer;
}());
exports.Signer = Signer;
///////////////////////////////
// HDNode
var HDNode = /** @class */ (function () {
    function HDNode() {
    }
    return HDNode;
}());
exports.HDNode = HDNode;


/***/ }),

/***/ 816356:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var bytes_1 = __webpack_require__(90530);
var UnicodeNormalizationForm;
(function (UnicodeNormalizationForm) {
    UnicodeNormalizationForm["current"] = "";
    UnicodeNormalizationForm["NFC"] = "NFC";
    UnicodeNormalizationForm["NFD"] = "NFD";
    UnicodeNormalizationForm["NFKC"] = "NFKC";
    UnicodeNormalizationForm["NFKD"] = "NFKD";
})(UnicodeNormalizationForm = exports.UnicodeNormalizationForm || (exports.UnicodeNormalizationForm = {}));
;
// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array
function toUtf8Bytes(str, form) {
    if (form === void 0) { form = UnicodeNormalizationForm.current; }
    if (form != UnicodeNormalizationForm.current) {
        str = str.normalize(form);
    }
    var result = [];
    var offset = 0;
    for (var i = 0; i < str.length; i++) {
        var c = str.charCodeAt(i);
        if (c < 128) {
            result[offset++] = c;
        }
        else if (c < 2048) {
            result[offset++] = (c >> 6) | 192;
            result[offset++] = (c & 63) | 128;
        }
        else if (((c & 0xFC00) == 0xD800) && (i + 1) < str.length && ((str.charCodeAt(i + 1) & 0xFC00) == 0xDC00)) {
            // Surrogate Pair
            c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);
            result[offset++] = (c >> 18) | 240;
            result[offset++] = ((c >> 12) & 63) | 128;
            result[offset++] = ((c >> 6) & 63) | 128;
            result[offset++] = (c & 63) | 128;
        }
        else {
            result[offset++] = (c >> 12) | 224;
            result[offset++] = ((c >> 6) & 63) | 128;
            result[offset++] = (c & 63) | 128;
        }
    }
    return bytes_1.arrayify(result);
}
exports.toUtf8Bytes = toUtf8Bytes;
;
// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499
function toUtf8String(bytes) {
    bytes = bytes_1.arrayify(bytes);
    var result = '';
    var i = 0;
    // Invalid bytes are ignored
    while (i < bytes.length) {
        var c = bytes[i++];
        if (c >> 7 == 0) {
            // 0xxx xxxx
            result += String.fromCharCode(c);
            continue;
        }
        // Invalid starting byte
        if (c >> 6 == 0x02) {
            continue;
        }
        // Multibyte; how many bytes left for thus character?
        var extraLength = null;
        if (c >> 5 == 0x06) {
            extraLength = 1;
        }
        else if (c >> 4 == 0x0e) {
            extraLength = 2;
        }
        else if (c >> 3 == 0x1e) {
            extraLength = 3;
        }
        else if (c >> 2 == 0x3e) {
            extraLength = 4;
        }
        else if (c >> 1 == 0x7e) {
            extraLength = 5;
        }
        else {
            continue;
        }
        // Do we have enough bytes in our data?
        if (i + extraLength > bytes.length) {
            // If there is an invalid unprocessed byte, try to continue
            for (; i < bytes.length; i++) {
                if (bytes[i] >> 6 != 0x02) {
                    break;
                }
            }
            if (i != bytes.length)
                continue;
            // All leftover bytes are valid.
            return result;
        }
        // Remove the UTF-8 prefix from the char (res)
        var res = c & ((1 << (8 - extraLength - 1)) - 1);
        var count;
        for (count = 0; count < extraLength; count++) {
            var nextChar = bytes[i++];
            // Is the char valid multibyte part?
            if (nextChar >> 6 != 0x02) {
                break;
            }
            ;
            res = (res << 6) | (nextChar & 0x3f);
        }
        if (count != extraLength) {
            i--;
            continue;
        }
        if (res <= 0xffff) {
            result += String.fromCharCode(res);
            continue;
        }
        res -= 0x10000;
        result += String.fromCharCode(((res >> 10) & 0x3ff) + 0xd800, (res & 0x3ff) + 0xdc00);
    }
    return result;
}
exports.toUtf8String = toUtf8String;


/***/ }),

/***/ 661181:
/***/ ((module) => {

"use strict";


var has = Object.prototype.hasOwnProperty
  , prefix = '~';

/**
 * Constructor to create a storage for our `EE` objects.
 * An `Events` instance is a plain object whose properties are event names.
 *
 * @constructor
 * @private
 */
function Events() {}

//
// We try to not inherit from `Object.prototype`. In some engines creating an
// instance in this way is faster than calling `Object.create(null)` directly.
// If `Object.create(null)` is not supported we prefix the event names with a
// character to make sure that the built-in object properties are not
// overridden or used as an attack vector.
//
if (Object.create) {
  Events.prototype = Object.create(null);

  //
  // This hack is needed because the `__proto__` property is still inherited in
  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
  //
  if (!new Events().__proto__) prefix = false;
}

/**
 * Representation of a single event listener.
 *
 * @param {Function} fn The listener function.
 * @param {*} context The context to invoke the listener with.
 * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
 * @constructor
 * @private
 */
function EE(fn, context, once) {
  this.fn = fn;
  this.context = context;
  this.once = once || false;
}

/**
 * Add a listener for a given event.
 *
 * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
 * @param {(String|Symbol)} event The event name.
 * @param {Function} fn The listener function.
 * @param {*} context The context to invoke the listener with.
 * @param {Boolean} once Specify if the listener is a one-time listener.
 * @returns {EventEmitter}
 * @private
 */
function addListener(emitter, event, fn, context, once) {
  if (typeof fn !== 'function') {
    throw new TypeError('The listener must be a function');
  }

  var listener = new EE(fn, context || emitter, once)
    , evt = prefix ? prefix + event : event;

  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
  else emitter._events[evt] = [emitter._events[evt], listener];

  return emitter;
}

/**
 * Clear event by name.
 *
 * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
 * @param {(String|Symbol)} evt The Event name.
 * @private
 */
function clearEvent(emitter, evt) {
  if (--emitter._eventsCount === 0) emitter._events = new Events();
  else delete emitter._events[evt];
}

/**
 * Minimal `EventEmitter` interface that is molded against the Node.js
 * `EventEmitter` interface.
 *
 * @constructor
 * @public
 */
function EventEmitter() {
  this._events = new Events();
  this._eventsCount = 0;
}

/**
 * Return an array listing the events for which the emitter has registered
 * listeners.
 *
 * @returns {Array}
 * @public
 */
EventEmitter.prototype.eventNames = function eventNames() {
  var names = []
    , events
    , name;

  if (this._eventsCount === 0) return names;

  for (name in (events = this._events)) {
    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
  }

  if (Object.getOwnPropertySymbols) {
    return names.concat(Object.getOwnPropertySymbols(events));
  }

  return names;
};

/**
 * Return the listeners registered for a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @returns {Array} The registered listeners.
 * @public
 */
EventEmitter.prototype.listeners = function listeners(event) {
  var evt = prefix ? prefix + event : event
    , handlers = this._events[evt];

  if (!handlers) return [];
  if (handlers.fn) return [handlers.fn];

  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
    ee[i] = handlers[i].fn;
  }

  return ee;
};

/**
 * Return the number of listeners listening to a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @returns {Number} The number of listeners.
 * @public
 */
EventEmitter.prototype.listenerCount = function listenerCount(event) {
  var evt = prefix ? prefix + event : event
    , listeners = this._events[evt];

  if (!listeners) return 0;
  if (listeners.fn) return 1;
  return listeners.length;
};

/**
 * Calls each of the listeners registered for a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @returns {Boolean} `true` if the event had listeners, else `false`.
 * @public
 */
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
  var evt = prefix ? prefix + event : event;

  if (!this._events[evt]) return false;

  var listeners = this._events[evt]
    , len = arguments.length
    , args
    , i;

  if (listeners.fn) {
    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);

    switch (len) {
      case 1: return listeners.fn.call(listeners.context), true;
      case 2: return listeners.fn.call(listeners.context, a1), true;
      case 3: return listeners.fn.call(listeners.context, a1, a2), true;
      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
    }

    for (i = 1, args = new Array(len -1); i < len; i++) {
      args[i - 1] = arguments[i];
    }

    listeners.fn.apply(listeners.context, args);
  } else {
    var length = listeners.length
      , j;

    for (i = 0; i < length; i++) {
      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);

      switch (len) {
        case 1: listeners[i].fn.call(listeners[i].context); break;
        case 2: listeners[i].fn.call(listeners[i].context, a1); break;
        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
        default:
          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
            args[j - 1] = arguments[j];
          }

          listeners[i].fn.apply(listeners[i].context, args);
      }
    }
  }

  return true;
};

/**
 * Add a listener for a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @param {Function} fn The listener function.
 * @param {*} [context=this] The context to invoke the listener with.
 * @returns {EventEmitter} `this`.
 * @public
 */
EventEmitter.prototype.on = function on(event, fn, context) {
  return addListener(this, event, fn, context, false);
};

/**
 * Add a one-time listener for a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @param {Function} fn The listener function.
 * @param {*} [context=this] The context to invoke the listener with.
 * @returns {EventEmitter} `this`.
 * @public
 */
EventEmitter.prototype.once = function once(event, fn, context) {
  return addListener(this, event, fn, context, true);
};

/**
 * Remove the listeners of a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @param {Function} fn Only remove the listeners that match this function.
 * @param {*} context Only remove the listeners that have this context.
 * @param {Boolean} once Only remove one-time listeners.
 * @returns {EventEmitter} `this`.
 * @public
 */
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
  var evt = prefix ? prefix + event : event;

  if (!this._events[evt]) return this;
  if (!fn) {
    clearEvent(this, evt);
    return this;
  }

  var listeners = this._events[evt];

  if (listeners.fn) {
    if (
      listeners.fn === fn &&
      (!once || listeners.once) &&
      (!context || listeners.context === context)
    ) {
      clearEvent(this, evt);
    }
  } else {
    for (var i = 0, events = [], length = listeners.length; i < length; i++) {
      if (
        listeners[i].fn !== fn ||
        (once && !listeners[i].once) ||
        (context && listeners[i].context !== context)
      ) {
        events.push(listeners[i]);
      }
    }

    //
    // Reset the array, or remove it completely if we have no more listeners.
    //
    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
    else clearEvent(this, evt);
  }

  return this;
};

/**
 * Remove all listeners, or those of the specified event.
 *
 * @param {(String|Symbol)} [event] The event name.
 * @returns {EventEmitter} `this`.
 * @public
 */
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
  var evt;

  if (event) {
    evt = prefix ? prefix + event : event;
    if (this._events[evt]) clearEvent(this, evt);
  } else {
    this._events = new Events();
    this._eventsCount = 0;
  }

  return this;
};

//
// Alias methods names because people roll like that.
//
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
EventEmitter.prototype.addListener = EventEmitter.prototype.on;

//
// Expose the prefix.
//
EventEmitter.prefixed = prefix;

//
// Allow `EventEmitter` to be imported as module namespace.
//
EventEmitter.EventEmitter = EventEmitter;

//
// Expose the module.
//
if (true) {
  module.exports = EventEmitter;
}


/***/ }),

/***/ 565701:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)

const BUF_LENGTH = 64 * 1024
const _buff = __webpack_require__(559744)(BUF_LENGTH)

function copyFileSync (srcFile, destFile, options) {
  const overwrite = options.overwrite
  const errorOnExist = options.errorOnExist
  const preserveTimestamps = options.preserveTimestamps

  if (fs.existsSync(destFile)) {
    if (overwrite) {
      fs.unlinkSync(destFile)
    } else if (errorOnExist) {
      throw new Error(`${destFile} already exists`)
    } else return
  }

  const fdr = fs.openSync(srcFile, 'r')
  const stat = fs.fstatSync(fdr)
  const fdw = fs.openSync(destFile, 'w', stat.mode)
  let bytesRead = 1
  let pos = 0

  while (bytesRead > 0) {
    bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  if (preserveTimestamps) {
    fs.futimesSync(fdw, stat.atime, stat.mtime)
  }

  fs.closeSync(fdr)
  fs.closeSync(fdw)
}

module.exports = copyFileSync


/***/ }),

/***/ 674363:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const copyFileSync = __webpack_require__(565701)
const mkdir = __webpack_require__(635961)

function copySync (src, dest, options) {
  if (typeof options === 'function' || options instanceof RegExp) {
    options = {filter: options}
  }

  options = options || {}
  options.recursive = !!options.recursive

  // default to true for now
  options.clobber = 'clobber' in options ? !!options.clobber : true
  // overwrite falls back to clobber
  options.overwrite = 'overwrite' in options ? !!options.overwrite : options.clobber
  options.dereference = 'dereference' in options ? !!options.dereference : false
  options.preserveTimestamps = 'preserveTimestamps' in options ? !!options.preserveTimestamps : false

  options.filter = options.filter || function () { return true }

  // Warn about using preserveTimestamps on 32-bit node:
  if (options.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  const stats = (options.recursive && !options.dereference) ? fs.lstatSync(src) : fs.statSync(src)
  const destFolder = path.dirname(dest)
  const destFolderExists = fs.existsSync(destFolder)
  let performCopy = false

  if (options.filter instanceof RegExp) {
    console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function')
    performCopy = options.filter.test(src)
  } else if (typeof options.filter === 'function') performCopy = options.filter(src, dest)

  if (stats.isFile() && performCopy) {
    if (!destFolderExists) mkdir.mkdirsSync(destFolder)
    copyFileSync(src, dest, {
      overwrite: options.overwrite,
      errorOnExist: options.errorOnExist,
      preserveTimestamps: options.preserveTimestamps
    })
  } else if (stats.isDirectory() && performCopy) {
    if (!fs.existsSync(dest)) mkdir.mkdirsSync(dest)
    const contents = fs.readdirSync(src)
    contents.forEach(content => {
      const opts = options
      opts.recursive = true
      copySync(path.join(src, content), path.join(dest, content), opts)
    })
  } else if (options.recursive && stats.isSymbolicLink() && performCopy) {
    const srcPath = fs.readlinkSync(src)
    fs.symlinkSync(srcPath, dest)
  }
}

module.exports = copySync


/***/ }),

/***/ 770336:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

module.exports = {
  copySync: __webpack_require__(674363)
}


/***/ }),

/***/ 19274:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const ncp = __webpack_require__(424127)
const mkdir = __webpack_require__(635961)
const pathExists = __webpack_require__(134791).pathExists

function copy (src, dest, options, callback) {
  if (typeof options === 'function' && !callback) {
    callback = options
    options = {}
  } else if (typeof options === 'function' || options instanceof RegExp) {
    options = {filter: options}
  }
  callback = callback || function () {}
  options = options || {}

  // Warn about using preserveTimestamps on 32-bit node:
  if (options.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  // don't allow src and dest to be the same
  const basePath = process.cwd()
  const currentPath = path.resolve(basePath, src)
  const targetPath = path.resolve(basePath, dest)
  if (currentPath === targetPath) return callback(new Error('Source and destination must not be the same.'))

  fs.lstat(src, (err, stats) => {
    if (err) return callback(err)

    let dir = null
    if (stats.isDirectory()) {
      const parts = dest.split(path.sep)
      parts.pop()
      dir = parts.join(path.sep)
    } else {
      dir = path.dirname(dest)
    }

    pathExists(dir, (err, dirExists) => {
      if (err) return callback(err)
      if (dirExists) return ncp(src, dest, options, callback)
      mkdir.mkdirs(dir, err => {
        if (err) return callback(err)
        ncp(src, dest, options, callback)
      })
    })
  })
}

module.exports = copy


/***/ }),

/***/ 73248:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

const u = __webpack_require__(238981)/* .fromCallback */ .E
module.exports = {
  copy: u(__webpack_require__(19274))
}


/***/ }),

/***/ 424127:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// imported from ncp (this is temporary, will rewrite)

var fs = __webpack_require__(220077)
var path = __webpack_require__(385622)
var utimes = __webpack_require__(446004)

function ncp (source, dest, options, callback) {
  if (!callback) {
    callback = options
    options = {}
  }

  var basePath = process.cwd()
  var currentPath = path.resolve(basePath, source)
  var targetPath = path.resolve(basePath, dest)

  var filter = options.filter
  var transform = options.transform
  var overwrite = options.overwrite
  // If overwrite is undefined, use clobber, otherwise default to true:
  if (overwrite === undefined) overwrite = options.clobber
  if (overwrite === undefined) overwrite = true
  var errorOnExist = options.errorOnExist
  var dereference = options.dereference
  var preserveTimestamps = options.preserveTimestamps === true

  var started = 0
  var finished = 0
  var running = 0

  var errored = false

  startCopy(currentPath)

  function startCopy (source) {
    started++
    if (filter) {
      if (filter instanceof RegExp) {
        console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function')
        if (!filter.test(source)) {
          return doneOne(true)
        }
      } else if (typeof filter === 'function') {
        if (!filter(source, dest)) {
          return doneOne(true)
        }
      }
    }
    return getStats(source)
  }

  function getStats (source) {
    var stat = dereference ? fs.stat : fs.lstat
    running++
    stat(source, function (err, stats) {
      if (err) return onError(err)

      // We need to get the mode from the stats object and preserve it.
      var item = {
        name: source,
        mode: stats.mode,
        mtime: stats.mtime, // modified time
        atime: stats.atime, // access time
        stats: stats // temporary
      }

      if (stats.isDirectory()) {
        return onDir(item)
      } else if (stats.isFile() || stats.isCharacterDevice() || stats.isBlockDevice()) {
        return onFile(item)
      } else if (stats.isSymbolicLink()) {
        // Symlinks don't really need to know about the mode.
        return onLink(source)
      }
    })
  }

  function onFile (file) {
    var target = file.name.replace(currentPath, targetPath.replace('$', '$$$$')) // escapes '$' with '$$'
    isWritable(target, function (writable) {
      if (writable) {
        copyFile(file, target)
      } else {
        if (overwrite) {
          rmFile(target, function () {
            copyFile(file, target)
          })
        } else if (errorOnExist) {
          onError(new Error(target + ' already exists'))
        } else {
          doneOne()
        }
      }
    })
  }

  function copyFile (file, target) {
    var readStream = fs.createReadStream(file.name)
    var writeStream = fs.createWriteStream(target, { mode: file.mode })

    readStream.on('error', onError)
    writeStream.on('error', onError)

    if (transform) {
      transform(readStream, writeStream, file)
    } else {
      writeStream.on('open', function () {
        readStream.pipe(writeStream)
      })
    }

    writeStream.once('close', function () {
      fs.chmod(target, file.mode, function (err) {
        if (err) return onError(err)
        if (preserveTimestamps) {
          utimes.utimesMillis(target, file.atime, file.mtime, function (err) {
            if (err) return onError(err)
            return doneOne()
          })
        } else {
          doneOne()
        }
      })
    })
  }

  function rmFile (file, done) {
    fs.unlink(file, function (err) {
      if (err) return onError(err)
      return done()
    })
  }

  function onDir (dir) {
    var target = dir.name.replace(currentPath, targetPath.replace('$', '$$$$')) // escapes '$' with '$$'
    isWritable(target, function (writable) {
      if (writable) {
        return mkDir(dir, target)
      }
      copyDir(dir.name)
    })
  }

  function mkDir (dir, target) {
    fs.mkdir(target, dir.mode, function (err) {
      if (err) return onError(err)
      // despite setting mode in fs.mkdir, doesn't seem to work
      // so we set it here.
      fs.chmod(target, dir.mode, function (err) {
        if (err) return onError(err)
        copyDir(dir.name)
      })
    })
  }

  function copyDir (dir) {
    fs.readdir(dir, function (err, items) {
      if (err) return onError(err)
      items.forEach(function (item) {
        startCopy(path.join(dir, item))
      })
      return doneOne()
    })
  }

  function onLink (link) {
    var target = link.replace(currentPath, targetPath)
    fs.readlink(link, function (err, resolvedPath) {
      if (err) return onError(err)
      checkLink(resolvedPath, target)
    })
  }

  function checkLink (resolvedPath, target) {
    if (dereference) {
      resolvedPath = path.resolve(basePath, resolvedPath)
    }
    isWritable(target, function (writable) {
      if (writable) {
        return makeLink(resolvedPath, target)
      }
      fs.readlink(target, function (err, targetDest) {
        if (err) return onError(err)

        if (dereference) {
          targetDest = path.resolve(basePath, targetDest)
        }
        if (targetDest === resolvedPath) {
          return doneOne()
        }
        return rmFile(target, function () {
          makeLink(resolvedPath, target)
        })
      })
    })
  }

  function makeLink (linkPath, target) {
    fs.symlink(linkPath, target, function (err) {
      if (err) return onError(err)
      return doneOne()
    })
  }

  function isWritable (path, done) {
    fs.lstat(path, function (err) {
      if (err) {
        if (err.code === 'ENOENT') return done(true)
        return done(false)
      }
      return done(false)
    })
  }

  function onError (err) {
    // ensure callback is defined & called only once:
    if (!errored && callback !== undefined) {
      errored = true
      return callback(err)
    }
  }

  function doneOne (skipped) {
    if (!skipped) running--
    finished++
    if ((started === finished) && (running === 0)) {
      if (callback !== undefined) {
        return callback(null)
      }
    }
  }
}

module.exports = ncp


/***/ }),

/***/ 381486:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(935747)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(635961)
const remove = __webpack_require__(171677)

const emptyDir = u(function emptyDir (dir, callback) {
  callback = callback || function () {}
  fs.readdir(dir, (err, items) => {
    if (err) return mkdir.mkdirs(dir, callback)

    items = items.map(item => path.join(dir, item))

    deleteItem()

    function deleteItem () {
      const item = items.pop()
      if (!item) return callback()
      remove.remove(item, err => {
        if (err) return callback(err)
        deleteItem()
      })
    }
  })
})

function emptyDirSync (dir) {
  let items
  try {
    items = fs.readdirSync(dir)
  } catch (err) {
    return mkdir.mkdirsSync(dir)
  }

  items.forEach(item => {
    item = path.join(dir, item)
    remove.removeSync(item)
  })
}

module.exports = {
  emptyDirSync,
  emptydirSync: emptyDirSync,
  emptyDir,
  emptydir: emptyDir
}


/***/ }),

/***/ 138305:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const mkdir = __webpack_require__(635961)
const pathExists = __webpack_require__(134791).pathExists

function createFile (file, callback) {
  function makeFile () {
    fs.writeFile(file, '', err => {
      if (err) return callback(err)
      callback()
    })
  }

  fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
    if (!err && stats.isFile()) return callback()
    const dir = path.dirname(file)
    pathExists(dir, (err, dirExists) => {
      if (err) return callback(err)
      if (dirExists) return makeFile()
      mkdir.mkdirs(dir, err => {
        if (err) return callback(err)
        makeFile()
      })
    })
  })
}

function createFileSync (file) {
  let stats
  try {
    stats = fs.statSync(file)
  } catch (e) {}
  if (stats && stats.isFile()) return

  const dir = path.dirname(file)
  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  fs.writeFileSync(file, '')
}

module.exports = {
  createFile: u(createFile),
  createFileSync
}


/***/ }),

/***/ 153034:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const file = __webpack_require__(138305)
const link = __webpack_require__(496270)
const symlink = __webpack_require__(530210)

module.exports = {
  // file
  createFile: file.createFile,
  createFileSync: file.createFileSync,
  ensureFile: file.createFile,
  ensureFileSync: file.createFileSync,
  // link
  createLink: link.createLink,
  createLinkSync: link.createLinkSync,
  ensureLink: link.createLink,
  ensureLinkSync: link.createLinkSync,
  // symlink
  createSymlink: symlink.createSymlink,
  createSymlinkSync: symlink.createSymlinkSync,
  ensureSymlink: symlink.createSymlink,
  ensureSymlinkSync: symlink.createSymlinkSync
}


/***/ }),

/***/ 496270:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const mkdir = __webpack_require__(635961)
const pathExists = __webpack_require__(134791).pathExists

function createLink (srcpath, dstpath, callback) {
  function makeLink (srcpath, dstpath) {
    fs.link(srcpath, dstpath, err => {
      if (err) return callback(err)
      callback(null)
    })
  }

  pathExists(dstpath, (err, destinationExists) => {
    if (err) return callback(err)
    if (destinationExists) return callback(null)
    fs.lstat(srcpath, (err, stat) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureLink')
        return callback(err)
      }

      const dir = path.dirname(dstpath)
      pathExists(dir, (err, dirExists) => {
        if (err) return callback(err)
        if (dirExists) return makeLink(srcpath, dstpath)
        mkdir.mkdirs(dir, err => {
          if (err) return callback(err)
          makeLink(srcpath, dstpath)
        })
      })
    })
  })
}

function createLinkSync (srcpath, dstpath, callback) {
  const destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  try {
    fs.lstatSync(srcpath)
  } catch (err) {
    err.message = err.message.replace('lstat', 'ensureLink')
    throw err
  }

  const dir = path.dirname(dstpath)
  const dirExists = fs.existsSync(dir)
  if (dirExists) return fs.linkSync(srcpath, dstpath)
  mkdir.mkdirsSync(dir)

  return fs.linkSync(srcpath, dstpath)
}

module.exports = {
  createLink: u(createLink),
  createLinkSync
}


/***/ }),

/***/ 143614:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const pathExists = __webpack_require__(134791).pathExists

/**
 * Function that returns two types of paths, one relative to symlink, and one
 * relative to the current working directory. Checks if path is absolute or
 * relative. If the path is relative, this function checks if the path is
 * relative to symlink or relative to current working directory. This is an
 * initiative to find a smarter `srcpath` to supply when building symlinks.
 * This allows you to determine which path to use out of one of three possible
 * types of source paths. The first is an absolute path. This is detected by
 * `path.isAbsolute()`. When an absolute path is provided, it is checked to
 * see if it exists. If it does it's used, if not an error is returned
 * (callback)/ thrown (sync). The other two options for `srcpath` are a
 * relative url. By default Node's `fs.symlink` works by creating a symlink
 * using `dstpath` and expects the `srcpath` to be relative to the newly
 * created symlink. If you provide a `srcpath` that does not exist on the file
 * system it results in a broken symlink. To minimize this, the function
 * checks to see if the 'relative to symlink' source file exists, and if it
 * does it will use it. If it does not, it checks if there's a file that
 * exists that is relative to the current working directory, if does its used.
 * This preserves the expectations of the original fs.symlink spec and adds
 * the ability to pass in `relative to current working direcotry` paths.
 */

function symlinkPaths (srcpath, dstpath, callback) {
  if (path.isAbsolute(srcpath)) {
    return fs.lstat(srcpath, (err, stat) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureSymlink')
        return callback(err)
      }
      return callback(null, {
        'toCwd': srcpath,
        'toDst': srcpath
      })
    })
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    return pathExists(relativeToDst, (err, exists) => {
      if (err) return callback(err)
      if (exists) {
        return callback(null, {
          'toCwd': relativeToDst,
          'toDst': srcpath
        })
      } else {
        return fs.lstat(srcpath, (err, stat) => {
          if (err) {
            err.message = err.message.replace('lstat', 'ensureSymlink')
            return callback(err)
          }
          return callback(null, {
            'toCwd': srcpath,
            'toDst': path.relative(dstdir, srcpath)
          })
        })
      }
    })
  }
}

function symlinkPathsSync (srcpath, dstpath) {
  let exists
  if (path.isAbsolute(srcpath)) {
    exists = fs.existsSync(srcpath)
    if (!exists) throw new Error('absolute srcpath does not exist')
    return {
      'toCwd': srcpath,
      'toDst': srcpath
    }
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    exists = fs.existsSync(relativeToDst)
    if (exists) {
      return {
        'toCwd': relativeToDst,
        'toDst': srcpath
      }
    } else {
      exists = fs.existsSync(srcpath)
      if (!exists) throw new Error('relative srcpath does not exist')
      return {
        'toCwd': srcpath,
        'toDst': path.relative(dstdir, srcpath)
      }
    }
  }
}

module.exports = {
  symlinkPaths,
  symlinkPathsSync
}


/***/ }),

/***/ 187963:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)

function symlinkType (srcpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type
  if (type) return callback(null, type)
  fs.lstat(srcpath, (err, stats) => {
    if (err) return callback(null, 'file')
    type = (stats && stats.isDirectory()) ? 'dir' : 'file'
    callback(null, type)
  })
}

function symlinkTypeSync (srcpath, type) {
  let stats

  if (type) return type
  try {
    stats = fs.lstatSync(srcpath)
  } catch (e) {
    return 'file'
  }
  return (stats && stats.isDirectory()) ? 'dir' : 'file'
}

module.exports = {
  symlinkType,
  symlinkTypeSync
}


/***/ }),

/***/ 530210:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const _mkdirs = __webpack_require__(635961)
const mkdirs = _mkdirs.mkdirs
const mkdirsSync = _mkdirs.mkdirsSync

const _symlinkPaths = __webpack_require__(143614)
const symlinkPaths = _symlinkPaths.symlinkPaths
const symlinkPathsSync = _symlinkPaths.symlinkPathsSync

const _symlinkType = __webpack_require__(187963)
const symlinkType = _symlinkType.symlinkType
const symlinkTypeSync = _symlinkType.symlinkTypeSync

const pathExists = __webpack_require__(134791).pathExists

function createSymlink (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  pathExists(dstpath, (err, destinationExists) => {
    if (err) return callback(err)
    if (destinationExists) return callback(null)
    symlinkPaths(srcpath, dstpath, (err, relative) => {
      if (err) return callback(err)
      srcpath = relative.toDst
      symlinkType(relative.toCwd, type, (err, type) => {
        if (err) return callback(err)
        const dir = path.dirname(dstpath)
        pathExists(dir, (err, dirExists) => {
          if (err) return callback(err)
          if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
          mkdirs(dir, err => {
            if (err) return callback(err)
            fs.symlink(srcpath, dstpath, type, callback)
          })
        })
      })
    })
  })
}

function createSymlinkSync (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  const destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  const relative = symlinkPathsSync(srcpath, dstpath)
  srcpath = relative.toDst
  type = symlinkTypeSync(relative.toCwd, type)
  const dir = path.dirname(dstpath)
  const exists = fs.existsSync(dir)
  if (exists) return fs.symlinkSync(srcpath, dstpath, type)
  mkdirsSync(dir)
  return fs.symlinkSync(srcpath, dstpath, type)
}

module.exports = {
  createSymlink: u(createSymlink),
  createSymlinkSync
}


/***/ }),

/***/ 391881:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

// This is adapted from https://github.com/normalize/mz
// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)

const api = [
  'access',
  'appendFile',
  'chmod',
  'chown',
  'close',
  'copyFile',
  'fchmod',
  'fchown',
  'fdatasync',
  'fstat',
  'fsync',
  'ftruncate',
  'futimes',
  'lchown',
  'link',
  'lstat',
  'mkdir',
  'mkdtemp',
  'open',
  'readFile',
  'readdir',
  'readlink',
  'realpath',
  'rename',
  'rmdir',
  'stat',
  'symlink',
  'truncate',
  'unlink',
  'utimes',
  'writeFile'
].filter(key => {
  // Some commands are not available on some systems. Ex:
  // fs.copyFile was added in Node.js v8.5.0
  // fs.mkdtemp was added in Node.js v5.10.0
  // fs.lchown is not available on at least some Linux
  return typeof fs[key] === 'function'
})

// Export all keys:
Object.keys(fs).forEach(key => {
  exports[key] = fs[key]
})

// Universalify async methods:
api.forEach(method => {
  exports[method] = u(fs[method])
})

// We differ from mz/fs in that we still ship the old, broken, fs.exists()
// since we are a drop-in replacement for the native module
exports.exists = function (filename, callback) {
  if (typeof callback === 'function') {
    return fs.exists(filename, callback)
  }
  return new Promise(resolve => {
    return fs.exists(filename, resolve)
  })
}

// fs.read() & fs.write need special treatment due to multiple callback args

exports.read = function (fd, buffer, offset, length, position, callback) {
  if (typeof callback === 'function') {
    return fs.read(fd, buffer, offset, length, position, callback)
  }
  return new Promise((resolve, reject) => {
    fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
      if (err) return reject(err)
      resolve({ bytesRead, buffer })
    })
  })
}

// Function signature can be
// fs.write(fd, buffer[, offset[, length[, position]]], callback)
// OR
// fs.write(fd, string[, position[, encoding]], callback)
// so we need to handle both cases
exports.write = function (fd, buffer, a, b, c, callback) {
  if (typeof arguments[arguments.length - 1] === 'function') {
    return fs.write(fd, buffer, a, b, c, callback)
  }

  // Check for old, depricated fs.write(fd, string[, position[, encoding]], callback)
  if (typeof buffer === 'string') {
    return new Promise((resolve, reject) => {
      fs.write(fd, buffer, a, b, (err, bytesWritten, buffer) => {
        if (err) return reject(err)
        resolve({ bytesWritten, buffer })
      })
    })
  }

  return new Promise((resolve, reject) => {
    fs.write(fd, buffer, a, b, c, (err, bytesWritten, buffer) => {
      if (err) return reject(err)
      resolve({ bytesWritten, buffer })
    })
  })
}


/***/ }),

/***/ 956507:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const assign = __webpack_require__(41587)

const fs = {}

// Export graceful-fs:
assign(fs, __webpack_require__(391881))
// Export extra methods:
assign(fs, __webpack_require__(73248))
assign(fs, __webpack_require__(770336))
assign(fs, __webpack_require__(635961))
assign(fs, __webpack_require__(171677))
assign(fs, __webpack_require__(66224))
assign(fs, __webpack_require__(754453))
assign(fs, __webpack_require__(285455))
assign(fs, __webpack_require__(381486))
assign(fs, __webpack_require__(153034))
assign(fs, __webpack_require__(646779))
assign(fs, __webpack_require__(134791))

module.exports = fs


/***/ }),

/***/ 66224:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const jsonFile = __webpack_require__(624604)

jsonFile.outputJson = u(__webpack_require__(943925))
jsonFile.outputJsonSync = __webpack_require__(211732)
// aliases
jsonFile.outputJSON = jsonFile.outputJson
jsonFile.outputJSONSync = jsonFile.outputJsonSync
jsonFile.writeJSON = jsonFile.writeJson
jsonFile.writeJSONSync = jsonFile.writeJsonSync
jsonFile.readJSON = jsonFile.readJson
jsonFile.readJSONSync = jsonFile.readJsonSync

module.exports = jsonFile


/***/ }),

/***/ 624604:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const jsonFile = __webpack_require__(96813)

module.exports = {
  // jsonfile exports
  readJson: u(jsonFile.readFile),
  readJsonSync: jsonFile.readFileSync,
  writeJson: u(jsonFile.writeFile),
  writeJsonSync: jsonFile.writeFileSync
}


/***/ }),

/***/ 211732:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(635961)
const jsonFile = __webpack_require__(624604)

function outputJsonSync (file, data, options) {
  const dir = path.dirname(file)

  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  jsonFile.writeJsonSync(file, data, options)
}

module.exports = outputJsonSync


/***/ }),

/***/ 943925:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)
const mkdir = __webpack_require__(635961)
const pathExists = __webpack_require__(134791).pathExists
const jsonFile = __webpack_require__(624604)

function outputJson (file, data, options, callback) {
  if (typeof options === 'function') {
    callback = options
    options = {}
  }

  const dir = path.dirname(file)

  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return jsonFile.writeJson(file, data, options, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)
      jsonFile.writeJson(file, data, options, callback)
    })
  })
}

module.exports = outputJson


/***/ }),

/***/ 635961:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const u = __webpack_require__(238981)/* .fromCallback */ .E
const mkdirs = u(__webpack_require__(463779))
const mkdirsSync = __webpack_require__(855276)

module.exports = {
  mkdirs: mkdirs,
  mkdirsSync: mkdirsSync,
  // alias
  mkdirp: mkdirs,
  mkdirpSync: mkdirsSync,
  ensureDir: mkdirs,
  ensureDirSync: mkdirsSync
}


/***/ }),

/***/ 855276:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const invalidWin32Path = __webpack_require__(504918).invalidWin32Path

const o777 = parseInt('0777', 8)

function mkdirsSync (p, opts, made) {
  if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  let mode = opts.mode
  const xfs = opts.fs || fs

  if (process.platform === 'win32' && invalidWin32Path(p)) {
    const errInval = new Error(p + ' contains invalid WIN32 path characters.')
    errInval.code = 'EINVAL'
    throw errInval
  }

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  p = path.resolve(p)

  try {
    xfs.mkdirSync(p, mode)
    made = made || p
  } catch (err0) {
    switch (err0.code) {
      case 'ENOENT':
        if (path.dirname(p) === p) throw err0
        made = mkdirsSync(path.dirname(p), opts, made)
        mkdirsSync(p, opts, made)
        break

      // In the case of any other error, just see if there's a dir
      // there already.  If so, then hooray!  If not, then something
      // is borked.
      default:
        let stat
        try {
          stat = xfs.statSync(p)
        } catch (err1) {
          throw err0
        }
        if (!stat.isDirectory()) throw err0
        break
    }
  }

  return made
}

module.exports = mkdirsSync


/***/ }),

/***/ 463779:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const invalidWin32Path = __webpack_require__(504918).invalidWin32Path

const o777 = parseInt('0777', 8)

function mkdirs (p, opts, callback, made) {
  if (typeof opts === 'function') {
    callback = opts
    opts = {}
  } else if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  if (process.platform === 'win32' && invalidWin32Path(p)) {
    const errInval = new Error(p + ' contains invalid WIN32 path characters.')
    errInval.code = 'EINVAL'
    return callback(errInval)
  }

  let mode = opts.mode
  const xfs = opts.fs || fs

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  callback = callback || function () {}
  p = path.resolve(p)

  xfs.mkdir(p, mode, er => {
    if (!er) {
      made = made || p
      return callback(null, made)
    }
    switch (er.code) {
      case 'ENOENT':
        if (path.dirname(p) === p) return callback(er)
        mkdirs(path.dirname(p), opts, (er, made) => {
          if (er) callback(er, made)
          else mkdirs(p, opts, callback, made)
        })
        break

      // In the case of any other error, just see if there's a dir
      // there already.  If so, then hooray!  If not, then something
      // is borked.
      default:
        xfs.stat(p, (er2, stat) => {
          // if the stat fails, then that's super weird.
          // let the original error be the failure reason.
          if (er2 || !stat.isDirectory()) callback(er, made)
          else callback(null, made)
        })
        break
    }
  })
}

module.exports = mkdirs


/***/ }),

/***/ 504918:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)

// get drive on windows
function getRootPath (p) {
  p = path.normalize(path.resolve(p)).split(path.sep)
  if (p.length > 0) return p[0]
  return null
}

// http://stackoverflow.com/a/62888/10333 contains more accurate
// TODO: expand to include the rest
const INVALID_PATH_CHARS = /[<>:"|?*]/

function invalidWin32Path (p) {
  const rp = getRootPath(p)
  p = p.replace(rp, '')
  return INVALID_PATH_CHARS.test(p)
}

module.exports = {
  getRootPath,
  invalidWin32Path
}


/***/ }),

/***/ 285455:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const copySync = __webpack_require__(770336).copySync
const removeSync = __webpack_require__(171677).removeSync
const mkdirpSync = __webpack_require__(635961).mkdirsSync
const buffer = __webpack_require__(559744)

function moveSync (src, dest, options) {
  options = options || {}
  const overwrite = options.overwrite || options.clobber || false

  src = path.resolve(src)
  dest = path.resolve(dest)

  if (src === dest) return fs.accessSync(src)

  if (isSrcSubdir(src, dest)) throw new Error(`Cannot move '${src}' into itself '${dest}'.`)

  mkdirpSync(path.dirname(dest))
  tryRenameSync()

  function tryRenameSync () {
    if (overwrite) {
      try {
        return fs.renameSync(src, dest)
      } catch (err) {
        if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST' || err.code === 'EPERM') {
          removeSync(dest)
          options.overwrite = false // just overwriteed it, no need to do it again
          return moveSync(src, dest, options)
        }

        if (err.code !== 'EXDEV') throw err
        return moveSyncAcrossDevice(src, dest, overwrite)
      }
    } else {
      try {
        fs.linkSync(src, dest)
        return fs.unlinkSync(src)
      } catch (err) {
        if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') {
          return moveSyncAcrossDevice(src, dest, overwrite)
        }
        throw err
      }
    }
  }
}

function moveSyncAcrossDevice (src, dest, overwrite) {
  const stat = fs.statSync(src)

  if (stat.isDirectory()) {
    return moveDirSyncAcrossDevice(src, dest, overwrite)
  } else {
    return moveFileSyncAcrossDevice(src, dest, overwrite)
  }
}

function moveFileSyncAcrossDevice (src, dest, overwrite) {
  const BUF_LENGTH = 64 * 1024
  const _buff = buffer(BUF_LENGTH)

  const flags = overwrite ? 'w' : 'wx'

  const fdr = fs.openSync(src, 'r')
  const stat = fs.fstatSync(fdr)
  const fdw = fs.openSync(dest, flags, stat.mode)
  let bytesRead = 1
  let pos = 0

  while (bytesRead > 0) {
    bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  fs.closeSync(fdr)
  fs.closeSync(fdw)
  return fs.unlinkSync(src)
}

function moveDirSyncAcrossDevice (src, dest, overwrite) {
  const options = {
    overwrite: false
  }

  if (overwrite) {
    removeSync(dest)
    tryCopySync()
  } else {
    tryCopySync()
  }

  function tryCopySync () {
    copySync(src, dest, options)
    return removeSync(src)
  }
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename
function isSrcSubdir (src, dest) {
  try {
    return fs.statSync(src).isDirectory() &&
           src !== dest &&
           dest.indexOf(src) > -1 &&
           dest.split(path.dirname(src) + path.sep)[1].split(path.sep)[0] === path.basename(src)
  } catch (e) {
    return false
  }
}

module.exports = {
  moveSync
}


/***/ }),

/***/ 754453:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


// most of this code was written by Andrew Kelley
// licensed under the BSD license: see
// https://github.com/andrewrk/node-mv/blob/master/package.json

// this needs a cleanup

const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)
const ncp = __webpack_require__(424127)
const path = __webpack_require__(385622)
const remove = __webpack_require__(171677).remove
const mkdirp = __webpack_require__(635961).mkdirs

function move (src, dest, options, callback) {
  if (typeof options === 'function') {
    callback = options
    options = {}
  }

  const overwrite = options.overwrite || options.clobber || false

  isSrcSubdir(src, dest, (err, itIs) => {
    if (err) return callback(err)
    if (itIs) return callback(new Error(`Cannot move '${src}' to a subdirectory of itself, '${dest}'.`))
    mkdirp(path.dirname(dest), err => {
      if (err) return callback(err)
      doRename()
    })
  })

  function doRename () {
    if (path.resolve(src) === path.resolve(dest)) {
      fs.access(src, callback)
    } else if (overwrite) {
      fs.rename(src, dest, err => {
        if (!err) return callback()

        if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST') {
          remove(dest, err => {
            if (err) return callback(err)
            options.overwrite = false // just overwriteed it, no need to do it again
            move(src, dest, options, callback)
          })
          return
        }

        // weird Windows shit
        if (err.code === 'EPERM') {
          setTimeout(() => {
            remove(dest, err => {
              if (err) return callback(err)
              options.overwrite = false
              move(src, dest, options, callback)
            })
          }, 200)
          return
        }

        if (err.code !== 'EXDEV') return callback(err)
        moveAcrossDevice(src, dest, overwrite, callback)
      })
    } else {
      fs.link(src, dest, err => {
        if (err) {
          if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') {
            return moveAcrossDevice(src, dest, overwrite, callback)
          }
          return callback(err)
        }
        return fs.unlink(src, callback)
      })
    }
  }
}

function moveAcrossDevice (src, dest, overwrite, callback) {
  fs.stat(src, (err, stat) => {
    if (err) return callback(err)

    if (stat.isDirectory()) {
      moveDirAcrossDevice(src, dest, overwrite, callback)
    } else {
      moveFileAcrossDevice(src, dest, overwrite, callback)
    }
  })
}

function moveFileAcrossDevice (src, dest, overwrite, callback) {
  const flags = overwrite ? 'w' : 'wx'
  const ins = fs.createReadStream(src)
  const outs = fs.createWriteStream(dest, { flags })

  ins.on('error', err => {
    ins.destroy()
    outs.destroy()
    outs.removeListener('close', onClose)

    // may want to create a directory but `out` line above
    // creates an empty file for us: See #108
    // don't care about error here
    fs.unlink(dest, () => {
      // note: `err` here is from the input stream errror
      if (err.code === 'EISDIR' || err.code === 'EPERM') {
        moveDirAcrossDevice(src, dest, overwrite, callback)
      } else {
        callback(err)
      }
    })
  })

  outs.on('error', err => {
    ins.destroy()
    outs.destroy()
    outs.removeListener('close', onClose)
    callback(err)
  })

  outs.once('close', onClose)
  ins.pipe(outs)

  function onClose () {
    fs.unlink(src, callback)
  }
}

function moveDirAcrossDevice (src, dest, overwrite, callback) {
  const options = {
    overwrite: false
  }

  if (overwrite) {
    remove(dest, err => {
      if (err) return callback(err)
      startNcp()
    })
  } else {
    startNcp()
  }

  function startNcp () {
    ncp(src, dest, options, err => {
      if (err) return callback(err)
      remove(src, callback)
    })
  }
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename
function isSrcSubdir (src, dest, cb) {
  fs.stat(src, (err, st) => {
    if (err) return cb(err)
    if (st.isDirectory()) {
      const baseDir = dest.split(path.dirname(src) + path.sep)[1]
      if (baseDir) {
        const destBasename = baseDir.split(path.sep)[0]
        if (destBasename) return cb(null, src !== dest && dest.indexOf(src) > -1 && destBasename === path.basename(src))
        return cb(null, false)
      }
      return cb(null, false)
    }
    return cb(null, false)
  })
}

module.exports = {
  move: u(move)
}


/***/ }),

/***/ 646779:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(635961)
const pathExists = __webpack_require__(134791).pathExists

function outputFile (file, data, encoding, callback) {
  if (typeof encoding === 'function') {
    callback = encoding
    encoding = 'utf8'
  }

  const dir = path.dirname(file)
  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return fs.writeFile(file, data, encoding, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)

      fs.writeFile(file, data, encoding, callback)
    })
  })
}

function outputFileSync (file, data, encoding) {
  const dir = path.dirname(file)
  if (fs.existsSync(dir)) {
    return fs.writeFileSync.apply(fs, arguments)
  }
  mkdir.mkdirsSync(dir)
  fs.writeFileSync.apply(fs, arguments)
}

module.exports = {
  outputFile: u(outputFile),
  outputFileSync
}


/***/ }),

/***/ 134791:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const u = __webpack_require__(238981)/* .fromPromise */ .p
const fs = __webpack_require__(391881)

function pathExists (path) {
  return fs.access(path).then(() => true).catch(() => false)
}

module.exports = {
  pathExists: u(pathExists),
  pathExistsSync: fs.existsSync
}


/***/ }),

/***/ 171677:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const rimraf = __webpack_require__(682857)

module.exports = {
  remove: u(rimraf),
  removeSync: rimraf.sync
}


/***/ }),

/***/ 682857:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const assert = __webpack_require__(742357)

const isWindows = (process.platform === 'win32')

function defaults (options) {
  const methods = [
    'unlink',
    'chmod',
    'stat',
    'lstat',
    'rmdir',
    'readdir'
  ]
  methods.forEach(m => {
    options[m] = options[m] || fs[m]
    m = m + 'Sync'
    options[m] = options[m] || fs[m]
  })

  options.maxBusyTries = options.maxBusyTries || 3
}

function rimraf (p, options, cb) {
  let busyTries = 0

  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  assert(p, 'rimraf: missing path')
  assert.equal(typeof p, 'string', 'rimraf: path should be a string')
  assert.equal(typeof cb, 'function', 'rimraf: callback function required')
  assert(options, 'rimraf: invalid options argument provided')
  assert.equal(typeof options, 'object', 'rimraf: options should be object')

  defaults(options)

  rimraf_(p, options, function CB (er) {
    if (er) {
      if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
          busyTries < options.maxBusyTries) {
        busyTries++
        let time = busyTries * 100
        // try again, with the same exact callback as this one.
        return setTimeout(() => rimraf_(p, options, CB), time)
      }

      // already gone
      if (er.code === 'ENOENT') er = null
    }

    cb(er)
  })
}

// Two possible strategies.
// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong.  However, there
// are likely far more normal files in the world than directories.  This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow.  But until then, YAGNI.
function rimraf_ (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  // sunos lets the root user unlink directories, which is... weird.
  // so we have to lstat here and make sure it's not a dir.
  options.lstat(p, (er, st) => {
    if (er && er.code === 'ENOENT') {
      return cb(null)
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er && er.code === 'EPERM' && isWindows) {
      return fixWinEPERM(p, options, er, cb)
    }

    if (st && st.isDirectory()) {
      return rmdir(p, options, er, cb)
    }

    options.unlink(p, er => {
      if (er) {
        if (er.code === 'ENOENT') {
          return cb(null)
        }
        if (er.code === 'EPERM') {
          return (isWindows)
            ? fixWinEPERM(p, options, er, cb)
            : rmdir(p, options, er, cb)
        }
        if (er.code === 'EISDIR') {
          return rmdir(p, options, er, cb)
        }
      }
      return cb(er)
    })
  })
}

function fixWinEPERM (p, options, er, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')
  if (er) {
    assert(er instanceof Error)
  }

  options.chmod(p, 0o666, er2 => {
    if (er2) {
      cb(er2.code === 'ENOENT' ? null : er)
    } else {
      options.stat(p, (er3, stats) => {
        if (er3) {
          cb(er3.code === 'ENOENT' ? null : er)
        } else if (stats.isDirectory()) {
          rmdir(p, options, er, cb)
        } else {
          options.unlink(p, cb)
        }
      })
    }
  })
}

function fixWinEPERMSync (p, options, er) {
  let stats

  assert(p)
  assert(options)
  if (er) {
    assert(er instanceof Error)
  }

  try {
    options.chmodSync(p, 0o666)
  } catch (er2) {
    if (er2.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  try {
    stats = options.statSync(p)
  } catch (er3) {
    if (er3.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  if (stats.isDirectory()) {
    rmdirSync(p, options, er)
  } else {
    options.unlinkSync(p)
  }
}

function rmdir (p, options, originalEr, cb) {
  assert(p)
  assert(options)
  if (originalEr) {
    assert(originalEr instanceof Error)
  }
  assert(typeof cb === 'function')

  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
  // if we guessed wrong, and it's not a directory, then
  // raise the original error.
  options.rmdir(p, er => {
    if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
      rmkids(p, options, cb)
    } else if (er && er.code === 'ENOTDIR') {
      cb(originalEr)
    } else {
      cb(er)
    }
  })
}

function rmkids (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.readdir(p, (er, files) => {
    if (er) return cb(er)

    let n = files.length
    let errState

    if (n === 0) return options.rmdir(p, cb)

    files.forEach(f => {
      rimraf(path.join(p, f), options, er => {
        if (errState) {
          return
        }
        if (er) return cb(errState = er)
        if (--n === 0) {
          options.rmdir(p, cb)
        }
      })
    })
  })
}

// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
  let st

  options = options || {}
  defaults(options)

  assert(p, 'rimraf: missing path')
  assert.equal(typeof p, 'string', 'rimraf: path should be a string')
  assert(options, 'rimraf: missing options')
  assert.equal(typeof options, 'object', 'rimraf: options should be object')

  try {
    st = options.lstatSync(p)
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er.code === 'EPERM' && isWindows) {
      fixWinEPERMSync(p, options, er)
    }
  }

  try {
    // sunos lets the root user unlink directories, which is... weird.
    if (st && st.isDirectory()) {
      rmdirSync(p, options, null)
    } else {
      options.unlinkSync(p)
    }
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    } else if (er.code === 'EPERM') {
      return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
    } else if (er.code !== 'EISDIR') {
      throw er
    }
    rmdirSync(p, options, er)
  }
}

function rmdirSync (p, options, originalEr) {
  assert(p)
  assert(options)
  if (originalEr) {
    assert(originalEr instanceof Error)
  }

  try {
    options.rmdirSync(p)
  } catch (er) {
    if (er.code === 'ENOTDIR') {
      throw originalEr
    } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
      rmkidsSync(p, options)
    } else if (er.code !== 'ENOENT') {
      throw er
    }
  }
}

function rmkidsSync (p, options) {
  assert(p)
  assert(options)
  options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))

  // We only end up here once we got ENOTEMPTY at least once, and
  // at this point, we are guaranteed to have removed all the kids.
  // So, we know that it won't be ENOENT or ENOTDIR or anything else.
  // try really hard to delete stuff on windows, because it has a
  // PROFOUNDLY annoying habit of not closing handles promptly when
  // files are deleted, resulting in spurious ENOTEMPTY errors.
  const retries = isWindows ? 100 : 1
  let i = 0
  do {
    let threw = true
    try {
      const ret = options.rmdirSync(p, options)
      threw = false
      return ret
    } finally {
      if (++i < retries && threw) continue // eslint-disable-line
    }
  } while (true)
}

module.exports = rimraf
rimraf.sync = rimrafSync


/***/ }),

/***/ 41587:
/***/ ((module) => {

"use strict";


// simple mutable assign
function assign () {
  const args = [].slice.call(arguments).filter(i => i)
  const dest = args.shift()
  args.forEach(src => {
    Object.keys(src).forEach(key => {
      dest[key] = src[key]
    })
  })

  return dest
}

module.exports = assign


/***/ }),

/***/ 559744:
/***/ ((module) => {

/* eslint-disable node/no-deprecated-api */
module.exports = function (size) {
  if (typeof Buffer.allocUnsafe === 'function') {
    try {
      return Buffer.allocUnsafe(size)
    } catch (e) {
      return new Buffer(size)
    }
  }
  return new Buffer(size)
}


/***/ }),

/***/ 446004:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const os = __webpack_require__(712087)
const path = __webpack_require__(385622)

// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not
function hasMillisResSync () {
  let tmpfile = path.join('millis-test-sync' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  const d = new Date(1435410243862)
  fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141')
  const fd = fs.openSync(tmpfile, 'r+')
  fs.futimesSync(fd, d, d)
  fs.closeSync(fd)
  return fs.statSync(tmpfile).mtime > 1435410243000
}

function hasMillisRes (callback) {
  let tmpfile = path.join('millis-test' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  const d = new Date(1435410243862)
  fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', err => {
    if (err) return callback(err)
    fs.open(tmpfile, 'r+', (err, fd) => {
      if (err) return callback(err)
      fs.futimes(fd, d, d, err => {
        if (err) return callback(err)
        fs.close(fd, err => {
          if (err) return callback(err)
          fs.stat(tmpfile, (err, stats) => {
            if (err) return callback(err)
            callback(null, stats.mtime > 1435410243000)
          })
        })
      })
    })
  })
}

function timeRemoveMillis (timestamp) {
  if (typeof timestamp === 'number') {
    return Math.floor(timestamp / 1000) * 1000
  } else if (timestamp instanceof Date) {
    return new Date(Math.floor(timestamp.getTime() / 1000) * 1000)
  } else {
    throw new Error('fs-extra: timeRemoveMillis() unknown parameter type')
  }
}

function utimesMillis (path, atime, mtime, callback) {
  // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
  fs.open(path, 'r+', (err, fd) => {
    if (err) return callback(err)
    fs.futimes(fd, atime, mtime, futimesErr => {
      fs.close(fd, closeErr => {
        if (callback) callback(futimesErr || closeErr)
      })
    })
  })
}

module.exports = {
  hasMillisRes,
  hasMillisResSync,
  timeRemoveMillis,
  utimesMillis
}


/***/ }),

/***/ 903503:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const PassThrough = __webpack_require__(92413).PassThrough;

module.exports = opts => {
	opts = Object.assign({}, opts);

	const array = opts.array;
	let encoding = opts.encoding;
	const buffer = encoding === 'buffer';
	let objectMode = false;

	if (array) {
		objectMode = !(encoding || buffer);
	} else {
		encoding = encoding || 'utf8';
	}

	if (buffer) {
		encoding = null;
	}

	let len = 0;
	const ret = [];
	const stream = new PassThrough({objectMode});

	if (encoding) {
		stream.setEncoding(encoding);
	}

	stream.on('data', chunk => {
		ret.push(chunk);

		if (objectMode) {
			len = ret.length;
		} else {
			len += chunk.length;
		}
	});

	stream.getBufferedValue = () => {
		if (array) {
			return ret;
		}

		return buffer ? Buffer.concat(ret, len) : ret.join('');
	};

	stream.getBufferedLength = () => len;

	return stream;
};


/***/ }),

/***/ 666774:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const bufferStream = __webpack_require__(903503);

function getStream(inputStream, opts) {
	if (!inputStream) {
		return Promise.reject(new Error('Expected a stream'));
	}

	opts = Object.assign({maxBuffer: Infinity}, opts);

	const maxBuffer = opts.maxBuffer;
	let stream;
	let clean;

	const p = new Promise((resolve, reject) => {
		const error = err => {
			if (err) { // null check
				err.bufferedData = stream.getBufferedValue();
			}

			reject(err);
		};

		stream = bufferStream(opts);
		inputStream.once('error', error);
		inputStream.pipe(stream);

		stream.on('data', () => {
			if (stream.getBufferedLength() > maxBuffer) {
				reject(new Error('maxBuffer exceeded'));
			}
		});
		stream.once('error', error);
		stream.on('end', resolve);

		clean = () => {
			// some streams doesn't implement the `stream.Readable` interface correctly
			if (inputStream.unpipe) {
				inputStream.unpipe(stream);
			}
		};
	});

	p.then(clean, clean);

	return p.then(() => stream.getBufferedValue());
}

module.exports = getStream;
module.exports.buffer = (stream, opts) => getStream(stream, Object.assign({}, opts, {encoding: 'buffer'}));
module.exports.array = (stream, opts) => getStream(stream, Object.assign({}, opts, {array: true}));


/***/ }),

/***/ 876474:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

module.exports = __webpack_require__(971045)(__webpack_require__(810289)('keccak'))


/***/ }),

/***/ 116907:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

try {
  module.exports = __webpack_require__(876474)
} catch (err) {
  if (process.env.DEBUG) {
    console.error('Keccak bindings are not compiled. Pure JS implementation will be used.')
  }

  module.exports = __webpack_require__(699253)
}


/***/ }),

/***/ 699253:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

module.exports = __webpack_require__(971045)(__webpack_require__(254073))


/***/ }),

/***/ 971045:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const createKeccak = __webpack_require__(916397)
const createShake = __webpack_require__(218173)

module.exports = function (KeccakState) {
  const Keccak = createKeccak(KeccakState)
  const Shake = createShake(KeccakState)

  return function (algorithm, options) {
    const hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
    switch (hash) {
      case 'keccak224': return new Keccak(1152, 448, null, 224, options)
      case 'keccak256': return new Keccak(1088, 512, null, 256, options)
      case 'keccak384': return new Keccak(832, 768, null, 384, options)
      case 'keccak512': return new Keccak(576, 1024, null, 512, options)

      case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
      case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
      case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
      case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)

      case 'shake128': return new Shake(1344, 256, 0x1f, options)
      case 'shake256': return new Shake(1088, 512, 0x1f, options)

      default: throw new Error('Invald algorithm: ' + algorithm)
    }
  }
}


/***/ }),

/***/ 916397:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const Buffer = __webpack_require__(289509).Buffer
const Transform = __webpack_require__(92413).Transform
const inherits = __webpack_require__(394378)

module.exports = function (KeccakState) {
  function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
    Transform.call(this, options)

    this._rate = rate
    this._capacity = capacity
    this._delimitedSuffix = delimitedSuffix
    this._hashBitLength = hashBitLength
    this._options = options

    this._state = new KeccakState()
    this._state.initialize(rate, capacity)
    this._finalized = false
  }

  inherits(Keccak, Transform)

  Keccak.prototype._transform = function (chunk, encoding, callback) {
    let error = null
    try {
      this.update(chunk, encoding)
    } catch (err) {
      error = err
    }

    callback(error)
  }

  Keccak.prototype._flush = function (callback) {
    let error = null
    try {
      this.push(this.digest())
    } catch (err) {
      error = err
    }

    callback(error)
  }

  Keccak.prototype.update = function (data, encoding) {
    if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
    if (this._finalized) throw new Error('Digest already called')
    if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)

    this._state.absorb(data)

    return this
  }

  Keccak.prototype.digest = function (encoding) {
    if (this._finalized) throw new Error('Digest already called')
    this._finalized = true

    if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
    let digest = this._state.squeeze(this._hashBitLength / 8)
    if (encoding !== undefined) digest = digest.toString(encoding)

    this._resetState()

    return digest
  }

  // remove result from memory
  Keccak.prototype._resetState = function () {
    this._state.initialize(this._rate, this._capacity)
    return this
  }

  // because sometimes we need hash right now and little later
  Keccak.prototype._clone = function () {
    const clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
    this._state.copy(clone._state)
    clone._finalized = this._finalized

    return clone
  }

  return Keccak
}


/***/ }),

/***/ 218173:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const Buffer = __webpack_require__(289509).Buffer
const Transform = __webpack_require__(92413).Transform
const inherits = __webpack_require__(394378)

module.exports = function (KeccakState) {
  function Shake (rate, capacity, delimitedSuffix, options) {
    Transform.call(this, options)

    this._rate = rate
    this._capacity = capacity
    this._delimitedSuffix = delimitedSuffix
    this._options = options

    this._state = new KeccakState()
    this._state.initialize(rate, capacity)
    this._finalized = false
  }

  inherits(Shake, Transform)

  Shake.prototype._transform = function (chunk, encoding, callback) {
    let error = null
    try {
      this.update(chunk, encoding)
    } catch (err) {
      error = err
    }

    callback(error)
  }

  Shake.prototype._flush = function () {}

  Shake.prototype._read = function (size) {
    this.push(this.squeeze(size))
  }

  Shake.prototype.update = function (data, encoding) {
    if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
    if (this._finalized) throw new Error('Squeeze already called')
    if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)

    this._state.absorb(data)

    return this
  }

  Shake.prototype.squeeze = function (dataByteLength, encoding) {
    if (!this._finalized) {
      this._finalized = true
      this._state.absorbLastFewBits(this._delimitedSuffix)
    }

    let data = this._state.squeeze(dataByteLength)
    if (encoding !== undefined) data = data.toString(encoding)

    return data
  }

  Shake.prototype._resetState = function () {
    this._state.initialize(this._rate, this._capacity)
    return this
  }

  Shake.prototype._clone = function () {
    const clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
    this._state.copy(clone._state)
    clone._finalized = this._finalized

    return clone
  }

  return Shake
}


/***/ }),

/***/ 697188:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

const P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]

exports.p1600 = function (s) {
  for (let round = 0; round < 24; ++round) {
    // theta
    const lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
    const hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
    const lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
    const hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
    const lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
    const hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
    const lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
    const hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
    const lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
    const hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]

    let lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
    let hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
    const t1slo0 = s[0] ^ lo
    const t1shi0 = s[1] ^ hi
    const t1slo5 = s[10] ^ lo
    const t1shi5 = s[11] ^ hi
    const t1slo10 = s[20] ^ lo
    const t1shi10 = s[21] ^ hi
    const t1slo15 = s[30] ^ lo
    const t1shi15 = s[31] ^ hi
    const t1slo20 = s[40] ^ lo
    const t1shi20 = s[41] ^ hi
    lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
    hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
    const t1slo1 = s[2] ^ lo
    const t1shi1 = s[3] ^ hi
    const t1slo6 = s[12] ^ lo
    const t1shi6 = s[13] ^ hi
    const t1slo11 = s[22] ^ lo
    const t1shi11 = s[23] ^ hi
    const t1slo16 = s[32] ^ lo
    const t1shi16 = s[33] ^ hi
    const t1slo21 = s[42] ^ lo
    const t1shi21 = s[43] ^ hi
    lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
    hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
    const t1slo2 = s[4] ^ lo
    const t1shi2 = s[5] ^ hi
    const t1slo7 = s[14] ^ lo
    const t1shi7 = s[15] ^ hi
    const t1slo12 = s[24] ^ lo
    const t1shi12 = s[25] ^ hi
    const t1slo17 = s[34] ^ lo
    const t1shi17 = s[35] ^ hi
    const t1slo22 = s[44] ^ lo
    const t1shi22 = s[45] ^ hi
    lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
    hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
    const t1slo3 = s[6] ^ lo
    const t1shi3 = s[7] ^ hi
    const t1slo8 = s[16] ^ lo
    const t1shi8 = s[17] ^ hi
    const t1slo13 = s[26] ^ lo
    const t1shi13 = s[27] ^ hi
    const t1slo18 = s[36] ^ lo
    const t1shi18 = s[37] ^ hi
    const t1slo23 = s[46] ^ lo
    const t1shi23 = s[47] ^ hi
    lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
    hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
    const t1slo4 = s[8] ^ lo
    const t1shi4 = s[9] ^ hi
    const t1slo9 = s[18] ^ lo
    const t1shi9 = s[19] ^ hi
    const t1slo14 = s[28] ^ lo
    const t1shi14 = s[29] ^ hi
    const t1slo19 = s[38] ^ lo
    const t1shi19 = s[39] ^ hi
    const t1slo24 = s[48] ^ lo
    const t1shi24 = s[49] ^ hi

    // rho & pi
    const t2slo0 = t1slo0
    const t2shi0 = t1shi0
    const t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
    const t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
    const t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
    const t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
    const t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
    const t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
    const t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
    const t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
    const t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
    const t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
    const t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
    const t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
    const t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
    const t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
    const t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
    const t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
    const t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
    const t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
    const t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
    const t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
    const t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
    const t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
    const t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
    const t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
    const t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
    const t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
    const t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
    const t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
    const t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
    const t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
    const t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
    const t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
    const t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
    const t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
    const t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
    const t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
    const t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
    const t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
    const t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
    const t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
    const t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
    const t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
    const t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
    const t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
    const t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
    const t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
    const t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
    const t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)

    // chi
    s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
    s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
    s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
    s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
    s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
    s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
    s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
    s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
    s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
    s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
    s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
    s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
    s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
    s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
    s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
    s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
    s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
    s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
    s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
    s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
    s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
    s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
    s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
    s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
    s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
    s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
    s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
    s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
    s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
    s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
    s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
    s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
    s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
    s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
    s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
    s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
    s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
    s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
    s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
    s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
    s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
    s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
    s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
    s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
    s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
    s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
    s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
    s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
    s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
    s[49] = t2shi24 ^ (~t2shi20 & t2shi21)

    // iota
    s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
    s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
  }
}


/***/ }),

/***/ 254073:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const Buffer = __webpack_require__(289509).Buffer
const keccakState = __webpack_require__(697188)

function Keccak () {
  // much faster than `new Array(50)`
  this.state = [
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0,
    0, 0, 0, 0, 0
  ]

  this.blockSize = null
  this.count = 0
  this.squeezing = false
}

Keccak.prototype.initialize = function (rate, capacity) {
  for (let i = 0; i < 50; ++i) this.state[i] = 0
  this.blockSize = rate / 8
  this.count = 0
  this.squeezing = false
}

Keccak.prototype.absorb = function (data) {
  for (let i = 0; i < data.length; ++i) {
    this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
    this.count += 1
    if (this.count === this.blockSize) {
      keccakState.p1600(this.state)
      this.count = 0
    }
  }
}

Keccak.prototype.absorbLastFewBits = function (bits) {
  this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
  if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
  this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
  keccakState.p1600(this.state)
  this.count = 0
  this.squeezing = true
}

Keccak.prototype.squeeze = function (length) {
  if (!this.squeezing) this.absorbLastFewBits(0x01)

  const output = Buffer.alloc(length)
  for (var i = 0; i < length; ++i) {
    output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
    this.count += 1
    if (this.count === this.blockSize) {
      keccakState.p1600(this.state)
      this.count = 0
    }
  }

  return output
}

Keccak.prototype.copy = function (dest) {
  for (let i = 0; i < 50; ++i) dest.state[i] = this.state[i]
  dest.blockSize = this.blockSize
  dest.count = this.count
  dest.squeezing = this.squeezing
}

module.exports = Keccak


/***/ }),

/***/ 100852:
/***/ ((module) => {

"use strict";


class CancelError extends Error {
	constructor() {
		super('Promise was canceled');
		this.name = 'CancelError';
	}
}

class PCancelable {
	static fn(fn) {
		return function () {
			const args = [].slice.apply(arguments);
			return new PCancelable((onCancel, resolve, reject) => {
				args.unshift(onCancel);
				fn.apply(null, args).then(resolve, reject);
			});
		};
	}

	constructor(executor) {
		this._pending = true;
		this._canceled = false;

		this._promise = new Promise((resolve, reject) => {
			this._reject = reject;

			return executor(
				fn => {
					this._cancel = fn;
				},
				val => {
					this._pending = false;
					resolve(val);
				},
				err => {
					this._pending = false;
					reject(err);
				}
			);
		});
	}

	then() {
		return this._promise.then.apply(this._promise, arguments);
	}

	catch() {
		return this._promise.catch.apply(this._promise, arguments);
	}

	cancel() {
		if (!this._pending || this._canceled) {
			return;
		}

		if (typeof this._cancel === 'function') {
			try {
				this._cancel();
			} catch (err) {
				this._reject(err);
			}
		}

		this._canceled = true;
		this._reject(new CancelError());
	}

	get canceled() {
		return this._canceled;
	}
}

Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);

module.exports = PCancelable;
module.exports.CancelError = CancelError;


/***/ }),

/***/ 120373:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const pFinally = __webpack_require__(527345);

class TimeoutError extends Error {
	constructor(message) {
		super(message);
		this.name = 'TimeoutError';
	}
}

module.exports = (promise, ms, fallback) => new Promise((resolve, reject) => {
	if (typeof ms !== 'number' || ms < 0) {
		throw new TypeError('Expected `ms` to be a positive number');
	}

	const timer = setTimeout(() => {
		if (typeof fallback === 'function') {
			resolve(fallback());
			return;
		}

		const message = typeof fallback === 'string' ? fallback : `Promise timed out after ${ms} milliseconds`;
		const err = fallback instanceof Error ? fallback : new TimeoutError(message);

		reject(err);
	}, ms);

	pFinally(
		promise.then(resolve, reject),
		() => {
			clearTimeout(timer);
		}
	);
});

module.exports.TimeoutError = TimeoutError;


/***/ }),

/***/ 480009:
/***/ ((module) => {

"use strict";

module.exports = function (url) {
	if (typeof url !== 'string') {
		throw new TypeError('Expected a string, got ' + typeof url);
	}

	url = url.trim();

	if (/^\.*\/|^(?!localhost)\w+:/.test(url)) {
		return url;
	}

	return url.replace(/^(?!(?:\w+:)?\/\/)/, 'http://');
};


/***/ }),

/***/ 13025:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"windows-amd64\":{\"archive\":\"swarm-windows-amd64-1.6.7.exe\",\"binaryMD5\":\"c2d827dc4553d9b91a7d6c1d5a6140fd\",\"archiveMD5\":\"059196d21548060a18a12e17cc0ee59a\"},\"linux-amd64\":{\"archive\":\"swarm-linux-amd64-1.6.7\",\"binaryMD5\":\"85002d79b8ebc2d2f2f10fb198636a81\",\"archiveMD5\":\"3e8874299ab8c0e3043d70ebb6673879\"},\"linux-386\":{\"archive\":\"swarm-linux-386-1.6.7\",\"binaryMD5\":\"35bc2ab976f60f96a2cede117e0df19d\",\"archiveMD5\":\"7868a86c9cbdf8ac7ac2e5682b4ce40f\"},\"darwin-amd64\":{\"archive\":\"swarm-darwin-amd64-1.6.7\",\"binaryMD5\":\"c499b186645229260dd6ab685dd58f07\",\"archiveMD5\":\"0794d111e5018eac3b657bcb29851121\"},\"linux-arm5\":{\"archive\":\"swarm-linux-arm5-1.6.7\",\"binaryMD5\":\"516fcd85246c905529442cd9b689c12f\",\"archiveMD5\":\"47312708d417cb196b07ba0af1d3abb4\"},\"linux-arm6\":{\"archive\":\"swarm-linux-arm6-1.6.7\",\"binaryMD5\":\"82ff7bdbe388b4a190f4101c5150d3b4\",\"archiveMD5\":\"350276de7bb175a15c314cfc4cb7f8fd\"},\"linux-mips\":{\"archive\":\"swarm-linux-mips-1.6.7\",\"binaryMD5\":\"e1e95280441c0ca35633927792ef5317\",\"archiveMD5\":\"8fb4b64e94cd73aa718db787b9d4c53e\"},\"linux-arm7\":{\"archive\":\"swarm-linux-arm7-1.6.7\",\"binaryMD5\":\"bfc0b4d1c86d8a975af052fc7854bdd3\",\"archiveMD5\":\"4378641d8e1e1fbb947f941c8fca8613\"},\"linux-arm64\":{\"archive\":\"swarm-linux-arm64-1.6.7\",\"binaryMD5\":\"bbac21a6c6fa8208f67ca4123d3f948a\",\"archiveMD5\":\"4e503160327c5fbcca0414f17c54e5ee\"},\"linux-mipsle\":{\"archive\":\"swarm-linux-mipsle-1.6.7\",\"binaryMD5\":\"a82f191b2f9d2c470d0273219c820657\",\"archiveMD5\":\"3016bdb6d237ae654c0cdf36fe85dc7c\"},\"windows-386\":{\"archive\":\"swarm-windows-386-1.6.7.exe\",\"binaryMD5\":\"ce0b34640642e58068ae5a359faef102\",\"archiveMD5\":\"640aede4da08a3a9d8a6ac0434ba7c0f\"},\"linux-mips64\":{\"archive\":\"swarm-linux-mips64-1.6.7\",\"binaryMD5\":\"9da967664f384817adb5083fd1ffe8f1\",\"archiveMD5\":\"357a33be470f8f89ba2619957a08deff\"},\"linux-mips64le\":{\"archive\":\"swarm-linux-mips64le-1.6.7\",\"binaryMD5\":\"ec1abcf7b216e87645ec83954d8344cd\",\"archiveMD5\":\"a81fd0158190d99813c738ffa4f87627\"}}");

/***/ }),

/***/ 892378:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var fs = __webpack_require__(956507);

var files = __webpack_require__(57845);

var os = __webpack_require__(712087);

var path = __webpack_require__(385622);

var child_process = __webpack_require__(63129);

var mimetype = __webpack_require__(580983);

var defaultArchives = __webpack_require__(13025);

var requester = __webpack_require__(254736);

var downloadUrl = "http://ethereum-mist.s3.amazonaws.com/swarm/";

var bytes = __webpack_require__(944041);

var hash = __webpack_require__(64441);

var pick = __webpack_require__(564244);

var swarm = __webpack_require__(294554); // Fixes issue that causes xhr-request-promise on Node.js to only accept Buffer


var request = function request(url, params) {
  var newParams = {};

  for (var key in params) {
    newParams[key] = params[key];
  }

  if (typeof newParams.body !== "undefined") {
    newParams.body = newParams.body instanceof Buffer ? newParams.body : new Buffer(newParams.body);
  }

  return requester(url, newParams);
};

module.exports = swarm({
  fs: fs,
  files: files,
  os: os,
  path: path,
  child_process: child_process,
  defaultArchives: defaultArchives,
  mimetype: mimetype,
  request: request,
  downloadUrl: downloadUrl,
  bytes: bytes,
  hash: hash,
  pick: pick
});

/***/ }),

/***/ 57845:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// This module implements some file download utils. Its most important export
// is `safeDownloadTargzFile`, which, given a file, its md5, a tar.gz url, its
// md5 and a path, returns a Promise that will only resolve once the exact file
// you expect is available on that path.
var Q = __webpack_require__(93786);

var assert = __webpack_require__(742357);

var crypto = __webpack_require__(676417);

var fs = __webpack_require__(956507);

var got = __webpack_require__(986193);

var mkdirp = __webpack_require__(828762);

var path = __webpack_require__(385622);

var tar = __webpack_require__(97998); // String -> String ~> Promise String
//   Downloads a file from an url to a path.
//   Returns a promise containing the path.


var download = function download(url) {
  return function (filePath) {
    var promise = Q.resolve(mkdirp(path.dirname(filePath))).then(function () {
      return new Q(function (resolve, reject) {
        var writeStream = fs.createWriteStream(filePath);
        var downloadStream = got.stream(url);
        downloadStream.on("end", function () {
          return resolve(filePath);
        });
        downloadStream.on("data", function (chunk) {
          return promise.onDataCallback(chunk);
        });
        downloadStream.on("error", reject);
        downloadStream.pipe(writeStream);
      });
    });

    promise.onDataCallback = function () {};

    promise.onData = function (callback) {
      promise.onDataCallback = callback || function () {};

      return promise;
    };

    return promise;
  };
}; // String -> String ~> Promise String
//   Hashes a file using the given algorithm (ex: "md5").
//   Returns a promise containing the hashed string.


var hash = function hash(algorithm) {
  return function (path) {
    return new Q(function (resolve, reject) {
      var readStream = fs.ReadStream(path);
      var hash = crypto.createHash(algorithm);
      readStream.on("data", function (d) {
        return hash.update(d);
      });
      readStream.on("end", function () {
        return resolve(hash.digest("hex"));
      });
      readStream.on("error", reject);
    });
  };
}; // String -> String ~> Promise ()
//   Asserts a file matches this md5 hash.
//   Returns a promise containing its path.


var checksum = function checksum(fileHash) {
  return function (path) {
    return hash("md5")(path).then(function (actualHash) {
      return actualHash === fileHash;
    }).then(assert).then(function () {
      return path;
    });
  };
}; // String ~> String ~> String ~> Promise String
//   Downloads a file to a directory, check.
//   Checks if the md5 hash matches.
//   Returns a promise containing the path.


var downloadAndCheck = function downloadAndCheck(url) {
  return function (path) {
    return function (fileHash) {
      return download(url)(path).then(checksum(fileHash));
    };
  };
}; // String -> String ~> Promise String
//   TODO: work for zip and other types


var extract = function extract(fromPath) {
  return function (toPath) {
    return tar.x(fromPath, toPath).then(function () {
      return toPath;
    });
  };
}; // String ~> Promise String
//   Reads a file as an UTF8 string.
//   Returns a promise containing that string.


var readUTF8 = function readUTF8(path) {
  return fs.readFile(path, {
    encoding: "utf8"
  });
}; // String ~> Promise Bool


var isDirectory = function isDirectory(path) {
  return fs.exists(path).then(assert).then(function () {
    return fs.lstat(path);
  }).then(function (stats) {
    return stats.isDirectory();
  }).catch(function () {
    return false;
  });
}; // String -> Promise String


var directoryTree = function directoryTree(dirPath) {
  var paths = [];

  var search = function search(dirPath) {
    return isDirectory(dirPath).then(function (isDir) {
      if (isDir) {
        var searchOnDir = function searchOnDir(dir) {
          return search(path.join(dirPath, dir));
        };

        return Q.all(Q.map(fs.readdir(dirPath), searchOnDir));
      } else {
        paths.push(dirPath);
      }

      ;
    });
  };

  return Q.all(search(dirPath)).then(function () {
    return paths;
  });
}; // Regex -> String ~> Promise (Array String)


var search = function search(regex) {
  return function (dirPath) {
    return directoryTree(dirPath).then(function (tree) {
      return tree.filter(function (path) {
        return regex.test(path);
      });
    });
  };
}; // String -> String -> String -> String ~> Promise String
//   Downloads a file inside a tar.gz and places it at `filePath`.
//   Checks the md5 hash of the tar before extracting it.
//   Checks the md5 hash of the file after extracting it.
//   If all is OK, returns a promise containing the file path.


var safeDownloadArchived = function safeDownloadArchived(url) {
  return function (archiveHash) {
    return function (fileHash) {
      return function (filePath) {
        var fileDir = path.dirname(filePath);
        var fileName = path.basename(filePath);
        var archivePath = path.join(fileDir, ".swarm_downloads/files.tar.gz");
        var archiveDir = path.dirname(archivePath);
        var promise = Q.resolve(mkdirp(archiveDir)).then(function () {
          return checksum(fileHash)(filePath);
        }).then(function () {
          return filePath;
        }).catch(function () {
          return fs.exists(archiveDir).then(function (exists) {
            return !exists ? fs.mkdir(archiveDir) : null;
          }).then(function () {
            return download(url)(archivePath).onData(promise.onDataCallback);
          }).then(function () {
            return hash("md5")(archivePath);
          }).then(function () {
            return archiveHash ? checksum(archiveHash)(archivePath) : null;
          }).then(function () {
            return extract(archivePath)(archiveDir);
          }).then(function () {
            return search(new RegExp(fileName + "$"))(archiveDir);
          }).then(function (fp) {
            return fs.rename(fp[0], filePath);
          }).then(function () {
            return fs.unlink(archivePath);
          }).then(function () {
            return fileHash ? checksum(fileHash)(filePath) : null;
          }).then(function () {
            return filePath;
          });
        });

        promise.onDataCallback = function () {};

        promise.onData = function (callback) {
          promise.onDataCallback = callback || function () {};

          return promise;
        };

        return promise;
      };
    };
  };
}; // String -> String ~> Promise String
//   Like `safeDownloadArchivedFile`, but without the checksums.


var downloadArchived = function downloadArchived(url) {
  return function (path) {
    return safeDownloadArchived(url)(null)(null)(path);
  };
}; // () => Promise Bool
//   Tests the implementation by downloading a predetermined tar.gz
//   from a mocked HTTP-server into a mocked filesystem. Does some
//   redundancy tests such as checking the file constents and double
//   checking its MD5 hash.
//   Returns a promise containing a boolean, true if tests passed.


var test = function test() {
  var filePath = "/swarm/foo.txt";
  var fileHash = "d3b07384d113edec49eaa6238ad5ff00";
  var archiveUrl = "http://localhost:12534";
  var archiveHash = "7fa45f946bb2a696bdd9972e0fbceac2";
  var archiveData = new Buffer([0x1f, 0x8b, 0x08, 0x00, 0xf1, 0x34, 0xaf, 0x58, 0x00, 0x03, 0xed, 0xcf, 0x3d, 0x0e, 0x83, 0x30, 0x0c, 0x86, 0x61, 0x66, 0x4e, 0xe1, 0x13, 0x54, 0xce, 0x0f, 0xc9, 0x79, 0x58, 0xb2, 0x46, 0x82, 0x14, 0x71, 0x7c, 0xd2, 0x06, 0x31, 0x52, 0x75, 0x40, 0x08, 0xe9, 0x7d, 0x96, 0x4f, 0x96, 0x3d, 0x7c, 0x4e, 0x39, 0xbf, 0xca, 0x5a, 0xba, 0x2b, 0xa9, 0x6a, 0xf0, 0x5e, 0x3e, 0x19, 0xc3, 0xf0, 0x4d, 0xb5, 0x6d, 0xde, 0x79, 0x31, 0x4e, 0x07, 0x17, 0x9c, 0xb5, 0x31, 0x8a, 0x1a, 0xab, 0xc6, 0x77, 0xa2, 0x97, 0xb6, 0xda, 0xbd, 0xe7, 0x32, 0x4e, 0xb5, 0xca, 0xf2, 0xe3, 0xae, 0x9e, 0xa5, 0x74, 0xb2, 0x6f, 0x8f, 0xc8, 0x91, 0x0f, 0x91, 0x72, 0xee, 0xef, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xdf, 0x06, 0xb3, 0x2a, 0xda, 0xed, 0x00, 0x28, 0x00, 0x00]);

  var crypto = __webpack_require__(676417);

  var fsMock = __webpack_require__(174910)({
    "/swarm": {}
  });

  var httpMock = __webpack_require__(298605).createServer(function (_, res) {
    return res.end(archiveData);
  }).listen(12534);

  return safeDownloadArchived(archiveUrl)(archiveHash)(fileHash)(filePath).then(checksum(fileHash)).then(readUTF8).then(function (text) {
    return text === "foo\n";
  }).then(assert).then(function () {
    return safeDownloadArchived(archiveUrl)(archiveHash)(fileHash)(filePath);
  }).then(function () {
    return true;
  }).catch(false).finally(function () {
    return httpMock.close();
  });
};

module.exports = {
  download: download,
  hash: hash,
  checksum: checksum,
  downloadAndCheck: downloadAndCheck,
  extract: extract,
  readUTF8: readUTF8,
  safeDownloadArchived: safeDownloadArchived,
  directoryTree: directoryTree,
  downloadArchived: downloadArchived,
  search: search,
  test: test
};

/***/ }),

/***/ 564244:
/***/ ((module) => {

var picker = function picker(type) {
  return function () {
    return new Promise(function (resolve, reject) {
      var fileLoader = function fileLoader(e) {
        var directory = {};
        var totalFiles = e.target.files.length;
        var loadedFiles = 0;
        [].map.call(e.target.files, function (file) {
          var reader = new FileReader();

          reader.onload = function (e) {
            var data = new Uint8Array(e.target.result);

            if (type === "directory") {
              var path = file.webkitRelativePath;
              directory[path.slice(path.indexOf("/") + 1)] = {
                type: "text/plain",
                data: data
              };
              if (++loadedFiles === totalFiles) resolve(directory);
            } else if (type === "file") {
              var _path = file.webkitRelativePath;
              resolve({
                "type": mimetype.lookup(_path),
                "data": data
              });
            } else {
              resolve(data);
            }
          };

          reader.readAsArrayBuffer(file);
        });
      };

      var fileInput;

      if (type === "directory") {
        fileInput = document.createElement("input");
        fileInput.addEventListener("change", fileLoader);
        fileInput.type = "file";
        fileInput.webkitdirectory = true;
        fileInput.mozdirectory = true;
        fileInput.msdirectory = true;
        fileInput.odirectory = true;
        fileInput.directory = true;
      } else {
        fileInput = document.createElement("input");
        fileInput.addEventListener("change", fileLoader);
        fileInput.type = "file";
      }

      ;
      var mouseEvent = document.createEvent("MouseEvents");
      mouseEvent.initEvent("click", true, false);
      fileInput.dispatchEvent(mouseEvent);
    });
  };
};

module.exports = {
  data: picker("data"),
  file: picker("file"),
  directory: picker("directory")
};

/***/ }),

/***/ 64441:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// Thanks https://github.com/axic/swarmhash
var keccak = __webpack_require__(105085).keccak256;

var Bytes = __webpack_require__(944041);

var swarmHashBlock = function swarmHashBlock(length, data) {
  var lengthEncoded = Bytes.reverse(Bytes.pad(6, Bytes.fromNumber(length)));
  var bytes = Bytes.flatten([lengthEncoded, "0x0000", data]);
  return keccak(bytes).slice(2);
}; // (Bytes | Uint8Array | String) -> String


var swarmHash = function swarmHash(data) {
  if (typeof data === "string" && data.slice(0, 2) !== "0x") {
    data = Bytes.fromString(data);
  } else if (typeof data !== "string" && data.length !== undefined) {
    data = Bytes.fromUint8Array(data);
  }

  var length = Bytes.length(data);

  if (length <= 4096) {
    return swarmHashBlock(length, data);
  }

  var maxSize = 4096;

  while (maxSize * (4096 / 32) < length) {
    maxSize *= 4096 / 32;
  }

  var innerNodes = [];

  for (var i = 0; i < length; i += maxSize) {
    var size = maxSize < length - i ? maxSize : length - i;
    innerNodes.push(swarmHash(Bytes.slice(data, i, i + size)));
  }

  return swarmHashBlock(length, Bytes.flatten(innerNodes));
};

module.exports = swarmHash;

/***/ }),

/***/ 294554:
/***/ ((module) => {

// TODO: this is a temporary fix to hide those libraries from the browser. A
// slightly better long-term solution would be to split this file into two,
// separating the functions that are used on Node.js from the functions that
// are used only on the browser.
module.exports = function (_ref) {
  var fs = _ref.fs,
      files = _ref.files,
      os = _ref.os,
      path = _ref.path,
      child_process = _ref.child_process,
      mimetype = _ref.mimetype,
      defaultArchives = _ref.defaultArchives,
      request = _ref.request,
      downloadUrl = _ref.downloadUrl,
      bytes = _ref.bytes,
      hash = _ref.hash,
      pick = _ref.pick;

  // ∀ a . String -> JSON -> Map String a -o Map String a
  //   Inserts a key/val pair in an object impurely.
  var impureInsert = function impureInsert(key) {
    return function (val) {
      return function (map) {
        return map[key] = val, map;
      };
    };
  }; // String -> JSON -> Map String JSON
  //   Merges an array of keys and an array of vals into an object.


  var toMap = function toMap(keys) {
    return function (vals) {
      var map = {};

      for (var i = 0, l = keys.length; i < l; ++i) {
        map[keys[i]] = vals[i];
      }

      return map;
    };
  }; // ∀ a . Map String a -> Map String a -> Map String a
  //   Merges two maps into one.


  var merge = function merge(a) {
    return function (b) {
      var map = {};

      for (var key in a) {
        map[key] = a[key];
      }

      for (var _key in b) {
        map[_key] = b[_key];
      }

      return map;
    };
  }; // ∀ a . [a] -> [a] -> Bool


  var equals = function equals(a) {
    return function (b) {
      if (a.length !== b.length) {
        return false;
      } else {
        for (var i = 0, l = a.length; i < l; ++i) {
          if (a[i] !== b[i]) return false;
        }
      }

      return true;
    };
  }; // String -> String -> String


  var rawUrl = function rawUrl(swarmUrl) {
    return function (hash) {
      return "".concat(swarmUrl, "/bzzr:/").concat(hash);
    };
  }; // String -> String -> Promise Uint8Array
  //   Gets the raw contents of a Swarm hash address.


  var downloadData = function downloadData(swarmUrl) {
    return function (hash) {
      return request(rawUrl(swarmUrl)(hash), {
        responseType: "arraybuffer"
      }).then(function (arrayBuffer) {
        var uint8Array = new Uint8Array(arrayBuffer);
        var error404 = [52, 48, 52, 32, 112, 97, 103, 101, 32, 110, 111, 116, 32, 102, 111, 117, 110, 100, 10];
        if (equals(uint8Array)(error404)) throw "Error 404.";
        return uint8Array;
      });
    };
  }; // type Entry = {"type": String, "hash": String}
  // type File = {"type": String, "data": Uint8Array}
  // String -> String -> Promise (Map String Entry)
  //   Solves the manifest of a Swarm address recursively.
  //   Returns a map from full paths to entries.


  var downloadEntries = function downloadEntries(swarmUrl) {
    return function (hash) {
      var search = function search(hash) {
        return function (path) {
          return function (routes) {
            // Formats an entry to the Swarm.js type.
            var format = function format(entry) {
              return {
                type: entry.contentType,
                hash: entry.hash
              };
            }; // To download a single entry:
            //   if type is bzz-manifest, go deeper
            //   if not, add it to the routing table


            var downloadEntry = function downloadEntry(entry) {
              if (entry.path === undefined) {
                return Promise.resolve();
              } else {
                return entry.contentType === "application/bzz-manifest+json" ? search(entry.hash)(path + entry.path)(routes) : Promise.resolve(impureInsert(path + entry.path)(format(entry))(routes));
              }
            }; // Downloads the initial manifest and then each entry.


            return downloadData(swarmUrl)(hash).then(function (text) {
              return JSON.parse(toString(text)).entries;
            }).then(function (entries) {
              return Promise.all(entries.map(downloadEntry));
            }).then(function () {
              return routes;
            });
          };
        };
      };

      return search(hash)("")({});
    };
  }; // String -> String -> Promise (Map String String)
  //   Same as `downloadEntries`, but returns only hashes (no types).


  var downloadRoutes = function downloadRoutes(swarmUrl) {
    return function (hash) {
      return downloadEntries(swarmUrl)(hash).then(function (entries) {
        return toMap(Object.keys(entries))(Object.keys(entries).map(function (route) {
          return entries[route].hash;
        }));
      });
    };
  }; // String -> String -> Promise (Map String File)
  //   Gets the entire directory tree in a Swarm address.
  //   Returns a promise mapping paths to file contents.


  var downloadDirectory = function downloadDirectory(swarmUrl) {
    return function (hash) {
      return downloadEntries(swarmUrl)(hash).then(function (entries) {
        var paths = Object.keys(entries);
        var hashs = paths.map(function (path) {
          return entries[path].hash;
        });
        var types = paths.map(function (path) {
          return entries[path].type;
        });
        var datas = hashs.map(downloadData(swarmUrl));

        var files = function files(datas) {
          return datas.map(function (data, i) {
            return {
              type: types[i],
              data: data
            };
          });
        };

        return Promise.all(datas).then(function (datas) {
          return toMap(paths)(files(datas));
        });
      });
    };
  }; // String -> String -> String -> Promise String
  //   Gets the raw contents of a Swarm hash address.
  //   Returns a promise with the downloaded file path.


  var downloadDataToDisk = function downloadDataToDisk(swarmUrl) {
    return function (hash) {
      return function (filePath) {
        return files.download(rawUrl(swarmUrl)(hash))(filePath);
      };
    };
  }; // String -> String -> String -> Promise (Map String String)
  //   Gets the entire directory tree in a Swarm address.
  //   Returns a promise mapping paths to file contents.


  var downloadDirectoryToDisk = function downloadDirectoryToDisk(swarmUrl) {
    return function (hash) {
      return function (dirPath) {
        return downloadRoutes(swarmUrl)(hash).then(function (routingTable) {
          var downloads = [];

          for (var route in routingTable) {
            if (route.length > 0) {
              var filePath = path.join(dirPath, route);
              downloads.push(downloadDataToDisk(swarmUrl)(routingTable[route])(filePath));
            }

            ;
          }

          ;
          return Promise.all(downloads).then(function () {
            return dirPath;
          });
        });
      };
    };
  }; // String -> Uint8Array -> Promise String
  //   Uploads raw data to Swarm.
  //   Returns a promise with the uploaded hash.


  var uploadData = function uploadData(swarmUrl) {
    return function (data) {
      return request("".concat(swarmUrl, "/bzzr:/"), {
        body: typeof data === "string" ? fromString(data) : data,
        method: "POST"
      });
    };
  }; // String -> String -> String -> File -> Promise String
  //   Uploads a file to the Swarm manifest at a given hash, under a specific
  //   route. Returns a promise containing the uploaded hash.
  //   FIXME: for some reasons Swarm-Gateways is sometimes returning
  //   error 404 (bad request), so we retry up to 3 times. Why?


  var uploadToManifest = function uploadToManifest(swarmUrl) {
    return function (hash) {
      return function (route) {
        return function (file) {
          var attempt = function attempt(n) {
            var slashRoute = route[0] === "/" ? route : "/" + route;
            var url = "".concat(swarmUrl, "/bzz:/").concat(hash).concat(slashRoute);
            var opt = {
              method: "PUT",
              headers: {
                "Content-Type": file.type
              },
              body: file.data
            };
            return request(url, opt).then(function (response) {
              if (response.indexOf("error") !== -1) {
                throw response;
              }

              return response;
            }).catch(function (e) {
              return n > 0 && attempt(n - 1);
            });
          };

          return attempt(3);
        };
      };
    };
  }; // String -> {type: String, data: Uint8Array} -> Promise String


  var uploadFile = function uploadFile(swarmUrl) {
    return function (file) {
      return uploadDirectory(swarmUrl)({
        "": file
      });
    };
  }; // String -> String -> Promise String


  var uploadFileFromDisk = function uploadFileFromDisk(swarmUrl) {
    return function (filePath) {
      return fs.readFile(filePath).then(function (data) {
        return uploadFile(swarmUrl)({
          type: mimetype.lookup(filePath),
          data: data
        });
      });
    };
  }; // String -> Map String File -> Promise String
  //   Uploads a directory to Swarm. The directory is
  //   represented as a map of routes and files.
  //   A default path is encoded by having a "" route.


  var uploadDirectory = function uploadDirectory(swarmUrl) {
    return function (directory) {
      return uploadData(swarmUrl)("{}").then(function (hash) {
        var uploadRoute = function uploadRoute(route) {
          return function (hash) {
            return uploadToManifest(swarmUrl)(hash)(route)(directory[route]);
          };
        };

        var uploadToHash = function uploadToHash(hash, route) {
          return hash.then(uploadRoute(route));
        };

        return Object.keys(directory).reduce(uploadToHash, Promise.resolve(hash));
      });
    };
  }; // String -> Promise String


  var uploadDataFromDisk = function uploadDataFromDisk(swarmUrl) {
    return function (filePath) {
      return fs.readFile(filePath).then(uploadData(swarmUrl));
    };
  }; // String -> Nullable String -> String -> Promise String


  var uploadDirectoryFromDisk = function uploadDirectoryFromDisk(swarmUrl) {
    return function (defaultPath) {
      return function (dirPath) {
        return files.directoryTree(dirPath).then(function (fullPaths) {
          return Promise.all(fullPaths.map(function (path) {
            return fs.readFile(path);
          })).then(function (datas) {
            var paths = fullPaths.map(function (path) {
              return path.slice(dirPath.length);
            });
            var types = fullPaths.map(function (path) {
              return mimetype.lookup(path) || "text/plain";
            });
            return toMap(paths)(datas.map(function (data, i) {
              return {
                type: types[i],
                data: data
              };
            }));
          });
        }).then(function (directory) {
          return merge(defaultPath ? {
            "": directory[defaultPath]
          } : {})(directory);
        }).then(uploadDirectory(swarmUrl));
      };
    };
  }; // String -> UploadInfo -> Promise String
  //   Simplified multi-type upload which calls the correct
  //   one based on the type of the argument given.


  var _upload = function upload(swarmUrl) {
    return function (arg) {
      // Upload raw data from browser
      if (arg.pick === "data") {
        return pick.data().then(uploadData(swarmUrl)); // Upload a file from browser
      } else if (arg.pick === "file") {
        return pick.file().then(uploadFile(swarmUrl)); // Upload a directory from browser
      } else if (arg.pick === "directory") {
        return pick.directory().then(uploadDirectory(swarmUrl)); // Upload directory/file from disk
      } else if (arg.path) {
        switch (arg.kind) {
          case "data":
            return uploadDataFromDisk(swarmUrl)(arg.path);

          case "file":
            return uploadFileFromDisk(swarmUrl)(arg.path);

          case "directory":
            return uploadDirectoryFromDisk(swarmUrl)(arg.defaultFile)(arg.path);
        }

        ; // Upload UTF-8 string or raw data (buffer)
      } else if (arg.length || typeof arg === "string") {
        return uploadData(swarmUrl)(arg); // Upload directory with JSON
      } else if (arg instanceof Object) {
        return uploadDirectory(swarmUrl)(arg);
      }

      return Promise.reject(new Error("Bad arguments"));
    };
  }; // String -> String -> Nullable String -> Promise (String | Uint8Array | Map String Uint8Array)
  //   Simplified multi-type download which calls the correct function based on
  //   the type of the argument given, and on whether the Swwarm address has a
  //   directory or a file.


  var _download = function download(swarmUrl) {
    return function (hash) {
      return function (path) {
        return isDirectory(swarmUrl)(hash).then(function (isDir) {
          if (isDir) {
            return path ? downloadDirectoryToDisk(swarmUrl)(hash)(path) : downloadDirectory(swarmUrl)(hash);
          } else {
            return path ? downloadDataToDisk(swarmUrl)(hash)(path) : downloadData(swarmUrl)(hash);
          }
        });
      };
    };
  }; // String -> Promise String
  //   Downloads the Swarm binaries into a path. Returns a promise that only
  //   resolves when the exact Swarm file is there, and verified to be correct.
  //   If it was already there to begin with, skips the download.


  var downloadBinary = function downloadBinary(path, archives) {
    var system = os.platform().replace("win32", "windows") + "-" + (os.arch() === "x64" ? "amd64" : "386");
    var archive = (archives || defaultArchives)[system];
    var archiveUrl = downloadUrl + archive.archive + ".tar.gz";
    var archiveMD5 = archive.archiveMD5;
    var binaryMD5 = archive.binaryMD5;
    return files.safeDownloadArchived(archiveUrl)(archiveMD5)(binaryMD5)(path);
  }; // type SwarmSetup = {
  //   account : String,
  //   password : String,
  //   dataDir : String,
  //   binPath : String,
  //   ensApi : String,
  //   onDownloadProgress : Number ~> (),
  //   archives : [{
  //     archive: String,
  //     binaryMD5: String,
  //     archiveMD5: String
  //   }]
  // }
  // SwarmSetup ~> Promise Process
  //   Starts the Swarm process.


  var startProcess = function startProcess(swarmSetup) {
    return new Promise(function (resolve, reject) {
      var spawn = child_process.spawn;

      var hasString = function hasString(str) {
        return function (buffer) {
          return ('' + buffer).indexOf(str) !== -1;
        };
      };

      var account = swarmSetup.account,
          password = swarmSetup.password,
          dataDir = swarmSetup.dataDir,
          ensApi = swarmSetup.ensApi,
          privateKey = swarmSetup.privateKey;
      var STARTUP_TIMEOUT_SECS = 3;
      var WAITING_PASSWORD = 0;
      var STARTING = 1;
      var LISTENING = 2;
      var PASSWORD_PROMPT_HOOK = "Passphrase";
      var LISTENING_HOOK = "Swarm http proxy started";
      var state = WAITING_PASSWORD;
      var swarmProcess = spawn(swarmSetup.binPath, ['--bzzaccount', account || privateKey, '--datadir', dataDir, '--ens-api', ensApi]);

      var handleProcessOutput = function handleProcessOutput(data) {
        if (state === WAITING_PASSWORD && hasString(PASSWORD_PROMPT_HOOK)(data)) {
          setTimeout(function () {
            state = STARTING;
            swarmProcess.stdin.write(password + '\n');
          }, 500);
        } else if (hasString(LISTENING_HOOK)(data)) {
          state = LISTENING;
          clearTimeout(timeout);
          resolve(swarmProcess);
        }
      };

      swarmProcess.stdout.on('data', handleProcessOutput);
      swarmProcess.stderr.on('data', handleProcessOutput); //swarmProcess.on('close', () => setTimeout(restart, 2000));

      var restart = function restart() {
        return startProcess(swarmSetup).then(resolve).catch(reject);
      };

      var error = function error() {
        return reject(new Error("Couldn't start swarm process."));
      };

      var timeout = setTimeout(error, 20000);
    });
  }; // Process ~> Promise ()
  //   Stops the Swarm process.


  var stopProcess = function stopProcess(process) {
    return new Promise(function (resolve, reject) {
      process.stderr.removeAllListeners('data');
      process.stdout.removeAllListeners('data');
      process.stdin.removeAllListeners('error');
      process.removeAllListeners('error');
      process.removeAllListeners('exit');
      process.kill('SIGINT');
      var killTimeout = setTimeout(function () {
        return process.kill('SIGKILL');
      }, 8000);
      process.once('close', function () {
        clearTimeout(killTimeout);
        resolve();
      });
    });
  }; // SwarmSetup -> (SwarmAPI -> Promise ()) -> Promise ()
  //   Receives a Swarm configuration object and a callback function. It then
  //   checks if a local Swarm node is running. If no local Swarm is found, it
  //   downloads the Swarm binaries to the dataDir (if not there), checksums,
  //   starts the Swarm process and calls the callback function with an API
  //   object using the local node. That callback must return a promise which
  //   will resolve when it is done using the API, so that this function can
  //   close the Swarm process properly. Returns a promise that resolves when the
  //   user is done with the API and the Swarm process is closed.
  //   TODO: check if Swarm process is already running (improve `isAvailable`)


  var local = function local(swarmSetup) {
    return function (useAPI) {
      return _isAvailable("http://localhost:8500").then(function (isAvailable) {
        return isAvailable ? useAPI(at("http://localhost:8500")).then(function () {}) : downloadBinary(swarmSetup.binPath, swarmSetup.archives).onData(function (data) {
          return (swarmSetup.onProgress || function () {})(data.length);
        }).then(function () {
          return startProcess(swarmSetup);
        }).then(function (process) {
          return useAPI(at("http://localhost:8500")).then(function () {
            return process;
          });
        }).then(stopProcess);
      });
    };
  }; // String ~> Promise Bool
  //   Returns true if Swarm is available on `url`.
  //   Perfoms a test upload to determine that.
  //   TODO: improve this?


  var _isAvailable = function isAvailable(swarmUrl) {
    var testFile = "test";
    var testHash = "c9a99c7d326dcc6316f32fe2625b311f6dc49a175e6877681ded93137d3569e7";
    return uploadData(swarmUrl)(testFile).then(function (hash) {
      return hash === testHash;
    }).catch(function () {
      return false;
    });
  }; // String -> String ~> Promise Bool
  //   Returns a Promise which is true if that Swarm address is a directory.
  //   Determines that by checking that it (i) is a JSON, (ii) has a .entries.
  //   TODO: improve this?


  var isDirectory = function isDirectory(swarmUrl) {
    return function (hash) {
      return downloadData(swarmUrl)(hash).then(function (data) {
        try {
          return !!JSON.parse(toString(data)).entries;
        } catch (e) {
          return false;
        }
      });
    };
  }; // Uncurries a function; used to allow the f(x,y,z) style on exports.


  var uncurry = function uncurry(f) {
    return function (a, b, c, d, e) {
      var p; // Hardcoded because efficiency (`arguments` is very slow).

      if (typeof a !== "undefined") p = f(a);
      if (typeof b !== "undefined") p = f(b);
      if (typeof c !== "undefined") p = f(c);
      if (typeof d !== "undefined") p = f(d);
      if (typeof e !== "undefined") p = f(e);
      return p;
    };
  }; // () -> Promise Bool
  //   Not sure how to mock Swarm to test it properly. Ideas?


  var test = function test() {
    return Promise.resolve(true);
  }; // Uint8Array -> String


  var toString = function toString(uint8Array) {
    return bytes.toString(bytes.fromUint8Array(uint8Array));
  }; // String -> Uint8Array


  var fromString = function fromString(string) {
    return bytes.toUint8Array(bytes.fromString(string));
  }; // String -> SwarmAPI
  //   Fixes the `swarmUrl`, returning an API where you don't have to pass it.


  var at = function at(swarmUrl) {
    return {
      download: function download(hash, path) {
        return _download(swarmUrl)(hash)(path);
      },
      downloadData: uncurry(downloadData(swarmUrl)),
      downloadDataToDisk: uncurry(downloadDataToDisk(swarmUrl)),
      downloadDirectory: uncurry(downloadDirectory(swarmUrl)),
      downloadDirectoryToDisk: uncurry(downloadDirectoryToDisk(swarmUrl)),
      downloadEntries: uncurry(downloadEntries(swarmUrl)),
      downloadRoutes: uncurry(downloadRoutes(swarmUrl)),
      isAvailable: function isAvailable() {
        return _isAvailable(swarmUrl);
      },
      upload: function upload(arg) {
        return _upload(swarmUrl)(arg);
      },
      uploadData: uncurry(uploadData(swarmUrl)),
      uploadFile: uncurry(uploadFile(swarmUrl)),
      uploadFileFromDisk: uncurry(uploadFile(swarmUrl)),
      uploadDataFromDisk: uncurry(uploadDataFromDisk(swarmUrl)),
      uploadDirectory: uncurry(uploadDirectory(swarmUrl)),
      uploadDirectoryFromDisk: uncurry(uploadDirectoryFromDisk(swarmUrl)),
      uploadToManifest: uncurry(uploadToManifest(swarmUrl)),
      pick: pick,
      hash: hash,
      fromString: fromString,
      toString: toString
    };
  };

  return {
    at: at,
    local: local,
    download: _download,
    downloadBinary: downloadBinary,
    downloadData: downloadData,
    downloadDataToDisk: downloadDataToDisk,
    downloadDirectory: downloadDirectory,
    downloadDirectoryToDisk: downloadDirectoryToDisk,
    downloadEntries: downloadEntries,
    downloadRoutes: downloadRoutes,
    isAvailable: _isAvailable,
    startProcess: startProcess,
    stopProcess: stopProcess,
    upload: _upload,
    uploadData: uploadData,
    uploadDataFromDisk: uploadDataFromDisk,
    uploadFile: uploadFile,
    uploadFileFromDisk: uploadFileFromDisk,
    uploadDirectory: uploadDirectory,
    uploadDirectoryFromDisk: uploadDirectoryFromDisk,
    uploadToManifest: uploadToManifest,
    pick: pick,
    hash: hash,
    fromString: fromString,
    toString: toString
  };
};

/***/ }),

/***/ 556955:
/***/ ((module) => {

var generate = function generate(num, fn) {
  var a = [];
  for (var i = 0; i < num; ++i) {
    a.push(fn(i));
  }return a;
};

var replicate = function replicate(num, val) {
  return generate(num, function () {
    return val;
  });
};

var concat = function concat(a, b) {
  return a.concat(b);
};

var flatten = function flatten(a) {
  var r = [];
  for (var j = 0, J = a.length; j < J; ++j) {
    for (var i = 0, I = a[j].length; i < I; ++i) {
      r.push(a[j][i]);
    }
  }return r;
};

var chunksOf = function chunksOf(n, a) {
  var b = [];
  for (var i = 0, l = a.length; i < l; i += n) {
    b.push(a.slice(i, i + n));
  }return b;
};

module.exports = {
  generate: generate,
  replicate: replicate,
  concat: concat,
  flatten: flatten,
  chunksOf: chunksOf
};

/***/ }),

/***/ 944041:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var A = __webpack_require__(556955);

var at = function at(bytes, index) {
  return parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16);
};

var random = function random(bytes) {
  var rnd = void 0;
  if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (true) rnd = __webpack_require__(676417).randomBytes(bytes);else {}
  var hex = "0x";
  for (var i = 0; i < bytes; ++i) {
    hex += ("00" + rnd[i].toString(16)).slice(-2);
  }return hex;
};

var length = function length(a) {
  return (a.length - 2) / 2;
};

var flatten = function flatten(a) {
  return "0x" + a.reduce(function (r, s) {
    return r + s.slice(2);
  }, "");
};

var slice = function slice(i, j, bs) {
  return "0x" + bs.slice(i * 2 + 2, j * 2 + 2);
};

var reverse = function reverse(hex) {
  var rev = "0x";
  for (var i = 0, l = length(hex); i < l; ++i) {
    rev += hex.slice((l - i) * 2, (l - i + 1) * 2);
  }
  return rev;
};

var pad = function pad(l, hex) {
  return hex.length === l * 2 + 2 ? hex : pad(l, "0x" + "0" + hex.slice(2));
};

var padRight = function padRight(l, hex) {
  return hex.length === l * 2 + 2 ? hex : padRight(l, hex + "0");
};

var toArray = function toArray(hex) {
  var arr = [];
  for (var i = 2, l = hex.length; i < l; i += 2) {
    arr.push(parseInt(hex.slice(i, i + 2), 16));
  }return arr;
};

var fromArray = function fromArray(arr) {
  var hex = "0x";
  for (var i = 0, l = arr.length; i < l; ++i) {
    var b = arr[i];
    hex += (b < 16 ? "0" : "") + b.toString(16);
  }
  return hex;
};

var toUint8Array = function toUint8Array(hex) {
  return new Uint8Array(toArray(hex));
};

var fromUint8Array = function fromUint8Array(arr) {
  return fromArray([].slice.call(arr, 0));
};

var fromNumber = function fromNumber(num) {
  var hex = num.toString(16);
  return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex;
};

var toNumber = function toNumber(hex) {
  return parseInt(hex.slice(2), 16);
};

var concat = function concat(a, b) {
  return a.concat(b.slice(2));
};

var fromNat = function fromNat(bn) {
  return bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2);
};

var toNat = function toNat(bn) {
  return bn[2] === "0" ? "0x" + bn.slice(3) : bn;
};

var fromAscii = function fromAscii(ascii) {
  var hex = "0x";
  for (var i = 0; i < ascii.length; ++i) {
    hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2);
  }return hex;
};

var toAscii = function toAscii(hex) {
  var ascii = "";
  for (var i = 2; i < hex.length; i += 2) {
    ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16));
  }return ascii;
};

// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330
var fromString = function fromString(s) {
  var makeByte = function makeByte(uint8) {
    var b = uint8.toString(16);
    return b.length < 2 ? "0" + b : b;
  };
  var bytes = "0x";
  for (var ci = 0; ci != s.length; ci++) {
    var c = s.charCodeAt(ci);
    if (c < 128) {
      bytes += makeByte(c);
      continue;
    }
    if (c < 2048) {
      bytes += makeByte(c >> 6 | 192);
    } else {
      if (c > 0xd7ff && c < 0xdc00) {
        if (++ci == s.length) return null;
        var c2 = s.charCodeAt(ci);
        if (c2 < 0xdc00 || c2 > 0xdfff) return null;
        c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);
        bytes += makeByte(c >> 18 | 240);
        bytes += makeByte(c >> 12 & 63 | 128);
      } else {
        // c <= 0xffff
        bytes += makeByte(c >> 12 | 224);
      }
      bytes += makeByte(c >> 6 & 63 | 128);
    }
    bytes += makeByte(c & 63 | 128);
  }
  return bytes;
};

var toString = function toString(bytes) {
  var s = '';
  var i = 0;
  var l = length(bytes);
  while (i < l) {
    var c = at(bytes, i++);
    if (c > 127) {
      if (c > 191 && c < 224) {
        if (i >= l) return null;
        c = (c & 31) << 6 | at(bytes, i) & 63;
      } else if (c > 223 && c < 240) {
        if (i + 1 >= l) return null;
        c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63;
      } else if (c > 239 && c < 248) {
        if (i + 2 >= l) return null;
        c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63;
      } else return null;
      ++i;
    }
    if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) {
      c -= 0x10000;
      s += String.fromCharCode(c >> 10 | 0xd800);
      s += String.fromCharCode(c & 0x3FF | 0xdc00);
    } else return null;
  }
  return s;
};

module.exports = {
  random: random,
  length: length,
  concat: concat,
  flatten: flatten,
  slice: slice,
  reverse: reverse,
  pad: pad,
  padRight: padRight,
  fromAscii: fromAscii,
  toAscii: toAscii,
  fromString: fromString,
  toString: toString,
  fromNumber: fromNumber,
  toNumber: toNumber,
  fromNat: fromNat,
  toNat: toNat,
  fromArray: fromArray,
  toArray: toArray,
  fromUint8Array: fromUint8Array,
  toUint8Array: toUint8Array
};

/***/ }),

/***/ 105085:
/***/ ((module) => {

// This was ported from https://github.com/emn178/js-sha3, with some minor
// modifications and pruning. It is licensed under MIT:
//
// Copyright 2015-2016 Chen, Yi-Cyuan
//  
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

var HEX_CHARS = '0123456789abcdef'.split('');
var KECCAK_PADDING = [1, 256, 65536, 16777216];
var SHIFT = [0, 8, 16, 24];
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];

var Keccak = function Keccak(bits) {
  return {
    blocks: [],
    reset: true,
    block: 0,
    start: 0,
    blockCount: 1600 - (bits << 1) >> 5,
    outputBlocks: bits >> 5,
    s: function (s) {
      return [].concat(s, s, s, s, s);
    }([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  };
};

var update = function update(state, message) {
  var length = message.length,
      blocks = state.blocks,
      byteCount = state.blockCount << 2,
      blockCount = state.blockCount,
      outputBlocks = state.outputBlocks,
      s = state.s,
      index = 0,
      i,
      code;

  // update
  while (index < length) {
    if (state.reset) {
      state.reset = false;
      blocks[0] = state.block;
      for (i = 1; i < blockCount + 1; ++i) {
        blocks[i] = 0;
      }
    }
    if (typeof message !== "string") {
      for (i = state.start; index < length && i < byteCount; ++index) {
        blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
      }
    } else {
      for (i = state.start; index < length && i < byteCount; ++index) {
        code = message.charCodeAt(index);
        if (code < 0x80) {
          blocks[i >> 2] |= code << SHIFT[i++ & 3];
        } else if (code < 0x800) {
          blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        } else if (code < 0xd800 || code >= 0xe000) {
          blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        } else {
          code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);
          blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        }
      }
    }
    state.lastByteIndex = i;
    if (i >= byteCount) {
      state.start = i - byteCount;
      state.block = blocks[blockCount];
      for (i = 0; i < blockCount; ++i) {
        s[i] ^= blocks[i];
      }
      f(s);
      state.reset = true;
    } else {
      state.start = i;
    }
  }

  // finalize
  i = state.lastByteIndex;
  blocks[i >> 2] |= KECCAK_PADDING[i & 3];
  if (state.lastByteIndex === byteCount) {
    blocks[0] = blocks[blockCount];
    for (i = 1; i < blockCount + 1; ++i) {
      blocks[i] = 0;
    }
  }
  blocks[blockCount - 1] |= 0x80000000;
  for (i = 0; i < blockCount; ++i) {
    s[i] ^= blocks[i];
  }
  f(s);

  // toString
  var hex = '',
      i = 0,
      j = 0,
      block;
  while (j < outputBlocks) {
    for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
      block = s[i];
      hex += HEX_CHARS[block >> 4 & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[block >> 12 & 0x0F] + HEX_CHARS[block >> 8 & 0x0F] + HEX_CHARS[block >> 20 & 0x0F] + HEX_CHARS[block >> 16 & 0x0F] + HEX_CHARS[block >> 28 & 0x0F] + HEX_CHARS[block >> 24 & 0x0F];
    }
    if (j % blockCount === 0) {
      f(s);
      i = 0;
    }
  }
  return "0x" + hex;
};

var f = function f(s) {
  var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;

  for (n = 0; n < 48; n += 2) {
    c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
    c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
    c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
    c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
    c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
    c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
    c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
    c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
    c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
    c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];

    h = c8 ^ (c2 << 1 | c3 >>> 31);
    l = c9 ^ (c3 << 1 | c2 >>> 31);
    s[0] ^= h;
    s[1] ^= l;
    s[10] ^= h;
    s[11] ^= l;
    s[20] ^= h;
    s[21] ^= l;
    s[30] ^= h;
    s[31] ^= l;
    s[40] ^= h;
    s[41] ^= l;
    h = c0 ^ (c4 << 1 | c5 >>> 31);
    l = c1 ^ (c5 << 1 | c4 >>> 31);
    s[2] ^= h;
    s[3] ^= l;
    s[12] ^= h;
    s[13] ^= l;
    s[22] ^= h;
    s[23] ^= l;
    s[32] ^= h;
    s[33] ^= l;
    s[42] ^= h;
    s[43] ^= l;
    h = c2 ^ (c6 << 1 | c7 >>> 31);
    l = c3 ^ (c7 << 1 | c6 >>> 31);
    s[4] ^= h;
    s[5] ^= l;
    s[14] ^= h;
    s[15] ^= l;
    s[24] ^= h;
    s[25] ^= l;
    s[34] ^= h;
    s[35] ^= l;
    s[44] ^= h;
    s[45] ^= l;
    h = c4 ^ (c8 << 1 | c9 >>> 31);
    l = c5 ^ (c9 << 1 | c8 >>> 31);
    s[6] ^= h;
    s[7] ^= l;
    s[16] ^= h;
    s[17] ^= l;
    s[26] ^= h;
    s[27] ^= l;
    s[36] ^= h;
    s[37] ^= l;
    s[46] ^= h;
    s[47] ^= l;
    h = c6 ^ (c0 << 1 | c1 >>> 31);
    l = c7 ^ (c1 << 1 | c0 >>> 31);
    s[8] ^= h;
    s[9] ^= l;
    s[18] ^= h;
    s[19] ^= l;
    s[28] ^= h;
    s[29] ^= l;
    s[38] ^= h;
    s[39] ^= l;
    s[48] ^= h;
    s[49] ^= l;

    b0 = s[0];
    b1 = s[1];
    b32 = s[11] << 4 | s[10] >>> 28;
    b33 = s[10] << 4 | s[11] >>> 28;
    b14 = s[20] << 3 | s[21] >>> 29;
    b15 = s[21] << 3 | s[20] >>> 29;
    b46 = s[31] << 9 | s[30] >>> 23;
    b47 = s[30] << 9 | s[31] >>> 23;
    b28 = s[40] << 18 | s[41] >>> 14;
    b29 = s[41] << 18 | s[40] >>> 14;
    b20 = s[2] << 1 | s[3] >>> 31;
    b21 = s[3] << 1 | s[2] >>> 31;
    b2 = s[13] << 12 | s[12] >>> 20;
    b3 = s[12] << 12 | s[13] >>> 20;
    b34 = s[22] << 10 | s[23] >>> 22;
    b35 = s[23] << 10 | s[22] >>> 22;
    b16 = s[33] << 13 | s[32] >>> 19;
    b17 = s[32] << 13 | s[33] >>> 19;
    b48 = s[42] << 2 | s[43] >>> 30;
    b49 = s[43] << 2 | s[42] >>> 30;
    b40 = s[5] << 30 | s[4] >>> 2;
    b41 = s[4] << 30 | s[5] >>> 2;
    b22 = s[14] << 6 | s[15] >>> 26;
    b23 = s[15] << 6 | s[14] >>> 26;
    b4 = s[25] << 11 | s[24] >>> 21;
    b5 = s[24] << 11 | s[25] >>> 21;
    b36 = s[34] << 15 | s[35] >>> 17;
    b37 = s[35] << 15 | s[34] >>> 17;
    b18 = s[45] << 29 | s[44] >>> 3;
    b19 = s[44] << 29 | s[45] >>> 3;
    b10 = s[6] << 28 | s[7] >>> 4;
    b11 = s[7] << 28 | s[6] >>> 4;
    b42 = s[17] << 23 | s[16] >>> 9;
    b43 = s[16] << 23 | s[17] >>> 9;
    b24 = s[26] << 25 | s[27] >>> 7;
    b25 = s[27] << 25 | s[26] >>> 7;
    b6 = s[36] << 21 | s[37] >>> 11;
    b7 = s[37] << 21 | s[36] >>> 11;
    b38 = s[47] << 24 | s[46] >>> 8;
    b39 = s[46] << 24 | s[47] >>> 8;
    b30 = s[8] << 27 | s[9] >>> 5;
    b31 = s[9] << 27 | s[8] >>> 5;
    b12 = s[18] << 20 | s[19] >>> 12;
    b13 = s[19] << 20 | s[18] >>> 12;
    b44 = s[29] << 7 | s[28] >>> 25;
    b45 = s[28] << 7 | s[29] >>> 25;
    b26 = s[38] << 8 | s[39] >>> 24;
    b27 = s[39] << 8 | s[38] >>> 24;
    b8 = s[48] << 14 | s[49] >>> 18;
    b9 = s[49] << 14 | s[48] >>> 18;

    s[0] = b0 ^ ~b2 & b4;
    s[1] = b1 ^ ~b3 & b5;
    s[10] = b10 ^ ~b12 & b14;
    s[11] = b11 ^ ~b13 & b15;
    s[20] = b20 ^ ~b22 & b24;
    s[21] = b21 ^ ~b23 & b25;
    s[30] = b30 ^ ~b32 & b34;
    s[31] = b31 ^ ~b33 & b35;
    s[40] = b40 ^ ~b42 & b44;
    s[41] = b41 ^ ~b43 & b45;
    s[2] = b2 ^ ~b4 & b6;
    s[3] = b3 ^ ~b5 & b7;
    s[12] = b12 ^ ~b14 & b16;
    s[13] = b13 ^ ~b15 & b17;
    s[22] = b22 ^ ~b24 & b26;
    s[23] = b23 ^ ~b25 & b27;
    s[32] = b32 ^ ~b34 & b36;
    s[33] = b33 ^ ~b35 & b37;
    s[42] = b42 ^ ~b44 & b46;
    s[43] = b43 ^ ~b45 & b47;
    s[4] = b4 ^ ~b6 & b8;
    s[5] = b5 ^ ~b7 & b9;
    s[14] = b14 ^ ~b16 & b18;
    s[15] = b15 ^ ~b17 & b19;
    s[24] = b24 ^ ~b26 & b28;
    s[25] = b25 ^ ~b27 & b29;
    s[34] = b34 ^ ~b36 & b38;
    s[35] = b35 ^ ~b37 & b39;
    s[44] = b44 ^ ~b46 & b48;
    s[45] = b45 ^ ~b47 & b49;
    s[6] = b6 ^ ~b8 & b0;
    s[7] = b7 ^ ~b9 & b1;
    s[16] = b16 ^ ~b18 & b10;
    s[17] = b17 ^ ~b19 & b11;
    s[26] = b26 ^ ~b28 & b20;
    s[27] = b27 ^ ~b29 & b21;
    s[36] = b36 ^ ~b38 & b30;
    s[37] = b37 ^ ~b39 & b31;
    s[46] = b46 ^ ~b48 & b40;
    s[47] = b47 ^ ~b49 & b41;
    s[8] = b8 ^ ~b0 & b2;
    s[9] = b9 ^ ~b1 & b3;
    s[18] = b18 ^ ~b10 & b12;
    s[19] = b19 ^ ~b11 & b13;
    s[28] = b28 ^ ~b20 & b22;
    s[29] = b29 ^ ~b21 & b23;
    s[38] = b38 ^ ~b30 & b32;
    s[39] = b39 ^ ~b31 & b33;
    s[48] = b48 ^ ~b40 & b42;
    s[49] = b49 ^ ~b41 & b43;

    s[0] ^= RC[n];
    s[1] ^= RC[n + 1];
  }
};

var keccak = function keccak(bits) {
  return function (str) {
    var msg;
    if (str.slice(0, 2) === "0x") {
      msg = [];
      for (var i = 2, l = str.length; i < l; i += 2) {
        msg.push(parseInt(str.slice(i, i + 2), 16));
      }
    } else {
      msg = str;
    }
    return update(Keccak(bits, bits), msg);
  };
};

module.exports = {
  keccak256: keccak(256),
  keccak512: keccak(512),
  keccak256s: keccak(256),
  keccak512s: keccak(512)
};

/***/ }),

/***/ 986193:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const EventEmitter = __webpack_require__(128614);
const http = __webpack_require__(298605);
const https = __webpack_require__(957211);
const PassThrough = __webpack_require__(92413).PassThrough;
const urlLib = __webpack_require__(978835);
const querystring = __webpack_require__(571191);
const duplexer3 = __webpack_require__(408869);
const isStream = __webpack_require__(924970);
const getStream = __webpack_require__(666774);
const timedOut = __webpack_require__(631708);
const urlParseLax = __webpack_require__(407855);
const urlToOptions = __webpack_require__(884438);
const lowercaseKeys = __webpack_require__(825989);
const decompressResponse = __webpack_require__(610346);
const isRetryAllowed = __webpack_require__(829367);
const Buffer = __webpack_require__(289509).Buffer;
const isURL = __webpack_require__(643589);
const isPlainObj = __webpack_require__(733310);
const PCancelable = __webpack_require__(100852);
const pTimeout = __webpack_require__(120373);
const pkg = __webpack_require__(399094);

const getMethodRedirectCodes = new Set([300, 301, 302, 303, 304, 305, 307, 308]);
const allMethodRedirectCodes = new Set([300, 303, 307, 308]);

function requestAsEventEmitter(opts) {
	opts = opts || {};

	const ee = new EventEmitter();
	const requestUrl = opts.href || urlLib.resolve(urlLib.format(opts), opts.path);
	const redirects = [];
	let retryCount = 0;
	let redirectUrl;

	const get = opts => {
		if (opts.protocol !== 'http:' && opts.protocol !== 'https:') {
			ee.emit('error', new got.UnsupportedProtocolError(opts));
			return;
		}

		let fn = opts.protocol === 'https:' ? https : http;

		if (opts.useElectronNet && process.versions.electron) {
			const electron = __webpack_require__(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'electron'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
			fn = electron.net || electron.remote.net;
		}

		const req = fn.request(opts, res => {
			const statusCode = res.statusCode;

			res.url = redirectUrl || requestUrl;
			res.requestUrl = requestUrl;

			const followRedirect = opts.followRedirect && 'location' in res.headers;
			const redirectGet = followRedirect && getMethodRedirectCodes.has(statusCode);
			const redirectAll = followRedirect && allMethodRedirectCodes.has(statusCode);

			if (redirectAll || (redirectGet && (opts.method === 'GET' || opts.method === 'HEAD'))) {
				res.resume();

				if (statusCode === 303) {
					// Server responded with "see other", indicating that the resource exists at another location,
					// and the client should request it from that location via GET or HEAD.
					opts.method = 'GET';
				}

				if (redirects.length >= 10) {
					ee.emit('error', new got.MaxRedirectsError(statusCode, redirects, opts), null, res);
					return;
				}

				const bufferString = Buffer.from(res.headers.location, 'binary').toString();

				redirectUrl = urlLib.resolve(urlLib.format(opts), bufferString);

				redirects.push(redirectUrl);

				const redirectOpts = Object.assign({}, opts, urlLib.parse(redirectUrl));

				ee.emit('redirect', res, redirectOpts);

				get(redirectOpts);

				return;
			}

			setImmediate(() => {
				const response = opts.decompress === true &&
					typeof decompressResponse === 'function' &&
					req.method !== 'HEAD' ? decompressResponse(res) : res;

				if (!opts.decompress && ['gzip', 'deflate'].indexOf(res.headers['content-encoding']) !== -1) {
					opts.encoding = null;
				}

				response.redirectUrls = redirects;

				ee.emit('response', response);
			});
		});

		req.once('error', err => {
			const backoff = opts.retries(++retryCount, err);

			if (backoff) {
				setTimeout(get, backoff, opts);
				return;
			}

			ee.emit('error', new got.RequestError(err, opts));
		});

		if (opts.gotTimeout) {
			timedOut(req, opts.gotTimeout);
		}

		setImmediate(() => {
			ee.emit('request', req);
		});
	};

	setImmediate(() => {
		get(opts);
	});
	return ee;
}

function asPromise(opts) {
	const timeoutFn = requestPromise => opts.gotTimeout && opts.gotTimeout.request ?
		pTimeout(requestPromise, opts.gotTimeout.request, new got.RequestError({message: 'Request timed out', code: 'ETIMEDOUT'}, opts)) :
		requestPromise;

	return timeoutFn(new PCancelable((onCancel, resolve, reject) => {
		const ee = requestAsEventEmitter(opts);
		let cancelOnRequest = false;

		onCancel(() => {
			cancelOnRequest = true;
		});

		ee.on('request', req => {
			if (cancelOnRequest) {
				req.abort();
			}

			onCancel(() => {
				req.abort();
			});

			if (isStream(opts.body)) {
				opts.body.pipe(req);
				opts.body = undefined;
				return;
			}

			req.end(opts.body);
		});

		ee.on('response', res => {
			const stream = opts.encoding === null ? getStream.buffer(res) : getStream(res, opts);

			stream
				.catch(err => reject(new got.ReadError(err, opts)))
				.then(data => {
					const statusCode = res.statusCode;
					const limitStatusCode = opts.followRedirect ? 299 : 399;

					res.body = data;

					if (opts.json && res.body) {
						try {
							res.body = JSON.parse(res.body);
						} catch (e) {
							if (statusCode >= 200 && statusCode < 300) {
								throw new got.ParseError(e, statusCode, opts, data);
							}
						}
					}

					if (statusCode !== 304 && (statusCode < 200 || statusCode > limitStatusCode)) {
						throw new got.HTTPError(statusCode, res.headers, opts);
					}

					resolve(res);
				})
				.catch(err => {
					Object.defineProperty(err, 'response', {value: res});
					reject(err);
				});
		});

		ee.on('error', reject);
	}));
}

function asStream(opts) {
	const input = new PassThrough();
	const output = new PassThrough();
	const proxy = duplexer3(input, output);
	let timeout;

	if (opts.gotTimeout && opts.gotTimeout.request) {
		timeout = setTimeout(() => {
			proxy.emit('error', new got.RequestError({message: 'Request timed out', code: 'ETIMEDOUT'}, opts));
		}, opts.gotTimeout.request);
	}

	if (opts.json) {
		throw new Error('got can not be used as stream when options.json is used');
	}

	if (opts.body) {
		proxy.write = () => {
			throw new Error('got\'s stream is not writable when options.body is used');
		};
	}

	const ee = requestAsEventEmitter(opts);

	ee.on('request', req => {
		proxy.emit('request', req);

		if (isStream(opts.body)) {
			opts.body.pipe(req);
			return;
		}

		if (opts.body) {
			req.end(opts.body);
			return;
		}

		if (opts.method === 'POST' || opts.method === 'PUT' || opts.method === 'PATCH') {
			input.pipe(req);
			return;
		}

		req.end();
	});

	ee.on('response', res => {
		clearTimeout(timeout);

		const statusCode = res.statusCode;

		res.pipe(output);

		if (statusCode !== 304 && (statusCode < 200 || statusCode > 299)) {
			proxy.emit('error', new got.HTTPError(statusCode, res.headers, opts), null, res);
			return;
		}

		proxy.emit('response', res);
	});

	ee.on('redirect', proxy.emit.bind(proxy, 'redirect'));
	ee.on('error', proxy.emit.bind(proxy, 'error'));

	return proxy;
}

function normalizeArguments(url, opts) {
	if (typeof url !== 'string' && typeof url !== 'object') {
		throw new TypeError(`Parameter \`url\` must be a string or object, not ${typeof url}`);
	} else if (typeof url === 'string') {
		url = url.replace(/^unix:/, 'http://$&');
		url = urlParseLax(url);
	} else if (isURL.lenient(url)) {
		url = urlToOptions(url);
	}

	if (url.auth) {
		throw new Error('Basic authentication must be done with auth option');
	}

	opts = Object.assign(
		{
			path: '',
			retries: 2,
			decompress: true,
			useElectronNet: true
		},
		url,
		{
			protocol: url.protocol || 'http:' // Override both null/undefined with default protocol
		},
		opts
	);

	opts.headers = Object.assign({
		'user-agent': `${pkg.name}/${pkg.version} (https://github.com/sindresorhus/got)`,
		'accept-encoding': 'gzip,deflate'
	}, lowercaseKeys(opts.headers));

	const query = opts.query;

	if (query) {
		if (typeof query !== 'string') {
			opts.query = querystring.stringify(query);
		}

		opts.path = `${opts.path.split('?')[0]}?${opts.query}`;
		delete opts.query;
	}

	if (opts.json && opts.headers.accept === undefined) {
		opts.headers.accept = 'application/json';
	}

	const body = opts.body;
	if (body !== null && body !== undefined) {
		const headers = opts.headers;
		if (!isStream(body) && typeof body !== 'string' && !Buffer.isBuffer(body) && !(opts.form || opts.json)) {
			throw new TypeError('options.body must be a ReadableStream, string, Buffer or plain Object');
		}

		const canBodyBeStringified = isPlainObj(body) || Array.isArray(body);
		if ((opts.form || opts.json) && !canBodyBeStringified) {
			throw new TypeError('options.body must be a plain Object or Array when options.form or options.json is used');
		}

		if (isStream(body) && typeof body.getBoundary === 'function') {
			// Special case for https://github.com/form-data/form-data
			headers['content-type'] = headers['content-type'] || `multipart/form-data; boundary=${body.getBoundary()}`;
		} else if (opts.form && canBodyBeStringified) {
			headers['content-type'] = headers['content-type'] || 'application/x-www-form-urlencoded';
			opts.body = querystring.stringify(body);
		} else if (opts.json && canBodyBeStringified) {
			headers['content-type'] = headers['content-type'] || 'application/json';
			opts.body = JSON.stringify(body);
		}

		if (headers['content-length'] === undefined && headers['transfer-encoding'] === undefined && !isStream(body)) {
			const length = typeof opts.body === 'string' ? Buffer.byteLength(opts.body) : opts.body.length;
			headers['content-length'] = length;
		}

		opts.method = (opts.method || 'POST').toUpperCase();
	} else {
		opts.method = (opts.method || 'GET').toUpperCase();
	}

	if (opts.hostname === 'unix') {
		const matches = /(.+?):(.+)/.exec(opts.path);

		if (matches) {
			opts.socketPath = matches[1];
			opts.path = matches[2];
			opts.host = null;
		}
	}

	if (typeof opts.retries !== 'function') {
		const retries = opts.retries;

		opts.retries = (iter, err) => {
			if (iter > retries || !isRetryAllowed(err)) {
				return 0;
			}

			const noise = Math.random() * 100;

			return ((1 << iter) * 1000) + noise;
		};
	}

	if (opts.followRedirect === undefined) {
		opts.followRedirect = true;
	}

	if (opts.timeout) {
		if (typeof opts.timeout === 'number') {
			opts.gotTimeout = {request: opts.timeout};
		} else {
			opts.gotTimeout = opts.timeout;
		}
		delete opts.timeout;
	}

	return opts;
}

function got(url, opts) {
	try {
		return asPromise(normalizeArguments(url, opts));
	} catch (err) {
		return Promise.reject(err);
	}
}

got.stream = (url, opts) => asStream(normalizeArguments(url, opts));

const methods = [
	'get',
	'post',
	'put',
	'patch',
	'head',
	'delete'
];

for (const method of methods) {
	got[method] = (url, opts) => got(url, Object.assign({}, opts, {method}));
	got.stream[method] = (url, opts) => got.stream(url, Object.assign({}, opts, {method}));
}

class StdError extends Error {
	constructor(message, error, opts) {
		super(message);
		this.name = 'StdError';

		if (error.code !== undefined) {
			this.code = error.code;
		}

		Object.assign(this, {
			host: opts.host,
			hostname: opts.hostname,
			method: opts.method,
			path: opts.path,
			protocol: opts.protocol,
			url: opts.href
		});
	}
}

got.RequestError = class extends StdError {
	constructor(error, opts) {
		super(error.message, error, opts);
		this.name = 'RequestError';
	}
};

got.ReadError = class extends StdError {
	constructor(error, opts) {
		super(error.message, error, opts);
		this.name = 'ReadError';
	}
};

got.ParseError = class extends StdError {
	constructor(error, statusCode, opts, data) {
		super(`${error.message} in "${urlLib.format(opts)}": \n${data.slice(0, 77)}...`, error, opts);
		this.name = 'ParseError';
		this.statusCode = statusCode;
		this.statusMessage = http.STATUS_CODES[this.statusCode];
	}
};

got.HTTPError = class extends StdError {
	constructor(statusCode, headers, opts) {
		const statusMessage = http.STATUS_CODES[statusCode];
		super(`Response code ${statusCode} (${statusMessage})`, {}, opts);
		this.name = 'HTTPError';
		this.statusCode = statusCode;
		this.statusMessage = statusMessage;
		this.headers = headers;
	}
};

got.MaxRedirectsError = class extends StdError {
	constructor(statusCode, redirectUrls, opts) {
		super('Redirected 10 times. Aborting.', {}, opts);
		this.name = 'MaxRedirectsError';
		this.statusCode = statusCode;
		this.statusMessage = http.STATUS_CODES[this.statusCode];
		this.redirectUrls = redirectUrls;
	}
};

got.UnsupportedProtocolError = class extends StdError {
	constructor(opts) {
		super(`Unsupported protocol "${opts.protocol}"`, {}, opts);
		this.name = 'UnsupportedProtocolError';
	}
};

module.exports = got;


/***/ }),

/***/ 399094:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"name\":\"got\",\"version\":\"7.1.0\",\"description\":\"Simplified HTTP requests\",\"license\":\"MIT\",\"repository\":\"sindresorhus/got\",\"maintainers\":[{\"name\":\"Sindre Sorhus\",\"email\":\"sindresorhus@gmail.com\",\"url\":\"sindresorhus.com\"},{\"name\":\"Vsevolod Strukchinsky\",\"email\":\"floatdrop@gmail.com\",\"url\":\"github.com/floatdrop\"},{\"name\":\"Alexander Tesfamichael\",\"email\":\"alex.tesfamichael@gmail.com\",\"url\":\"alextes.me\"}],\"engines\":{\"node\":\">=4\"},\"scripts\":{\"test\":\"xo && nyc ava\",\"coveralls\":\"nyc report --reporter=text-lcov | coveralls\"},\"files\":[\"index.js\"],\"keywords\":[\"http\",\"https\",\"get\",\"got\",\"url\",\"uri\",\"request\",\"util\",\"utility\",\"simple\",\"curl\",\"wget\",\"fetch\",\"net\",\"network\",\"electron\"],\"dependencies\":{\"decompress-response\":\"^3.2.0\",\"duplexer3\":\"^0.1.4\",\"get-stream\":\"^3.0.0\",\"is-plain-obj\":\"^1.1.0\",\"is-retry-allowed\":\"^1.0.0\",\"is-stream\":\"^1.0.0\",\"isurl\":\"^1.0.0-alpha5\",\"lowercase-keys\":\"^1.0.0\",\"p-cancelable\":\"^0.3.0\",\"p-timeout\":\"^1.1.1\",\"safe-buffer\":\"^5.0.1\",\"timed-out\":\"^4.0.0\",\"url-parse-lax\":\"^1.0.0\",\"url-to-options\":\"^1.0.1\"},\"devDependencies\":{\"ava\":\"^0.20.0\",\"coveralls\":\"^2.11.4\",\"form-data\":\"^2.1.1\",\"get-port\":\"^3.0.0\",\"into-stream\":\"^3.0.0\",\"nyc\":\"^11.0.2\",\"pem\":\"^1.4.4\",\"pify\":\"^3.0.0\",\"tempfile\":\"^2.0.0\",\"tempy\":\"^0.1.0\",\"universal-url\":\"^1.0.0-alpha\",\"xo\":\"^0.18.0\"},\"ava\":{\"concurrency\":4},\"browser\":{\"decompress-response\":false}}");

/***/ }),

/***/ 407855:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var url = __webpack_require__(978835);
var prependHttp = __webpack_require__(480009);

module.exports = function (x) {
	var withProtocol = prependHttp(x);
	var parsed = url.parse(withProtocol);

	if (withProtocol !== x) {
		parsed.protocol = null;
	}

	return parsed;
};


/***/ }),

/***/ 589899:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var v1 = __webpack_require__(730449);
var v4 = __webpack_require__(321451);

var uuid = v4;
uuid.v1 = v1;
uuid.v4 = v4;

module.exports = uuid;


/***/ }),

/***/ 182046:
/***/ ((module) => {

/**
 * Convert array of 16 byte values to UUID string format of the form:
 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 */
var byteToHex = [];
for (var i = 0; i < 256; ++i) {
  byteToHex[i] = (i + 0x100).toString(16).substr(1);
}

function bytesToUuid(buf, offset) {
  var i = offset || 0;
  var bth = byteToHex;
  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
  return ([bth[buf[i++]], bth[buf[i++]], 
	bth[buf[i++]], bth[buf[i++]], '-',
	bth[buf[i++]], bth[buf[i++]], '-',
	bth[buf[i++]], bth[buf[i++]], '-',
	bth[buf[i++]], bth[buf[i++]], '-',
	bth[buf[i++]], bth[buf[i++]],
	bth[buf[i++]], bth[buf[i++]],
	bth[buf[i++]], bth[buf[i++]]]).join('');
}

module.exports = bytesToUuid;


/***/ }),

/***/ 306118:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// Unique ID creation requires a high quality random # generator.  In node.js
// this is pretty straight-forward - we use the crypto API.

var crypto = __webpack_require__(676417);

module.exports = function nodeRNG() {
  return crypto.randomBytes(16);
};


/***/ }),

/***/ 730449:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var rng = __webpack_require__(306118);
var bytesToUuid = __webpack_require__(182046);

// **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html

var _nodeId;
var _clockseq;

// Previous uuid creation time
var _lastMSecs = 0;
var _lastNSecs = 0;

// See https://github.com/broofa/node-uuid for API details
function v1(options, buf, offset) {
  var i = buf && offset || 0;
  var b = buf || [];

  options = options || {};
  var node = options.node || _nodeId;
  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;

  // node and clockseq need to be initialized to random values if they're not
  // specified.  We do this lazily to minimize issues related to insufficient
  // system entropy.  See #189
  if (node == null || clockseq == null) {
    var seedBytes = rng();
    if (node == null) {
      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
      node = _nodeId = [
        seedBytes[0] | 0x01,
        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]
      ];
    }
    if (clockseq == null) {
      // Per 4.2.2, randomize (14 bit) clockseq
      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
    }
  }

  // UUID timestamps are 100 nano-second units since the Gregorian epoch,
  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();

  // Per 4.2.1.2, use count of uuid's generated during the current clock
  // cycle to simulate higher resolution clock
  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;

  // Time since last uuid creation (in msecs)
  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;

  // Per 4.2.1.2, Bump clockseq on clock regression
  if (dt < 0 && options.clockseq === undefined) {
    clockseq = clockseq + 1 & 0x3fff;
  }

  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
  // time interval
  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
    nsecs = 0;
  }

  // Per 4.2.1.2 Throw error if too many uuids are requested
  if (nsecs >= 10000) {
    throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
  }

  _lastMSecs = msecs;
  _lastNSecs = nsecs;
  _clockseq = clockseq;

  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
  msecs += 12219292800000;

  // `time_low`
  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
  b[i++] = tl >>> 24 & 0xff;
  b[i++] = tl >>> 16 & 0xff;
  b[i++] = tl >>> 8 & 0xff;
  b[i++] = tl & 0xff;

  // `time_mid`
  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
  b[i++] = tmh >>> 8 & 0xff;
  b[i++] = tmh & 0xff;

  // `time_high_and_version`
  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
  b[i++] = tmh >>> 16 & 0xff;

  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
  b[i++] = clockseq >>> 8 | 0x80;

  // `clock_seq_low`
  b[i++] = clockseq & 0xff;

  // `node`
  for (var n = 0; n < 6; ++n) {
    b[i + n] = node[n];
  }

  return buf ? buf : bytesToUuid(b);
}

module.exports = v1;


/***/ }),

/***/ 321451:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var rng = __webpack_require__(306118);
var bytesToUuid = __webpack_require__(182046);

function v4(options, buf, offset) {
  var i = buf && offset || 0;

  if (typeof(options) == 'string') {
    buf = options === 'binary' ? new Array(16) : null;
    options = null;
  }
  options = options || {};

  var rnds = options.random || (options.rng || rng)();

  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
  rnds[6] = (rnds[6] & 0x0f) | 0x40;
  rnds[8] = (rnds[8] & 0x3f) | 0x80;

  // Copy bytes to buffer, if provided
  if (buf) {
    for (var ii = 0; ii < 16; ++ii) {
      buf[i + ii] = rnds[ii];
    }
  }

  return buf || bytesToUuid(rnds);
}

module.exports = v4;


/***/ }),

/***/ 739581:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var swarm = __webpack_require__(892378);


var Bzz = function Bzz(provider) {

    this.givenProvider = Bzz.givenProvider;

    if (provider && provider._requestManager) {
        provider = provider.currentProvider;
    }

    // only allow file picker when in browser
    if(typeof document !== 'undefined') {
        this.pick = swarm.pick;
    }

    this.setProvider(provider);
};

// set default ethereum provider
/* jshint ignore:start */
Bzz.givenProvider = null;
if(typeof ethereumProvider !== 'undefined' && ethereumProvider.bzz) {
    Bzz.givenProvider = ethereumProvider.bzz;
}
/* jshint ignore:end */

Bzz.prototype.setProvider = function(provider) {
    // is ethereum provider
    if(_.isObject(provider) && _.isString(provider.bzz)) {
        provider = provider.bzz;
    // is no string, set default
    }
    // else if(!_.isString(provider)) {
    //      provider = 'http://swarm-gateways.net'; // default to gateway
    // }


    if(_.isString(provider)) {
        this.currentProvider = provider;
    } else {
        this.currentProvider = null;

        var noProviderError = new Error('No provider set, please set one using bzz.setProvider().');

        this.download = this.upload = this.isAvailable = function(){
            throw noProviderError;
        };

        return false;
    }

    // add functions
    this.download = swarm.at(provider).download;
    this.upload = swarm.at(provider).upload;
    this.isAvailable = swarm.at(provider).isAvailable;

    return true;
};


module.exports = Bzz;



/***/ }),

/***/ 772110:
/***/ ((module) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file errors.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @author Marek Kotewicz <marek@parity.io>
 * @date 2017
 */



module.exports = {
    ErrorResponse: function (result) {
        var message = !!result && !!result.error && !!result.error.message ? result.error.message : JSON.stringify(result);
        return new Error('Returned error: ' + message);
    },
    InvalidNumberOfParams: function (got, expected, method) {
        return new Error('Invalid number of parameters for "'+ method +'". Got '+ got +' expected '+ expected +'!');
    },
    InvalidConnection: function (host){
        return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.');
    },
    InvalidProvider: function () {
        return new Error('Provider not set or invalid');
    },
    InvalidResponse: function (result){
        var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
        return new Error(message);
    },
    ConnectionTimeout: function (ms){
        return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived');
    }
};


/***/ }),

/***/ 876568:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file formatters.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @author Marek Kotewicz <marek@parity.io>
 * @date 2017
 */




var _ = __webpack_require__(513469);
var utils = __webpack_require__(154067);
var Iban = __webpack_require__(252181);

/**
 * Should the format output to a big number
 *
 * @method outputBigNumberFormatter
 *
 * @param {String|Number|BigNumber|BN} number
 *
 * @returns {BN} object
 */
var outputBigNumberFormatter = function (number) {
    return utils.toBN(number).toString(10);
};

/**
 * Returns true if the given blockNumber is 'latest', 'pending', or 'earliest.
 *
 * @method isPredefinedBlockNumber
 *
 * @param {String} blockNumber
 *
 * @returns {Boolean}
 */
var isPredefinedBlockNumber = function (blockNumber) {
    return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';
};

/**
 * Returns the given block number as hex string or does return the defaultBlock property of the current module
 *
 * @method inputDefaultBlockNumberFormatter
 *
 * @param {String|Number|BN|BigNumber} blockNumber
 *
 * @returns {String}
 */
var inputDefaultBlockNumberFormatter = function (blockNumber) {
    if (this && (blockNumber === undefined || blockNumber === null)) {
        return this.defaultBlock;
    }
    if (blockNumber === 'genesis' || blockNumber === 'earliest') {
        return '0x0';
    }
    return inputBlockNumberFormatter(blockNumber);
};

/**
 * Returns the given block number as hex string or the predefined block number 'latest', 'pending', 'earliest', 'genesis'
 *
 * @param {String|Number|undefined} blockNumber
 *
 * @returns {String|Number|BN|BigNumber}
 */
var inputBlockNumberFormatter = function (blockNumber) {
    if (blockNumber === undefined) {
        return undefined;
    } else if (isPredefinedBlockNumber(blockNumber)) {
        return blockNumber;
    }
    return (utils.isHexStrict(blockNumber)) ? ((_.isString(blockNumber)) ? blockNumber.toLowerCase() : blockNumber) : utils.numberToHex(blockNumber);
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method _txInputFormatter
 * @param {Object} transaction options
 * @returns object
 */
var _txInputFormatter = function (options){

    if (options.to) { // it might be contract creation
        options.to = inputAddressFormatter(options.to);
    }

    if (options.data && options.input) {
        throw new Error('You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.');
    }

    if (!options.data && options.input) {
        options.data = options.input;
        delete options.input;
    }

    if(options.data && !utils.isHex(options.data)) {
        throw new Error('The data field must be HEX encoded data.');
    }

    // allow both
    if (options.gas || options.gasLimit) {
        options.gas = options.gas || options.gasLimit;
    }

    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        return options[key] !== undefined;
    }).forEach(function(key){
        options[key] = utils.numberToHex(options[key]);
    });

    return options;
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputCallFormatter
 * @param {Object} transaction options
 * @returns object
*/
var inputCallFormatter = function (options){

    options = _txInputFormatter(options);

    var from = options.from || (this ? this.defaultAccount : null);

    if (from) {
        options.from = inputAddressFormatter(from);
    }


    return options;
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputTransactionFormatter
 * @param {Object} options
 * @returns object
*/
var inputTransactionFormatter = function (options) {

    options = _txInputFormatter(options);

    // check from, only if not number, or object
    if (!_.isNumber(options.from) && !_.isObject(options.from)) {
        options.from = options.from || (this ? this.defaultAccount : null);

        if (!options.from && !_.isNumber(options.from)) {
            throw new Error('The send transactions "from" field must be defined!');
        }

        options.from = inputAddressFormatter(options.from);
    }

    return options;
};

/**
 * Hex encodes the data passed to eth_sign and personal_sign
 *
 * @method inputSignFormatter
 * @param {String} data
 * @returns {String}
 */
var inputSignFormatter = function (data) {
    return (utils.isHexStrict(data)) ? data : utils.utf8ToHex(data);
};

/**
 * Formats the output of a transaction to its proper values
 *
 * @method outputTransactionFormatter
 * @param {Object} tx
 * @returns {Object}
*/
var outputTransactionFormatter = function (tx){
    if(tx.blockNumber !== null)
        tx.blockNumber = utils.hexToNumber(tx.blockNumber);
    if(tx.transactionIndex !== null)
        tx.transactionIndex = utils.hexToNumber(tx.transactionIndex);
    tx.nonce = utils.hexToNumber(tx.nonce);
    tx.gas = utils.hexToNumber(tx.gas);
    tx.gasPrice = outputBigNumberFormatter(tx.gasPrice);
    tx.value = outputBigNumberFormatter(tx.value);

    if(tx.to && utils.isAddress(tx.to)) { // tx.to could be `0x0` or `null` while contract creation
        tx.to = utils.toChecksumAddress(tx.to);
    } else {
        tx.to = null; // set to `null` if invalid address
    }

    if(tx.from) {
        tx.from = utils.toChecksumAddress(tx.from);
    }

    return tx;
};

/**
 * Formats the output of a transaction receipt to its proper values
 *
 * @method outputTransactionReceiptFormatter
 * @param {Object} receipt
 * @returns {Object}
*/
var outputTransactionReceiptFormatter = function (receipt){
    if(typeof receipt !== 'object') {
        throw new Error('Received receipt is invalid: '+ receipt);
    }

    if(receipt.blockNumber !== null)
        receipt.blockNumber = utils.hexToNumber(receipt.blockNumber);
    if(receipt.transactionIndex !== null)
        receipt.transactionIndex = utils.hexToNumber(receipt.transactionIndex);
    receipt.cumulativeGasUsed = utils.hexToNumber(receipt.cumulativeGasUsed);
    receipt.gasUsed = utils.hexToNumber(receipt.gasUsed);

    if(_.isArray(receipt.logs)) {
        receipt.logs = receipt.logs.map(outputLogFormatter);
    }

    if(receipt.contractAddress) {
        receipt.contractAddress = utils.toChecksumAddress(receipt.contractAddress);
    }

    if(typeof receipt.status !== 'undefined' && receipt.status !== null) {
        receipt.status = Boolean(parseInt(receipt.status));
    }

    return receipt;
};

/**
 * Formats the output of a block to its proper values
 *
 * @method outputBlockFormatter
 * @param {Object} block
 * @returns {Object}
*/
var outputBlockFormatter = function(block) {

    // transform to number
    block.gasLimit = utils.hexToNumber(block.gasLimit);
    block.gasUsed = utils.hexToNumber(block.gasUsed);
    block.size = utils.hexToNumber(block.size);
    block.timestamp = utils.hexToNumber(block.timestamp);
    if (block.number !== null)
        block.number = utils.hexToNumber(block.number);

    if(block.difficulty)
        block.difficulty = outputBigNumberFormatter(block.difficulty);
    if(block.totalDifficulty)
        block.totalDifficulty = outputBigNumberFormatter(block.totalDifficulty);

    if (_.isArray(block.transactions)) {
        block.transactions.forEach(function(item){
            if(!_.isString(item))
                return outputTransactionFormatter(item);
        });
    }

    if (block.miner)
        block.miner = utils.toChecksumAddress(block.miner);

    return block;
};

/**
 * Formats the input of a log
 *
 * @method inputLogFormatter
 * @param {Object} log object
 * @returns {Object} log
*/
var inputLogFormatter = function(options) {
    var toTopic = function(value){

        if(value === null || typeof value === 'undefined')
            return null;

        value = String(value);

        if(value.indexOf('0x') === 0)
            return value;
        else
            return utils.fromUtf8(value);
    };

    if (options.fromBlock || options.fromBlock === 0)
        options.fromBlock = inputBlockNumberFormatter(options.fromBlock);

    if (options.toBlock || options.toBlock === 0)
        options.toBlock = inputBlockNumberFormatter(options.toBlock);


    // make sure topics, get converted to hex
    options.topics = options.topics || [];
    options.topics = options.topics.map(function(topic){
        return (_.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
    });

    toTopic = null;

    if (options.address) {
        options.address = (_.isArray(options.address)) ? options.address.map(function (addr) {
            return inputAddressFormatter(addr);
        }) : inputAddressFormatter(options.address);
    }

    return options;
};

/**
 * Formats the output of a log
 *
 * @method outputLogFormatter
 * @param {Object} log object
 * @returns {Object} log
*/
var outputLogFormatter = function(log) {

    // generate a custom log id
    if(typeof log.blockHash === 'string' &&
       typeof log.transactionHash === 'string' &&
       typeof log.logIndex === 'string') {
        var shaId = utils.sha3(log.blockHash.replace('0x','') + log.transactionHash.replace('0x','') + log.logIndex.replace('0x',''));
        log.id = 'log_'+ shaId.replace('0x','').substr(0,8);
    } else if(!log.id) {
        log.id = null;
    }

    if (log.blockNumber !== null)
        log.blockNumber = utils.hexToNumber(log.blockNumber);
    if (log.transactionIndex !== null)
        log.transactionIndex = utils.hexToNumber(log.transactionIndex);
    if (log.logIndex !== null)
        log.logIndex = utils.hexToNumber(log.logIndex);

    if (log.address) {
        log.address = utils.toChecksumAddress(log.address);
    }

    return log;
};

/**
 * Formats the input of a whisper post and converts all values to HEX
 *
 * @method inputPostFormatter
 * @param {Object} transaction object
 * @returns {Object}
*/
var inputPostFormatter = function(post) {

    // post.payload = utils.toHex(post.payload);

    if (post.ttl)
        post.ttl = utils.numberToHex(post.ttl);
    if (post.workToProve)
        post.workToProve = utils.numberToHex(post.workToProve);
    if (post.priority)
        post.priority = utils.numberToHex(post.priority);

    // fallback
    if (!_.isArray(post.topics)) {
        post.topics = post.topics ? [post.topics] : [];
    }

    // format the following options
    post.topics = post.topics.map(function(topic){
        // convert only if not hex
        return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);
    });

    return post;
};

/**
 * Formats the output of a received post message
 *
 * @method outputPostFormatter
 * @param {Object}
 * @returns {Object}
 */
var outputPostFormatter = function(post){

    post.expiry = utils.hexToNumber(post.expiry);
    post.sent = utils.hexToNumber(post.sent);
    post.ttl = utils.hexToNumber(post.ttl);
    post.workProved = utils.hexToNumber(post.workProved);
    // post.payloadRaw = post.payload;
    // post.payload = utils.hexToAscii(post.payload);

    // if (utils.isJson(post.payload)) {
    //     post.payload = JSON.parse(post.payload);
    // }

    // format the following options
    if (!post.topics) {
        post.topics = [];
    }
    post.topics = post.topics.map(function(topic){
        return utils.toUtf8(topic);
    });

    return post;
};

var inputAddressFormatter = function (address) {
    var iban = new Iban(address);
    if (iban.isValid() && iban.isDirect()) {
        return iban.toAddress().toLowerCase();
    } else if (utils.isAddress(address)) {
        return '0x' + address.toLowerCase().replace('0x','');
    }
    throw new Error('Provided address "'+ address +'" is invalid, the capitalization checksum test failed, or its an indrect IBAN address which can\'t be converted.');
};


var outputSyncingFormatter = function(result) {

    result.startingBlock = utils.hexToNumber(result.startingBlock);
    result.currentBlock = utils.hexToNumber(result.currentBlock);
    result.highestBlock = utils.hexToNumber(result.highestBlock);
    if (result.knownStates) {
        result.knownStates = utils.hexToNumber(result.knownStates);
        result.pulledStates = utils.hexToNumber(result.pulledStates);
    }

    return result;
};

module.exports = {
    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
    inputBlockNumberFormatter: inputBlockNumberFormatter,
    inputCallFormatter: inputCallFormatter,
    inputTransactionFormatter: inputTransactionFormatter,
    inputAddressFormatter: inputAddressFormatter,
    inputPostFormatter: inputPostFormatter,
    inputLogFormatter: inputLogFormatter,
    inputSignFormatter: inputSignFormatter,
    outputBigNumberFormatter: outputBigNumberFormatter,
    outputTransactionFormatter: outputTransactionFormatter,
    outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
    outputBlockFormatter: outputBlockFormatter,
    outputLogFormatter: outputLogFormatter,
    outputPostFormatter: outputPostFormatter,
    outputSyncingFormatter: outputSyncingFormatter
};



/***/ }),

/***/ 244207:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var errors = __webpack_require__(772110);
var formatters = __webpack_require__(876568);

module.exports = {
    errors: errors,
    formatters: formatters
};



/***/ }),

/***/ 587940:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @author Marek Kotewicz <marek@parity.io>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var errors = __webpack_require__(244207).errors;
var formatters = __webpack_require__(244207).formatters;
var utils = __webpack_require__(154067);
var promiEvent = __webpack_require__(969093);
var Subscriptions = __webpack_require__(638096).subscriptions;

var Method = function Method(options) {

    if (!options.call || !options.name) {
        throw new Error('When creating a method you need to provide at least the "name" and "call" property.');
    }

    this.name = options.name;
    this.call = options.call;
    this.params = options.params || 0;
    this.inputFormatter = options.inputFormatter;
    this.outputFormatter = options.outputFormatter;
    this.transformPayload = options.transformPayload;
    this.extraFormatters = options.extraFormatters;

    this.requestManager = options.requestManager;

    // reference to eth.accounts
    this.accounts = options.accounts;

    this.defaultBlock = options.defaultBlock || 'latest';
    this.defaultAccount = options.defaultAccount || null;
    this.transactionBlockTimeout = options.transactionBlockTimeout || 50;
    this.transactionConfirmationBlocks = options.transactionConfirmationBlocks || 24;
    this.transactionPollingTimeout = options.transactionPollingTimeout || 750;
    this.defaultCommon = options.defaultCommon;
    this.defaultChain = options.defaultChain;
    this.defaultHardfork = options.defaultHardfork;
};

Method.prototype.setRequestManager = function(requestManager, accounts) {
    this.requestManager = requestManager;

    // reference to eth.accounts
    if (accounts) {
        this.accounts = accounts;
    }

};

Method.prototype.createFunction = function(requestManager, accounts) {
    var func = this.buildCall();
    func.call = this.call;

    this.setRequestManager(requestManager || this.requestManager, accounts || this.accounts);

    return func;
};

Method.prototype.attachToObject = function(obj) {
    var func = this.buildCall();
    func.call = this.call;
    var name = this.name.split('.');
    if (name.length > 1) {
        obj[name[0]] = obj[name[0]] || {};
        obj[name[0]][name[1]] = func;
    } else {
        obj[name[0]] = func;
    }
};

/**
 * Should be used to determine name of the jsonrpc method based on arguments
 *
 * @method getCall
 * @param {Array} arguments
 * @return {String} name of jsonrpc method
 */
Method.prototype.getCall = function(args) {
    return _.isFunction(this.call) ? this.call(args) : this.call;
};

/**
 * Should be used to extract callback from array of arguments. Modifies input param
 *
 * @method extractCallback
 * @param {Array} arguments
 * @return {Function|Null} callback, if exists
 */
Method.prototype.extractCallback = function(args) {
    if (_.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

/**
 * Should be called to check if the number of arguments is correct
 *
 * @method validateArgs
 * @param {Array} arguments
 * @throws {Error} if it is not
 */
Method.prototype.validateArgs = function(args) {
    if (args.length !== this.params) {
        throw errors.InvalidNumberOfParams(args.length, this.params, this.name);
    }
};

/**
 * Should be called to format input args of method
 *
 * @method formatInput
 * @param {Array}
 * @return {Array}
 */
Method.prototype.formatInput = function(args) {
    var _this = this;

    if (!this.inputFormatter) {
        return args;
    }

    return this.inputFormatter.map(function(formatter, index) {
        // bind this for defaultBlock, and defaultAccount
        return formatter ? formatter.call(_this, args[index]) : args[index];
    });
};

/**
 * Should be called to format output(result) of method
 *
 * @method formatOutput
 * @param {Object}
 * @return {Object}
 */
Method.prototype.formatOutput = function(result) {
    var _this = this;

    if (_.isArray(result)) {
        return result.map(function(res) {
            return _this.outputFormatter && res ? _this.outputFormatter(res) : res;
        });
    } else {
        return this.outputFormatter && result ? this.outputFormatter(result) : result;
    }
};

/**
 * Should create payload from given input args
 *
 * @method toPayload
 * @param {Array} args
 * @return {Object}
 */
Method.prototype.toPayload = function(args) {
    var call = this.getCall(args);
    var callback = this.extractCallback(args);
    var params = this.formatInput(args);
    this.validateArgs(params);

    var payload = {
        method: call,
        params: params,
        callback: callback
    };

    if (this.transformPayload) {
        payload = this.transformPayload(payload);
    }

    return payload;
};


Method.prototype._confirmTransaction = function(defer, result, payload) {
    var method = this,
        promiseResolved = false,
        canUnsubscribe = true,
        timeoutCount = 0,
        confirmationCount = 0,
        intervalId = null,
        lastBlock = null,
        receiptJSON = '',
        gasProvided = (_.isObject(payload.params[0]) && payload.params[0].gas) ? payload.params[0].gas : null,
        isContractDeployment = _.isObject(payload.params[0]) &&
            payload.params[0].data &&
            payload.params[0].from &&
            !payload.params[0].to;

    // add custom send Methods
    var _ethereumCalls = [
        new Method({
            name: 'getBlockByNumber',
            call: 'eth_getBlockByNumber',
            params: 2,
            inputFormatter: [formatters.inputBlockNumberFormatter, function(val) {
                return !!val;
            }],
            outputFormatter: formatters.outputBlockFormatter
        }),
        new Method({
            name: 'getTransactionReceipt',
            call: 'eth_getTransactionReceipt',
            params: 1,
            inputFormatter: [null],
            outputFormatter: formatters.outputTransactionReceiptFormatter
        }),
        new Method({
            name: 'getCode',
            call: 'eth_getCode',
            params: 2,
            inputFormatter: [formatters.inputAddressFormatter, formatters.inputDefaultBlockNumberFormatter]
        }),
        new Subscriptions({
            name: 'subscribe',
            type: 'eth',
            subscriptions: {
                'newBlockHeaders': {
                    subscriptionName: 'newHeads', // replace subscription with this name
                    params: 0,
                    outputFormatter: formatters.outputBlockFormatter
                }
            }
        })
    ];
    // attach methods to this._ethereumCall
    var _ethereumCall = {};
    _.each(_ethereumCalls, function(mthd) {
        mthd.attachToObject(_ethereumCall);
        mthd.requestManager = method.requestManager; // assign rather than call setRequestManager()
    });


    // fire "receipt" and confirmation events and resolve after
    var checkConfirmation = function(existingReceipt, isPolling, err, blockHeader, sub) {
        if (!err) {
            // create fake unsubscribe
            if (!sub) {
                sub = {
                    unsubscribe: function() {
                        clearInterval(intervalId);
                    }
                };
            }
            // if we have a valid receipt we don't need to send a request
            return (existingReceipt ? promiEvent.resolve(existingReceipt) : _ethereumCall.getTransactionReceipt(result))
            // catch error from requesting receipt
                .catch(function(err) {
                    sub.unsubscribe();
                    promiseResolved = true;
                    utils._fireError(
                        {
                            message: 'Failed to check for transaction receipt:',
                            data: err
                        },
                        defer.eventEmitter,
                        defer.reject
                    );
                })
                // if CONFIRMATION listener exists check for confirmations, by setting canUnsubscribe = false
                .then(async function(receipt) {
                    if (!receipt || !receipt.blockHash) {
                        throw new Error('Receipt missing or blockHash null');
                    }

                    // apply extra formatters
                    if (method.extraFormatters && method.extraFormatters.receiptFormatter) {
                        receipt = method.extraFormatters.receiptFormatter(receipt);
                    }

                    // check if confirmation listener exists
                    if (defer.eventEmitter.listeners('confirmation').length > 0) {
                        var block;

                        // If there was an immediately retrieved receipt, it's already
                        // been confirmed by the direct call to checkConfirmation needed
                        // for parity instant-seal
                        if (existingReceipt === undefined || confirmationCount !== 0) {
                            if (isPolling) { // Check if actually a new block is existing on polling
                                if (lastBlock) {
                                    block = await _ethereumCall.getBlockByNumber(lastBlock.number + 1);
                                    if (block) {
                                        lastBlock = block;
                                        defer.eventEmitter.emit('confirmation', confirmationCount, receipt);
                                    }
                                } else {
                                    block = await _ethereumCall.getBlockByNumber(receipt.blockNumber);
                                    lastBlock = block;
                                    defer.eventEmitter.emit('confirmation', confirmationCount, receipt);
                                }
                            } else {
                                defer.eventEmitter.emit('confirmation', confirmationCount, receipt);
                            }
                        }

                        if ((isPolling && block) || !isPolling) {
                            confirmationCount++;
                        }
                        canUnsubscribe = false;

                        if (confirmationCount === method.transactionConfirmationBlocks + 1) { // add 1 so we account for conf 0
                            sub.unsubscribe();
                            defer.eventEmitter.removeAllListeners();
                        }
                    }

                    return receipt;
                })
                // CHECK for CONTRACT DEPLOYMENT
                .then(function(receipt) {

                    if (isContractDeployment && !promiseResolved) {

                        if (!receipt.contractAddress) {

                            if (canUnsubscribe) {
                                sub.unsubscribe();
                                promiseResolved = true;
                            }

                            utils._fireError(
                                new Error('The transaction receipt didn\'t contain a contract address.'),
                                defer.eventEmitter,
                                defer.reject,
                                null,
                                receipt
                            );
                            return;
                        }

                        _ethereumCall.getCode(receipt.contractAddress, function(e, code) {

                            if (!code) {
                                return;
                            }


                            if (code.length > 2) {
                                defer.eventEmitter.emit('receipt', receipt);

                                // if contract, return instance instead of receipt
                                if (method.extraFormatters && method.extraFormatters.contractDeployFormatter) {
                                    defer.resolve(method.extraFormatters.contractDeployFormatter(receipt));
                                } else {
                                    defer.resolve(receipt);
                                }

                                // need to remove listeners, as they aren't removed automatically when succesfull
                                if (canUnsubscribe) {
                                    defer.eventEmitter.removeAllListeners();
                                }

                            } else {
                                utils._fireError(
                                    new Error('The contract code couldn\'t be stored, please check your gas limit.'),
                                    defer.eventEmitter,
                                    defer.reject,
                                    null,
                                    receipt
                                );
                            }

                            if (canUnsubscribe) {
                                sub.unsubscribe();
                            }
                            promiseResolved = true;
                        });
                    }

                    return receipt;
                })
                // CHECK for normal tx check for receipt only
                .then(function(receipt) {
                    if (!isContractDeployment && !promiseResolved) {
                        if (!receipt.outOfGas &&
                            (!gasProvided || gasProvided !== receipt.gasUsed) &&
                            (receipt.status === true || receipt.status === '0x1' || typeof receipt.status === 'undefined')) {
                            defer.eventEmitter.emit('receipt', receipt);
                            defer.resolve(receipt);

                            // need to remove listeners, as they aren't removed automatically when succesfull
                            if (canUnsubscribe) {
                                defer.eventEmitter.removeAllListeners();
                            }

                        } else {
                            receiptJSON = JSON.stringify(receipt, null, 2);

                            if (receipt.status === false || receipt.status === '0x0') {
                                utils._fireError(
                                    new Error('Transaction has been reverted by the EVM:\n' + receiptJSON),
                                    defer.eventEmitter,
                                    defer.reject,
                                    null,
                                    receipt
                                );
                            } else {
                                utils._fireError(
                                    new Error('Transaction ran out of gas. Please provide more gas:\n' + receiptJSON),
                                    defer.eventEmitter,
                                    defer.reject,
                                    null,
                                    receipt
                                );
                            }
                        }

                        if (canUnsubscribe) {
                            sub.unsubscribe();
                        }
                        promiseResolved = true;
                    }

                })
                // time out the transaction if not mined after 50 blocks
                .catch(function() {
                    timeoutCount++;

                    // check to see if we are http polling
                    if (!!isPolling) {
                        // polling timeout is different than transactionBlockTimeout blocks since we are triggering every second
                        if (timeoutCount - 1 >= method.transactionPollingTimeout) {
                            sub.unsubscribe();
                            promiseResolved = true;
                            utils._fireError(
                                new Error('Transaction was not mined within ' + method.transactionPollingTimeout + ' seconds, please make sure your transaction was properly sent. Be aware that it might still be mined!'),
                                defer.eventEmitter,
                                defer.reject
                            );
                        }
                    } else {
                        if (timeoutCount - 1 >= method.transactionBlockTimeout) {
                            sub.unsubscribe();
                            promiseResolved = true;
                            utils._fireError(
                                new Error('Transaction was not mined within ' + method.transactionBlockTimeout + ' blocks, please make sure your transaction was properly sent. Be aware that it might still be mined!'),
                                defer.eventEmitter,
                                defer.reject
                            );
                        }
                    }
                });


        } else {
            sub.unsubscribe();
            promiseResolved = true;
            utils._fireError({
                message: 'Failed to subscribe to new newBlockHeaders to confirm the transaction receipts.',
                data: err
            }, defer.eventEmitter, defer.reject);
        }
    };

    // start watching for confirmation depending on the support features of the provider
    var startWatching = function(existingReceipt) {
        // if provider allows PUB/SUB
        if (_.isFunction(this.requestManager.provider.on)) {
            _ethereumCall.subscribe('newBlockHeaders', checkConfirmation.bind(null, existingReceipt, false));
        } else {
            intervalId = setInterval(checkConfirmation.bind(null, existingReceipt, true), 1000);
        }
    }.bind(this);


    // first check if we already have a confirmed transaction
    _ethereumCall.getTransactionReceipt(result)
        .then(function(receipt) {
            if (receipt && receipt.blockHash) {
                if (defer.eventEmitter.listeners('confirmation').length > 0) {
                    // We must keep on watching for new Blocks, if a confirmation listener is present
                    startWatching(receipt);
                }
                checkConfirmation(receipt, false);

            } else if (!promiseResolved) {
                startWatching();
            }
        })
        .catch(function() {
            if (!promiseResolved) startWatching();
        });

};


var getWallet = function(from, accounts) {
    var wallet = null;

    // is index given
    if (_.isNumber(from)) {
        wallet = accounts.wallet[from];

        // is account given
    } else if (_.isObject(from) && from.address && from.privateKey) {
        wallet = from;

        // search in wallet for address
    } else {
        wallet = accounts.wallet[from.toLowerCase()];
    }

    return wallet;
};

Method.prototype.buildCall = function() {
    var method = this,
        isSendTx = (method.call === 'eth_sendTransaction' || method.call === 'eth_sendRawTransaction'); // || method.call === 'personal_sendTransaction'

    // actual send function
    var send = function() {
        var defer = promiEvent(!isSendTx),
            payload = method.toPayload(Array.prototype.slice.call(arguments));


        // CALLBACK function
        var sendTxCallback = function(err, result) {
            try {
                result = method.formatOutput(result);
            } catch (e) {
                err = e;
            }

            if (result instanceof Error) {
                err = result;
            }

            if (!err) {
                if (payload.callback) {
                    payload.callback(null, result);
                }
            } else {
                if (err.error) {
                    err = err.error;
                }

                return utils._fireError(err, defer.eventEmitter, defer.reject, payload.callback);
            }

            // return PROMISE
            if (!isSendTx) {

                if (!err) {
                    defer.resolve(result);

                }

                // return PROMIEVENT
            } else {
                defer.eventEmitter.emit('transactionHash', result);

                method._confirmTransaction(defer, result, payload);
            }

        };

        // SENDS the SIGNED SIGNATURE
        var sendSignedTx = function(sign) {

            var signedPayload = _.extend({}, payload, {
                method: 'eth_sendRawTransaction',
                params: [sign.rawTransaction]
            });

            method.requestManager.send(signedPayload, sendTxCallback);
        };


        var sendRequest = function(payload, method) {

            if (method && method.accounts && method.accounts.wallet && method.accounts.wallet.length) {
                var wallet;

                // ETH_SENDTRANSACTION
                if (payload.method === 'eth_sendTransaction') {
                    var tx = payload.params[0];
                    wallet = getWallet((_.isObject(tx)) ? tx.from : null, method.accounts);


                    // If wallet was found, sign tx, and send using sendRawTransaction
                    if (wallet && wallet.privateKey) {
                        var txOptions = _.omit(tx, 'from');

                        if (method.defaultChain && !txOptions.chain) {
                            txOptions.chain = method.defaultChain;
                        }

                        if (method.defaultHardfork && !txOptions.hardfork) {
                            txOptions.hardfork = method.defaultHardfork;
                        }

                        if (method.defaultCommon && !txOptions.common) {
                            txOptions.common = method.defaultCommon;
                        }

                        return method.accounts.signTransaction(txOptions, wallet.privateKey)
                            .then(sendSignedTx)
                            .catch(function(err) {
                                if (_.isFunction(defer.eventEmitter.listeners) && defer.eventEmitter.listeners('error').length) {
                                    defer.eventEmitter.emit('error', err);
                                    defer.eventEmitter.removeAllListeners();
                                    defer.eventEmitter.catch(function() {
                                    });
                                }
                                defer.reject(err);
                            });
                    }

                    // ETH_SIGN
                } else if (payload.method === 'eth_sign') {
                    var data = payload.params[1];
                    wallet = getWallet(payload.params[0], method.accounts);

                    // If wallet was found, sign tx, and send using sendRawTransaction
                    if (wallet && wallet.privateKey) {
                        var sign = method.accounts.sign(data, wallet.privateKey);

                        if (payload.callback) {
                            payload.callback(null, sign.signature);
                        }

                        defer.resolve(sign.signature);
                        return;
                    }


                }
            }

            return method.requestManager.send(payload, sendTxCallback);
        };

        // Send the actual transaction
        if (isSendTx && _.isObject(payload.params[0]) && typeof payload.params[0].gasPrice === 'undefined') {

            var getGasPrice = (new Method({
                name: 'getGasPrice',
                call: 'eth_gasPrice',
                params: 0
            })).createFunction(method.requestManager);

            getGasPrice(function(err, gasPrice) {

                if (gasPrice) {
                    payload.params[0].gasPrice = gasPrice;
                }
                sendRequest(payload, method);
            });

        } else {
            sendRequest(payload, method);
        }


        return defer.eventEmitter;
    };

    // necessary to attach things to the method
    send.method = method;
    // necessary for batch requests
    send.request = this.request.bind(this);
    return send;
};

/**
 * Should be called to create the pure JSONRPC request which can be used in a batch request
 *
 * @method request
 * @return {Object} jsonrpc request
 */
Method.prototype.request = function() {
    var payload = this.toPayload(Array.prototype.slice.call(arguments));
    payload.format = this.formatOutput.bind(this);
    return payload;
};

module.exports = Method;


/***/ }),

/***/ 969093:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2016
 */



var EventEmitter = __webpack_require__(661181);
var Promise = __webpack_require__(315845);

/**
 * This function generates a defer promise and adds eventEmitter functionality to it
 *
 * @method eventifiedPromise
 */
var PromiEvent = function PromiEvent(justPromise) {
    var resolve, reject,
        eventEmitter = new Promise(function() {
            resolve = arguments[0];
            reject = arguments[1];
        });

    if(justPromise) {
        return {
            resolve: resolve,
            reject: reject,
            eventEmitter: eventEmitter
        };
    }

    // get eventEmitter
    var emitter = new EventEmitter();

    // add eventEmitter to the promise
    eventEmitter._events = emitter._events;
    eventEmitter.emit = emitter.emit;
    eventEmitter.on = emitter.on;
    eventEmitter.once = emitter.once;
    eventEmitter.off = emitter.off;
    eventEmitter.listeners = emitter.listeners;
    eventEmitter.addListener = emitter.addListener;
    eventEmitter.removeListener = emitter.removeListener;
    eventEmitter.removeAllListeners = emitter.removeAllListeners;

    return {
        resolve: resolve,
        reject: reject,
        eventEmitter: eventEmitter
    };
};

PromiEvent.resolve = function(value) {
    var promise = PromiEvent(true);
    promise.resolve(value);
    return promise.eventEmitter;
};

module.exports = PromiEvent;


/***/ }),

/***/ 711450:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file batch.js
 * @author Marek Kotewicz <marek@ethdev.com>
 * @date 2015
 */



var Jsonrpc = __webpack_require__(217492);
var errors = __webpack_require__(244207).errors;

var Batch = function (requestManager) {
    this.requestManager = requestManager;
    this.requests = [];
};

/**
 * Should be called to add create new request to batch request
 *
 * @method add
 * @param {Object} jsonrpc requet object
 */
Batch.prototype.add = function (request) {
    this.requests.push(request);
};

/**
 * Should be called to execute batch request
 *
 * @method execute
 */
Batch.prototype.execute = function () {
    var requests = this.requests;
    this.requestManager.sendBatch(requests, function (err, results) {
        results = results || [];
        requests.map(function (request, index) {
            return results[index] || {};
        }).forEach(function (result, index) {
            if (requests[index].callback) {
                if (result && result.error) {
                    return requests[index].callback(errors.ErrorResponse(result));
                }

                if (!Jsonrpc.isValidResponse(result)) {
                    return requests[index].callback(errors.InvalidResponse(result));
                }

                try {
                    requests[index].callback(null, requests[index].format ? requests[index].format(result.result) : result.result);
                } catch (err) {
                    requests[index].callback(err);
                }
            }
        });
    });
};

module.exports = Batch;



/***/ }),

/***/ 390816:
/***/ ((module) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file givenProvider.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var givenProvider = null;

// ADD GIVEN PROVIDER
/* jshint ignore:start */
var global;
try {
  global = Function('return this')();
} catch (e) {
  global = window;
}

// EthereumProvider
if(typeof global.ethereumProvider !== 'undefined') {
    givenProvider = global.ethereumProvider;

// Legacy web3.currentProvider
} else if(typeof global.web3 !== 'undefined' && global.web3.currentProvider) {

    if(global.web3.currentProvider.sendAsync) {
        global.web3.currentProvider.send = global.web3.currentProvider.sendAsync;
        delete global.web3.currentProvider.sendAsync;
    }

    // if connection is 'ipcProviderWrapper', add subscription support
    if(!global.web3.currentProvider.on &&
        global.web3.currentProvider.connection &&
        global.web3.currentProvider.connection.constructor.name === 'ipcProviderWrapper') {

        global.web3.currentProvider.on = function (type, callback) {

            if(typeof callback !== 'function')
                throw new Error('The second parameter callback must be a function.');

            switch(type){
                case 'data':
                    this.connection.on('data', function(data) {
                        var result = '';

                        data = data.toString();

                        try {
                            result = JSON.parse(data);
                        } catch(e) {
                            return callback(new Error('Couldn\'t parse response data'+ data));
                        }

                        // notification
                        if(!result.id && result.method.indexOf('_subscription') !== -1) {
                            callback(null, result);
                        }

                    });
                    break;

                default:
                    this.connection.on(type, callback);
                    break;
            }
        };
    }

    givenProvider = global.web3.currentProvider;
}
/* jshint ignore:end */


module.exports = givenProvider;


/***/ }),

/***/ 262275:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */




var _ = __webpack_require__(513469);
var errors = __webpack_require__(244207).errors;
var Jsonrpc = __webpack_require__(217492);
var BatchManager = __webpack_require__(711450);
var givenProvider = __webpack_require__(390816);



    /**
 * It's responsible for passing messages to providers
 * It's also responsible for polling the ethereum node for incoming messages
 * Default poll timeout is 1 second
 * Singleton
 */
var RequestManager = function RequestManager(provider) {
    this.provider = null;
    this.providers = RequestManager.providers;

    this.setProvider(provider);
    this.subscriptions = {};
};



RequestManager.givenProvider = givenProvider;

RequestManager.providers = {
    WebsocketProvider: __webpack_require__(409465),
    HttpProvider: __webpack_require__(281757),
    IpcProvider: __webpack_require__(353626)
};



/**
 * Should be used to set provider of request manager
 *
 * @method setProvider
 * @param {Object} p
 */
RequestManager.prototype.setProvider = function (p, net) {
    var _this = this;

    // autodetect provider
    if(p && typeof p === 'string' && this.providers) {

        // HTTP
        if(/^http(s)?:\/\//i.test(p)) {
            p = new this.providers.HttpProvider(p);

            // WS
        } else if(/^ws(s)?:\/\//i.test(p)) {
            p = new this.providers.WebsocketProvider(p);

            // IPC
        } else if(p && typeof net === 'object'  && typeof net.connect === 'function') {
            p = new this.providers.IpcProvider(p, net);

        } else if(p) {
            throw new Error('Can\'t autodetect provider for "'+ p +'"');
        }
    }

    // reset the old one before changing, if still connected
    if(this.provider && this.provider.connected)
        this.clearSubscriptions();


    this.provider = p || null;

    // listen to incoming notifications
    if(this.provider && this.provider.on) {
        this.provider.on('data', function requestManagerNotification(result, deprecatedResult){
            result = result || deprecatedResult; // this is for possible old providers, which may had the error first handler

            // check for result.method, to prevent old providers errors to pass as result
            if(result.method && _this.subscriptions[result.params.subscription] && _this.subscriptions[result.params.subscription].callback) {
                _this.subscriptions[result.params.subscription].callback(null, result.params.result);
            }
        });
        // TODO add error, end, timeout, connect??
        // this.provider.on('error', function requestManagerNotification(result){
        //     Object.keys(_this.subscriptions).forEach(function(id){
        //         if(_this.subscriptions[id].callback)
        //             _this.subscriptions[id].callback(err);
        //     });
        // }
    }
};


/**
 * Should be used to asynchronously send request
 *
 * @method sendAsync
 * @param {Object} data
 * @param {Function} callback
 */
RequestManager.prototype.send = function (data, callback) {
    callback = callback || function(){};

    if (!this.provider) {
        return callback(errors.InvalidProvider());
    }

    var payload = Jsonrpc.toPayload(data.method, data.params);
    this.provider[this.provider.sendAsync ? 'sendAsync' : 'send'](payload, function (err, result) {
        if(result && result.id && payload.id !== result.id) return callback(new Error('Wrong response id "'+ result.id +'" (expected: "'+ payload.id +'") in '+ JSON.stringify(payload)));

        if (err) {
            return callback(err);
        }

        if (result && result.error) {
            return callback(errors.ErrorResponse(result));
        }

        if (!Jsonrpc.isValidResponse(result)) {
            return callback(errors.InvalidResponse(result));
        }

        callback(null, result.result);
    });
};

/**
 * Should be called to asynchronously send batch request
 *
 * @method sendBatch
 * @param {Array} batch data
 * @param {Function} callback
 */
RequestManager.prototype.sendBatch = function (data, callback) {
    if (!this.provider) {
        return callback(errors.InvalidProvider());
    }

    var payload = Jsonrpc.toBatchPayload(data);
    this.provider[this.provider.sendAsync ? 'sendAsync' : 'send'](payload, function (err, results) {
        if (err) {
            return callback(err);
        }

        if (!_.isArray(results)) {
            return callback(errors.InvalidResponse(results));
        }

        callback(null, results);
    });
};


/**
 * Waits for notifications
 *
 * @method addSubscription
 * @param {String} id           the subscription id
 * @param {String} name         the subscription name
 * @param {String} type         the subscription namespace (eth, personal, etc)
 * @param {Function} callback   the callback to call for incoming notifications
 */
RequestManager.prototype.addSubscription = function (id, name, type, callback) {
    if(this.provider.on) {
        this.subscriptions[id] = {
            callback: callback,
            type: type,
            name: name
        };

    } else {
        throw new Error('The provider doesn\'t support subscriptions: '+ this.provider.constructor.name);
    }
};

/**
 * Waits for notifications
 *
 * @method removeSubscription
 * @param {String} id           the subscription id
 * @param {Function} callback   fired once the subscription is removed
 */
RequestManager.prototype.removeSubscription = function (id, callback) {
    var _this = this;

    if(this.subscriptions[id]) {

        this.send({
            method: this.subscriptions[id].type + '_unsubscribe',
            params: [id]
        }, callback);

        // remove subscription
        delete _this.subscriptions[id];
    }
};

/**
 * Should be called to reset the subscriptions
 *
 * @method reset
 */
RequestManager.prototype.clearSubscriptions = function (keepIsSyncing) {
    var _this = this;


    // uninstall all subscriptions
    Object.keys(this.subscriptions).forEach(function(id){
        if(!keepIsSyncing || _this.subscriptions[id].name !== 'syncing')
            _this.removeSubscription(id);
    });


    //  reset notification callbacks etc.
    if(this.provider.reset)
        this.provider.reset();
};

module.exports = {
    Manager: RequestManager,
    BatchManager: BatchManager
};


/***/ }),

/***/ 217492:
/***/ ((module) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file jsonrpc.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethereum.org>
 *   Marek Kotewicz <marek@ethdev.com>
 *   Aaron Kumavis <aaron@kumavis.me>
 * @date 2015
 */



// Initialize Jsonrpc as a simple object with utility functions.
var Jsonrpc = {
    messageId: 0
};

/**
 * Should be called to valid json create payload object
 *
 * @method toPayload
 * @param {Function} method of jsonrpc call, required
 * @param {Array} params, an array of method params, optional
 * @returns {Object} valid jsonrpc payload object
 */
Jsonrpc.toPayload = function (method, params) {
    if (!method) {
        throw new Error('JSONRPC method should be specified for params: "'+ JSON.stringify(params) +'"!');
    }

    // advance message ID
    Jsonrpc.messageId++;

    return {
        jsonrpc: '2.0',
        id: Jsonrpc.messageId,
        method: method,
        params: params || []
    };
};

/**
 * Should be called to check if jsonrpc response is valid
 *
 * @method isValidResponse
 * @param {Object}
 * @returns {Boolean} true if response is valid, otherwise false
 */
Jsonrpc.isValidResponse = function (response) {
    return Array.isArray(response) ? response.every(validateSingleMessage) : validateSingleMessage(response);

    function validateSingleMessage(message){
      return !!message &&
        !message.error &&
        message.jsonrpc === '2.0' &&
        (typeof message.id === 'number' || typeof message.id === 'string') &&
        message.result !== undefined; // only undefined is not valid json object
    }
};

/**
 * Should be called to create batch payload object
 *
 * @method toBatchPayload
 * @param {Array} messages, an array of objects with method (required) and params (optional) fields
 * @returns {Array} batch payload
 */
Jsonrpc.toBatchPayload = function (messages) {
    return messages.map(function (message) {
        return Jsonrpc.toPayload(message.method, message.params);
    });
};

module.exports = Jsonrpc;



/***/ }),

/***/ 638096:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var Subscription = __webpack_require__(344528);


var Subscriptions = function Subscriptions(options) {
    this.name = options.name;
    this.type = options.type;
    this.subscriptions = options.subscriptions || {};
    this.requestManager = null;
};


Subscriptions.prototype.setRequestManager = function (rm) {
    this.requestManager = rm;
};


Subscriptions.prototype.attachToObject = function (obj) {
    var func = this.buildCall();
    var name = this.name.split('.');
    if (name.length > 1) {
        obj[name[0]] = obj[name[0]] || {};
        obj[name[0]][name[1]] = func;
    } else {
        obj[name[0]] = func;
    }
};


Subscriptions.prototype.buildCall = function() {
    var _this = this;

    return function(){
        if(!_this.subscriptions[arguments[0]]) {
            console.warn('Subscription '+ JSON.stringify(arguments[0]) +' doesn\'t exist. Subscribing anyway.');
        }

        var subscription = new Subscription({
            subscription: _this.subscriptions[arguments[0]],
            requestManager: _this.requestManager,
            type: _this.type
        });

        return subscription.subscribe.apply(subscription, arguments);
    };
};


module.exports = {
    subscriptions: Subscriptions,
    subscription: Subscription
};


/***/ }),

/***/ 344528:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file subscription.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var errors = __webpack_require__(244207).errors;
var EventEmitter = __webpack_require__(661181);

function Subscription(options) {
    EventEmitter.call(this);

    this.id = null;
    this.callback = _.identity;
    this.arguments = null;
    this._reconnectIntervalId = null;

    this.options = {
        subscription: options.subscription,
        type: options.type,
        requestManager: options.requestManager
    };
}

// INHERIT
Subscription.prototype = Object.create(EventEmitter.prototype);
Subscription.prototype.constructor = Subscription;


/**
 * Should be used to extract callback from array of arguments. Modifies input param
 *
 * @method extractCallback
 * @param {Array} arguments
 * @return {Function|Null} callback, if exists
 */

Subscription.prototype._extractCallback = function (args) {
    if (_.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

/**
 * Should be called to check if the number of arguments is correct
 *
 * @method validateArgs
 * @param {Array} arguments
 * @throws {Error} if it is not
 */

Subscription.prototype._validateArgs = function (args) {
    var subscription = this.options.subscription;

    if(!subscription)
        subscription = {};

    if(!subscription.params)
        subscription.params = 0;

    if (args.length !== subscription.params) {
        throw errors.InvalidNumberOfParams(args.length, subscription.params + 1, args[0]);
    }
};

/**
 * Should be called to format input args of method
 *
 * @method formatInput
 * @param {Array}
 * @return {Array}
 */

Subscription.prototype._formatInput = function (args) {
    var subscription = this.options.subscription;

    if (!subscription) {
        return args;
    }

    if (!subscription.inputFormatter) {
        return args;
    }

    var formattedArgs = subscription.inputFormatter.map(function (formatter, index) {
        return formatter ? formatter(args[index]) : args[index];
    });

    return formattedArgs;
};

/**
 * Should be called to format output(result) of method
 *
 * @method formatOutput
 * @param result {Object}
 * @return {Object}
 */

Subscription.prototype._formatOutput = function (result) {
    var subscription = this.options.subscription;

    return (subscription && subscription.outputFormatter && result) ? subscription.outputFormatter(result) : result;
};

/**
 * Should create payload from given input args
 *
 * @method toPayload
 * @param {Array} args
 * @return {Object}
 */
Subscription.prototype._toPayload = function (args) {
    var params = [];
    this.callback = this._extractCallback(args) || _.identity;

    if (!this.subscriptionMethod) {
        this.subscriptionMethod = args.shift();

        // replace subscription with given name
        if (this.options.subscription.subscriptionName) {
            this.subscriptionMethod = this.options.subscription.subscriptionName;
        }
    }

    if (!this.arguments) {
        this.arguments = this._formatInput(args);
        this._validateArgs(this.arguments);
        args = []; // make empty after validation

    }

    // re-add subscriptionName
    params.push(this.subscriptionMethod);
    params = params.concat(this.arguments);


    if (args.length) {
        throw new Error('Only a callback is allowed as parameter on an already instantiated subscription.');
    }

    return {
        method: this.options.type + '_subscribe',
        params: params
    };
};

/**
 * Unsubscribes and clears callbacks
 *
 * @method unsubscribe
 * @return {Object}
 */
Subscription.prototype.unsubscribe = function(callback) {
    this.options.requestManager.removeSubscription(this.id, callback);
    this.id = null;
    this.removeAllListeners();
    clearInterval(this._reconnectIntervalId);
};

/**
 * Subscribes and watches for changes
 *
 * @method subscribe
 * @param {String} subscription the subscription
 * @param {Object} options the options object with address topics and fromBlock
 * @return {Object}
 */
Subscription.prototype.subscribe = function() {
    var _this = this;
    var args = Array.prototype.slice.call(arguments);
    var payload = this._toPayload(args);

    if(!payload) {
        return this;
    }

    if(!this.options.requestManager.provider) {
        var err1 = new Error('No provider set.');
        this.callback(err1, null, this);
        this.emit('error', err1);
        return this;
    }

    // throw error, if provider doesnt support subscriptions
    if(!this.options.requestManager.provider.on) {
        var err2 = new Error('The current provider doesn\'t support subscriptions: '+ this.options.requestManager.provider.constructor.name);
        this.callback(err2, null, this);
        this.emit('error', err2);
        return this;
    }

    // if id is there unsubscribe first
    if (this.id) {
        this.unsubscribe();
    }

    // store the params in the options object
    this.options.params = payload.params[1];

    // get past logs, if fromBlock is available
    if(payload.params[0] === 'logs' && _.isObject(payload.params[1]) && payload.params[1].hasOwnProperty('fromBlock') && isFinite(payload.params[1].fromBlock)) {
        // send the subscription request
        this.options.requestManager.send({
            method: 'eth_getLogs',
            params: [payload.params[1]]
        }, function (err, logs) {
            if(!err) {
                logs.forEach(function(log){
                    var output = _this._formatOutput(log);
                    _this.callback(null, output, _this);
                    _this.emit('data', output);
                });

                // TODO subscribe here? after the past logs?

            } else {
                _this.callback(err, null, _this);
                _this.emit('error', err);
            }
        });
    }

    // create subscription
    // TODO move to separate function? so that past logs can go first?

    if(typeof payload.params[1] === 'object')
        delete payload.params[1].fromBlock;

    this.options.requestManager.send(payload, function (err, result) {
        if(!err && result) {
            _this.id = result;
            _this.emit('connected', result);

            // call callback on notifications
            _this.options.requestManager.addSubscription(_this.id, payload.params[0] , _this.options.type, function(err, result) {

                if (!err) {
                    if (!_.isArray(result)) {
                        result = [result];
                    }

                    result.forEach(function(resultItem) {
                        var output = _this._formatOutput(resultItem);

                        if (_.isFunction(_this.options.subscription.subscriptionHandler)) {
                            return _this.options.subscription.subscriptionHandler.call(_this, output);
                        } else {
                            _this.emit('data', output);
                        }

                        // call the callback, last so that unsubscribe there won't affect the emit above
                        _this.callback(null, output, _this);
                    });
                } else {
                    // unsubscribe, but keep listeners
                    _this.options.requestManager.removeSubscription(_this.id);

                    // re-subscribe, if connection fails
                    if(_this.options.requestManager.provider.once) {
                        _this._reconnectIntervalId = setInterval(function () {
                            // TODO check if that makes sense!
                            if (_this.options.requestManager.provider.reconnect) {
                                _this.options.requestManager.provider.reconnect();
                            }
                        }, 500);

                        _this.options.requestManager.provider.once('connect', function () {
                            clearInterval(_this._reconnectIntervalId);
                            _this.subscribe(_this.callback);
                        });
                    }
                    _this.emit('error', err);

                     // call the callback, last so that unsubscribe there won't affect the emit above
                    _this.callback(err, null, _this);
                }
            });
        } else {
          _this.callback(err, null, _this);
          _this.emit('error', err);
        }
    });

    // return an object to cancel the subscription
    return this;
};

module.exports = Subscription;


/***/ }),

/***/ 104032:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file extend.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */




var formatters = __webpack_require__(244207).formatters;
var Method = __webpack_require__(587940);
var utils = __webpack_require__(154067);


var extend = function (pckg) {
    /* jshint maxcomplexity:5 */
    var ex = function (extension) {

        var extendedObject;
        if (extension.property) {
            if (!pckg[extension.property]) {
                pckg[extension.property] = {};
            }
            extendedObject = pckg[extension.property];
        } else {
            extendedObject = pckg;
        }

        if (extension.methods) {
            extension.methods.forEach(function (method) {
                if(!(method instanceof Method)) {
                    method = new Method(method);
                }

                method.attachToObject(extendedObject);
                method.setRequestManager(pckg._requestManager);
            });
        }

        return pckg;
    };

    ex.formatters = formatters;
    ex.utils = utils;
    ex.Method = Method;

    return ex;
};



module.exports = extend;



/***/ }),

/***/ 36310:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */




var requestManager = __webpack_require__(262275);
var extend = __webpack_require__(104032);

module.exports = {
    packageInit: function (pkg, args) {
        args = Array.prototype.slice.call(args);

        if (!pkg) {
            throw new Error('You need to instantiate using the "new" keyword.');
        }


        // make property of pkg._provider, which can properly set providers
        Object.defineProperty(pkg, 'currentProvider', {
            get: function () {
                return pkg._provider;
            },
            set: function (value) {
                return pkg.setProvider(value);
            },
            enumerable: true,
            configurable: true
        });

        // inherit from web3 umbrella package
        if (args[0] && args[0]._requestManager) {
            pkg._requestManager = new requestManager.Manager(args[0].currentProvider);

        // set requestmanager on package
        } else {
            pkg._requestManager = new requestManager.Manager();
            pkg._requestManager.setProvider(args[0], args[1]);
        }

        // add givenProvider
        pkg.givenProvider = requestManager.Manager.givenProvider;
        pkg.providers = requestManager.Manager.providers;

         pkg._provider =  pkg._requestManager.provider;

        // add SETPROVIDER function (don't overwrite if already existing)
        if (!pkg.setProvider) {
            pkg.setProvider = function (provider, net) {
                pkg._requestManager.setProvider(provider, net);
                pkg._provider = pkg._requestManager.provider;
                return true;
            };
        }

        // attach batch request creation
        pkg.BatchRequest = requestManager.BatchManager.bind(null, pkg._requestManager);

        // attach extend function
        pkg.extend = extend(pkg);
    },
    addProviders: function (pkg) {
        pkg.givenProvider = requestManager.Manager.givenProvider;
        pkg.providers = requestManager.Manager.providers;
    }
};



/***/ }),

/***/ 344066:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file index.js
 * @author Marek Kotewicz <marek@parity.io>
 * @author Fabian Vogelsteller <fabian@frozeman.de>
 * @date 2018
 */

var _ = __webpack_require__(513469);
var utils = __webpack_require__(154067);

var EthersAbi = __webpack_require__(404235).AbiCoder;
var ethersAbiCoder = new EthersAbi(function (type, value) {
    if (type.match(/^u?int/) && !_.isArray(value) && (!_.isObject(value) || value.constructor.name !== 'BN')) {
        return value.toString();
    }
    return value;
});

// result method
function Result() {
}

/**
 * ABICoder prototype should be used to encode/decode solidity params of any type
 */
var ABICoder = function () {
};

/**
 * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including  types.
 *
 * @method encodeFunctionSignature
 * @param {String|Object} functionName
 * @return {String} encoded function name
 */
ABICoder.prototype.encodeFunctionSignature = function (functionName) {
    if (_.isObject(functionName)) {
        functionName = utils._jsonInterfaceMethodToString(functionName);
    }

    return utils.sha3(functionName).slice(0, 10);
};

/**
 * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including  types.
 *
 * @method encodeEventSignature
 * @param {String|Object} functionName
 * @return {String} encoded function name
 */
ABICoder.prototype.encodeEventSignature = function (functionName) {
    if (_.isObject(functionName)) {
        functionName = utils._jsonInterfaceMethodToString(functionName);
    }

    return utils.sha3(functionName);
};

/**
 * Should be used to encode plain param
 *
 * @method encodeParameter
 * @param {String} type
 * @param {Object} param
 * @return {String} encoded plain param
 */
ABICoder.prototype.encodeParameter = function (type, param) {
    return this.encodeParameters([type], [param]);
};

/**
 * Should be used to encode list of params
 *
 * @method encodeParameters
 * @param {Array} types
 * @param {Array} params
 * @return {String} encoded list of params
 */
ABICoder.prototype.encodeParameters = function (types, params) {
    return ethersAbiCoder.encode(this.mapTypes(types), params);
};

/**
 * Map types if simplified format is used
 *
 * @method mapTypes
 * @param {Array} types
 * @return {Array}
 */
ABICoder.prototype.mapTypes = function (types) {
    var self = this;
    var mappedTypes = [];
    types.forEach(function (type) {
        if (self.isSimplifiedStructFormat(type)) {
            var structName = Object.keys(type)[0];
            mappedTypes.push(
                Object.assign(
                    self.mapStructNameAndType(structName),
                    {
                        components: self.mapStructToCoderFormat(type[structName])
                    }
                )
            );

            return;
        }

        mappedTypes.push(type);
    });

    return mappedTypes;
};

/**
 * Check if type is simplified struct format
 *
 * @method isSimplifiedStructFormat
 * @param {string | Object} type
 * @returns {boolean}
 */
ABICoder.prototype.isSimplifiedStructFormat = function (type) {
    return typeof type === 'object' && typeof type.components === 'undefined' && typeof type.name === 'undefined';
};

/**
 * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used
 *
 * @method mapStructNameAndType
 * @param {string} structName
 * @return {{type: string, name: *}}
 */
ABICoder.prototype.mapStructNameAndType = function (structName) {
    var type = 'tuple';

    if (structName.indexOf('[]') > -1) {
        type = 'tuple[]';
        structName = structName.slice(0, -2);
    }

    return {type: type, name: structName};
};

/**
 * Maps the simplified format in to the expected format of the ABICoder
 *
 * @method mapStructToCoderFormat
 * @param {Object} struct
 * @return {Array}
 */
ABICoder.prototype.mapStructToCoderFormat = function (struct) {
    var self = this;
    var components = [];
    Object.keys(struct).forEach(function (key) {
        if (typeof struct[key] === 'object') {
            components.push(
                Object.assign(
                    self.mapStructNameAndType(key),
                    {
                        components: self.mapStructToCoderFormat(struct[key])
                    }
                )
            );

            return;
        }

        components.push({
            name: key,
            type: struct[key]
        });
    });

    return components;
};

/**
 * Encodes a function call from its json interface and parameters.
 *
 * @method encodeFunctionCall
 * @param {Array} jsonInterface
 * @param {Array} params
 * @return {String} The encoded ABI for this function call
 */
ABICoder.prototype.encodeFunctionCall = function (jsonInterface, params) {
    return this.encodeFunctionSignature(jsonInterface) + this.encodeParameters(jsonInterface.inputs, params).replace('0x', '');
};

/**
 * Should be used to decode bytes to plain param
 *
 * @method decodeParameter
 * @param {String} type
 * @param {String} bytes
 * @return {Object} plain param
 */
ABICoder.prototype.decodeParameter = function (type, bytes) {
    return this.decodeParameters([type], bytes)[0];
};

/**
 * Should be used to decode list of params
 *
 * @method decodeParameter
 * @param {Array} outputs
 * @param {String} bytes
 * @return {Array} array of plain params
 */
ABICoder.prototype.decodeParameters = function (outputs, bytes) {
    if (outputs.length > 0 && (!bytes || bytes === '0x' || bytes === '0X')) {
        throw new Error(
            'Returned values aren\'t valid, did it run Out of Gas? ' +
            'You might also see this error if you are not using the ' +
            'correct ABI for the contract you are retrieving data from, ' +
            'requesting data from a block number that does not exist, ' +
            'or querying a node which is not fully synced.'
        );
    }

    var res = ethersAbiCoder.decode(this.mapTypes(outputs), '0x' + bytes.replace(/0x/i, ''));
    var returnValue = new Result();
    returnValue.__length__ = 0;

    outputs.forEach(function (output, i) {
        var decodedValue = res[returnValue.__length__];
        decodedValue = (decodedValue === '0x') ? null : decodedValue;

        returnValue[i] = decodedValue;

        if (_.isObject(output) && output.name) {
            returnValue[output.name] = decodedValue;
        }

        returnValue.__length__++;
    });

    return returnValue;
};

/**
 * Decodes events non- and indexed parameters.
 *
 * @method decodeLog
 * @param {Object} inputs
 * @param {String} data
 * @param {Array} topics
 * @return {Array} array of plain params
 */
ABICoder.prototype.decodeLog = function (inputs, data, topics) {
    var _this = this;
    topics = _.isArray(topics) ? topics : [topics];

    data = data || '';

    var notIndexedInputs = [];
    var indexedParams = [];
    var topicCount = 0;

    // TODO check for anonymous logs?

    inputs.forEach(function (input, i) {
        if (input.indexed) {
            indexedParams[i] = (['bool', 'int', 'uint', 'address', 'fixed', 'ufixed'].find(function (staticType) {
                return input.type.indexOf(staticType) !== -1;
            })) ? _this.decodeParameter(input.type, topics[topicCount]) : topics[topicCount];
            topicCount++;
        } else {
            notIndexedInputs[i] = input;
        }
    });


    var nonIndexedData = data;
    var notIndexedParams = (nonIndexedData) ? this.decodeParameters(notIndexedInputs, nonIndexedData) : [];

    var returnValue = new Result();
    returnValue.__length__ = 0;


    inputs.forEach(function (res, i) {
        returnValue[i] = (res.type === 'string') ? '' : null;

        if (typeof notIndexedParams[i] !== 'undefined') {
            returnValue[i] = notIndexedParams[i];
        }
        if (typeof indexedParams[i] !== 'undefined') {
            returnValue[i] = indexedParams[i];
        }

        if (res.name) {
            returnValue[res.name] = returnValue[i];
        }

        returnValue.__length__++;
    });

    return returnValue;
};

var coder = new ABICoder();

module.exports = coder;


/***/ }),

/***/ 903197:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file accounts.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var core = __webpack_require__(36310);
var Method = __webpack_require__(587940);
var Promise = __webpack_require__(315845);
var Account = __webpack_require__(443835);
var Hash = __webpack_require__(172324);
var RLP = __webpack_require__(19714);// jshint ignore:line
var Bytes = __webpack_require__(94161);// jshint ignore:line
var cryp = (typeof global === 'undefined') ? __webpack_require__(855835) : __webpack_require__(676417);
var scrypt = __webpack_require__(998527);
var uuid = __webpack_require__(589899);
var utils = __webpack_require__(154067);
var helpers = __webpack_require__(244207);
var Transaction = __webpack_require__(213665)/* .Transaction */ .YW;
var Common = __webpack_require__(265982).default;


var isNot = function(value) {
    return (_.isUndefined(value) || _.isNull(value));
};

var Accounts = function Accounts() {
    var _this = this;

    // sets _requestmanager
    core.packageInit(this, arguments);

    // remove unecessary core functions
    delete this.BatchRequest;
    delete this.extend;

    var _ethereumCall = [
        new Method({
            name: 'getNetworkId',
            call: 'net_version',
            params: 0,
            outputFormatter: parseInt
        }),
        new Method({
            name: 'getChainId',
            call: 'eth_chainId',
            params: 0,
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'getGasPrice',
            call: 'eth_gasPrice',
            params: 0
        }),
        new Method({
            name: 'getTransactionCount',
            call: 'eth_getTransactionCount',
            params: 2,
            inputFormatter: [function(address) {
                if (utils.isAddress(address)) {
                    return address;
                } else {
                    throw new Error('Address ' + address + ' is not a valid address to get the "transactionCount".');
                }
            }, function() {
                return 'latest';
            }]
        })
    ];
    // attach methods to this._ethereumCall
    this._ethereumCall = {};
    _.each(_ethereumCall, function(method) {
        method.attachToObject(_this._ethereumCall);
        method.setRequestManager(_this._requestManager);
    });


    this.wallet = new Wallet(this);
};

Accounts.prototype._addAccountFunctions = function(account) {
    var _this = this;

    // add sign functions
    account.signTransaction = function signTransaction(tx, callback) {
        return _this.signTransaction(tx, account.privateKey, callback);
    };
    account.sign = function sign(data) {
        return _this.sign(data, account.privateKey);
    };

    account.encrypt = function encrypt(password, options) {
        return _this.encrypt(account.privateKey, password, options);
    };


    return account;
};

Accounts.prototype.create = function create(entropy) {
    return this._addAccountFunctions(Account.create(entropy || utils.randomHex(32)));
};

Accounts.prototype.privateKeyToAccount = function privateKeyToAccount(privateKey) {
    return this._addAccountFunctions(Account.fromPrivate(privateKey));
};

Accounts.prototype.signTransaction = function signTransaction(tx, privateKey, callback) {
    var _this = this,
        error = false,
        transactionOptions = {},
        result,
        hasTxSigningOptions = !!(tx && ((tx.chain && tx.hardfork) || tx.common));

    callback = callback || function() {
    };

    if (!tx) {
        error = new Error('No transaction object given!');

        callback(error);
        return Promise.reject(error);
    }

    function signed(tx) {
        if (tx.common && (tx.chain && tx.hardfork)) {
            error = new Error(
                'Please provide the ethereumjs-common object or the chain and hardfork property but not all together.'
            );
        }

        if ((tx.chain && !tx.hardfork) || (tx.hardfork && !tx.chain)) {
            error = new Error(
                'When specifying chain and hardfork, both values must be defined. ' +
                'Received "chain": ' + tx.chain + ', "hardfork": ' + tx.hardfork
            );
        }

        if (!tx.gas && !tx.gasLimit) {
            error = new Error('"gas" is missing');
        }

        if (tx.nonce < 0 ||
            tx.gas < 0 ||
            tx.gasPrice < 0 ||
            tx.chainId < 0) {
            error = new Error('Gas, gasPrice, nonce or chainId is lower than 0');
        }

        if (error) {
            callback(error);
            return Promise.reject(error);
        }

        try {
            var transaction = helpers.formatters.inputCallFormatter(_.clone(tx));
            transaction.to = transaction.to || '0x';
            transaction.data = transaction.data || '0x';
            transaction.value = transaction.value || '0x';
            transaction.chainId = utils.numberToHex(transaction.chainId);

            // Because tx has no ethereumjs-tx signing options we use fetched vals.
            if (!hasTxSigningOptions) {
                transactionOptions.common = Common.forCustomChain(
                    'mainnet',
                    {
                        name: 'custom-network',
                        networkId: transaction.networkId,
                        chainId: transaction.chainId
                    },
                    'petersburg'
                );

                delete transaction.networkId;
            } else {
                if (transaction.common) {
                    transactionOptions.common = Common.forCustomChain(
                        transaction.common.baseChain || 'mainnet',
                        {
                            name: transaction.common.customChain.name || 'custom-network',
                            networkId: transaction.common.customChain.networkId,
                            chainId: transaction.common.customChain.chainId
                        },
                        transaction.common.hardfork || 'petersburg'
                    );

                    delete transaction.common;
                }

                if (transaction.chain) {
                    transactionOptions.chain = transaction.chain;
                    delete transaction.chain;
                }

                if (transaction.hardfork) {
                    transactionOptions.hardfork = transaction.hardfork;
                    delete transaction.hardfork;
                }
            }

            if (privateKey.startsWith('0x')) {
                privateKey = privateKey.substring(2);
            }

            var ethTx = new Transaction(transaction, transactionOptions);

            ethTx.sign(Buffer.from(privateKey, 'hex'));

            var validationResult = ethTx.validate(true);

            if (validationResult !== '') {
                throw new Error('Signer Error: ' + validationResult);
            }

            var rlpEncoded = ethTx.serialize().toString('hex');
            var rawTransaction = '0x' + rlpEncoded;
            var transactionHash = utils.keccak256(rawTransaction);

            return {
                messageHash: '0x' + Buffer.from(ethTx.hash(false)).toString('hex'),
                v: '0x' + Buffer.from(ethTx.v).toString('hex'),
                r: '0x' + Buffer.from(ethTx.r).toString('hex'),
                s: '0x' + Buffer.from(ethTx.s).toString('hex'),
                rawTransaction: rawTransaction,
                transactionHash: transactionHash
            };

        } catch (e) {
            callback(e);
            return Promise.reject(e);
        }

        callback(null, result);
        return result;
    }


    // Resolve immediately if nonce, chainId, price and signing options are provided
    if (tx.nonce !== undefined && tx.chainId !== undefined && tx.gasPrice !== undefined && hasTxSigningOptions) {
        return Promise.resolve(signed(tx));
    }

    // Otherwise, get the missing info from the Ethereum Node
    return Promise.all([
        isNot(tx.chainId) ? _this._ethereumCall.getChainId() : tx.chainId,
        isNot(tx.gasPrice) ? _this._ethereumCall.getGasPrice() : tx.gasPrice,
        isNot(tx.nonce) ? _this._ethereumCall.getTransactionCount(_this.privateKeyToAccount(privateKey).address) : tx.nonce,
        isNot(hasTxSigningOptions) ? _this._ethereumCall.getNetworkId() : 1
    ]).then(function(args) {
        if (isNot(args[0]) || isNot(args[1]) || isNot(args[2]) || isNot(args[3])) {
            throw new Error('One of the values "chainId", "networkId", "gasPrice", or "nonce" couldn\'t be fetched: ' + JSON.stringify(args));
        }
        return signed(_.extend(tx, {chainId: args[0], gasPrice: args[1], nonce: args[2], networkId: args[3]}));
    });
};

/* jshint ignore:start */
Accounts.prototype.recoverTransaction = function recoverTransaction(rawTx) {
    var values = RLP.decode(rawTx);
    var signature = Account.encodeSignature(values.slice(6, 9));
    var recovery = Bytes.toNumber(values[6]);
    var extraData = recovery < 35 ? [] : [Bytes.fromNumber((recovery - 35) >> 1), '0x', '0x'];
    var signingData = values.slice(0, 6).concat(extraData);
    var signingDataHex = RLP.encode(signingData);
    return Account.recover(Hash.keccak256(signingDataHex), signature);
};
/* jshint ignore:end */

Accounts.prototype.hashMessage = function hashMessage(data) {
    var message = utils.isHexStrict(data) ? utils.hexToBytes(data) : data;
    var messageBuffer = Buffer.from(message);
    var preamble = '\x19Ethereum Signed Message:\n' + message.length;
    var preambleBuffer = Buffer.from(preamble);
    var ethMessage = Buffer.concat([preambleBuffer, messageBuffer]);
    return Hash.keccak256s(ethMessage);
};

Accounts.prototype.sign = function sign(data, privateKey) {
    var hash = this.hashMessage(data);
    var signature = Account.sign(hash, privateKey);
    var vrs = Account.decodeSignature(signature);
    return {
        message: data,
        messageHash: hash,
        v: vrs[0],
        r: vrs[1],
        s: vrs[2],
        signature: signature
    };
};

Accounts.prototype.recover = function recover(message, signature, preFixed) {
    var args = [].slice.apply(arguments);


    if (_.isObject(message)) {
        return this.recover(message.messageHash, Account.encodeSignature([message.v, message.r, message.s]), true);
    }

    if (!preFixed) {
        message = this.hashMessage(message);
    }

    if (args.length >= 4) {
        preFixed = args.slice(-1)[0];
        preFixed = _.isBoolean(preFixed) ? !!preFixed : false;

        return this.recover(message, Account.encodeSignature(args.slice(1, 4)), preFixed); // v, r, s
    }
    return Account.recover(message, signature);
};

// Taken from https://github.com/ethereumjs/ethereumjs-wallet
Accounts.prototype.decrypt = function(v3Keystore, password, nonStrict) {
    /* jshint maxcomplexity: 10 */

    if (!_.isString(password)) {
        throw new Error('No password given.');
    }

    var json = (_.isObject(v3Keystore)) ? v3Keystore : JSON.parse(nonStrict ? v3Keystore.toLowerCase() : v3Keystore);

    if (json.version !== 3) {
        throw new Error('Not a valid V3 wallet');
    }

    var derivedKey;
    var kdfparams;
    if (json.crypto.kdf === 'scrypt') {
        kdfparams = json.crypto.kdfparams;

        // FIXME: support progress reporting callback
        derivedKey = scrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen);
    } else if (json.crypto.kdf === 'pbkdf2') {
        kdfparams = json.crypto.kdfparams;

        if (kdfparams.prf !== 'hmac-sha256') {
            throw new Error('Unsupported parameters to PBKDF2');
        }

        derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256');
    } else {
        throw new Error('Unsupported key derivation scheme');
    }

    var ciphertext = Buffer.from(json.crypto.ciphertext, 'hex');

    var mac = utils.sha3(Buffer.concat([derivedKey.slice(16, 32), ciphertext])).replace('0x', '');
    if (mac !== json.crypto.mac) {
        throw new Error('Key derivation failed - possibly wrong password');
    }

    var decipher = cryp.createDecipheriv(json.crypto.cipher, derivedKey.slice(0, 16), Buffer.from(json.crypto.cipherparams.iv, 'hex'));
    var seed = '0x' + Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString('hex');

    return this.privateKeyToAccount(seed);
};

Accounts.prototype.encrypt = function(privateKey, password, options) {
    /* jshint maxcomplexity: 20 */
    var account = this.privateKeyToAccount(privateKey);

    options = options || {};
    var salt = options.salt || cryp.randomBytes(32);
    var iv = options.iv || cryp.randomBytes(16);

    var derivedKey;
    var kdf = options.kdf || 'scrypt';
    var kdfparams = {
        dklen: options.dklen || 32,
        salt: salt.toString('hex')
    };

    if (kdf === 'pbkdf2') {
        kdfparams.c = options.c || 262144;
        kdfparams.prf = 'hmac-sha256';
        derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256');
    } else if (kdf === 'scrypt') {
        // FIXME: support progress reporting callback
        kdfparams.n = options.n || 8192; // 2048 4096 8192 16384
        kdfparams.r = options.r || 8;
        kdfparams.p = options.p || 1;
        derivedKey = scrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen);
    } else {
        throw new Error('Unsupported kdf');
    }

    var cipher = cryp.createCipheriv(options.cipher || 'aes-128-ctr', derivedKey.slice(0, 16), iv);
    if (!cipher) {
        throw new Error('Unsupported cipher');
    }

    var ciphertext = Buffer.concat([cipher.update(Buffer.from(account.privateKey.replace('0x', ''), 'hex')), cipher.final()]);

    var mac = utils.sha3(Buffer.concat([derivedKey.slice(16, 32), Buffer.from(ciphertext, 'hex')])).replace('0x', '');

    return {
        version: 3,
        id: uuid.v4({random: options.uuid || cryp.randomBytes(16)}),
        address: account.address.toLowerCase().replace('0x', ''),
        crypto: {
            ciphertext: ciphertext.toString('hex'),
            cipherparams: {
                iv: iv.toString('hex')
            },
            cipher: options.cipher || 'aes-128-ctr',
            kdf: kdf,
            kdfparams: kdfparams,
            mac: mac.toString('hex')
        }
    };
};


// Note: this is trying to follow closely the specs on
// http://web3js.readthedocs.io/en/1.0/web3-eth-accounts.html

function Wallet(accounts) {
    this._accounts = accounts;
    this.length = 0;
    this.defaultKeyName = 'web3js_wallet';
}

Wallet.prototype._findSafeIndex = function(pointer) {
    pointer = pointer || 0;
    if (_.has(this, pointer)) {
        return this._findSafeIndex(pointer + 1);
    } else {
        return pointer;
    }
};

Wallet.prototype._currentIndexes = function() {
    var keys = Object.keys(this);
    var indexes = keys
        .map(function(key) {
            return parseInt(key);
        })
        .filter(function(n) {
            return (n < 9e20);
        });

    return indexes;
};

Wallet.prototype.create = function(numberOfAccounts, entropy) {
    for (var i = 0; i < numberOfAccounts; ++i) {
        this.add(this._accounts.create(entropy).privateKey);
    }
    return this;
};

Wallet.prototype.add = function(account) {

    if (_.isString(account)) {
        account = this._accounts.privateKeyToAccount(account);
    }
    if (!this[account.address]) {
        account = this._accounts.privateKeyToAccount(account.privateKey);
        account.index = this._findSafeIndex();

        this[account.index] = account;
        this[account.address] = account;
        this[account.address.toLowerCase()] = account;

        this.length++;

        return account;
    } else {
        return this[account.address];
    }
};

Wallet.prototype.remove = function(addressOrIndex) {
    var account = this[addressOrIndex];

    if (account && account.address) {
        // address
        this[account.address].privateKey = null;
        delete this[account.address];
        // address lowercase
        this[account.address.toLowerCase()].privateKey = null;
        delete this[account.address.toLowerCase()];
        // index
        this[account.index].privateKey = null;
        delete this[account.index];

        this.length--;

        return true;
    } else {
        return false;
    }
};

Wallet.prototype.clear = function() {
    var _this = this;
    var indexes = this._currentIndexes();

    indexes.forEach(function(index) {
        _this.remove(index);
    });

    return this;
};

Wallet.prototype.encrypt = function(password, options) {
    var _this = this;
    var indexes = this._currentIndexes();

    var accounts = indexes.map(function(index) {
        return _this[index].encrypt(password, options);
    });

    return accounts;
};


Wallet.prototype.decrypt = function(encryptedWallet, password) {
    var _this = this;

    encryptedWallet.forEach(function(keystore) {
        var account = _this._accounts.decrypt(keystore, password);

        if (account) {
            _this.add(account);
        } else {
            throw new Error('Couldn\'t decrypt accounts. Password wrong?');
        }
    });

    return this;
};

Wallet.prototype.save = function(password, keyName) {
    localStorage.setItem(keyName || this.defaultKeyName, JSON.stringify(this.encrypt(password)));

    return true;
};

Wallet.prototype.load = function(password, keyName) {
    var keystore = localStorage.getItem(keyName || this.defaultKeyName);

    if (keystore) {
        try {
            keystore = JSON.parse(keystore);
        } catch (e) {

        }
    }

    return this.decrypt(keystore || [], password);
};

if (!storageAvailable('localStorage')) {
    delete Wallet.prototype.save;
    delete Wallet.prototype.load;
}

/**
 * Checks whether a storage type is available or not
 * For more info on how this works, please refer to MDN documentation
 * https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Feature-detecting_localStorage
 *
 * @method storageAvailable
 * @param {String} type the type of storage ('localStorage', 'sessionStorage')
 * @returns {Boolean} a boolean indicating whether the specified storage is available or not
 */
function storageAvailable(type) {
    var storage;
    try {
        storage = window[type];
        var x = '__storage_test__';
        storage.setItem(x, x);
        storage.removeItem(x);
        return true;
    } catch (e) {
        return e && (
                // everything except Firefox
            e.code === 22 ||
            // Firefox
            e.code === 1014 ||
            // test name field too, because code might not be present
            // everything except Firefox
            e.name === 'QuotaExceededError' ||
            // Firefox
            e.name === 'NS_ERROR_DOM_QUOTA_REACHED') &&
            // acknowledge QuotaExceededError only if there's something already stored
            (storage && storage.length !== 0);
    }
}


module.exports = Accounts;


/***/ }),

/***/ 558804:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file contract.js
 *
 * To initialize a contract use:
 *
 *  var Contract = require('web3-eth-contract');
 *  Contract.setProvider('ws://localhost:8546');
 *  var contract = new Contract(abi, address, ...);
 *
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */





var _ = __webpack_require__(513469);
var core = __webpack_require__(36310);
var Method = __webpack_require__(587940);
var utils = __webpack_require__(154067);
var Subscription = __webpack_require__(638096).subscription;
var formatters = __webpack_require__(244207).formatters;
var errors = __webpack_require__(244207).errors;
var promiEvent = __webpack_require__(969093);
var abi = __webpack_require__(344066);


/**
 * Should be called to create new contract instance
 *
 * @method Contract
 * @constructor
 * @param {Array} jsonInterface
 * @param {String} address
 * @param {Object} options
 */
var Contract = function Contract(jsonInterface, address, options) {
    var _this = this,
        args = Array.prototype.slice.call(arguments);

    if(!(this instanceof Contract)) {
        throw new Error('Please use the "new" keyword to instantiate a web3.eth.contract() object!');
    }

    // sets _requestmanager
    core.packageInit(this, [this.constructor.currentProvider]);

    this.clearSubscriptions = this._requestManager.clearSubscriptions;



    if(!jsonInterface || !(Array.isArray(jsonInterface))) {
        throw new Error('You must provide the json interface of the contract when instantiating a contract object.');
    }



    // create the options object
    this.options = {};

    var lastArg = args[args.length - 1];
    if(_.isObject(lastArg) && !_.isArray(lastArg)) {
        options = lastArg;

        this.options = _.extend(this.options, this._getOrSetDefaultOptions(options));
        if(_.isObject(address)) {
            address = null;
        }
    }

    // set address
    Object.defineProperty(this.options, 'address', {
        set: function(value){
            if(value) {
                _this._address = utils.toChecksumAddress(formatters.inputAddressFormatter(value));
            }
        },
        get: function(){
            return _this._address;
        },
        enumerable: true
    });

    // add method and event signatures, when the jsonInterface gets set
    Object.defineProperty(this.options, 'jsonInterface', {
        set: function(value){
            _this.methods = {};
            _this.events = {};

            _this._jsonInterface = value.map(function(method) {
                var func,
                    funcName;

                // make constant and payable backwards compatible
                method.constant = (method.stateMutability === "view" || method.stateMutability === "pure" || method.constant);
                method.payable = (method.stateMutability === "payable" || method.payable);


                if (method.name) {
                    funcName = utils._jsonInterfaceMethodToString(method);
                }


                // function
                if (method.type === 'function') {
                    method.signature = abi.encodeFunctionSignature(funcName);
                    func = _this._createTxObject.bind({
                        method: method,
                        parent: _this
                    });


                    // add method only if not one already exists
                    if(!_this.methods[method.name]) {
                        _this.methods[method.name] = func;
                    } else {
                        var cascadeFunc = _this._createTxObject.bind({
                            method: method,
                            parent: _this,
                            nextMethod: _this.methods[method.name]
                        });
                        _this.methods[method.name] = cascadeFunc;
                    }

                    // definitely add the method based on its signature
                    _this.methods[method.signature] = func;

                    // add method by name
                    _this.methods[funcName] = func;


                // event
                } else if (method.type === 'event') {
                    method.signature = abi.encodeEventSignature(funcName);
                    var event = _this._on.bind(_this, method.signature);

                    // add method only if not already exists
                    if(!_this.events[method.name] || _this.events[method.name].name === 'bound ')
                        _this.events[method.name] = event;

                    // definitely add the method based on its signature
                    _this.events[method.signature] = event;

                    // add event by name
                    _this.events[funcName] = event;
                }


                return method;
            });

            // add allEvents
            _this.events.allEvents = _this._on.bind(_this, 'allevents');

            return _this._jsonInterface;
        },
        get: function(){
            return _this._jsonInterface;
        },
        enumerable: true
    });

    // get default account from the Class
    var defaultAccount = this.constructor.defaultAccount;
    var defaultBlock = this.constructor.defaultBlock || 'latest';
    this.transactionBlockTimeout = this.constructor.transactionBlockTimeout;
    this.transactionConfirmationBlocks = this.constructor.transactionConfirmationBlocks;
    this.transactionPollingTimeout = this.constructor.transactionPollingTimeout;
    this.defaultChain = this.constructor.defaultChain;
    this.defaultHardfork = this.constructor.defaultHardfork;
    this.defaultCommon = this.constructor.defaultCommon;

    Object.defineProperty(this, 'defaultAccount', {
        get: function () {
            return defaultAccount;
        },
        set: function (val) {
            if(val) {
                defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val));
            }

            return val;
        },
        enumerable: true
    });
    Object.defineProperty(this, 'defaultBlock', {
        get: function () {
            return defaultBlock;
        },
        set: function (val) {
            defaultBlock = val;

            return val;
        },
        enumerable: true
    });

    // properties
    this.methods = {};
    this.events = {};

    this._address = null;
    this._jsonInterface = [];

    // set getter/setter properties
    this.options.address = address;
    this.options.jsonInterface = jsonInterface;

};

Contract.setProvider = function(provider, accounts) {
    // Contract.currentProvider = provider;
    core.packageInit(this, [provider]);

    this._ethAccounts = accounts;
};


/**
 * Get the callback and modiufy the array if necessary
 *
 * @method _getCallback
 * @param {Array} args
 * @return {Function} the callback
 */
Contract.prototype._getCallback = function getCallback(args) {
    if (args && _.isFunction(args[args.length - 1])) {
        return args.pop(); // modify the args array!
    }
};

/**
 * Checks that no listener with name "newListener" or "removeListener" is added.
 *
 * @method _checkListener
 * @param {String} type
 * @param {String} event
 * @return {Object} the contract instance
 */
Contract.prototype._checkListener = function(type, event){
    if(event === type) {
        throw new Error('The event "'+ type +'" is a reserved event name, you can\'t use it.');
    }
};


/**
 * Use default values, if options are not available
 *
 * @method _getOrSetDefaultOptions
 * @param {Object} options the options gived by the user
 * @return {Object} the options with gaps filled by defaults
 */
Contract.prototype._getOrSetDefaultOptions = function getOrSetDefaultOptions(options) {
    var gasPrice = options.gasPrice ? String(options.gasPrice): null;
    var from = options.from ? utils.toChecksumAddress(formatters.inputAddressFormatter(options.from)) : null;

    options.data = options.data || this.options.data;

    options.from = from || this.options.from;
    options.gasPrice = gasPrice || this.options.gasPrice;
    options.gas = options.gas || options.gasLimit || this.options.gas;

    // TODO replace with only gasLimit?
    delete options.gasLimit;

    return options;
};


/**
 * Should be used to encode indexed params and options to one final object
 *
 * @method _encodeEventABI
 * @param {Object} event
 * @param {Object} options
 * @return {Object} everything combined together and encoded
 */
Contract.prototype._encodeEventABI = function (event, options) {
    options = options || {};
    var filter = options.filter || {},
        result = {};

    ['fromBlock', 'toBlock'].filter(function (f) {
        return options[f] !== undefined;
    }).forEach(function (f) {
        result[f] = formatters.inputBlockNumberFormatter(options[f]);
    });

    // use given topics
    if(_.isArray(options.topics)) {
        result.topics = options.topics;

    // create topics based on filter
    } else {

        result.topics = [];

        // add event signature
        if (event && !event.anonymous && event.name !== 'ALLEVENTS') {
            result.topics.push(event.signature);
        }

        // add event topics (indexed arguments)
        if (event.name !== 'ALLEVENTS') {
            var indexedTopics = event.inputs.filter(function (i) {
                return i.indexed === true;
            }).map(function (i) {
                var value = filter[i.name];
                if (!value) {
                    return null;
                }

                // TODO: https://github.com/ethereum/web3.js/issues/344
                // TODO: deal properly with components

                if (_.isArray(value)) {
                    return value.map(function (v) {
                        return abi.encodeParameter(i.type, v);
                    });
                }
                return abi.encodeParameter(i.type, value);
            });

            result.topics = result.topics.concat(indexedTopics);
        }

        if(!result.topics.length)
            delete result.topics;
    }

    if(this.options.address) {
        result.address = this.options.address.toLowerCase();
    }

    return result;
};

/**
 * Should be used to decode indexed params and options
 *
 * @method _decodeEventABI
 * @param {Object} data
 * @return {Object} result object with decoded indexed && not indexed params
 */
Contract.prototype._decodeEventABI = function (data) {
    var event = this;

    data.data = data.data || '';
    data.topics = data.topics || [];
    var result = formatters.outputLogFormatter(data);

    // if allEvents get the right event
    if(event.name === 'ALLEVENTS') {
        event = event.jsonInterface.find(function (intf) {
            return (intf.signature === data.topics[0]);
        }) || {anonymous: true};
    }

    // create empty inputs if none are present (e.g. anonymous events on allEvents)
    event.inputs = event.inputs || [];


    var argTopics = event.anonymous ? data.topics : data.topics.slice(1);

    result.returnValues = abi.decodeLog(event.inputs, data.data, argTopics);
    delete result.returnValues.__length__;

    // add name
    result.event = event.name;

    // add signature
    result.signature = (event.anonymous || !data.topics[0]) ? null : data.topics[0];

    // move the data and topics to "raw"
    result.raw = {
        data: result.data,
        topics: result.topics
    };
    delete result.data;
    delete result.topics;


    return result;
};

/**
 * Encodes an ABI for a method, including signature or the method.
 * Or when constructor encodes only the constructor parameters.
 *
 * @method _encodeMethodABI
 * @param {Mixed} args the arguments to encode
 * @param {String} the encoded ABI
 */
Contract.prototype._encodeMethodABI = function _encodeMethodABI() {
    var methodSignature = this._method.signature,
        args = this.arguments || [];

    var signature = false,
        paramsABI = this._parent.options.jsonInterface.filter(function (json) {
            return ((methodSignature === 'constructor' && json.type === methodSignature) ||
                ((json.signature === methodSignature || json.signature === methodSignature.replace('0x','') || json.name === methodSignature) && json.type === 'function'));
        }).map(function (json) {
            var inputLength = (_.isArray(json.inputs)) ? json.inputs.length : 0;

            if (inputLength !== args.length) {
                throw new Error('The number of arguments is not matching the methods required number. You need to pass '+ inputLength +' arguments.');
            }

            if (json.type === 'function') {
                signature = json.signature;
            }
            return _.isArray(json.inputs) ? json.inputs : [];
        }).map(function (inputs) {
            return abi.encodeParameters(inputs, args).replace('0x','');
        })[0] || '';

    // return constructor
    if(methodSignature === 'constructor') {
        if(!this._deployData)
            throw new Error('The contract has no contract data option set. This is necessary to append the constructor parameters.');

        return this._deployData + paramsABI;

    // return method
    } else {

        var returnValue = (signature) ? signature + paramsABI : paramsABI;

        if(!returnValue) {
            throw new Error('Couldn\'t find a matching contract method named "'+ this._method.name +'".');
        } else {
            return returnValue;
        }
    }

};


/**
 * Decode method return values
 *
 * @method _decodeMethodReturn
 * @param {Array} outputs
 * @param {String} returnValues
 * @return {Object} decoded output return values
 */
Contract.prototype._decodeMethodReturn = function (outputs, returnValues) {
    if (!returnValues) {
        return null;
    }

    returnValues = returnValues.length >= 2 ? returnValues.slice(2) : returnValues;
    var result = abi.decodeParameters(outputs, returnValues);

    if (result.__length__ === 1) {
        return result[0];
    } else {
        delete result.__length__;
        return result;
    }
};


/**
 * Deploys a contract and fire events based on its state: transactionHash, receipt
 *
 * All event listeners will be removed, once the last possible event is fired ("error", or "receipt")
 *
 * @method deploy
 * @param {Object} options
 * @param {Function} callback
 * @return {Object} EventEmitter possible events are "error", "transactionHash" and "receipt"
 */
Contract.prototype.deploy = function(options, callback){

    options = options || {};

    options.arguments = options.arguments || [];
    options = this._getOrSetDefaultOptions(options);


    // return error, if no "data" is specified
    if(!options.data) {
        return utils._fireError(new Error('No "data" specified in neither the given options, nor the default options.'), null, null, callback);
    }

    var constructor = _.find(this.options.jsonInterface, function (method) {
        return (method.type === 'constructor');
    }) || {};
    constructor.signature = 'constructor';

    return this._createTxObject.apply({
        method: constructor,
        parent: this,
        deployData: options.data,
        _ethAccounts: this.constructor._ethAccounts
    }, options.arguments);

};

/**
 * Gets the event signature and outputformatters
 *
 * @method _generateEventOptions
 * @param {Object} event
 * @param {Object} options
 * @param {Function} callback
 * @return {Object} the event options object
 */
Contract.prototype._generateEventOptions = function() {
    var args = Array.prototype.slice.call(arguments);

    // get the callback
    var callback = this._getCallback(args);

    // get the options
    var options = (_.isObject(args[args.length - 1])) ? args.pop() : {};

    var eventName = (_.isString(args[0])) ? args[0] : 'allevents';
    var event = (eventName.toLowerCase() === 'allevents') ? {
            name: 'ALLEVENTS',
            jsonInterface: this.options.jsonInterface
        } : this.options.jsonInterface.find(function (json) {
            return (json.type === 'event' && (json.name === eventName || json.signature === '0x'+ eventName.replace('0x','')));
        });

    if (!event) {
        throw new Error('Event "' + eventName + '" doesn\'t exist in this contract.');
    }

    if (!utils.isAddress(this.options.address)) {
        throw new Error('This contract object doesn\'t have address set yet, please set an address first.');
    }

    return {
        params: this._encodeEventABI(event, options),
        event: event,
        callback: callback
    };
};

/**
 * Adds event listeners and creates a subscription, and remove it once its fired.
 *
 * @method clone
 * @return {Object} the event subscription
 */
Contract.prototype.clone = function() {
    return new this.constructor(this.options.jsonInterface, this.options.address, this.options);
};


/**
 * Adds event listeners and creates a subscription, and remove it once its fired.
 *
 * @method once
 * @param {String} event
 * @param {Object} options
 * @param {Function} callback
 * @return {Object} the event subscription
 */
Contract.prototype.once = function(event, options, callback) {
    var args = Array.prototype.slice.call(arguments);

    // get the callback
    callback = this._getCallback(args);

    if (!callback) {
        throw new Error('Once requires a callback as the second parameter.');
    }

    // don't allow fromBlock
    if (options)
        delete options.fromBlock;

    // don't return as once shouldn't provide "on"
    this._on(event, options, function (err, res, sub) {
        sub.unsubscribe();
        if(_.isFunction(callback)){
            callback(err, res, sub);
        }
    });

    return undefined;
};

/**
 * Adds event listeners and creates a subscription.
 *
 * @method _on
 * @param {String} event
 * @param {Object} options
 * @param {Function} callback
 * @return {Object} the event subscription
 */
Contract.prototype._on = function(){
    var subOptions = this._generateEventOptions.apply(this, arguments);


    // prevent the event "newListener" and "removeListener" from being overwritten
    this._checkListener('newListener', subOptions.event.name, subOptions.callback);
    this._checkListener('removeListener', subOptions.event.name, subOptions.callback);

    // TODO check if listener already exists? and reuse subscription if options are the same.

    // create new subscription
    var subscription = new Subscription({
        subscription: {
            params: 1,
            inputFormatter: [formatters.inputLogFormatter],
            outputFormatter: this._decodeEventABI.bind(subOptions.event),
            // DUBLICATE, also in web3-eth
            subscriptionHandler: function (output) {
                if(output.removed) {
                    this.emit('changed', output);
                } else {
                    this.emit('data', output);
                }

                if (_.isFunction(this.callback)) {
                    this.callback(null, output, this);
                }
            }
        },
        type: 'eth',
        requestManager: this._requestManager
    });
    subscription.subscribe('logs', subOptions.params, subOptions.callback || function () {});

    return subscription;
};

/**
 * Get past events from contracts
 *
 * @method getPastEvents
 * @param {String} event
 * @param {Object} options
 * @param {Function} callback
 * @return {Object} the promievent
 */
Contract.prototype.getPastEvents = function(){
    var subOptions = this._generateEventOptions.apply(this, arguments);

    var getPastLogs = new Method({
        name: 'getPastLogs',
        call: 'eth_getLogs',
        params: 1,
        inputFormatter: [formatters.inputLogFormatter],
        outputFormatter: this._decodeEventABI.bind(subOptions.event)
    });
    getPastLogs.setRequestManager(this._requestManager);
    var call = getPastLogs.buildCall();

    getPastLogs = null;

    return call(subOptions.params, subOptions.callback);
};


/**
 * returns the an object with call, send, estimate functions
 *
 * @method _createTxObject
 * @returns {Object} an object with functions to call the methods
 */
Contract.prototype._createTxObject =  function _createTxObject(){
    var args = Array.prototype.slice.call(arguments);
    var txObject = {};

    if(this.method.type === 'function') {

        txObject.call = this.parent._executeMethod.bind(txObject, 'call');
        txObject.call.request = this.parent._executeMethod.bind(txObject, 'call', true); // to make batch requests

    }

    txObject.send = this.parent._executeMethod.bind(txObject, 'send');
    txObject.send.request = this.parent._executeMethod.bind(txObject, 'send', true); // to make batch requests
    txObject.encodeABI = this.parent._encodeMethodABI.bind(txObject);
    txObject.estimateGas = this.parent._executeMethod.bind(txObject, 'estimate');

    if (args && this.method.inputs && args.length !== this.method.inputs.length) {
        if (this.nextMethod) {
            return this.nextMethod.apply(null, args);
        }
        throw errors.InvalidNumberOfParams(args.length, this.method.inputs.length, this.method.name);
    }

    txObject.arguments = args || [];
    txObject._method = this.method;
    txObject._parent = this.parent;
    txObject._ethAccounts = this.parent.constructor._ethAccounts || this._ethAccounts;

    if(this.deployData) {
        txObject._deployData = this.deployData;
    }

    return txObject;
};


/**
 * Generates the options for the execute call
 *
 * @method _processExecuteArguments
 * @param {Array} args
 * @param {Promise} defer
 */
Contract.prototype._processExecuteArguments = function _processExecuteArguments(args, defer) {
    var processedArgs = {};

    processedArgs.type = args.shift();

    // get the callback
    processedArgs.callback = this._parent._getCallback(args);

    // get block number to use for call
    if(processedArgs.type === 'call' && args[args.length - 1] !== true && (_.isString(args[args.length - 1]) || isFinite(args[args.length - 1])))
        processedArgs.defaultBlock = args.pop();

    // get the options
    processedArgs.options = (_.isObject(args[args.length - 1])) ? args.pop() : {};

    // get the generateRequest argument for batch requests
    processedArgs.generateRequest = (args[args.length - 1] === true)? args.pop() : false;

    processedArgs.options = this._parent._getOrSetDefaultOptions(processedArgs.options);
    processedArgs.options.data = this.encodeABI();

    // add contract address
    if(!this._deployData && !utils.isAddress(this._parent.options.address))
        throw new Error('This contract object doesn\'t have address set yet, please set an address first.');

    if(!this._deployData)
        processedArgs.options.to = this._parent.options.address;

    // return error, if no "data" is specified
    if(!processedArgs.options.data)
        return utils._fireError(new Error('Couldn\'t find a matching contract method, or the number of parameters is wrong.'), defer.eventEmitter, defer.reject, processedArgs.callback);

    return processedArgs;
};

/**
 * Executes a call, transact or estimateGas on a contract function
 *
 * @method _executeMethod
 * @param {String} type the type this execute function should execute
 * @param {Boolean} makeRequest if true, it simply returns the request parameters, rather than executing it
 */
Contract.prototype._executeMethod = function _executeMethod(){
    var _this = this,
        args = this._parent._processExecuteArguments.call(this, Array.prototype.slice.call(arguments), defer),
        defer = promiEvent((args.type !== 'send')),
        ethAccounts = _this.constructor._ethAccounts || _this._ethAccounts;

    // simple return request for batch requests
    if(args.generateRequest) {

        var payload = {
            params: [formatters.inputCallFormatter.call(this._parent, args.options)],
            callback: args.callback
        };

        if(args.type === 'call') {
            payload.params.push(formatters.inputDefaultBlockNumberFormatter.call(this._parent, args.defaultBlock));
            payload.method = 'eth_call';
            payload.format = this._parent._decodeMethodReturn.bind(null, this._method.outputs);
        } else {
            payload.method = 'eth_sendTransaction';
        }

        return payload;

    } else {

        switch (args.type) {
            case 'estimate':

                var estimateGas = (new Method({
                    name: 'estimateGas',
                    call: 'eth_estimateGas',
                    params: 1,
                    inputFormatter: [formatters.inputCallFormatter],
                    outputFormatter: utils.hexToNumber,
                    requestManager: _this._parent._requestManager,
                    accounts: ethAccounts, // is eth.accounts (necessary for wallet signing)
                    defaultAccount: _this._parent.defaultAccount,
                    defaultBlock: _this._parent.defaultBlock
                })).createFunction();

                return estimateGas(args.options, args.callback);

            case 'call':

                // TODO check errors: missing "from" should give error on deploy and send, call ?

                var call = (new Method({
                    name: 'call',
                    call: 'eth_call',
                    params: 2,
                    inputFormatter: [formatters.inputCallFormatter, formatters.inputDefaultBlockNumberFormatter],
                    // add output formatter for decoding
                    outputFormatter: function (result) {
                        return _this._parent._decodeMethodReturn(_this._method.outputs, result);
                    },
                    requestManager: _this._parent._requestManager,
                    accounts: ethAccounts, // is eth.accounts (necessary for wallet signing)
                    defaultAccount: _this._parent.defaultAccount,
                    defaultBlock: _this._parent.defaultBlock
                })).createFunction();

                return call(args.options, args.defaultBlock, args.callback);

            case 'send':

                // return error, if no "from" is specified
                if(!utils.isAddress(args.options.from)) {
                    return utils._fireError(new Error('No "from" address specified in neither the given options, nor the default options.'), defer.eventEmitter, defer.reject, args.callback);
                }

                if (_.isBoolean(this._method.payable) && !this._method.payable && args.options.value && args.options.value > 0) {
                    return utils._fireError(new Error('Can not send value to non-payable contract method or constructor'), defer.eventEmitter, defer.reject, args.callback);
                }


                // make sure receipt logs are decoded
                var extraFormatters = {
                    receiptFormatter: function (receipt) {
                        if (_.isArray(receipt.logs)) {

                            // decode logs
                            var events = _.map(receipt.logs, function(log) {
                                return _this._parent._decodeEventABI.call({
                                    name: 'ALLEVENTS',
                                    jsonInterface: _this._parent.options.jsonInterface
                                }, log);
                            });

                            // make log names keys
                            receipt.events = {};
                            var count = 0;
                            events.forEach(function (ev) {
                                if (ev.event) {
                                    // if > 1 of the same event, don't overwrite any existing events
                                    if (receipt.events[ev.event]) {
                                        if (Array.isArray(receipt.events[ ev.event ])) {
                                            receipt.events[ ev.event ].push(ev);
                                        } else {
                                            receipt.events[ev.event] = [receipt.events[ev.event], ev];
                                        }
                                    } else {
                                        receipt.events[ ev.event ] = ev;
                                    }
                                } else {
                                    receipt.events[count] = ev;
                                    count++;
                                }
                            });

                            delete receipt.logs;
                        }
                        return receipt;
                    },
                    contractDeployFormatter: function (receipt) {
                        var newContract = _this._parent.clone();
                        newContract.options.address = receipt.contractAddress;
                        return newContract;
                    }
                };

                var sendTransaction = (new Method({
                    name: 'sendTransaction',
                    call: 'eth_sendTransaction',
                    params: 1,
                    inputFormatter: [formatters.inputTransactionFormatter],
                    requestManager: _this._parent._requestManager,
                    accounts: _this.constructor._ethAccounts || _this._ethAccounts, // is eth.accounts (necessary for wallet signing)
                    defaultAccount: _this._parent.defaultAccount,
                    defaultBlock: _this._parent.defaultBlock,
                    transactionBlockTimeout: _this._parent.transactionBlockTimeout,
                    transactionConfirmationBlocks: _this._parent.transactionConfirmationBlocks,
                    transactionPollingTimeout: _this._parent.transactionPollingTimeout,
                    defaultCommon: _this._parent.defaultCommon,
                    defaultChain: _this._parent.defaultChain,
                    defaultHardfork: _this._parent.defaultHardfork,
                    extraFormatters: extraFormatters
                })).createFunction();

                return sendTransaction(args.options, args.callback);

        }

    }

};

module.exports = Contract;


/***/ }),

/***/ 766412:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.
    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file ENS.js
 *
 * @author Samuel Furter <samuel@ethereum.org>
 * @date 2018
 */



var config = __webpack_require__(818040);
var Registry = __webpack_require__(535679);
var ResolverMethodHandler = __webpack_require__(415237);

/**
 * Constructs a new instance of ENS
 *
 * @method ENS
 * @param {Object} eth
 * @constructor
 */
function ENS(eth) {
    this.eth = eth;
}

Object.defineProperty(ENS.prototype, 'registry', {
    get: function () {
        return new Registry(this);
    },
    enumerable: true
});

Object.defineProperty(ENS.prototype, 'resolverMethodHandler', {
    get: function () {
        return new ResolverMethodHandler(this.registry);
    },
    enumerable: true
});

/**
 * @param {string} name
 * @returns {Promise<Contract>}
 */
ENS.prototype.resolver = function (name) {
    return this.registry.resolver(name);
};

/**
 * Returns the address record associated with a name.
 *
 * @method getAddress
 * @param {string} name
 * @param {function} callback
 * @return {eventifiedPromise}
 */
ENS.prototype.getAddress = function (name, callback) {
    return this.resolverMethodHandler.method(name, 'addr', []).call(callback);
};

/**
 * Sets a new address
 *
 * @method setAddress
 * @param {string} name
 * @param {string} address
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.setAddress = function (name, address, sendOptions, callback) {
    return this.resolverMethodHandler.method(name, 'setAddr', [address]).send(sendOptions, callback);
};

/**
 * Returns the public key
 *
 * @method getPubkey
 * @param {string} name
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.getPubkey = function (name, callback) {
    return this.resolverMethodHandler.method(name, 'pubkey', [], callback).call(callback);
};

/**
 * Set the new public key
 *
 * @method setPubkey
 * @param {string} name
 * @param {string} x
 * @param {string} y
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.setPubkey = function (name, x, y, sendOptions, callback) {
    return this.resolverMethodHandler.method(name, 'setPubkey', [x, y]).send(sendOptions, callback);
};

/**
 * Returns the content
 *
 * @method getContent
 * @param {string} name
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.getContent = function (name, callback) {
    return this.resolverMethodHandler.method(name, 'content', []).call(callback);
};

/**
 * Set the content
 *
 * @method setContent
 * @param {string} name
 * @param {string} hash
 * @param {function} callback
 * @param {Object} sendOptions
 * @returns {eventifiedPromise}
 */
ENS.prototype.setContent = function (name, hash, sendOptions, callback) {
    return this.resolverMethodHandler.method(name, 'setContent', [hash]).send(sendOptions, callback);
};

/**
 * Get the multihash
 *
 * @method getMultihash
 * @param {string} name
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.getMultihash = function (name, callback) {
    return this.resolverMethodHandler.method(name, 'multihash', []).call(callback);
};

/**
 * Set the multihash
 *
 * @method setMultihash
 * @param {string} name
 * @param {string} hash
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.setMultihash = function (name, hash, sendOptions, callback) {
    return this.resolverMethodHandler.method(name, 'multihash', [hash]).send(sendOptions, callback);
};

/**
 * Checks if the current used network is synced and looks for ENS support there.
 * Throws an error if not.
 *
 * @returns {Promise<Block>}
 */
ENS.prototype.checkNetwork = function () {
    var self = this;
    return self.eth.getBlock('latest').then(function (block) {
        var headAge = new Date() / 1000 - block.timestamp;
        if (headAge > 3600) {
            throw new Error("Network not synced; last block was " + headAge + " seconds ago");
        }
        return self.eth.net.getNetworkType();
    }).then(function (networkType) {
        var addr = config.addresses[networkType];
        if (typeof addr === 'undefined') {
            throw new Error("ENS is not supported on network " + networkType);
        }

        return addr;
    });
};

module.exports = ENS;


/***/ }),

/***/ 818040:
/***/ ((module) => {

"use strict";


var config = {
    addresses: {
        main: "0x314159265dD8dbb310642f98f50C066173C1259b",
        ropsten: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
        rinkeby: "0xe7410170f87102df0055eb195163a03b7f2bff4a"
    },
};

module.exports = config;


/***/ }),

/***/ 535679:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.
    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file Registry.js
 *
 * @author Samuel Furter <samuel@ethereum.org>
 * @date 2018
 */



var _ = __webpack_require__(513469);
var Contract = __webpack_require__(558804);
var namehash = __webpack_require__(159873);
var PromiEvent = __webpack_require__(969093);
var REGISTRY_ABI = __webpack_require__(772212);
var RESOLVER_ABI = __webpack_require__(101417);


/**
 * A wrapper around the ENS registry contract.
 *
 * @method Registry
 * @param {Ens} ens
 * @constructor
 */
function Registry(ens) {
    var self = this;
    this.ens = ens;
    this.contract = ens.checkNetwork().then(function (address) {
        var contract = new Contract(REGISTRY_ABI, address);
        contract.setProvider(self.ens.eth.currentProvider);

        return contract;
    });
}

/**
 * Returns the address of the owner of an ENS name.
 *
 * @method owner
 * @param {string} name
 * @param {function} callback
 * @return {Promise<any>}
 */
Registry.prototype.owner = function (name, callback) {
    var promiEvent = new PromiEvent(true);

    this.contract.then(function (contract) {
        contract.methods.owner(namehash.hash(name)).call()
            .then(function (receipt) {
                promiEvent.resolve(receipt);

                if (_.isFunction(callback)) {
                    callback(receipt);
                }
            })
            .catch(function (error) {
                promiEvent.reject(error);

                if (_.isFunction(callback)) {
                    callback(error);
                }
            });
    });

    return promiEvent.eventEmitter;
};

/**
 * Returns the resolver contract associated with a name.
 *
 * @method resolver
 * @param {string} name
 * @return {Promise<Contract>}
 */
Registry.prototype.resolver = function (name) {
    var self = this;

    return this.contract.then(function (contract) {
        return contract.methods.resolver(namehash.hash(name)).call();
    }).then(function (address) {
        var contract = new Contract(RESOLVER_ABI, address);
        contract.setProvider(self.ens.eth.currentProvider);
        return contract;
    });
};

module.exports = Registry;


/***/ }),

/***/ 776512:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.
    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 *
 * @author Samuel Furter <samuel@ethereum.org>
 * @date 2018
 */



var ENS = __webpack_require__(766412);

module.exports = ENS;


/***/ }),

/***/ 415237:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.
    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file ResolverMethodHandler.js
 *
 * @author Samuel Furter <samuel@ethereum.org>
 * @date 2018
 */



var PromiEvent = __webpack_require__(969093);
var namehash = __webpack_require__(159873);
var _ = __webpack_require__(513469);

/**
 * @param {Registry} registry
 * @constructor
 */
function ResolverMethodHandler(registry) {
    this.registry = registry;
}

/**
 * Executes an resolver method and returns an eventifiedPromise
 *
 * @param {string} ensName
 * @param {string} methodName
 * @param {array} methodArguments
 * @param {function} callback
 * @returns {Object}
 */
ResolverMethodHandler.prototype.method = function (ensName, methodName, methodArguments, callback) {
    return {
        call: this.call.bind({
            ensName: ensName,
            methodName: methodName,
            methodArguments: methodArguments,
            callback: callback,
            parent: this
        }),
        send: this.send.bind({
            ensName: ensName,
            methodName: methodName,
            methodArguments: methodArguments,
            callback: callback,
            parent: this
        })
    };
};

/**
 * Executes call
 *
 * @returns {eventifiedPromise}
 */
ResolverMethodHandler.prototype.call = function (callback) {
    var self = this;
    var promiEvent = new PromiEvent();
    var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments);

    this.parent.registry.resolver(this.ensName).then(function (resolver) {
        self.parent.handleCall(promiEvent, resolver.methods[self.methodName], preparedArguments, callback);
    }).catch(function (error) {
        promiEvent.reject(error);
    });

    return promiEvent.eventEmitter;
};


/**
 * Executes send
 *
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ResolverMethodHandler.prototype.send = function (sendOptions, callback) {
    var self = this;
    var promiEvent = new PromiEvent();
    var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments);

    this.parent.registry.resolver(this.ensName).then(function (resolver) {
        self.parent.handleSend(promiEvent, resolver.methods[self.methodName], preparedArguments, sendOptions, callback);
    }).catch(function (error) {
        promiEvent.reject(error);
    });

    return promiEvent.eventEmitter;
};

/**
 * Handles a call method
 *
 * @param {eventifiedPromise} promiEvent
 * @param {function} method
 * @param {array} preparedArguments
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ResolverMethodHandler.prototype.handleCall = function (promiEvent, method, preparedArguments, callback) {
    method.apply(this, preparedArguments).call()
        .then(function (receipt) {
            promiEvent.resolve(receipt);

            if (_.isFunction(callback)) {
                callback(receipt);
            }
        }).catch(function (error) {
            promiEvent.reject(error);

            if (_.isFunction(callback)) {
                callback(error);
            }
        });

    return promiEvent;
};

/**
 * Handles a send method
 *
 * @param {eventifiedPromise} promiEvent
 * @param {function} method
 * @param {array} preparedArguments
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ResolverMethodHandler.prototype.handleSend = function (promiEvent, method, preparedArguments, sendOptions, callback) {
    method.apply(this, preparedArguments).send(sendOptions)
        .on('transactionHash', function (hash) {
            promiEvent.eventEmitter.emit('transactionHash', hash);
        })
        .on('confirmation', function (confirmationNumber, receipt) {
            promiEvent.eventEmitter.emit('confirmation', confirmationNumber, receipt);
        })
        .on('receipt', function (receipt) {
            promiEvent.eventEmitter.emit('receipt', receipt);
            promiEvent.resolve(receipt);

            if (_.isFunction(callback)) {
                callback(receipt);
            }
        })
        .on('error', function (error) {
            promiEvent.eventEmitter.emit('error', error);
            promiEvent.reject(error);

            if (_.isFunction(callback)) {
                callback(error);
            }
        });

    return promiEvent;
};

/**
 * Adds the ENS node to the arguments
 *
 * @param {string} name
 * @param {array} methodArguments
 * @returns {array}
 */
ResolverMethodHandler.prototype.prepareArguments = function (name, methodArguments) {
    var node = namehash.hash(name);

    if (methodArguments.length > 0) {
        methodArguments.unshift(node);

        return methodArguments;
    }

    return [node];
};

module.exports = ResolverMethodHandler;


/***/ }),

/***/ 772212:
/***/ ((module) => {

"use strict";


var REGISTRY = [
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "resolver",
        "outputs": [
            {
                "name": "",
                "type": "address"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "owner",
        "outputs": [
            {
                "name": "",
                "type": "address"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "label",
                "type": "bytes32"
            },
            {
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "setSubnodeOwner",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "ttl",
                "type": "uint64"
            }
        ],
        "name": "setTTL",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "ttl",
        "outputs": [
            {
                "name": "",
                "type": "uint64"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "resolver",
                "type": "address"
            }
        ],
        "name": "setResolver",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "setOwner",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "Transfer",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": true,
                "name": "label",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "NewOwner",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "resolver",
                "type": "address"
            }
        ],
        "name": "NewResolver",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "ttl",
                "type": "uint64"
            }
        ],
        "name": "NewTTL",
        "type": "event"
    }
];

module.exports = REGISTRY;


/***/ }),

/***/ 101417:
/***/ ((module) => {

"use strict";


var RESOLVER = [
    {
        "constant": true,
        "inputs": [
            {
                "name": "interfaceID",
                "type": "bytes4"
            }
        ],
        "name": "supportsInterface",
        "outputs": [
            {
                "name": "",
                "type": "bool"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "contentTypes",
                "type": "uint256"
            }
        ],
        "name": "ABI",
        "outputs": [
            {
                "name": "contentType",
                "type": "uint256"
            },
            {
                "name": "data",
                "type": "bytes"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "hash",
                "type": "bytes"
            }
        ],
        "name": "setMultihash",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "multihash",
        "outputs": [
            {
                "name": "",
                "type": "bytes"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "x",
                "type": "bytes32"
            },
            {
                "name": "y",
                "type": "bytes32"
            }
        ],
        "name": "setPubkey",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "content",
        "outputs": [
            {
                "name": "ret",
                "type": "bytes32"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "addr",
        "outputs": [
            {
                "name": "ret",
                "type": "address"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "contentType",
                "type": "uint256"
            },
            {
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "setABI",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "name",
        "outputs": [
            {
                "name": "ret",
                "type": "string"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "name",
                "type": "string"
            }
        ],
        "name": "setName",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "hash",
                "type": "bytes32"
            }
        ],
        "name": "setContent",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "pubkey",
        "outputs": [
            {
                "name": "x",
                "type": "bytes32"
            },
            {
                "name": "y",
                "type": "bytes32"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "addr",
                "type": "address"
            }
        ],
        "name": "setAddr",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "inputs": [
            {
                "name": "ensAddr",
                "type": "address"
            }
        ],
        "payable": false,
        "type": "constructor"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "a",
                "type": "address"
            }
        ],
        "name": "AddrChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "hash",
                "type": "bytes32"
            }
        ],
        "name": "ContentChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "name",
                "type": "string"
            }
        ],
        "name": "NameChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": true,
                "name": "contentType",
                "type": "uint256"
            }
        ],
        "name": "ABIChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "x",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "y",
                "type": "bytes32"
            }
        ],
        "name": "PubkeyChanged",
        "type": "event"
    }
];

module.exports = RESOLVER;


/***/ }),

/***/ 252181:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file iban.js
 *
 * Details: https://github.com/ethereum/wiki/wiki/ICAP:-Inter-exchange-Client-Address-Protocol
 *
 * @author Marek Kotewicz <marek@parity.io>
 * @date 2015
 */



var utils = __webpack_require__(154067);
var BigNumber = __webpack_require__(213550);


var leftPad = function (string, bytes) {
    var result = string;
    while (result.length < bytes * 2) {
        result = '0' + result;
    }
    return result;
};

/**
 * Prepare an IBAN for mod 97 computation by moving the first 4 chars to the end and transforming the letters to
 * numbers (A = 10, B = 11, ..., Z = 35), as specified in ISO13616.
 *
 * @method iso13616Prepare
 * @param {String} iban the IBAN
 * @returns {String} the prepared IBAN
 */
var iso13616Prepare = function (iban) {
    var A = 'A'.charCodeAt(0);
    var Z = 'Z'.charCodeAt(0);

    iban = iban.toUpperCase();
    iban = iban.substr(4) + iban.substr(0,4);

    return iban.split('').map(function(n){
        var code = n.charCodeAt(0);
        if (code >= A && code <= Z){
            // A = 10, B = 11, ... Z = 35
            return code - A + 10;
        } else {
            return n;
        }
    }).join('');
};

/**
 * Calculates the MOD 97 10 of the passed IBAN as specified in ISO7064.
 *
 * @method mod9710
 * @param {String} iban
 * @returns {Number}
 */
var mod9710 = function (iban) {
    var remainder = iban,
        block;

    while (remainder.length > 2){
        block = remainder.slice(0, 9);
        remainder = parseInt(block, 10) % 97 + remainder.slice(block.length);
    }

    return parseInt(remainder, 10) % 97;
};

/**
 * This prototype should be used to create iban object from iban correct string
 *
 * @param {String} iban
 */
var Iban = function Iban(iban) {
    this._iban = iban;
};

/**
 * This method should be used to create an ethereum address from a direct iban address
 *
 * @method toAddress
 * @param {String} iban address
 * @return {String} the ethereum address
 */
Iban.toAddress = function (ib) {
    ib = new Iban(ib);

    if(!ib.isDirect()) {
        throw new Error('IBAN is indirect and can\'t be converted');
    }

    return ib.toAddress();
};

/**
 * This method should be used to create iban address from an ethereum address
 *
 * @method toIban
 * @param {String} address
 * @return {String} the IBAN address
 */
Iban.toIban = function (address) {
    return Iban.fromAddress(address).toString();
};

/**
 * This method should be used to create iban object from an ethereum address
 *
 * @method fromAddress
 * @param {String} address
 * @return {Iban} the IBAN object
 */
Iban.fromAddress = function (address) {
    if(!utils.isAddress(address)){
        throw new Error('Provided address is not a valid address: '+ address);
    }

    address = address.replace('0x','').replace('0X','');

    var asBn = new BigNumber(address, 16);
    var base36 = asBn.toString(36);
    var padded = leftPad(base36, 15);
    return Iban.fromBban(padded.toUpperCase());
};

/**
 * Convert the passed BBAN to an IBAN for this country specification.
 * Please note that <i>"generation of the IBAN shall be the exclusive responsibility of the bank/branch servicing the account"</i>.
 * This method implements the preferred algorithm described in http://en.wikipedia.org/wiki/International_Bank_Account_Number#Generating_IBAN_check_digits
 *
 * @method fromBban
 * @param {String} bban the BBAN to convert to IBAN
 * @returns {Iban} the IBAN object
 */
Iban.fromBban = function (bban) {
    var countryCode = 'XE';

    var remainder = mod9710(iso13616Prepare(countryCode + '00' + bban));
    var checkDigit = ('0' + (98 - remainder)).slice(-2);

    return new Iban(countryCode + checkDigit + bban);
};

/**
 * Should be used to create IBAN object for given institution and identifier
 *
 * @method createIndirect
 * @param {Object} options, required options are "institution" and "identifier"
 * @return {Iban} the IBAN object
 */
Iban.createIndirect = function (options) {
    return Iban.fromBban('ETH' + options.institution + options.identifier);
};

/**
 * This method should be used to check if given string is valid iban object
 *
 * @method isValid
 * @param {String} iban string
 * @return {Boolean} true if it is valid IBAN
 */
Iban.isValid = function (iban) {
    var i = new Iban(iban);
    return i.isValid();
};

/**
 * Should be called to check if iban is correct
 *
 * @method isValid
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isValid = function () {
    return /^XE[0-9]{2}(ETH[0-9A-Z]{13}|[0-9A-Z]{30,31})$/.test(this._iban) &&
        mod9710(iso13616Prepare(this._iban)) === 1;
};

/**
 * Should be called to check if iban number is direct
 *
 * @method isDirect
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isDirect = function () {
    return this._iban.length === 34 || this._iban.length === 35;
};

/**
 * Should be called to check if iban number if indirect
 *
 * @method isIndirect
 * @returns {Boolean} true if it is, otherwise false
 */
Iban.prototype.isIndirect = function () {
    return this._iban.length === 20;
};

/**
 * Should be called to get iban checksum
 * Uses the mod-97-10 checksumming protocol (ISO/IEC 7064:2003)
 *
 * @method checksum
 * @returns {String} checksum
 */
Iban.prototype.checksum = function () {
    return this._iban.substr(2, 2);
};

/**
 * Should be called to get institution identifier
 * eg. XREG
 *
 * @method institution
 * @returns {String} institution identifier
 */
Iban.prototype.institution = function () {
    return this.isIndirect() ? this._iban.substr(7, 4) : '';
};

/**
 * Should be called to get client identifier within institution
 * eg. GAVOFYORK
 *
 * @method client
 * @returns {String} client identifier
 */
Iban.prototype.client = function () {
    return this.isIndirect() ? this._iban.substr(11) : '';
};

/**
 * Should be called to get client direct address
 *
 * @method toAddress
 * @returns {String} ethereum address
 */
Iban.prototype.toAddress = function () {
    if (this.isDirect()) {
        var base36 = this._iban.substr(4);
        var asBn = new BigNumber(base36, 36);
        return utils.toChecksumAddress(asBn.toString(16, 20));
    }

    return '';
};

Iban.prototype.toString = function () {
    return this._iban;
};

module.exports = Iban;


/***/ }),

/***/ 610533:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var core = __webpack_require__(36310);
var Method = __webpack_require__(587940);
var utils = __webpack_require__(154067);
var Net = __webpack_require__(745479);

var formatters = __webpack_require__(244207).formatters;


var Personal = function Personal() {
    var _this = this;

    // sets _requestmanager
    core.packageInit(this, arguments);

    this.net = new Net(this.currentProvider);

    var defaultAccount = null;
    var defaultBlock = 'latest';

    Object.defineProperty(this, 'defaultAccount', {
        get: function () {
            return defaultAccount;
        },
        set: function (val) {
            if(val) {
                defaultAccount = utils.toChecksumAddress(formatters.inputAddressFormatter(val));
            }

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultAccount = defaultAccount;
            });

            return val;
        },
        enumerable: true
    });
    Object.defineProperty(this, 'defaultBlock', {
        get: function () {
            return defaultBlock;
        },
        set: function (val) {
            defaultBlock = val;

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultBlock = defaultBlock;
            });

            return val;
        },
        enumerable: true
    });


    var methods = [
        new Method({
            name: 'getAccounts',
            call: 'personal_listAccounts',
            params: 0,
            outputFormatter: utils.toChecksumAddress
        }),
        new Method({
            name: 'newAccount',
            call: 'personal_newAccount',
            params: 1,
            inputFormatter: [null],
            outputFormatter: utils.toChecksumAddress
        }),
        new Method({
            name: 'unlockAccount',
            call: 'personal_unlockAccount',
            params: 3,
            inputFormatter: [formatters.inputAddressFormatter, null, null]
        }),
        new Method({
            name: 'lockAccount',
            call: 'personal_lockAccount',
            params: 1,
            inputFormatter: [formatters.inputAddressFormatter]
        }),
        new Method({
            name: 'importRawKey',
            call: 'personal_importRawKey',
            params: 2
        }),
        new Method({
            name: 'sendTransaction',
            call: 'personal_sendTransaction',
            params: 2,
            inputFormatter: [formatters.inputTransactionFormatter, null]
        }),
        new Method({
            name: 'signTransaction',
            call: 'personal_signTransaction',
            params: 2,
            inputFormatter: [formatters.inputTransactionFormatter, null]
        }),
        new Method({
            name: 'sign',
            call: 'personal_sign',
            params: 3,
            inputFormatter: [formatters.inputSignFormatter, formatters.inputAddressFormatter, null]
        }),
        new Method({
            name: 'ecRecover',
            call: 'personal_ecRecover',
            params: 2,
            inputFormatter: [formatters.inputSignFormatter, null]
        })
    ];
    methods.forEach(function(method) {
        method.attachToObject(_this);
        method.setRequestManager(_this._requestManager);
        method.defaultBlock = _this.defaultBlock;
        method.defaultAccount = _this.defaultAccount;
    });
};

core.addProviders(Personal);



module.exports = Personal;




/***/ }),

/***/ 227051:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file getNetworkType.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);

var getNetworkType = function (callback) {
    var _this = this,
        id;


    return this.net.getId()
        .then(function (givenId) {

            id = givenId;

            return _this.getBlock(0);
        })
        .then(function (genesis) {
            var returnValue = 'private';

            if (genesis.hash === '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3' &&
                id === 1) {
                returnValue = 'main';
            }
            if (genesis.hash === '0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303' &&
                id === 2) {
                returnValue = 'morden';
            }
            if (genesis.hash === '0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d' &&
                id === 3) {
                returnValue = 'ropsten';
            }
            if (genesis.hash === '0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177' &&
                id === 4) {
                returnValue = 'rinkeby';
            }
            if (genesis.hash === '0xbf7e331f7f7c1dd2e05159666b3bf8bc7a8a3a9eb1d518969eab529dd9b88c1a' &&
                id === 5) {
                returnValue = 'goerli';
            }
            if (genesis.hash === '0xa3c565fc15c7478862d50ccd6561e3c06b24cc509bf388941c25ea985ce32cb9' &&
                id === 42) {
                returnValue = 'kovan';
            }

            if (_.isFunction(callback)) {
                callback(null, returnValue);
            }

            return returnValue;
        })
        .catch(function (err) {
            if (_.isFunction(callback)) {
                callback(err);
            } else {
                throw err;
            }
        });
};

module.exports = getNetworkType;


/***/ }),

/***/ 2097:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var core = __webpack_require__(36310);
var helpers = __webpack_require__(244207);
var Subscriptions = __webpack_require__(638096).subscriptions;
var Method = __webpack_require__(587940);
var utils = __webpack_require__(154067);
var Net = __webpack_require__(745479);

var ENS = __webpack_require__(776512);
var Personal = __webpack_require__(610533);
var BaseContract = __webpack_require__(558804);
var Iban = __webpack_require__(252181);
var Accounts = __webpack_require__(903197);
var abi = __webpack_require__(344066);

var getNetworkType = __webpack_require__(227051);
var formatter = helpers.formatters;


var blockCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
};

var transactionFromBlockCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
};

var uncleCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
};

var getBlockTransactionCountCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
};

var uncleCountCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
};


var Eth = function Eth() {
    var _this = this;

    // sets _requestmanager
    core.packageInit(this, arguments);

    // overwrite setProvider
    var setProvider = this.setProvider;
    this.setProvider = function () {
        setProvider.apply(_this, arguments);
        _this.net.setProvider.apply(_this, arguments);
        _this.personal.setProvider.apply(_this, arguments);
        _this.accounts.setProvider.apply(_this, arguments);
        _this.Contract.setProvider(_this.currentProvider, _this.accounts);
    };


    var defaultAccount = null;
    var defaultBlock = 'latest';
    var transactionBlockTimeout = 50;
    var transactionConfirmationBlocks = 24;
    var transactionPollingTimeout = 750;
    var defaultChain, defaultHardfork, defaultCommon;

    Object.defineProperty(this, 'defaultCommon', {
        get: function () {
            return defaultCommon;
        },
        set: function (val) {
            defaultCommon = val;

            // also set on the Contract object
            _this.Contract.defaultCommon = defaultCommon;

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultCommon = defaultCommon;
            });
        },
        enumerable: true
    });
    Object.defineProperty(this, 'defaultHardfork', {
        get: function () {
            return defaultHardfork;
        },
        set: function (val) {
            defaultHardfork = val;

            // also set on the Contract object
            _this.Contract.defaultHardfork = defaultHardfork;

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultHardfork = defaultHardfork;
            });
        },
        enumerable: true
    });
    Object.defineProperty(this, 'defaultChain', {
        get: function () {
            return defaultChain;
        },
        set: function (val) {
            defaultChain = val;

            // also set on the Contract object
            _this.Contract.defaultChain = defaultChain;

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultChain = defaultChain;
            });
        },
        enumerable: true
    });
    Object.defineProperty(this, 'transactionPollingTimeout', {
        get: function () {
            return transactionPollingTimeout;
        },
        set: function (val) {
            transactionPollingTimeout = val;

            // also set on the Contract object
            _this.Contract.transactionPollingTimeout = transactionPollingTimeout;

            // update defaultBlock
            methods.forEach(function(method) {
                method.transactionPollingTimeout = transactionPollingTimeout;
            });
        },
        enumerable: true
    });
    Object.defineProperty(this, 'transactionConfirmationBlocks', {
        get: function () {
            return transactionConfirmationBlocks;
        },
        set: function (val) {
            transactionConfirmationBlocks = val;

            // also set on the Contract object
            _this.Contract.transactionConfirmationBlocks = transactionConfirmationBlocks;

            // update defaultBlock
            methods.forEach(function(method) {
                method.transactionConfirmationBlocks = transactionConfirmationBlocks;
            });
        },
        enumerable: true
    });
    Object.defineProperty(this, 'transactionBlockTimeout', {
        get: function () {
            return transactionBlockTimeout;
        },
        set: function (val) {
            transactionBlockTimeout = val;

            // also set on the Contract object
            _this.Contract.transactionBlockTimeout = transactionBlockTimeout;

            // update defaultBlock
            methods.forEach(function(method) {
                method.transactionBlockTimeout = transactionBlockTimeout;
            });
        },
        enumerable: true
    });
    Object.defineProperty(this, 'defaultAccount', {
        get: function () {
            return defaultAccount;
        },
        set: function (val) {
            if(val) {
                defaultAccount = utils.toChecksumAddress(formatter.inputAddressFormatter(val));
            }

            // also set on the Contract object
            _this.Contract.defaultAccount = defaultAccount;
            _this.personal.defaultAccount = defaultAccount;

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultAccount = defaultAccount;
            });

            return val;
        },
        enumerable: true
    });
    Object.defineProperty(this, 'defaultBlock', {
        get: function () {
            return defaultBlock;
        },
        set: function (val) {
            defaultBlock = val;
            // also set on the Contract object
            _this.Contract.defaultBlock = defaultBlock;
            _this.personal.defaultBlock = defaultBlock;

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultBlock = defaultBlock;
            });

            return val;
        },
        enumerable: true
    });


    this.clearSubscriptions = _this._requestManager.clearSubscriptions;

    // add net
    this.net = new Net(this.currentProvider);
    // add chain detection
    this.net.getNetworkType = getNetworkType.bind(this);

    // add accounts
    this.accounts = new Accounts(this.currentProvider);

    // add personal
    this.personal = new Personal(this.currentProvider);
    this.personal.defaultAccount = this.defaultAccount;

    // create a proxy Contract type for this instance, as a Contract's provider
    // is stored as a class member rather than an instance variable. If we do
    // not create this proxy type, changing the provider in one instance of
    // web3-eth would subsequently change the provider for _all_ contract
    // instances!
    var self = this;
    var Contract = function Contract() {
        BaseContract.apply(this, arguments);

        // when Eth.setProvider is called, call packageInit
        // on all contract instances instantiated via this Eth
        // instances. This will update the currentProvider for
        // the contract instances
        var _this = this;
        var setProvider = self.setProvider;
        self.setProvider = function() {
          setProvider.apply(self, arguments);
          core.packageInit(_this, [self.currentProvider]);
        };
    };

    Contract.setProvider = function() {
        BaseContract.setProvider.apply(this, arguments);
    };

    // make our proxy Contract inherit from web3-eth-contract so that it has all
    // the right functionality and so that instanceof and friends work properly
    Contract.prototype = Object.create(BaseContract.prototype);
    Contract.prototype.constructor = Contract;

    // add contract
    this.Contract = Contract;
    this.Contract.defaultAccount = this.defaultAccount;
    this.Contract.defaultBlock = this.defaultBlock;
    this.Contract.transactionBlockTimeout = this.transactionBlockTimeout;
    this.Contract.transactionConfirmationBlocks = this.transactionConfirmationBlocks;
    this.Contract.transactionPollingTimeout = this.transactionPollingTimeout;
    this.Contract.setProvider(this.currentProvider, this.accounts);

    // add IBAN
    this.Iban = Iban;

    // add ABI
    this.abi = abi;

    // add ENS
    this.ens = new ENS(this);

    var methods = [
        new Method({
            name: 'getNodeInfo',
            call: 'web3_clientVersion'
        }),
        new Method({
            name: 'getProtocolVersion',
            call: 'eth_protocolVersion',
            params: 0
        }),
        new Method({
            name: 'getCoinbase',
            call: 'eth_coinbase',
            params: 0
        }),
        new Method({
            name: 'isMining',
            call: 'eth_mining',
            params: 0
        }),
        new Method({
            name: 'getHashrate',
            call: 'eth_hashrate',
            params: 0,
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'isSyncing',
            call: 'eth_syncing',
            params: 0,
            outputFormatter: formatter.outputSyncingFormatter
        }),
        new Method({
            name: 'getGasPrice',
            call: 'eth_gasPrice',
            params: 0,
            outputFormatter: formatter.outputBigNumberFormatter
        }),
        new Method({
            name: 'getAccounts',
            call: 'eth_accounts',
            params: 0,
            outputFormatter: utils.toChecksumAddress
        }),
        new Method({
            name: 'getBlockNumber',
            call: 'eth_blockNumber',
            params: 0,
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'getBalance',
            call: 'eth_getBalance',
            params: 2,
            inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter],
            outputFormatter: formatter.outputBigNumberFormatter
        }),
        new Method({
            name: 'getStorageAt',
            call: 'eth_getStorageAt',
            params: 3,
            inputFormatter: [formatter.inputAddressFormatter, utils.numberToHex, formatter.inputDefaultBlockNumberFormatter]
        }),
        new Method({
            name: 'getCode',
            call: 'eth_getCode',
            params: 2,
            inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter]
        }),
        new Method({
            name: 'getBlock',
            call: blockCall,
            params: 2,
            inputFormatter: [formatter.inputBlockNumberFormatter, function (val) { return !!val; }],
            outputFormatter: formatter.outputBlockFormatter
        }),
        new Method({
            name: 'getUncle',
            call: uncleCall,
            params: 2,
            inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex],
            outputFormatter: formatter.outputBlockFormatter,

        }),
        new Method({
            name: 'getBlockTransactionCount',
            call: getBlockTransactionCountCall,
            params: 1,
            inputFormatter: [formatter.inputBlockNumberFormatter],
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'getBlockUncleCount',
            call: uncleCountCall,
            params: 1,
            inputFormatter: [formatter.inputBlockNumberFormatter],
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'getTransaction',
            call: 'eth_getTransactionByHash',
            params: 1,
            inputFormatter: [null],
            outputFormatter: formatter.outputTransactionFormatter
        }),
        new Method({
            name: 'getTransactionFromBlock',
            call: transactionFromBlockCall,
            params: 2,
            inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex],
            outputFormatter: formatter.outputTransactionFormatter
        }),
        new Method({
            name: 'getTransactionReceipt',
            call: 'eth_getTransactionReceipt',
            params: 1,
            inputFormatter: [null],
            outputFormatter: formatter.outputTransactionReceiptFormatter
        }),
        new Method({
            name: 'getTransactionCount',
            call: 'eth_getTransactionCount',
            params: 2,
            inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter],
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'sendSignedTransaction',
            call: 'eth_sendRawTransaction',
            params: 1,
            inputFormatter: [null]
        }),
        new Method({
            name: 'signTransaction',
            call: 'eth_signTransaction',
            params: 1,
            inputFormatter: [formatter.inputTransactionFormatter]
        }),
        new Method({
            name: 'sendTransaction',
            call: 'eth_sendTransaction',
            params: 1,
            inputFormatter: [formatter.inputTransactionFormatter]
        }),
        new Method({
            name: 'sign',
            call: 'eth_sign',
            params: 2,
            inputFormatter: [formatter.inputSignFormatter, formatter.inputAddressFormatter],
            transformPayload: function (payload) {
                payload.params.reverse();
                return payload;
            }
        }),
        new Method({
            name: 'call',
            call: 'eth_call',
            params: 2,
            inputFormatter: [formatter.inputCallFormatter, formatter.inputDefaultBlockNumberFormatter]
        }),
        new Method({
            name: 'estimateGas',
            call: 'eth_estimateGas',
            params: 1,
            inputFormatter: [formatter.inputCallFormatter],
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'submitWork',
            call: 'eth_submitWork',
            params: 3
        }),
        new Method({
            name: 'getWork',
            call: 'eth_getWork',
            params: 0
        }),
        new Method({
            name: 'getPastLogs',
            call: 'eth_getLogs',
            params: 1,
            inputFormatter: [formatter.inputLogFormatter],
            outputFormatter: formatter.outputLogFormatter
        }),
        new Method({
            name: 'getChainId',
            call: 'eth_chainId',
            params: 0,
            outputFormatter: utils.hexToNumber
        }),

        // subscriptions
        new Subscriptions({
            name: 'subscribe',
            type: 'eth',
            subscriptions: {
                'newBlockHeaders': {
                    // TODO rename on RPC side?
                    subscriptionName: 'newHeads', // replace subscription with this name
                    params: 0,
                    outputFormatter: formatter.outputBlockFormatter
                },
                'pendingTransactions': {
                    subscriptionName: 'newPendingTransactions', // replace subscription with this name
                    params: 0
                },
                'logs': {
                    params: 1,
                    inputFormatter: [formatter.inputLogFormatter],
                    outputFormatter: formatter.outputLogFormatter,
                    // DUBLICATE, also in web3-eth-contract
                    subscriptionHandler: function (output) {
                        if(output.removed) {
                            this.emit('changed', output);
                        } else {
                            this.emit('data', output);
                        }

                        if (_.isFunction(this.callback)) {
                            this.callback(null, output, this);
                        }
                    }
                },
                'syncing': {
                    params: 0,
                    outputFormatter: formatter.outputSyncingFormatter,
                    subscriptionHandler: function (output) {
                        var _this = this;

                        // fire TRUE at start
                        if(this._isSyncing !== true) {
                            this._isSyncing = true;
                            this.emit('changed', _this._isSyncing);

                            if (_.isFunction(this.callback)) {
                                this.callback(null, _this._isSyncing, this);
                            }

                            setTimeout(function () {
                                _this.emit('data', output);

                                if (_.isFunction(_this.callback)) {
                                    _this.callback(null, output, _this);
                                }
                            }, 0);

                            // fire sync status
                        } else {
                            this.emit('data', output);
                            if (_.isFunction(_this.callback)) {
                                this.callback(null, output, this);
                            }

                            // wait for some time before fireing the FALSE
                            clearTimeout(this._isSyncingTimeout);
                            this._isSyncingTimeout = setTimeout(function () {
                                if(output.currentBlock > output.highestBlock - 200) {
                                    _this._isSyncing = false;
                                    _this.emit('changed', _this._isSyncing);

                                    if (_.isFunction(_this.callback)) {
                                        _this.callback(null, _this._isSyncing, _this);
                                    }
                                }
                            }, 500);
                        }
                    }
                }
            }
        })
    ];

    methods.forEach(function(method) {
        method.attachToObject(_this);
        method.setRequestManager(_this._requestManager, _this.accounts); // second param means is eth.accounts (necessary for wallet signing)
        method.defaultBlock = _this.defaultBlock;
        method.defaultAccount = _this.defaultAccount;
        method.transactionBlockTimeout = _this.transactionBlockTimeout;
        method.transactionConfirmationBlocks = _this.transactionConfirmationBlocks;
        method.transactionPollingTimeout = _this.transactionPollingTimeout;
    });

};

core.addProviders(Eth);


module.exports = Eth;



/***/ }),

/***/ 745479:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var core = __webpack_require__(36310);
var Method = __webpack_require__(587940);
var utils = __webpack_require__(154067);


var Net = function () {
    var _this = this;

    // sets _requestmanager
    core.packageInit(this, arguments);


    [
        new Method({
            name: 'getId',
            call: 'net_version',
            params: 0,
            outputFormatter: parseInt
        }),
        new Method({
            name: 'isListening',
            call: 'net_listening',
            params: 0
        }),
        new Method({
            name: 'getPeerCount',
            call: 'net_peerCount',
            params: 0,
            outputFormatter: utils.hexToNumber
        })
    ].forEach(function(method) {
        method.attachToObject(_this);
        method.setRequestManager(_this._requestManager);
    });

};

core.addProviders(Net);


module.exports = Net;




/***/ }),

/***/ 281757:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file httpprovider.js
 * @authors:
 *   Marek Kotewicz <marek@parity.io>
 *   Marian Oancea
 *   Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2015
 */

var errors = __webpack_require__(244207).errors;
var XHR2 = __webpack_require__(159536).XMLHttpRequest; // jshint ignore: line
var http = __webpack_require__(298605);
var https = __webpack_require__(957211);


/**
 * HttpProvider should be used to send rpc calls over http
 */
var HttpProvider = function HttpProvider(host, options) {
    options = options || {};

    var keepAlive = (options.keepAlive === true || options.keepAlive !== false) ? true : false;
    this.host = host || 'http://localhost:8545';
    if (this.host.substring(0,5) === "https") {
        this.httpsAgent = new https.Agent({ keepAlive: keepAlive });
    } else {
        this.httpAgent = new http.Agent({ keepAlive: keepAlive });
    }

    this.withCredentials = options.withCredentials || false;
    this.timeout = options.timeout || 0;
    this.headers = options.headers;
    this.connected = false;
};

HttpProvider.prototype._prepareRequest = function(){
    var request;

    // the current runtime is a browser
    if (typeof XMLHttpRequest !== 'undefined') {
        request = new XMLHttpRequest();
    } else {
        request = new XHR2();
        request.nodejsSet({
            httpsAgent:this.httpsAgent,
            httpAgent:this.httpAgent
        });
    }

    request.open('POST', this.host, true);
    request.setRequestHeader('Content-Type','application/json');
    request.timeout = this.timeout;
    request.withCredentials = this.withCredentials;

    if(this.headers) {
        this.headers.forEach(function(header) {
            request.setRequestHeader(header.name, header.value);
        });
    }

    return request;
};

/**
 * Should be used to make async request
 *
 * @method send
 * @param {Object} payload
 * @param {Function} callback triggered on end with (err, result)
 */
HttpProvider.prototype.send = function (payload, callback) {
    var _this = this;
    var request = this._prepareRequest();

    request.onreadystatechange = function() {
        if (request.readyState === 4 && request.timeout !== 1) {
            var result = request.responseText;
            var error = null;

            try {
                result = JSON.parse(result);
            } catch(e) {
                error = errors.InvalidResponse(request.responseText);
            }

            _this.connected = true;
            callback(error, result);
        }
    };

    request.ontimeout = function() {
        _this.connected = false;
        callback(errors.ConnectionTimeout(this.timeout));
    };

    try {
        request.send(JSON.stringify(payload));
    } catch(error) {
        this.connected = false;
        callback(errors.InvalidConnection(this.host));
    }
};

HttpProvider.prototype.disconnect = function () {
    //NO OP
};

/**
 * Returns the desired boolean.
 *
 * @method supportsSubscriptions
 * @returns {boolean}
 */
HttpProvider.prototype.supportsSubscriptions = function () {
    return false;
};

module.exports = HttpProvider;


/***/ }),

/***/ 353626:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/** @file index.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var errors = __webpack_require__(244207).errors;
var oboe = __webpack_require__(367757);


var IpcProvider = function IpcProvider(path, net) {
    var _this = this;
    this.responseCallbacks = {};
    this.notificationCallbacks = [];
    this.path = path;
    this.connected = false;

    this.connection = net.connect({path: this.path});

    this.addDefaultEvents();

    // LISTEN FOR CONNECTION RESPONSES
    var callback = function(result) {
        /*jshint maxcomplexity: 6 */

        var id = null;

        // get the id which matches the returned id
        if(_.isArray(result)) {
            result.forEach(function(load){
                if(_this.responseCallbacks[load.id])
                    id = load.id;
            });
        } else {
            id = result.id;
        }

        // notification
        if(!id && result.method.indexOf('_subscription') !== -1) {
            _this.notificationCallbacks.forEach(function(callback){
                if(_.isFunction(callback))
                    callback(result);
            });

            // fire the callback
        } else if(_this.responseCallbacks[id]) {
            _this.responseCallbacks[id](null, result);
            delete _this.responseCallbacks[id];
        }
    };

    // use oboe.js for Sockets
    if (net.constructor.name === 'Socket') {
        oboe(this.connection)
        .done(callback);
    } else {
        this.connection.on('data', function(data){
            _this._parseResponse(data.toString()).forEach(callback);
        });
    }
};

/**
Will add the error and end event to timeout existing calls

@method addDefaultEvents
*/
IpcProvider.prototype.addDefaultEvents = function(){
    var _this = this;

    this.connection.on('connect', function(){
        _this.connected = true;
    });

    this.connection.on('close', function(){
        _this.connected = false;
    });

    this.connection.on('error', function(){
        _this._timeout();
    });

    this.connection.on('end', function(){
        _this._timeout();
    });

    this.connection.on('timeout', function(){
        _this._timeout();
    });
};


/**
 Will parse the response and make an array out of it.

 NOTE, this exists for backwards compatibility reasons.

 @method _parseResponse
 @param {String} data
 */
IpcProvider.prototype._parseResponse = function(data) {
    var _this = this,
        returnValues = [];

    // DE-CHUNKER
    var dechunkedData = data
        .replace(/\}[\n\r]?\{/g,'}|--|{') // }{
        .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{
        .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{
        .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{
        .split('|--|');

    dechunkedData.forEach(function(data){

        // prepend the last chunk
        if(_this.lastChunk)
            data = _this.lastChunk + data;

        var result = null;

        try {
            result = JSON.parse(data);

        } catch(e) {

            _this.lastChunk = data;

            // start timeout to cancel all requests
            clearTimeout(_this.lastChunkTimeout);
            _this.lastChunkTimeout = setTimeout(function(){
                _this._timeout();
                throw errors.InvalidResponse(data);
            }, 1000 * 15);

            return;
        }

        // cancel timeout and set chunk to null
        clearTimeout(_this.lastChunkTimeout);
        _this.lastChunk = null;

        if(result)
            returnValues.push(result);
    });

    return returnValues;
};


/**
Get the adds a callback to the responseCallbacks object,
which will be called if a response matching the response Id will arrive.

@method _addResponseCallback
*/
IpcProvider.prototype._addResponseCallback = function(payload, callback) {
    var id = payload.id || payload[0].id;
    var method = payload.method || payload[0].method;

    this.responseCallbacks[id] = callback;
    this.responseCallbacks[id].method = method;
};

/**
Timeout all requests when the end/error event is fired

@method _timeout
*/
IpcProvider.prototype._timeout = function() {
    for(var key in this.responseCallbacks) {
        if(this.responseCallbacks.hasOwnProperty(key)){
            this.responseCallbacks[key](errors.InvalidConnection('on IPC'));
            delete this.responseCallbacks[key];
        }
    }
};

/**
 Try to reconnect

 @method reconnect
 */
IpcProvider.prototype.reconnect = function() {
    this.connection.connect({path: this.path});
};


IpcProvider.prototype.send = function (payload, callback) {
    // try reconnect, when connection is gone
    if(!this.connection.writable)
        this.connection.connect({path: this.path});


    this.connection.write(JSON.stringify(payload));
    this._addResponseCallback(payload, callback);
};

/**
Subscribes to provider events.provider

@method on
@param {String} type    'notification', 'connect', 'error', 'end' or 'data'
@param {Function} callback   the callback to call
*/
IpcProvider.prototype.on = function (type, callback) {

    if(typeof callback !== 'function')
        throw new Error('The second parameter callback must be a function.');

    switch(type){
        case 'data':
            this.notificationCallbacks.push(callback);
            break;

        // adds error, end, timeout, connect
        default:
            this.connection.on(type, callback);
            break;
    }
};

/**
 Subscribes to provider events.provider

 @method on
 @param {String} type    'connect', 'error', 'end' or 'data'
 @param {Function} callback   the callback to call
 */
IpcProvider.prototype.once = function (type, callback) {

    if(typeof callback !== 'function')
        throw new Error('The second parameter callback must be a function.');

    this.connection.once(type, callback);
};

/**
Removes event listener

@method removeListener
@param {String} type    'data', 'connect', 'error', 'end' or 'data'
@param {Function} callback   the callback to call
*/
IpcProvider.prototype.removeListener = function (type, callback) {
    var _this = this;

    switch(type){
        case 'data':
            this.notificationCallbacks.forEach(function(cb, index){
                if(cb === callback)
                    _this.notificationCallbacks.splice(index, 1);
            });
            break;

        default:
            this.connection.removeListener(type, callback);
            break;
    }
};

/**
Removes all event listeners

@method removeAllListeners
@param {String} type    'data', 'connect', 'error', 'end' or 'data'
*/
IpcProvider.prototype.removeAllListeners = function (type) {
    switch(type){
        case 'data':
            this.notificationCallbacks = [];
            break;

        default:
            this.connection.removeAllListeners(type);
            break;
    }
};

/**
Resets the providers, clears all callbacks

@method reset
*/
IpcProvider.prototype.reset = function () {
    this._timeout();
    this.notificationCallbacks = [];

    this.connection.removeAllListeners('error');
    this.connection.removeAllListeners('end');
    this.connection.removeAllListeners('timeout');

    this.addDefaultEvents();
};

/**
 * Returns the desired boolean.
 *
 * @method supportsSubscriptions
 * @returns {boolean}
 */
IpcProvider.prototype.supportsSubscriptions = function () {
    return true;
};

module.exports = IpcProvider;



/***/ }),

/***/ 409465:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/** @file WebsocketProvider.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var errors = __webpack_require__(244207).errors;
var Ws = __webpack_require__(670350).w3cwebsocket;

var isNode = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';

var _btoa = null;
var parseURL = null;
if (isNode) {
    _btoa = function(str) {
        return Buffer.from(str).toString('base64');
    };
    var url = __webpack_require__(978835);
    if (url.URL) {
        // Use the new Node 6+ API for parsing URLs that supports username/password
        var newURL = url.URL;
        parseURL = function(url) {
            return new newURL(url);
        };
    }
    else {
        // Web3 supports Node.js 5, so fall back to the legacy URL API if necessary
        parseURL = __webpack_require__(978835).parse;
    }
} else {
    _btoa = btoa;
    parseURL = function(url) {
        return new URL(url);
    };
}
// Default connection ws://localhost:8546




var WebsocketProvider = function WebsocketProvider(url, options)  {
    if (!Ws) {
        throw new Error('websocket is not available');
    }

    var _this = this;
    this.responseCallbacks = {};
    this.notificationCallbacks = [];

    options = options || {};
    this._customTimeout = options.timeout;

    // The w3cwebsocket implementation does not support Basic Auth
    // username/password in the URL. So generate the basic auth header, and
    // pass through with any additional headers supplied in constructor
    var parsedURL = parseURL(url);
    var headers = options.headers || {};
    var protocol = options.protocol || undefined;
    if (parsedURL.username && parsedURL.password) {
        headers.authorization = 'Basic ' + _btoa(parsedURL.username + ':' + parsedURL.password);
    }

    // Allow a custom client configuration
    var clientConfig = options.clientConfig || undefined;

    // Allow a custom request options
    // https://github.com/theturtle32/WebSocket-Node/blob/master/docs/WebSocketClient.md#connectrequesturl-requestedprotocols-origin-headers-requestoptions
    var requestOptions = options.requestOptions || undefined;

    // When all node core implementations that do not have the
    // WHATWG compatible URL parser go out of service this line can be removed.
    if (parsedURL.auth) {
        headers.authorization = 'Basic ' + _btoa(parsedURL.auth);
    }
    this.connection = new Ws(url, protocol, undefined, headers, requestOptions, clientConfig);

    this.addDefaultEvents();


    // LISTEN FOR CONNECTION RESPONSES
    this.connection.onmessage = function(e) {
        /*jshint maxcomplexity: 6 */
        var data = (typeof e.data === 'string') ? e.data : '';

        _this._parseResponse(data).forEach(function(result){

            var id = null;

            // get the id which matches the returned id
            if(_.isArray(result)) {
                result.forEach(function(load){
                    if(_this.responseCallbacks[load.id])
                        id = load.id;
                });
            } else {
                id = result.id;
            }

            // notification
            if(!id && result && result.method && result.method.indexOf('_subscription') !== -1) {
                _this.notificationCallbacks.forEach(function(callback){
                    if(_.isFunction(callback))
                        callback(result);
                });

                // fire the callback
            } else if(_this.responseCallbacks[id]) {
                _this.responseCallbacks[id](null, result);
                delete _this.responseCallbacks[id];
            }
        });
    };

    // make property `connected` which will return the current connection status
    Object.defineProperty(this, 'connected', {
      get: function () {
        return this.connection && this.connection.readyState === this.connection.OPEN;
      },
      enumerable: true,
  });
};

/**
 Will add the error and end event to timeout existing calls

 @method addDefaultEvents
 */
WebsocketProvider.prototype.addDefaultEvents = function(){
    var _this = this;

    this.connection.onerror = function(){
        _this._timeout();
    };

    this.connection.onclose = function(){
        _this._timeout();

        // reset all requests and callbacks
        _this.reset();
    };

    // this.connection.on('timeout', function(){
    //     _this._timeout();
    // });
};

/**
 Will parse the response and make an array out of it.

 @method _parseResponse
 @param {String} data
 */
WebsocketProvider.prototype._parseResponse = function(data) {
    var _this = this,
        returnValues = [];

    // DE-CHUNKER
    var dechunkedData = data
        .replace(/\}[\n\r]?\{/g,'}|--|{') // }{
        .replace(/\}\][\n\r]?\[\{/g,'}]|--|[{') // }][{
        .replace(/\}[\n\r]?\[\{/g,'}|--|[{') // }[{
        .replace(/\}\][\n\r]?\{/g,'}]|--|{') // }]{
        .split('|--|');

    dechunkedData.forEach(function(data){

        // prepend the last chunk
        if(_this.lastChunk)
            data = _this.lastChunk + data;

        var result = null;

        try {
            result = JSON.parse(data);

        } catch(e) {

            _this.lastChunk = data;

            // start timeout to cancel all requests
            clearTimeout(_this.lastChunkTimeout);
            _this.lastChunkTimeout = setTimeout(function(){
                _this._timeout();
                throw errors.InvalidResponse(data);
            }, 1000 * 15);

            return;
        }

        // cancel timeout and set chunk to null
        clearTimeout(_this.lastChunkTimeout);
        _this.lastChunk = null;

        if(result)
            returnValues.push(result);
    });

    return returnValues;
};


/**
 Adds a callback to the responseCallbacks object,
 which will be called if a response matching the response Id will arrive.

 @method _addResponseCallback
 */
WebsocketProvider.prototype._addResponseCallback = function(payload, callback) {
    var id = payload.id || payload[0].id;
    var method = payload.method || payload[0].method;

    this.responseCallbacks[id] = callback;
    this.responseCallbacks[id].method = method;

    var _this = this;

    // schedule triggering the error response if a custom timeout is set
    if (this._customTimeout) {
        setTimeout(function () {
            if (_this.responseCallbacks[id]) {
                _this.responseCallbacks[id](errors.ConnectionTimeout(_this._customTimeout));
                delete _this.responseCallbacks[id];
            }
        }, this._customTimeout);
    }
};

/**
 Timeout all requests when the end/error event is fired

 @method _timeout
 */
WebsocketProvider.prototype._timeout = function() {
    for(var key in this.responseCallbacks) {
        if(this.responseCallbacks.hasOwnProperty(key)){
            this.responseCallbacks[key](errors.InvalidConnection('on WS'));
            delete this.responseCallbacks[key];
        }
    }
};


WebsocketProvider.prototype.send = function (payload, callback) {
    var _this = this;

    if (this.connection.readyState === this.connection.CONNECTING) {
        setTimeout(function () {
            _this.send(payload, callback);
        }, 10);
        return;
    }

    // try reconnect, when connection is gone
    // if(!this.connection.writable)
    //     this.connection.connect({url: this.url});
    if (this.connection.readyState !== this.connection.OPEN) {
        console.error('connection not open on send()');
        if (typeof this.connection.onerror === 'function') {
            this.connection.onerror(new Error('connection not open'));
        } else {
            console.error('no error callback');
        }
        callback(new Error('connection not open'));
        return;
    }

    this.connection.send(JSON.stringify(payload));
    this._addResponseCallback(payload, callback);
};

/**
 Subscribes to provider events.provider

 @method on
 @param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
 @param {Function} callback   the callback to call
 */
WebsocketProvider.prototype.on = function (type, callback) {

    if(typeof callback !== 'function')
        throw new Error('The second parameter callback must be a function.');

    switch(type){
        case 'data':
            this.notificationCallbacks.push(callback);
            break;

        case 'connect':
            this.connection.onopen = callback;
            break;

        case 'end':
            this.connection.onclose = callback;
            break;

        case 'error':
            this.connection.onerror = callback;
            break;

        // default:
        //     this.connection.on(type, callback);
        //     break;
    }
};

// TODO add once

/**
 Removes event listener

 @method removeListener
 @param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
 @param {Function} callback   the callback to call
 */
WebsocketProvider.prototype.removeListener = function (type, callback) {
    var _this = this;

    switch(type){
        case 'data':
            this.notificationCallbacks.forEach(function(cb, index){
                if(cb === callback)
                    _this.notificationCallbacks.splice(index, 1);
            });
            break;

        // TODO remvoving connect missing

        // default:
        //     this.connection.removeListener(type, callback);
        //     break;
    }
};

/**
 Removes all event listeners

 @method removeAllListeners
 @param {String} type    'notifcation', 'connect', 'error', 'end' or 'data'
 */
WebsocketProvider.prototype.removeAllListeners = function (type) {
    switch(type){
        case 'data':
            this.notificationCallbacks = [];
            break;

        // TODO remvoving connect properly missing

        case 'connect':
            this.connection.onopen = null;
            break;

        case 'end':
            this.connection.onclose = null;
            break;

        case 'error':
            this.connection.onerror = null;
            break;

        default:
            // this.connection.removeAllListeners(type);
            break;
    }
};

/**
 Resets the providers, clears all callbacks

 @method reset
 */
WebsocketProvider.prototype.reset = function () {
    this._timeout();
    this.notificationCallbacks = [];

    // this.connection.removeAllListeners('error');
    // this.connection.removeAllListeners('end');
    // this.connection.removeAllListeners('timeout');

    this.addDefaultEvents();
};

WebsocketProvider.prototype.disconnect = function () {
    if (this.connection) {
        this.connection.close();
    }
};

/**
 * Returns the desired boolean.
 *
 * @method supportsSubscriptions
 * @returns {boolean}
 */
WebsocketProvider.prototype.supportsSubscriptions = function () {
    return true;
};

module.exports = WebsocketProvider;


/***/ }),

/***/ 427012:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var core = __webpack_require__(36310);
var Subscriptions = __webpack_require__(638096).subscriptions;
var Method = __webpack_require__(587940);
// var formatters = require('web3-core-helpers').formatters;
var Net = __webpack_require__(745479);


var Shh = function Shh() {
    var _this = this;

    // sets _requestmanager
    core.packageInit(this, arguments);

    // overwrite setProvider
    var setProvider = this.setProvider;
    this.setProvider = function () {
        setProvider.apply(_this, arguments);
        _this.net.setProvider.apply(_this, arguments);
    };

    this.net = new Net(this.currentProvider);

    [
        new Subscriptions({
            name: 'subscribe',
            type: 'shh',
            subscriptions: {
                'messages': {
                    params: 1
                    // inputFormatter: [formatters.inputPostFormatter],
                    // outputFormatter: formatters.outputPostFormatter
                }
            }
        }),

        new Method({
            name: 'getVersion',
            call: 'shh_version',
            params: 0
        }),
        new Method({
            name: 'getInfo',
            call: 'shh_info',
            params: 0
        }),
        new Method({
            name: 'setMaxMessageSize',
            call: 'shh_setMaxMessageSize',
            params: 1
        }),
        new Method({
            name: 'setMinPoW',
            call: 'shh_setMinPoW',
            params: 1
        }),
        new Method({
            name: 'markTrustedPeer',
            call: 'shh_markTrustedPeer',
            params: 1
        }),
        new Method({
            name: 'newKeyPair',
            call: 'shh_newKeyPair',
            params: 0
        }),
        new Method({
            name: 'addPrivateKey',
            call: 'shh_addPrivateKey',
            params: 1
        }),
        new Method({
            name: 'deleteKeyPair',
            call: 'shh_deleteKeyPair',
            params: 1
        }),
        new Method({
            name: 'hasKeyPair',
            call: 'shh_hasKeyPair',
            params: 1
        }),
        new Method({
            name: 'getPublicKey',
            call: 'shh_getPublicKey',
            params: 1
        }),
        new Method({
            name: 'getPrivateKey',
            call: 'shh_getPrivateKey',
            params: 1
        }),
        new Method({
            name: 'newSymKey',
            call: 'shh_newSymKey',
            params: 0
        }),
        new Method({
            name: 'addSymKey',
            call: 'shh_addSymKey',
            params: 1
        }),
        new Method({
            name: 'generateSymKeyFromPassword',
            call: 'shh_generateSymKeyFromPassword',
            params: 1
        }),
        new Method({
            name: 'hasSymKey',
            call: 'shh_hasSymKey',
            params: 1
        }),
        new Method({
            name: 'getSymKey',
            call: 'shh_getSymKey',
            params: 1
        }),
        new Method({
            name: 'deleteSymKey',
            call: 'shh_deleteSymKey',
            params: 1
        }),

        new Method({
            name: 'newMessageFilter',
            call: 'shh_newMessageFilter',
            params: 1
        }),
        new Method({
            name: 'getFilterMessages',
            call: 'shh_getFilterMessages',
            params: 1
        }),
        new Method({
            name: 'deleteMessageFilter',
            call: 'shh_deleteMessageFilter',
            params: 1
        }),

        new Method({
            name: 'post',
            call: 'shh_post',
            params: 1,
            inputFormatter: [null]
        }),

        new Method({
            name: 'unsubscribe',
            call: 'shh_unsubscribe',
            params: 1
        })
    ].forEach(function(method) {
        method.attachToObject(_this);
        method.setRequestManager(_this._requestManager);
    });
};

Shh.prototype.clearSubscriptions = function () {
     this._requestManager.clearSubscriptions();
};

core.addProviders(Shh);



module.exports = Shh;




/***/ }),

/***/ 154067:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file utils.js
 * @author Marek Kotewicz <marek@parity.io>
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */


var _ = __webpack_require__(513469);
var ethjsUnit = __webpack_require__(694278);
var utils = __webpack_require__(655463);
var soliditySha3 = __webpack_require__(895046);
var randombytes = __webpack_require__(351353);



/**
 * Fires an error in an event emitter and callback and returns the eventemitter
 *
 * @method _fireError
 * @param {Object} error a string, a error, or an object with {message, data}
 * @param {Object} emitter
 * @param {Function} reject
 * @param {Function} callback
 * @param {any} optionalData
 * @return {Object} the emitter
 */
var _fireError = function (error, emitter, reject, callback, optionalData) {
    /*jshint maxcomplexity: 10 */

    // add data if given
    if(_.isObject(error) && !(error instanceof Error) &&  error.data) {
        if(_.isObject(error.data) || _.isArray(error.data)) {
            error.data = JSON.stringify(error.data, null, 2);
        }

        error = error.message +"\n"+ error.data;
    }

    if(_.isString(error)) {
        error = new Error(error);
    }

    if (_.isFunction(callback)) {
        callback(error, optionalData);
    }
    if (_.isFunction(reject)) {
        // suppress uncatched error if an error listener is present
        // OR suppress uncatched error if an callback listener is present
        if (emitter &&
            (_.isFunction(emitter.listeners) &&
            emitter.listeners('error').length) || _.isFunction(callback)) {
            emitter.catch(function(){});
        }
        // reject later, to be able to return emitter
        setTimeout(function () {
            reject(error);
        }, 1);
    }

    if(emitter && _.isFunction(emitter.emit)) {
        // emit later, to be able to return emitter
        setTimeout(function () {
            emitter.emit('error', error, optionalData);
            emitter.removeAllListeners();
        }, 1);
    }

    return emitter;
};

/**
 * Should be used to create full function/event name from json abi
 *
 * @method _jsonInterfaceMethodToString
 * @param {Object} json
 * @return {String} full function/event name
 */
var _jsonInterfaceMethodToString = function (json) {
    if (_.isObject(json) && json.name && json.name.indexOf('(') !== -1) {
        return json.name;
    }

    return json.name + '(' + _flattenTypes(false, json.inputs).join(',') + ')';
};


/**
 * Should be used to flatten json abi inputs/outputs into an array of type-representing-strings
 *
 * @method _flattenTypes
 * @param {bool} includeTuple
 * @param {Object} puts
 * @return {Array} parameters as strings
 */
var _flattenTypes = function(includeTuple, puts)
{
    // console.log("entered _flattenTypes. inputs/outputs: " + puts)
    var types = [];

    puts.forEach(function(param) {
        if (typeof param.components === 'object') {
            if (param.type.substring(0, 5) !== 'tuple') {
                throw new Error('components found but type is not tuple; report on GitHub');
            }
            var suffix = '';
            var arrayBracket = param.type.indexOf('[');
            if (arrayBracket >= 0) { suffix = param.type.substring(arrayBracket); }
            var result = _flattenTypes(includeTuple, param.components);
            // console.log("result should have things: " + result)
            if(_.isArray(result) && includeTuple) {
                // console.log("include tuple word, and its an array. joining...: " + result.types)
                types.push('tuple(' + result.join(',') + ')' + suffix);
            }
            else if(!includeTuple) {
                // console.log("don't include tuple, but its an array. joining...: " + result)
                types.push('(' + result.join(',') + ')' + suffix);
            }
            else {
                // console.log("its a single type within a tuple: " + result.types)
                types.push('(' + result + ')');
            }
        } else {
            // console.log("its a type and not directly in a tuple: " + param.type)
            types.push(param.type);
        }
    });

    return types;
};


/**
 * Returns a random hex string by the given bytes size
 *
 * @param {Number} size
 * @returns {string}
 */
var randomHex = function(size) {
    return '0x' + randombytes(size).toString('hex');
};

/**
 * Should be called to get ascii from it's hex representation
 *
 * @method hexToAscii
 * @param {String} hex
 * @returns {String} ascii string representation of hex value
 */
var hexToAscii = function(hex) {
    if (!utils.isHexStrict(hex))
        throw new Error('The parameter must be a valid HEX string.');

    var str = "";
    var i = 0, l = hex.length;
    if (hex.substring(0, 2) === '0x') {
        i = 2;
    }
    for (; i < l; i+=2) {
        var code = parseInt(hex.substr(i, 2), 16);
        str += String.fromCharCode(code);
    }

    return str;
};

/**
 * Should be called to get hex representation (prefixed by 0x) of ascii string
 *
 * @method asciiToHex
 * @param {String} str
 * @returns {String} hex representation of input string
 */
var asciiToHex = function(str) {
    if(!str)
        return "0x00";
    var hex = "";
    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
    }

    return "0x" + hex;
};



/**
 * Returns value of unit in Wei
 *
 * @method getUnitValue
 * @param {String} unit the unit to convert to, default ether
 * @returns {BN} value of the unit (in Wei)
 * @throws error if the unit is not correct:w
 */
var getUnitValue = function (unit) {
    unit = unit ? unit.toLowerCase() : 'ether';
    if (!ethjsUnit.unitMap[unit]) {
        throw new Error('This unit "'+ unit +'" doesn\'t exist, please use the one of the following units' + JSON.stringify(ethjsUnit.unitMap, null, 2));
    }
    return unit;
};

/**
 * Takes a number of wei and converts it to any other ether unit.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method fromWei
 * @param {Number|String} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert to, default ether
 * @return {String|Object} When given a BN object it returns one as well, otherwise a number
 */
var fromWei = function(number, unit) {
    unit = getUnitValue(unit);

    if(!utils.isBN(number) && !_.isString(number)) {
        throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.');
    }

    return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10);
};

/**
 * Takes a number of a unit and converts it to wei.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method toWei
 * @param {Number|String|BN} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert from, default ether
 * @return {String|Object} When given a BN object it returns one as well, otherwise a number
 */
var toWei = function(number, unit) {
    unit = getUnitValue(unit);

    if(!utils.isBN(number) && !_.isString(number)) {
        throw new Error('Please pass numbers as strings or BN objects to avoid precision errors.');
    }

    return utils.isBN(number) ? ethjsUnit.toWei(number, unit) : ethjsUnit.toWei(number, unit).toString(10);
};




/**
 * Converts to a checksum address
 *
 * @method toChecksumAddress
 * @param {String} address the given HEX address
 * @return {String}
 */
var toChecksumAddress = function (address) {
    if (typeof address === 'undefined') return '';

    if(!/^(0x)?[0-9a-f]{40}$/i.test(address))
        throw new Error('Given address "'+ address +'" is not a valid Ethereum address.');



    address = address.toLowerCase().replace(/^0x/i,'');
    var addressHash = utils.sha3(address).replace(/^0x/i,'');
    var checksumAddress = '0x';

    for (var i = 0; i < address.length; i++ ) {
        // If ith character is 9 to f then make it uppercase
        if (parseInt(addressHash[i], 16) > 7) {
            checksumAddress += address[i].toUpperCase();
        } else {
            checksumAddress += address[i];
        }
    }
    return checksumAddress;
};



module.exports = {
    _fireError: _fireError,
    _jsonInterfaceMethodToString: _jsonInterfaceMethodToString,
    _flattenTypes: _flattenTypes,
    // extractDisplayName: extractDisplayName,
    // extractTypeName: extractTypeName,
    randomHex: randomHex,
    _: _,
    BN: utils.BN,
    isBN: utils.isBN,
    isBigNumber: utils.isBigNumber,
    isHex: utils.isHex,
    isHexStrict: utils.isHexStrict,
    sha3: utils.sha3,
    keccak256: utils.sha3,
    soliditySha3: soliditySha3,
    isAddress: utils.isAddress,
    checkAddressChecksum: utils.checkAddressChecksum,
    toChecksumAddress: toChecksumAddress,
    toHex: utils.toHex,
    toBN: utils.toBN,

    bytesToHex: utils.bytesToHex,
    hexToBytes: utils.hexToBytes,

    hexToNumberString: utils.hexToNumberString,

    hexToNumber: utils.hexToNumber,
    toDecimal: utils.hexToNumber, // alias

    numberToHex: utils.numberToHex,
    fromDecimal: utils.numberToHex, // alias

    hexToUtf8: utils.hexToUtf8,
    hexToString: utils.hexToUtf8,
    toUtf8: utils.hexToUtf8,

    utf8ToHex: utils.utf8ToHex,
    stringToHex: utils.utf8ToHex,
    fromUtf8: utils.utf8ToHex,

    hexToAscii: hexToAscii,
    toAscii: hexToAscii,
    asciiToHex: asciiToHex,
    fromAscii: asciiToHex,

    unitMap: ethjsUnit.unitMap,
    toWei: toWei,
    fromWei: fromWei,

    padLeft: utils.leftPad,
    leftPad: utils.leftPad,
    padRight: utils.rightPad,
    rightPad: utils.rightPad,
    toTwosComplement: utils.toTwosComplement
};



/***/ }),

/***/ 895046:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file soliditySha3.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */

var _ = __webpack_require__(513469);
var BN = __webpack_require__(213550);
var utils = __webpack_require__(655463);


var _elementaryName = function (name) {
    /*jshint maxcomplexity:false */

    if (name.startsWith('int[')) {
        return 'int256' + name.slice(3);
    } else if (name === 'int') {
        return 'int256';
    } else if (name.startsWith('uint[')) {
        return 'uint256' + name.slice(4);
    } else if (name === 'uint') {
        return 'uint256';
    } else if (name.startsWith('fixed[')) {
        return 'fixed128x128' + name.slice(5);
    } else if (name === 'fixed') {
        return 'fixed128x128';
    } else if (name.startsWith('ufixed[')) {
        return 'ufixed128x128' + name.slice(6);
    } else if (name === 'ufixed') {
        return 'ufixed128x128';
    }
    return name;
};

// Parse N from type<N>
var _parseTypeN = function (type) {
    var typesize = /^\D+(\d+).*$/.exec(type);
    return typesize ? parseInt(typesize[1], 10) : null;
};

// Parse N from type[<N>]
var _parseTypeNArray = function (type) {
    var arraySize = /^\D+\d*\[(\d+)\]$/.exec(type);
    return arraySize ? parseInt(arraySize[1], 10) : null;
};

var _parseNumber = function (arg) {
    var type = typeof arg;
    if (type === 'string') {
        if (utils.isHexStrict(arg)) {
            return new BN(arg.replace(/0x/i,''), 16);
        } else {
            return new BN(arg, 10);
        }
    } else if (type === 'number') {
        return new BN(arg);
    } else if (utils.isBigNumber(arg)) {
        return new BN(arg.toString(10));
    } else if (utils.isBN(arg)) {
        return arg;
    } else {
        throw new Error(arg +' is not a number');
    }
};

var _solidityPack = function (type, value, arraySize) {
    /*jshint maxcomplexity:false */

    var size, num;
    type = _elementaryName(type);


    if (type === 'bytes') {

        if (value.replace(/^0x/i,'').length % 2 !== 0) {
            throw new Error('Invalid bytes characters '+ value.length);
        }

        return value;
    } else if (type === 'string') {
        return utils.utf8ToHex(value);
    } else if (type === 'bool') {
        return value ? '01' : '00';
    } else if (type.startsWith('address')) {
        if(arraySize) {
            size = 64;
        } else {
            size = 40;
        }

        if(!utils.isAddress(value)) {
            throw new Error(value +' is not a valid address, or the checksum is invalid.');
        }

        return utils.leftPad(value.toLowerCase(), size);
    }

    size = _parseTypeN(type);

    if (type.startsWith('bytes')) {

        if(!size) {
            throw new Error('bytes[] not yet supported in solidity');
        }

        // must be 32 byte slices when in an array
        if(arraySize) {
            size = 32;
        }

        if (size < 1 || size > 32 || size < value.replace(/^0x/i,'').length / 2 ) {
            throw new Error('Invalid bytes' + size +' for '+ value);
        }

        return utils.rightPad(value, size * 2);
    } else if (type.startsWith('uint')) {

        if ((size % 8) || (size < 8) || (size > 256)) {
            throw new Error('Invalid uint'+size+' size');
        }

        num = _parseNumber(value);
        if (num.bitLength() > size) {
            throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength());
        }

        if(num.lt(new BN(0))) {
            throw new Error('Supplied uint '+ num.toString() +' is negative');
        }

        return size ? utils.leftPad(num.toString('hex'), size/8 * 2) : num;
    } else if (type.startsWith('int')) {

        if ((size % 8) || (size < 8) || (size > 256)) {
            throw new Error('Invalid int'+size+' size');
        }

        num = _parseNumber(value);
        if (num.bitLength() > size) {
            throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength());
        }

        if(num.lt(new BN(0))) {
            return num.toTwos(size).toString('hex');
        } else {
            return size ? utils.leftPad(num.toString('hex'), size/8 * 2) : num;
        }

    } else {
        // FIXME: support all other types
        throw new Error('Unsupported or invalid type: ' + type);
    }
};


var _processSoliditySha3Args = function (arg) {
    /*jshint maxcomplexity:false */

    if(_.isArray(arg)) {
        throw new Error('Autodetection of array types is not supported.');
    }

    var type, value = '';
    var hexArg, arraySize;

    // if type is given
    if (_.isObject(arg) && (arg.hasOwnProperty('v') || arg.hasOwnProperty('t') || arg.hasOwnProperty('value') || arg.hasOwnProperty('type'))) {
        type = arg.hasOwnProperty('t') ? arg.t : arg.type;
        value = arg.hasOwnProperty('v') ? arg.v : arg.value;

    // otherwise try to guess the type
    } else {

        type = utils.toHex(arg, true);
        value = utils.toHex(arg);

        if (!type.startsWith('int') && !type.startsWith('uint')) {
            type = 'bytes';
        }
    }

    if ((type.startsWith('int') || type.startsWith('uint')) &&  typeof value === 'string' && !/^(-)?0x/i.test(value)) {
        value = new BN(value);
    }

    // get the array size
    if(_.isArray(value)) {
        arraySize = _parseTypeNArray(type);
        if(arraySize && value.length !== arraySize) {
            throw new Error(type +' is not matching the given array '+ JSON.stringify(value));
        } else {
            arraySize = value.length;
        }
    }


    if (_.isArray(value)) {
        hexArg = value.map(function (val) {
            return _solidityPack(type, val, arraySize).toString('hex').replace('0x','');
        });
        return hexArg.join('');
    } else {
        hexArg = _solidityPack(type, value, arraySize);
        return hexArg.toString('hex').replace('0x','');
    }

};

/**
 * Hashes solidity values to a sha3 hash using keccak 256
 *
 * @method soliditySha3
 * @return {Object} the sha3
 */
var soliditySha3 = function () {
    /*jshint maxcomplexity:false */

    var args = Array.prototype.slice.call(arguments);

    var hexArgs = _.map(args, _processSoliditySha3Args);

    // console.log(args, hexArgs);
    // console.log('0x'+ hexArgs.join(''));

    return utils.sha3('0x'+ hexArgs.join(''));
};


module.exports = soliditySha3;


/***/ }),

/***/ 655463:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file utils.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */

var _ = __webpack_require__(513469);
var BN = __webpack_require__(213550);
var numberToBN = __webpack_require__(383206);
var utf8 = __webpack_require__(957458);
var Hash = __webpack_require__(172324);
var ethereumBloomFilters = __webpack_require__(746877);



/**
 * Returns true if object is BN, otherwise false
 *
 * @method isBN
 * @param {Object} object
 * @return {Boolean}
 */
var isBN = function (object) {
    return BN.isBN(object);
};

/**
 * Returns true if object is BigNumber, otherwise false
 *
 * @method isBigNumber
 * @param {Object} object
 * @return {Boolean}
 */
var isBigNumber = function (object) {
    return object && object.constructor && object.constructor.name === 'BigNumber';
};

/**
 * Takes an input and transforms it into an BN
 *
 * @method toBN
 * @param {Number|String|BN} number, string, HEX string or BN
 * @return {BN} BN
 */
var toBN = function(number){
    try {
        return numberToBN.apply(null, arguments);
    } catch(e) {
        throw new Error(e + ' Given value: "'+ number +'"');
    }
};


/**
 * Takes and input transforms it into BN and if it is negative value, into two's complement
 *
 * @method toTwosComplement
 * @param {Number|String|BN} number
 * @return {String}
 */
var toTwosComplement = function (number) {
    return '0x'+ toBN(number).toTwos(256).toString(16, 64);
};

/**
 * Checks if the given string is an address
 *
 * @method isAddress
 * @param {String} address the given HEX address
 * @return {Boolean}
 */
var isAddress = function (address) {
    // check if it has the basic requirements of an address
    if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
        return false;
        // If it's ALL lowercase or ALL upppercase
    } else if (/^(0x|0X)?[0-9a-f]{40}$/.test(address) || /^(0x|0X)?[0-9A-F]{40}$/.test(address)) {
        return true;
        // Otherwise check each case
    } else {
        return checkAddressChecksum(address);
    }
};



/**
 * Checks if the given string is a checksummed address
 *
 * @method checkAddressChecksum
 * @param {String} address the given HEX address
 * @return {Boolean}
 */
var checkAddressChecksum = function (address) {
    // Check each case
    address = address.replace(/^0x/i,'');
    var addressHash = sha3(address.toLowerCase()).replace(/^0x/i,'');

    for (var i = 0; i < 40; i++ ) {
        // the nth letter should be uppercase if the nth digit of casemap is 1
        if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {
            return false;
        }
    }
    return true;
};

/**
 * Should be called to pad string to expected length
 *
 * @method leftPad
 * @param {String} string to be padded
 * @param {Number} chars that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var leftPad = function (string, chars, sign) {
    var hasPrefix = /^0x/i.test(string) || typeof string === 'number';
    string = string.toString(16).replace(/^0x/i,'');

    var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0;

    return (hasPrefix ? '0x' : '') + new Array(padding).join(sign ? sign : "0") + string;
};

/**
 * Should be called to pad string to expected length
 *
 * @method rightPad
 * @param {String} string to be padded
 * @param {Number} chars that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var rightPad = function (string, chars, sign) {
    var hasPrefix = /^0x/i.test(string) || typeof string === 'number';
    string = string.toString(16).replace(/^0x/i,'');

    var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0;

    return (hasPrefix ? '0x' : '') + string + (new Array(padding).join(sign ? sign : "0"));
};


/**
 * Should be called to get hex representation (prefixed by 0x) of utf8 string
 *
 * @method utf8ToHex
 * @param {String} str
 * @returns {String} hex representation of input string
 */
var utf8ToHex = function(str) {
    str = utf8.encode(str);
    var hex = "";

    // remove \u0000 padding from either side
    str = str.replace(/^(?:\u0000)*/,'');
    str = str.split("").reverse().join("");
    str = str.replace(/^(?:\u0000)*/,'');
    str = str.split("").reverse().join("");

    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        // if (code !== 0) {
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
        // }
    }

    return "0x" + hex;
};

/**
 * Should be called to get utf8 from it's hex representation
 *
 * @method hexToUtf8
 * @param {String} hex
 * @returns {String} ascii string representation of hex value
 */
var hexToUtf8 = function(hex) {
    if (!isHexStrict(hex))
        throw new Error('The parameter "'+ hex +'" must be a valid HEX string.');

    var str = "";
    var code = 0;
    hex = hex.replace(/^0x/i,'');

    // remove 00 padding from either side
    hex = hex.replace(/^(?:00)*/,'');
    hex = hex.split("").reverse().join("");
    hex = hex.replace(/^(?:00)*/,'');
    hex = hex.split("").reverse().join("");

    var l = hex.length;

    for (var i=0; i < l; i+=2) {
        code = parseInt(hex.substr(i, 2), 16);
        // if (code !== 0) {
        str += String.fromCharCode(code);
        // }
    }

    return utf8.decode(str);
};


/**
 * Converts value to it's number representation
 *
 * @method hexToNumber
 * @param {String|Number|BN} value
 * @return {String}
 */
var hexToNumber = function (value) {
    if (!value) {
        return value;
    }

    if (_.isString(value) && !isHexStrict(value)) {
        throw new Error('Given value "'+value+'" is not a valid hex string.');
    }

    return toBN(value).toNumber();
};

/**
 * Converts value to it's decimal representation in string
 *
 * @method hexToNumberString
 * @param {String|Number|BN} value
 * @return {String}
 */
var hexToNumberString = function (value) {
    if (!value) return value;

    if (_.isString(value) && !isHexStrict(value)) {
        throw new Error('Given value "'+value+'" is not a valid hex string.');
    }

    return toBN(value).toString(10);
};


/**
 * Converts value to it's hex representation
 *
 * @method numberToHex
 * @param {String|Number|BN} value
 * @return {String}
 */
var numberToHex = function (value) {
    if (_.isNull(value) || _.isUndefined(value)) {
        return value;
    }

    if (!isFinite(value) && !isHexStrict(value)) {
        throw new Error('Given input "'+value+'" is not a number.');
    }

    var number = toBN(value);
    var result = number.toString(16);

    return number.lt(new BN(0)) ? '-0x' + result.substr(1) : '0x' + result;
};


/**
 * Convert a byte array to a hex string
 *
 * Note: Implementation from crypto-js
 *
 * @method bytesToHex
 * @param {Array} bytes
 * @return {String} the hex string
 */
var bytesToHex = function(bytes) {
    for (var hex = [], i = 0; i < bytes.length; i++) {
        /* jshint ignore:start */
        hex.push((bytes[i] >>> 4).toString(16));
        hex.push((bytes[i] & 0xF).toString(16));
        /* jshint ignore:end */
    }
    return '0x'+ hex.join("");
};

/**
 * Convert a hex string to a byte array
 *
 * Note: Implementation from crypto-js
 *
 * @method hexToBytes
 * @param {string} hex
 * @return {Array} the byte array
 */
var hexToBytes = function(hex) {
    hex = hex.toString(16);

    if (!isHexStrict(hex)) {
        throw new Error('Given value "'+ hex +'" is not a valid hex string.');
    }

    hex = hex.replace(/^0x/i,'');

    for (var bytes = [], c = 0; c < hex.length; c += 2)
        bytes.push(parseInt(hex.substr(c, 2), 16));
    return bytes;
};

/**
 * Auto converts any given value into it's hex representation.
 *
 * And even stringifys objects before.
 *
 * @method toHex
 * @param {String|Number|BN|Object|Buffer} value
 * @param {Boolean} returnType
 * @return {String}
 */
var toHex = function (value, returnType) {
    /*jshint maxcomplexity: false */

    if (isAddress(value)) {
        return returnType ? 'address' : '0x'+ value.toLowerCase().replace(/^0x/i,'');
    }

    if (_.isBoolean(value)) {
        return returnType ? 'bool' : value ? '0x01' : '0x00';
    }

    if (Buffer.isBuffer(value)) {
        return '0x' + value.toString('hex');
    }

    if (_.isObject(value) && !isBigNumber(value) && !isBN(value)) {
        return returnType ? 'string' : utf8ToHex(JSON.stringify(value));
    }

    // if its a negative number, pass it through numberToHex
    if (_.isString(value)) {
        if (value.indexOf('-0x') === 0 || value.indexOf('-0X') === 0) {
            return returnType ? 'int256' : numberToHex(value);
        } else if(value.indexOf('0x') === 0 || value.indexOf('0X') === 0) {
            return returnType ? 'bytes' : value;
        } else if (!isFinite(value)) {
            return returnType ? 'string' : utf8ToHex(value);
        }
    }

    return returnType ? (value < 0 ? 'int256' : 'uint256') : numberToHex(value);
};


/**
 * Check if string is HEX, requires a 0x in front
 *
 * @method isHexStrict
 * @param {String} hex to be checked
 * @returns {Boolean}
 */
var isHexStrict = function (hex) {
    return ((_.isString(hex) || _.isNumber(hex)) && /^(-)?0x[0-9a-f]*$/i.test(hex));
};

/**
 * Check if string is HEX
 *
 * @method isHex
 * @param {String} hex to be checked
 * @returns {Boolean}
 */
var isHex = function (hex) {
    return ((_.isString(hex) || _.isNumber(hex)) && /^(-0x|0x)?[0-9a-f]*$/i.test(hex));
};


/**
 * Returns true if given string is a valid Ethereum block header bloom.
 *
 * @method isBloom
 * @param {String} bloom encoded bloom filter
 * @return {Boolean}
 */
var isBloom = function (bloom) {
    return ethereumBloomFilters.isBloom(bloom);
};

/**
 * Returns true if the ethereum users address is part of the given bloom 
 * note: false positives are possible.
 *
 * @method isUserEthereumAddressInBloom
 * @param {String} ethereumAddress encoded bloom filter
 * @param {String} bloom ethereum addresss
 * @return {Boolean}
 */
var isUserEthereumAddressInBloom = function (bloom, ethereumAddress) {
    return ethereumBloomFilters.isUserEthereumAddressInBloom(bloom, ethereumAddress);
};

/**
 * Returns true if the contract address is part of the given bloom 
 * note: false positives are possible.
 *
 * @method isUserEthereumAddressInBloom
 * @param {String} bloom encoded bloom filter
 * @param {String} contractAddress contract addresss
 * @return {Boolean}
 */
var isContractAddressInBloom = function (bloom, contractAddress) {
    return ethereumBloomFilters.isContractAddressInBloom(bloom, contractAddress);
};

/**
 * Returns true if given string is a valid log topic.
 *
 * @method isTopic
 * @param {String} topic encoded topic
 * @return {Boolean}
 */
var isTopic = function (topic) {
    return ethereumBloomFilters.isTopic(topic);
};

/**
 * Returns true if the topic is part of the given bloom
 * note: false positives are possible.
 *
 * @method isTopicInBloom
 * @param {String} bloom encoded bloom filter
 * @param {String} topic encoded topic
 * @return {Boolean}
 */
var isTopicInBloom = function (bloom, topic) {
    return ethereumBloomFilters.isTopicInBloom(bloom, topic);
};

/**
 * Returns true if the value is part of the given bloom
 * note: false positives are possible.
 *
 * @method isInBloom
 * @param {String} bloom encoded bloom filter
 * @param {String | Uint8Array} topic encoded value
 * @return {Boolean}
 */
var isInBloom = function (bloom, topic) {
    return ethereumBloomFilters.isInBloom(bloom, topic);
};

/**
 * Hashes values to a sha3 hash using keccak 256
 *
 * To hash a HEX string the hex must have 0x in front.
 *
 * @method sha3
 * @return {String} the sha3 string
 */
var SHA3_NULL_S = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';

var sha3 = function (value) {
    if (isBN(value)) {
        value = value.toString();
    }

    if (isHexStrict(value) && /^0x/i.test((value).toString())) {
        value = hexToBytes(value);
    }

    var returnValue = Hash.keccak256(value); // jshint ignore:line

    if(returnValue === SHA3_NULL_S) {
        return null;
    } else {
        return returnValue;
    }
};
// expose the under the hood keccak256
sha3._Hash = Hash;


module.exports = {
    BN: BN,
    isBN: isBN,
    isBigNumber: isBigNumber,
    toBN: toBN,
    isAddress: isAddress,
    isBloom: isBloom,
    isUserEthereumAddressInBloom: isUserEthereumAddressInBloom,
    isContractAddressInBloom: isContractAddressInBloom,
    isTopic: isTopic,
    isTopicInBloom: isTopicInBloom,
    isInBloom: isInBloom,
    checkAddressChecksum: checkAddressChecksum,
    utf8ToHex: utf8ToHex,
    hexToUtf8: hexToUtf8,
    hexToNumber: hexToNumber,
    hexToNumberString: hexToNumberString,
    numberToHex: numberToHex,
    toHex: toHex,
    hexToBytes: hexToBytes,
    bytesToHex: bytesToHex,
    isHex: isHex,
    isHexStrict: isHexStrict,
    leftPad: leftPad,
    rightPad: rightPad,
    toTwosComplement: toTwosComplement,
    sha3: sha3
};


/***/ }),

/***/ 349150:
/***/ ((module) => {

"use strict";
module.exports = {"i8":"1.2.4"};

/***/ }),

/***/ 734046:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethereum.org>
 *   Gav Wood <gav@parity.io>
 *   Jeffrey Wilcke <jeffrey.wilcke@ethereum.org>
 *   Marek Kotewicz <marek@parity.io>
 *   Marian Oancea <marian@ethereum.org>
 * @date 2017
 */




var version = __webpack_require__(349150)/* .version */ .i8;
var core = __webpack_require__(36310);
var Eth = __webpack_require__(2097);
var Net = __webpack_require__(745479);
var Personal = __webpack_require__(610533);
var Shh = __webpack_require__(427012);
var Bzz = __webpack_require__(739581);
var utils = __webpack_require__(154067);

var Web3 = function Web3() {
    var _this = this;

    // sets _requestmanager etc
    core.packageInit(this, arguments);

    this.version = version;
    this.utils = utils;

    this.eth = new Eth(this);
    this.shh = new Shh(this);
    this.bzz = new Bzz(this);

    // overwrite package setProvider
    var setProvider = this.setProvider;
    this.setProvider = function (provider, net) {
        setProvider.apply(_this, arguments);

        this.eth.setProvider(provider, net);
        this.shh.setProvider(provider, net);
        this.bzz.setProvider(provider);

        return true;
    };
};

Web3.version = version;
Web3.utils = utils;
Web3.modules = {
    Eth: Eth,
    Net: Net,
    Personal: Personal,
    Shh: Shh,
    Bzz: Bzz
};

core.addProviders(Web3);

module.exports = Web3;



/***/ }),

/***/ 349812:
/***/ ((module) => {

module.exports = {
  registryInterface: [
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "resolver",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "owner",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "resolver",
          "type": "address"
        }
      ],
      "name": "setResolver",
      "outputs": [],
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "label",
          "type": "bytes32"
        },
        {
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "setSubnodeOwner",
      "outputs": [],
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "setOwner",
      "outputs": [],
      "type": "function"
    }
  ],
  resolverInterface: [
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "addr",
      "outputs": [
        {
          "name": "",
          "type": "address"
        }
      ],
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "content",
      "outputs": [
        {
          "name": "",
          "type": "bytes32"
        }
      ],
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        }
      ],
      "name": "name",
      "outputs": [
        {
          "name": "",
          "type": "string"
        }
      ],
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "kind",
          "type": "bytes32"
        }
      ],
      "name": "has",
      "outputs": [
        {
          "name": "",
          "type": "bool"
        }
      ],
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "addr",
          "type": "address"
        }
      ],
      "name": "setAddr",
      "outputs": [],
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "hash",
          "type": "bytes32"
        }
      ],
      "name": "setContent",
      "outputs": [],
      "type": "function"
    },
    {
      "constant": false,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "name",
          "type": "string"
        }
      ],
      "name": "setName",
      "outputs": [],
      "type": "function"
    },
    {
      "constant": true,
      "inputs": [
        {
          "name": "node",
          "type": "bytes32"
        },
        {
          "name": "contentType",
          "type": "uint256"
        }
      ],
      "name": "ABI",
      "outputs": [
        {
          "name": "",
          "type": "uint256"
        },
        {
          "name": "",
          "type": "bytes"
        }
      ],
      "payable": false,
      "type": "function"
    }
  ]
}


/***/ }),

/***/ 897740:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var sha3 = __webpack_require__(591094).keccak_256
var namehash = __webpack_require__(159873)

module.exports = {
  fromHex: function(x) {
    if(x.startsWith("0x")) {
      x = x.slice(2);
    }

    var ret = new Uint8Array(x.length / 2);
    for(var i = 0; i < ret.length; i++) {
      ret[i] = parseInt(x.slice(i * 2, i * 2 + 2), 16);
    }

    return ret;
  },
  parentNamehash: function(name) {
    var dot = name.indexOf('.');
    if(dot == -1) {
      return ['0x' + sha3(namehash.normalize(name)), namehash.hash('')];
    } else {
      return ['0x' + sha3(namehash.normalize(name.slice(0, dot))), namehash.hash(name.slice(dot + 1))];
    }
  },
  construct: function(constructor, args) {
    function F() {
      return constructor.apply(this, args);
    }
    F.prototype = constructor.prototype;
    return new F();
  },
  strFromUtf8Ab: function(ab) {
    // from https://stackoverflow.com/a/18722848
    return decodeURIComponent(escape(String.fromCharCode.apply(null, ab)));
  }
}


/***/ }),

/***/ 625419:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var properties_1 = __webpack_require__(180083);
var Signer = /** @class */ (function () {
    function Signer() {
        properties_1.setType(this, 'Signer');
    }
    Signer.isSigner = function (value) {
        return properties_1.isType(value, 'Signer');
    };
    return Signer;
}());
exports.Signer = Signer;
//defineReadOnly(Signer, 'inherits', inheritable(Signer));


/***/ }),

/***/ 890731:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var constants_1 = __webpack_require__(48232);
var errors = __importStar(__webpack_require__(766286));
var abi_coder_1 = __webpack_require__(193959);
var address_1 = __webpack_require__(215894);
var bignumber_1 = __webpack_require__(661895);
var bytes_1 = __webpack_require__(45901);
var interface_1 = __webpack_require__(416578);
var properties_1 = __webpack_require__(180083);
///////////////////////////////
// Imported Abstracts
var abstract_provider_1 = __webpack_require__(155514);
var abstract_signer_1 = __webpack_require__(625419);
///////////////////////////////
var VoidSigner = /** @class */ (function (_super) {
    __extends(VoidSigner, _super);
    function VoidSigner(address, provider) {
        var _this = _super.call(this) || this;
        properties_1.defineReadOnly(_this, 'address', address);
        properties_1.defineReadOnly(_this, 'provider', provider);
        return _this;
    }
    VoidSigner.prototype.getAddress = function () {
        return Promise.resolve(this.address);
    };
    VoidSigner.prototype._fail = function (message, operation) {
        return Promise.resolve().then(function () {
            errors.throwError(message, errors.UNSUPPORTED_OPERATION, { operation: operation });
        });
    };
    VoidSigner.prototype.signMessage = function (message) {
        return this._fail('VoidSigner cannot sign messages', 'signMessage');
    };
    VoidSigner.prototype.sendTransaction = function (transaction) {
        return this._fail('VoidSigner cannot sign transactions', 'sendTransaction');
    };
    VoidSigner.prototype.connect = function (provider) {
        return new VoidSigner(this.address, provider);
    };
    return VoidSigner;
}(abstract_signer_1.Signer));
exports.VoidSigner = VoidSigner;
var allowedTransactionKeys = {
    chainId: true, data: true, from: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true
};
// Recursively replaces ENS names with promises to resolve the name and
// stalls until all promises have returned
// @TODO: Expand this to resolve any promises too
function resolveAddresses(provider, value, paramType) {
    if (Array.isArray(paramType)) {
        var promises_1 = [];
        paramType.forEach(function (paramType, index) {
            var v = null;
            if (Array.isArray(value)) {
                v = value[index];
            }
            else {
                v = value[paramType.name];
            }
            promises_1.push(resolveAddresses(provider, v, paramType));
        });
        return Promise.all(promises_1);
    }
    if (paramType.type === 'address') {
        return provider.resolveName(value);
    }
    if (paramType.type === 'tuple') {
        return resolveAddresses(provider, value, paramType.components);
    }
    // Strips one level of array indexing off the end to recuse into
    var isArrayMatch = paramType.type.match(/(.*)(\[[0-9]*\]$)/);
    if (isArrayMatch) {
        if (!Array.isArray(value)) {
            throw new Error('invalid value for array');
        }
        var promises = [];
        var subParamType = {
            components: paramType.components,
            type: isArrayMatch[1],
        };
        value.forEach(function (v) {
            promises.push(resolveAddresses(provider, v, subParamType));
        });
        return Promise.all(promises);
    }
    return Promise.resolve(value);
}
function runMethod(contract, functionName, estimateOnly) {
    var method = contract.interface.functions[functionName];
    return function () {
        var params = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            params[_i] = arguments[_i];
        }
        var tx = {};
        var blockTag = null;
        // If 1 extra parameter was passed in, it contains overrides
        if (params.length === method.inputs.length + 1 && typeof (params[params.length - 1]) === 'object') {
            tx = properties_1.shallowCopy(params.pop());
            if (tx.blockTag != null) {
                blockTag = tx.blockTag;
            }
            delete tx.blockTag;
            // Check for unexpected keys (e.g. using "gas" instead of "gasLimit")
            for (var key in tx) {
                if (!allowedTransactionKeys[key]) {
                    throw new Error('unknown transaction override ' + key);
                }
            }
        }
        if (params.length != method.inputs.length) {
            throw new Error('incorrect number of arguments');
        }
        // Check overrides make sense
        ['data', 'to'].forEach(function (key) {
            if (tx[key] != null) {
                errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key });
            }
        });
        tx.to = contract._deployed(blockTag).then(function () {
            return contract.addressPromise;
        });
        return resolveAddresses(contract.provider, params, method.inputs).then(function (params) {
            tx.data = method.encode(params);
            if (method.type === 'call') {
                // Call (constant functions) always cost 0 ether
                if (estimateOnly) {
                    return Promise.resolve(constants_1.Zero);
                }
                if (!contract.provider) {
                    errors.throwError('call (constant functions) require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'call' });
                }
                // Check overrides make sense
                ['gasLimit', 'gasPrice', 'value'].forEach(function (key) {
                    if (tx[key] != null) {
                        throw new Error('call cannot override ' + key);
                    }
                });
                if (tx.from == null && contract.signer) {
                    tx.from = contract.signer.getAddress();
                }
                return contract.provider.call(tx, blockTag).then(function (value) {
                    if ((bytes_1.hexDataLength(value) % 32) === 4 && bytes_1.hexDataSlice(value, 0, 4) === '0x08c379a0') {
                        var reason = abi_coder_1.defaultAbiCoder.decode(['string'], bytes_1.hexDataSlice(value, 4));
                        errors.throwError('call revert exception', errors.CALL_EXCEPTION, {
                            address: contract.address,
                            args: params,
                            method: method.signature,
                            errorSignature: 'Error(string)',
                            errorArgs: [reason],
                            reason: reason,
                            transaction: tx
                        });
                    }
                    try {
                        var result = method.decode(value);
                        if (method.outputs.length === 1) {
                            result = result[0];
                        }
                        return result;
                    }
                    catch (error) {
                        if (value === '0x' && method.outputs.length > 0) {
                            errors.throwError('call exception', errors.CALL_EXCEPTION, {
                                address: contract.address,
                                method: method.signature,
                                args: params
                            });
                        }
                        throw error;
                    }
                });
            }
            else if (method.type === 'transaction') {
                // Only computing the transaction estimate
                if (estimateOnly) {
                    if (!contract.provider) {
                        errors.throwError('estimate gas require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'estimateGas' });
                    }
                    if (tx.from == null && contract.signer) {
                        tx.from = contract.signer.getAddress();
                    }
                    return contract.provider.estimateGas(tx);
                }
                if (tx.gasLimit == null && method.gas != null) {
                    tx.gasLimit = bignumber_1.bigNumberify(method.gas).add(21000);
                }
                if (!contract.signer) {
                    errors.throwError('sending a transaction requires a signer', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction' });
                }
                // Make sure they aren't overriding something they shouldn't
                if (tx.from != null) {
                    errors.throwError('cannot override from in a transaction', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction' });
                }
                return contract.signer.sendTransaction(tx).then(function (tx) {
                    var wait = tx.wait.bind(tx);
                    tx.wait = function (confirmations) {
                        return wait(confirmations).then(function (receipt) {
                            receipt.events = receipt.logs.map(function (log) {
                                var event = properties_1.deepCopy(log);
                                var parsed = contract.interface.parseLog(log);
                                if (parsed) {
                                    event.args = parsed.values;
                                    event.decode = parsed.decode;
                                    event.event = parsed.name;
                                    event.eventSignature = parsed.signature;
                                }
                                event.removeListener = function () { return contract.provider; };
                                event.getBlock = function () {
                                    return contract.provider.getBlock(receipt.blockHash);
                                };
                                event.getTransaction = function () {
                                    return contract.provider.getTransaction(receipt.transactionHash);
                                };
                                event.getTransactionReceipt = function () {
                                    return Promise.resolve(receipt);
                                };
                                return event;
                            });
                            return receipt;
                        });
                    };
                    return tx;
                });
            }
            throw new Error('invalid type - ' + method.type);
            return null;
        });
    };
}
function getEventTag(filter) {
    if (filter.address && (filter.topics == null || filter.topics.length === 0)) {
        return '*';
    }
    return (filter.address || '*') + '@' + (filter.topics ? filter.topics.join(':') : '');
}
var Contract = /** @class */ (function () {
    // https://github.com/Microsoft/TypeScript/issues/5453
    // Once this issue is resolved (there are open PR) we can do this nicer
    // by making addressOrName default to null for 2 operand calls. :)
    function Contract(addressOrName, contractInterface, signerOrProvider) {
        var _this = this;
        errors.checkNew(this, Contract);
        // @TODO: Maybe still check the addressOrName looks like a valid address or name?
        //address = getAddress(address);
        if (interface_1.Interface.isInterface(contractInterface)) {
            properties_1.defineReadOnly(this, 'interface', contractInterface);
        }
        else {
            properties_1.defineReadOnly(this, 'interface', new interface_1.Interface(contractInterface));
        }
        if (abstract_signer_1.Signer.isSigner(signerOrProvider)) {
            properties_1.defineReadOnly(this, 'provider', signerOrProvider.provider);
            properties_1.defineReadOnly(this, 'signer', signerOrProvider);
        }
        else if (abstract_provider_1.Provider.isProvider(signerOrProvider)) {
            properties_1.defineReadOnly(this, 'provider', signerOrProvider);
            properties_1.defineReadOnly(this, 'signer', null);
        }
        else {
            errors.throwError('invalid signer or provider', errors.INVALID_ARGUMENT, { arg: 'signerOrProvider', value: signerOrProvider });
        }
        properties_1.defineReadOnly(this, 'estimate', {});
        properties_1.defineReadOnly(this, 'functions', {});
        properties_1.defineReadOnly(this, 'filters', {});
        Object.keys(this.interface.events).forEach(function (eventName) {
            var event = _this.interface.events[eventName];
            properties_1.defineReadOnly(_this.filters, eventName, function () {
                var args = [];
                for (var _i = 0; _i < arguments.length; _i++) {
                    args[_i] = arguments[_i];
                }
                return {
                    address: _this.address,
                    topics: event.encodeTopics(args)
                };
            });
        });
        this._events = [];
        properties_1.defineReadOnly(this, 'address', addressOrName);
        if (this.provider) {
            properties_1.defineReadOnly(this, 'addressPromise', this.provider.resolveName(addressOrName).then(function (address) {
                if (address == null) {
                    throw new Error('name not found');
                }
                return address;
            }).catch(function (error) {
                throw error;
            }));
        }
        else {
            try {
                properties_1.defineReadOnly(this, 'addressPromise', Promise.resolve(address_1.getAddress(addressOrName)));
            }
            catch (error) {
                // Without a provider, we cannot use ENS names
                errors.throwError('provider is required to use non-address contract address', errors.INVALID_ARGUMENT, { argument: 'addressOrName', value: addressOrName });
            }
        }
        Object.keys(this.interface.functions).forEach(function (name) {
            var run = runMethod(_this, name, false);
            if (_this[name] == null) {
                properties_1.defineReadOnly(_this, name, run);
            }
            else {
                errors.warn('WARNING: Multiple definitions for ' + name);
            }
            if (_this.functions[name] == null) {
                properties_1.defineReadOnly(_this.functions, name, run);
                properties_1.defineReadOnly(_this.estimate, name, runMethod(_this, name, true));
            }
        });
    }
    // @TODO: Allow timeout?
    Contract.prototype.deployed = function () {
        return this._deployed();
    };
    Contract.prototype._deployed = function (blockTag) {
        var _this = this;
        if (!this._deployedPromise) {
            // If we were just deployed, we know the transaction we should occur in
            if (this.deployTransaction) {
                this._deployedPromise = this.deployTransaction.wait().then(function () {
                    return _this;
                });
            }
            else {
                // @TODO: Once we allow a timeout to be passed in, we will wait
                // up to that many blocks for getCode
                // Otherwise, poll for our code to be deployed
                this._deployedPromise = this.provider.getCode(this.address, blockTag).then(function (code) {
                    if (code === '0x') {
                        errors.throwError('contract not deployed', errors.UNSUPPORTED_OPERATION, {
                            contractAddress: _this.address,
                            operation: 'getDeployed'
                        });
                    }
                    return _this;
                });
            }
        }
        return this._deployedPromise;
    };
    // @TODO:
    // estimateFallback(overrides?: TransactionRequest): Promise<BigNumber>
    // @TODO:
    // estimateDeploy(bytecode: string, ...args): Promise<BigNumber>
    Contract.prototype.fallback = function (overrides) {
        var _this = this;
        if (!this.signer) {
            errors.throwError('sending a transaction requires a signer', errors.UNSUPPORTED_OPERATION, { operation: 'sendTransaction(fallback)' });
        }
        var tx = properties_1.shallowCopy(overrides || {});
        ['from', 'to'].forEach(function (key) {
            if (tx[key] == null) {
                return;
            }
            errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key });
        });
        tx.to = this.addressPromise;
        return this.deployed().then(function () {
            return _this.signer.sendTransaction(tx);
        });
    };
    // Reconnect to a different signer or provider
    Contract.prototype.connect = function (signerOrProvider) {
        if (typeof (signerOrProvider) === 'string') {
            signerOrProvider = new VoidSigner(signerOrProvider, this.provider);
        }
        var contract = new Contract(this.address, this.interface, signerOrProvider);
        if (this.deployTransaction) {
            properties_1.defineReadOnly(contract, 'deployTransaction', this.deployTransaction);
        }
        return contract;
    };
    // Re-attach to a different on=chain instance of this contract
    Contract.prototype.attach = function (addressOrName) {
        return new Contract(addressOrName, this.interface, this.signer || this.provider);
    };
    Contract.isIndexed = function (value) {
        return interface_1.Interface.isIndexed(value);
    };
    Contract.prototype._getEventFilter = function (eventName) {
        var _this = this;
        if (typeof (eventName) === 'string') {
            // Listen for any event
            if (eventName === '*') {
                return {
                    prepareEvent: function (e) {
                        var parsed = _this.interface.parseLog(e);
                        if (parsed) {
                            e.args = parsed.values;
                            e.decode = parsed.decode;
                            e.event = parsed.name;
                            e.eventSignature = parsed.signature;
                        }
                        return [e];
                    },
                    eventTag: '*',
                    filter: { address: this.address },
                };
            }
            // Normalize the eventName
            if (eventName.indexOf('(') !== -1) {
                eventName = abi_coder_1.formatSignature(abi_coder_1.parseSignature('event ' + eventName));
            }
            var event_1 = this.interface.events[eventName];
            if (!event_1) {
                errors.throwError('unknown event - ' + eventName, errors.INVALID_ARGUMENT, { argumnet: 'eventName', value: eventName });
            }
            var filter_1 = {
                address: this.address,
                topics: [event_1.topic]
            };
            return {
                prepareEvent: function (e) {
                    var args = event_1.decode(e.data, e.topics);
                    e.args = args;
                    var result = Array.prototype.slice.call(args);
                    result.push(e);
                    return result;
                },
                event: event_1,
                eventTag: getEventTag(filter_1),
                filter: filter_1
            };
        }
        var filter = {
            address: this.address
        };
        // Find the matching event in the ABI; if none, we still allow filtering
        // since it may be a filter for an otherwise unknown event
        var event = null;
        if (eventName.topics && eventName.topics[0]) {
            filter.topics = eventName.topics;
            for (var name_1 in this.interface.events) {
                if (name_1.indexOf('(') === -1) {
                    continue;
                }
                var e = this.interface.events[name_1];
                if (e.topic === eventName.topics[0].toLowerCase()) {
                    event = e;
                    break;
                }
            }
        }
        return {
            prepareEvent: function (e) {
                if (!event) {
                    return [e];
                }
                var args = event.decode(e.data, e.topics);
                e.args = args;
                var result = Array.prototype.slice.call(args);
                result.push(e);
                return result;
            },
            event: event,
            eventTag: getEventTag(filter),
            filter: filter
        };
    };
    Contract.prototype._addEventListener = function (eventFilter, listener, once) {
        var _this = this;
        if (!this.provider) {
            errors.throwError('events require a provider or a signer with a provider', errors.UNSUPPORTED_OPERATION, { operation: 'once' });
        }
        var wrappedListener = function (log) {
            var event = properties_1.deepCopy(log);
            var args = eventFilter.prepareEvent(event);
            if (eventFilter.event) {
                event.decode = eventFilter.event.decode;
                event.event = eventFilter.event.name;
                event.eventSignature = eventFilter.event.signature;
            }
            event.removeListener = function () { _this.removeListener(eventFilter.filter, listener); };
            event.getBlock = function () { return _this.provider.getBlock(log.blockHash); };
            event.getTransaction = function () { return _this.provider.getTransaction(log.transactionHash); };
            event.getTransactionReceipt = function () { return _this.provider.getTransactionReceipt(log.transactionHash); };
            _this.emit.apply(_this, [eventFilter.filter].concat(args));
        };
        this.provider.on(eventFilter.filter, wrappedListener);
        this._events.push({ eventFilter: eventFilter, listener: listener, wrappedListener: wrappedListener, once: once });
    };
    Contract.prototype.on = function (event, listener) {
        this._addEventListener(this._getEventFilter(event), listener, false);
        return this;
    };
    Contract.prototype.once = function (event, listener) {
        this._addEventListener(this._getEventFilter(event), listener, true);
        return this;
    };
    Contract.prototype.addListener = function (eventName, listener) {
        return this.on(eventName, listener);
    };
    Contract.prototype.emit = function (eventName) {
        var _this = this;
        var args = [];
        for (var _i = 1; _i < arguments.length; _i++) {
            args[_i - 1] = arguments[_i];
        }
        if (!this.provider) {
            return false;
        }
        var result = false;
        var eventFilter = this._getEventFilter(eventName);
        this._events = this._events.filter(function (event) {
            // Not this event (keep it for later)
            if (event.eventFilter.eventTag !== eventFilter.eventTag) {
                return true;
            }
            // Call the callback in the next event loop
            setTimeout(function () {
                event.listener.apply(_this, args);
            }, 0);
            result = true;
            // Reschedule it if it not "once"
            return !(event.once);
        });
        return result;
    };
    Contract.prototype.listenerCount = function (eventName) {
        if (!this.provider) {
            return 0;
        }
        var eventFilter = this._getEventFilter(eventName);
        return this._events.filter(function (event) {
            return event.eventFilter.eventTag === eventFilter.eventTag;
        }).length;
    };
    Contract.prototype.listeners = function (eventName) {
        if (!this.provider) {
            return [];
        }
        var eventFilter = this._getEventFilter(eventName);
        return this._events.filter(function (event) {
            return event.eventFilter.eventTag === eventFilter.eventTag;
        }).map(function (event) { return event.listener; });
    };
    Contract.prototype.removeAllListeners = function (eventName) {
        var _this = this;
        if (!this.provider) {
            return this;
        }
        var eventFilter = this._getEventFilter(eventName);
        this._events = this._events.filter(function (event) {
            // Keep all other events
            if (event.eventFilter.eventTag !== eventFilter.eventTag) {
                return true;
            }
            // Deregister this event from the provider and filter it out
            _this.provider.removeListener(event.eventFilter.filter, event.wrappedListener);
            return false;
        });
        return this;
    };
    Contract.prototype.removeListener = function (eventName, listener) {
        var _this = this;
        if (!this.provider) {
            return this;
        }
        var found = false;
        var eventFilter = this._getEventFilter(eventName);
        this._events = this._events.filter(function (event) {
            // Make sure this event and listener match
            if (event.eventFilter.eventTag !== eventFilter.eventTag) {
                return true;
            }
            if (event.listener !== listener) {
                return true;
            }
            _this.provider.removeListener(event.eventFilter.filter, event.wrappedListener);
            // Already found a matching event in a previous loop
            if (found) {
                return true;
            }
            // REmove this event (returning false filters us out)
            found = true;
            return false;
        });
        return this;
    };
    return Contract;
}());
exports.Contract = Contract;
var ContractFactory = /** @class */ (function () {
    function ContractFactory(contractInterface, bytecode, signer) {
        var bytecodeHex = null;
        // Allow the bytecode object from the Solidity compiler
        if (typeof (bytecode) === 'string') {
            bytecodeHex = bytecode;
        }
        else if (bytes_1.isArrayish(bytecode)) {
            bytecodeHex = bytes_1.hexlify(bytecode);
        }
        else if (typeof (bytecode.object) === 'string') {
            bytecodeHex = bytecode.object;
        }
        else {
            errors.throwError('bytecode must be a valid hex string', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode });
        }
        // Make sure it is 0x prefixed
        if (bytecodeHex.substring(0, 2) !== '0x') {
            bytecodeHex = '0x' + bytecodeHex;
        }
        if (!bytes_1.isHexString(bytecodeHex)) {
            errors.throwError('bytecode must be a valid hex string', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode });
        }
        if ((bytecodeHex.length % 2) !== 0) {
            errors.throwError('bytecode must be valid data (even length)', errors.INVALID_ARGUMENT, { arg: 'bytecode', value: bytecode });
        }
        properties_1.defineReadOnly(this, 'bytecode', bytecodeHex);
        if (interface_1.Interface.isInterface(contractInterface)) {
            properties_1.defineReadOnly(this, 'interface', contractInterface);
        }
        else {
            properties_1.defineReadOnly(this, 'interface', new interface_1.Interface(contractInterface));
        }
        if (signer && !abstract_signer_1.Signer.isSigner(signer)) {
            errors.throwError('invalid signer', errors.INVALID_ARGUMENT, { arg: 'signer', value: null });
        }
        properties_1.defineReadOnly(this, 'signer', signer || null);
    }
    ContractFactory.prototype.getDeployTransaction = function () {
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
        }
        var tx = {};
        // If we have 1 additional argument, we allow transaction overrides
        if (args.length === this.interface.deployFunction.inputs.length + 1) {
            tx = properties_1.shallowCopy(args.pop());
            for (var key in tx) {
                if (!allowedTransactionKeys[key]) {
                    throw new Error('unknown transaction override ' + key);
                }
            }
        }
        // Do not allow these to be overridden in a deployment transaction
        ['data', 'from', 'to'].forEach(function (key) {
            if (tx[key] == null) {
                return;
            }
            errors.throwError('cannot override ' + key, errors.UNSUPPORTED_OPERATION, { operation: key });
        });
        // Make sure the call matches the constructor signature
        errors.checkArgumentCount(args.length, this.interface.deployFunction.inputs.length, ' in Contract constructor');
        // Set the data to the bytecode + the encoded constructor arguments
        tx.data = this.interface.deployFunction.encode(this.bytecode, args);
        return tx;
    };
    ContractFactory.prototype.deploy = function () {
        var _this = this;
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
        }
        // Get the deployment transaction (with optional overrides)
        var tx = this.getDeployTransaction.apply(this, args);
        // Send the deployment transaction
        return this.signer.sendTransaction(tx).then(function (tx) {
            var contract = new Contract(address_1.getContractAddress(tx), _this.interface, _this.signer);
            properties_1.defineReadOnly(contract, 'deployTransaction', tx);
            return contract;
        });
    };
    ContractFactory.prototype.attach = function (address) {
        return new Contract(address, this.interface, this.signer);
    };
    ContractFactory.prototype.connect = function (signer) {
        return new ContractFactory(this.interface, this.bytecode, signer);
    };
    ContractFactory.fromSolidity = function (compilerOutput, signer) {
        if (compilerOutput == null) {
            errors.throwError('missing compiler output', errors.MISSING_ARGUMENT, { argument: 'compilerOutput' });
        }
        if (typeof (compilerOutput) === 'string') {
            compilerOutput = JSON.parse(compilerOutput);
        }
        var abi = compilerOutput.abi;
        var bytecode = null;
        if (compilerOutput.bytecode) {
            bytecode = compilerOutput.bytecode;
        }
        else if (compilerOutput.evm && compilerOutput.evm.bytecode) {
            bytecode = compilerOutput.evm.bytecode;
        }
        return new ContractFactory(abi, bytecode, signer);
    };
    return ContractFactory;
}());
exports.ContractFactory = ContractFactory;


/***/ }),

/***/ 157226:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var contract_1 = __webpack_require__(890731);
exports.Contract = contract_1.Contract;
exports.ContractFactory = contract_1.ContractFactory;
exports.VoidSigner = contract_1.VoidSigner;
var abstract_signer_1 = __webpack_require__(625419);
exports.Signer = abstract_signer_1.Signer;
var wallet_1 = __webpack_require__(505985);
exports.Wallet = wallet_1.Wallet;
var constants = __importStar(__webpack_require__(48232));
exports.constants = constants;
var errors = __importStar(__webpack_require__(766286));
exports.errors = errors;
var providers = __importStar(__webpack_require__(314047));
exports.providers = providers;
var utils = __importStar(__webpack_require__(998006));
exports.utils = utils;
var wordlists = __importStar(__webpack_require__(428000));
exports.wordlists = wordlists;
////////////////////////
// Compile-Time Constants
// This is empty in node, and used by browserify to inject extra goodies
var shims_1 = __webpack_require__(793477);
exports.platform = shims_1.platform;
// This is generated by "npm run dist"
var _version_1 = __webpack_require__(734956);
exports.version = _version_1.version;
////////////////////////
// Helper Functions
function getDefaultProvider(network) {
    if (network == null) {
        network = 'homestead';
    }
    var n = utils.getNetwork(network);
    if (!n || !n._defaultProvider) {
        errors.throwError('unsupported getDefaultProvider network', errors.UNSUPPORTED_OPERATION, {
            operation: 'getDefaultProvider',
            network: network
        });
    }
    return n._defaultProvider(providers);
}
exports.getDefaultProvider = getDefaultProvider;


/***/ }),

/***/ 204003:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

function __export(m) {
    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var ethers = __importStar(__webpack_require__(157226));
exports.ethers = ethers;
__export(__webpack_require__(157226));


/***/ }),

/***/ 343040:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

var hash = exports;

hash.utils = __webpack_require__(891899);
hash.common = __webpack_require__(432485);
hash.sha = __webpack_require__(225337);
hash.ripemd = __webpack_require__(469872);
hash.hmac = __webpack_require__(94668);

// Proxy hash functions to the main object
hash.sha1 = hash.sha.sha1;
hash.sha256 = hash.sha.sha256;
hash.sha224 = hash.sha.sha224;
hash.sha384 = hash.sha.sha384;
hash.sha512 = hash.sha.sha512;
hash.ripemd160 = hash.ripemd.ripemd160;


/***/ }),

/***/ 432485:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);
var assert = __webpack_require__(79746);

function BlockHash() {
  this.pending = null;
  this.pendingTotal = 0;
  this.blockSize = this.constructor.blockSize;
  this.outSize = this.constructor.outSize;
  this.hmacStrength = this.constructor.hmacStrength;
  this.padLength = this.constructor.padLength / 8;
  this.endian = 'big';

  this._delta8 = this.blockSize / 8;
  this._delta32 = this.blockSize / 32;
}
exports.BlockHash = BlockHash;

BlockHash.prototype.update = function update(msg, enc) {
  // Convert message to array, pad it, and join into 32bit blocks
  msg = utils.toArray(msg, enc);
  if (!this.pending)
    this.pending = msg;
  else
    this.pending = this.pending.concat(msg);
  this.pendingTotal += msg.length;

  // Enough data, try updating
  if (this.pending.length >= this._delta8) {
    msg = this.pending;

    // Process pending data in blocks
    var r = msg.length % this._delta8;
    this.pending = msg.slice(msg.length - r, msg.length);
    if (this.pending.length === 0)
      this.pending = null;

    msg = utils.join32(msg, 0, msg.length - r, this.endian);
    for (var i = 0; i < msg.length; i += this._delta32)
      this._update(msg, i, i + this._delta32);
  }

  return this;
};

BlockHash.prototype.digest = function digest(enc) {
  this.update(this._pad());
  assert(this.pending === null);

  return this._digest(enc);
};

BlockHash.prototype._pad = function pad() {
  var len = this.pendingTotal;
  var bytes = this._delta8;
  var k = bytes - ((len + this.padLength) % bytes);
  var res = new Array(k + this.padLength);
  res[0] = 0x80;
  for (var i = 1; i < k; i++)
    res[i] = 0;

  // Append length
  len <<= 3;
  if (this.endian === 'big') {
    for (var t = 8; t < this.padLength; t++)
      res[i++] = 0;

    res[i++] = 0;
    res[i++] = 0;
    res[i++] = 0;
    res[i++] = 0;
    res[i++] = (len >>> 24) & 0xff;
    res[i++] = (len >>> 16) & 0xff;
    res[i++] = (len >>> 8) & 0xff;
    res[i++] = len & 0xff;
  } else {
    res[i++] = len & 0xff;
    res[i++] = (len >>> 8) & 0xff;
    res[i++] = (len >>> 16) & 0xff;
    res[i++] = (len >>> 24) & 0xff;
    res[i++] = 0;
    res[i++] = 0;
    res[i++] = 0;
    res[i++] = 0;

    for (t = 8; t < this.padLength; t++)
      res[i++] = 0;
  }

  return res;
};


/***/ }),

/***/ 94668:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);
var assert = __webpack_require__(79746);

function Hmac(hash, key, enc) {
  if (!(this instanceof Hmac))
    return new Hmac(hash, key, enc);
  this.Hash = hash;
  this.blockSize = hash.blockSize / 8;
  this.outSize = hash.outSize / 8;
  this.inner = null;
  this.outer = null;

  this._init(utils.toArray(key, enc));
}
module.exports = Hmac;

Hmac.prototype._init = function init(key) {
  // Shorten key, if needed
  if (key.length > this.blockSize)
    key = new this.Hash().update(key).digest();
  assert(key.length <= this.blockSize);

  // Add padding to key
  for (var i = key.length; i < this.blockSize; i++)
    key.push(0);

  for (i = 0; i < key.length; i++)
    key[i] ^= 0x36;
  this.inner = new this.Hash().update(key);

  // 0x36 ^ 0x5c = 0x6a
  for (i = 0; i < key.length; i++)
    key[i] ^= 0x6a;
  this.outer = new this.Hash().update(key);
};

Hmac.prototype.update = function update(msg, enc) {
  this.inner.update(msg, enc);
  return this;
};

Hmac.prototype.digest = function digest(enc) {
  this.outer.update(this.inner.digest());
  return this.outer.digest(enc);
};


/***/ }),

/***/ 469872:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);
var common = __webpack_require__(432485);

var rotl32 = utils.rotl32;
var sum32 = utils.sum32;
var sum32_3 = utils.sum32_3;
var sum32_4 = utils.sum32_4;
var BlockHash = common.BlockHash;

function RIPEMD160() {
  if (!(this instanceof RIPEMD160))
    return new RIPEMD160();

  BlockHash.call(this);

  this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
  this.endian = 'little';
}
utils.inherits(RIPEMD160, BlockHash);
exports.ripemd160 = RIPEMD160;

RIPEMD160.blockSize = 512;
RIPEMD160.outSize = 160;
RIPEMD160.hmacStrength = 192;
RIPEMD160.padLength = 64;

RIPEMD160.prototype._update = function update(msg, start) {
  var A = this.h[0];
  var B = this.h[1];
  var C = this.h[2];
  var D = this.h[3];
  var E = this.h[4];
  var Ah = A;
  var Bh = B;
  var Ch = C;
  var Dh = D;
  var Eh = E;
  for (var j = 0; j < 80; j++) {
    var T = sum32(
      rotl32(
        sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
        s[j]),
      E);
    A = E;
    E = D;
    D = rotl32(C, 10);
    C = B;
    B = T;
    T = sum32(
      rotl32(
        sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
        sh[j]),
      Eh);
    Ah = Eh;
    Eh = Dh;
    Dh = rotl32(Ch, 10);
    Ch = Bh;
    Bh = T;
  }
  T = sum32_3(this.h[1], C, Dh);
  this.h[1] = sum32_3(this.h[2], D, Eh);
  this.h[2] = sum32_3(this.h[3], E, Ah);
  this.h[3] = sum32_3(this.h[4], A, Bh);
  this.h[4] = sum32_3(this.h[0], B, Ch);
  this.h[0] = T;
};

RIPEMD160.prototype._digest = function digest(enc) {
  if (enc === 'hex')
    return utils.toHex32(this.h, 'little');
  else
    return utils.split32(this.h, 'little');
};

function f(j, x, y, z) {
  if (j <= 15)
    return x ^ y ^ z;
  else if (j <= 31)
    return (x & y) | ((~x) & z);
  else if (j <= 47)
    return (x | (~y)) ^ z;
  else if (j <= 63)
    return (x & z) | (y & (~z));
  else
    return x ^ (y | (~z));
}

function K(j) {
  if (j <= 15)
    return 0x00000000;
  else if (j <= 31)
    return 0x5a827999;
  else if (j <= 47)
    return 0x6ed9eba1;
  else if (j <= 63)
    return 0x8f1bbcdc;
  else
    return 0xa953fd4e;
}

function Kh(j) {
  if (j <= 15)
    return 0x50a28be6;
  else if (j <= 31)
    return 0x5c4dd124;
  else if (j <= 47)
    return 0x6d703ef3;
  else if (j <= 63)
    return 0x7a6d76e9;
  else
    return 0x00000000;
}

var r = [
  0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
  3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
  1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
  4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
];

var rh = [
  5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
  6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
  15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
  8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
  12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
];

var s = [
  11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
  7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
  11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
  11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
  9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
];

var sh = [
  8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
  9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
  9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
  15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
  8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
];


/***/ }),

/***/ 225337:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


exports.sha1 = __webpack_require__(679508);
exports.sha224 = __webpack_require__(774554);
exports.sha256 = __webpack_require__(230840);
exports.sha384 = __webpack_require__(792843);
exports.sha512 = __webpack_require__(155920);


/***/ }),

/***/ 679508:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);
var common = __webpack_require__(432485);
var shaCommon = __webpack_require__(933622);

var rotl32 = utils.rotl32;
var sum32 = utils.sum32;
var sum32_5 = utils.sum32_5;
var ft_1 = shaCommon.ft_1;
var BlockHash = common.BlockHash;

var sha1_K = [
  0x5A827999, 0x6ED9EBA1,
  0x8F1BBCDC, 0xCA62C1D6
];

function SHA1() {
  if (!(this instanceof SHA1))
    return new SHA1();

  BlockHash.call(this);
  this.h = [
    0x67452301, 0xefcdab89, 0x98badcfe,
    0x10325476, 0xc3d2e1f0 ];
  this.W = new Array(80);
}

utils.inherits(SHA1, BlockHash);
module.exports = SHA1;

SHA1.blockSize = 512;
SHA1.outSize = 160;
SHA1.hmacStrength = 80;
SHA1.padLength = 64;

SHA1.prototype._update = function _update(msg, start) {
  var W = this.W;

  for (var i = 0; i < 16; i++)
    W[i] = msg[start + i];

  for(; i < W.length; i++)
    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);

  var a = this.h[0];
  var b = this.h[1];
  var c = this.h[2];
  var d = this.h[3];
  var e = this.h[4];

  for (i = 0; i < W.length; i++) {
    var s = ~~(i / 20);
    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
    e = d;
    d = c;
    c = rotl32(b, 30);
    b = a;
    a = t;
  }

  this.h[0] = sum32(this.h[0], a);
  this.h[1] = sum32(this.h[1], b);
  this.h[2] = sum32(this.h[2], c);
  this.h[3] = sum32(this.h[3], d);
  this.h[4] = sum32(this.h[4], e);
};

SHA1.prototype._digest = function digest(enc) {
  if (enc === 'hex')
    return utils.toHex32(this.h, 'big');
  else
    return utils.split32(this.h, 'big');
};


/***/ }),

/***/ 774554:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);
var SHA256 = __webpack_require__(230840);

function SHA224() {
  if (!(this instanceof SHA224))
    return new SHA224();

  SHA256.call(this);
  this.h = [
    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
    0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
}
utils.inherits(SHA224, SHA256);
module.exports = SHA224;

SHA224.blockSize = 512;
SHA224.outSize = 224;
SHA224.hmacStrength = 192;
SHA224.padLength = 64;

SHA224.prototype._digest = function digest(enc) {
  // Just truncate output
  if (enc === 'hex')
    return utils.toHex32(this.h.slice(0, 7), 'big');
  else
    return utils.split32(this.h.slice(0, 7), 'big');
};



/***/ }),

/***/ 230840:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);
var common = __webpack_require__(432485);
var shaCommon = __webpack_require__(933622);
var assert = __webpack_require__(79746);

var sum32 = utils.sum32;
var sum32_4 = utils.sum32_4;
var sum32_5 = utils.sum32_5;
var ch32 = shaCommon.ch32;
var maj32 = shaCommon.maj32;
var s0_256 = shaCommon.s0_256;
var s1_256 = shaCommon.s1_256;
var g0_256 = shaCommon.g0_256;
var g1_256 = shaCommon.g1_256;

var BlockHash = common.BlockHash;

var sha256_K = [
  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
  0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
  0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
  0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
  0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
  0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
  0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
  0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
  0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
];

function SHA256() {
  if (!(this instanceof SHA256))
    return new SHA256();

  BlockHash.call(this);
  this.h = [
    0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
    0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
  ];
  this.k = sha256_K;
  this.W = new Array(64);
}
utils.inherits(SHA256, BlockHash);
module.exports = SHA256;

SHA256.blockSize = 512;
SHA256.outSize = 256;
SHA256.hmacStrength = 192;
SHA256.padLength = 64;

SHA256.prototype._update = function _update(msg, start) {
  var W = this.W;

  for (var i = 0; i < 16; i++)
    W[i] = msg[start + i];
  for (; i < W.length; i++)
    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);

  var a = this.h[0];
  var b = this.h[1];
  var c = this.h[2];
  var d = this.h[3];
  var e = this.h[4];
  var f = this.h[5];
  var g = this.h[6];
  var h = this.h[7];

  assert(this.k.length === W.length);
  for (i = 0; i < W.length; i++) {
    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
    var T2 = sum32(s0_256(a), maj32(a, b, c));
    h = g;
    g = f;
    f = e;
    e = sum32(d, T1);
    d = c;
    c = b;
    b = a;
    a = sum32(T1, T2);
  }

  this.h[0] = sum32(this.h[0], a);
  this.h[1] = sum32(this.h[1], b);
  this.h[2] = sum32(this.h[2], c);
  this.h[3] = sum32(this.h[3], d);
  this.h[4] = sum32(this.h[4], e);
  this.h[5] = sum32(this.h[5], f);
  this.h[6] = sum32(this.h[6], g);
  this.h[7] = sum32(this.h[7], h);
};

SHA256.prototype._digest = function digest(enc) {
  if (enc === 'hex')
    return utils.toHex32(this.h, 'big');
  else
    return utils.split32(this.h, 'big');
};


/***/ }),

/***/ 792843:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);

var SHA512 = __webpack_require__(155920);

function SHA384() {
  if (!(this instanceof SHA384))
    return new SHA384();

  SHA512.call(this);
  this.h = [
    0xcbbb9d5d, 0xc1059ed8,
    0x629a292a, 0x367cd507,
    0x9159015a, 0x3070dd17,
    0x152fecd8, 0xf70e5939,
    0x67332667, 0xffc00b31,
    0x8eb44a87, 0x68581511,
    0xdb0c2e0d, 0x64f98fa7,
    0x47b5481d, 0xbefa4fa4 ];
}
utils.inherits(SHA384, SHA512);
module.exports = SHA384;

SHA384.blockSize = 1024;
SHA384.outSize = 384;
SHA384.hmacStrength = 192;
SHA384.padLength = 128;

SHA384.prototype._digest = function digest(enc) {
  if (enc === 'hex')
    return utils.toHex32(this.h.slice(0, 12), 'big');
  else
    return utils.split32(this.h.slice(0, 12), 'big');
};


/***/ }),

/***/ 155920:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);
var common = __webpack_require__(432485);
var assert = __webpack_require__(79746);

var rotr64_hi = utils.rotr64_hi;
var rotr64_lo = utils.rotr64_lo;
var shr64_hi = utils.shr64_hi;
var shr64_lo = utils.shr64_lo;
var sum64 = utils.sum64;
var sum64_hi = utils.sum64_hi;
var sum64_lo = utils.sum64_lo;
var sum64_4_hi = utils.sum64_4_hi;
var sum64_4_lo = utils.sum64_4_lo;
var sum64_5_hi = utils.sum64_5_hi;
var sum64_5_lo = utils.sum64_5_lo;

var BlockHash = common.BlockHash;

var sha512_K = [
  0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
  0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
  0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
  0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
  0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
  0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
  0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
  0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
  0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
  0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
  0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
  0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
  0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
  0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
  0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
  0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
  0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
  0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
  0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
  0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
  0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
  0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
  0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
  0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
  0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
  0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
  0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
  0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
  0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
  0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
  0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
  0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
  0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
  0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
  0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
  0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
  0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
  0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
  0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
  0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
];

function SHA512() {
  if (!(this instanceof SHA512))
    return new SHA512();

  BlockHash.call(this);
  this.h = [
    0x6a09e667, 0xf3bcc908,
    0xbb67ae85, 0x84caa73b,
    0x3c6ef372, 0xfe94f82b,
    0xa54ff53a, 0x5f1d36f1,
    0x510e527f, 0xade682d1,
    0x9b05688c, 0x2b3e6c1f,
    0x1f83d9ab, 0xfb41bd6b,
    0x5be0cd19, 0x137e2179 ];
  this.k = sha512_K;
  this.W = new Array(160);
}
utils.inherits(SHA512, BlockHash);
module.exports = SHA512;

SHA512.blockSize = 1024;
SHA512.outSize = 512;
SHA512.hmacStrength = 192;
SHA512.padLength = 128;

SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
  var W = this.W;

  // 32 x 32bit words
  for (var i = 0; i < 32; i++)
    W[i] = msg[start + i];
  for (; i < W.length; i += 2) {
    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]);  // i - 2
    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
    var c1_hi = W[i - 14];  // i - 7
    var c1_lo = W[i - 13];
    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]);  // i - 15
    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
    var c3_hi = W[i - 32];  // i - 16
    var c3_lo = W[i - 31];

    W[i] = sum64_4_hi(
      c0_hi, c0_lo,
      c1_hi, c1_lo,
      c2_hi, c2_lo,
      c3_hi, c3_lo);
    W[i + 1] = sum64_4_lo(
      c0_hi, c0_lo,
      c1_hi, c1_lo,
      c2_hi, c2_lo,
      c3_hi, c3_lo);
  }
};

SHA512.prototype._update = function _update(msg, start) {
  this._prepareBlock(msg, start);

  var W = this.W;

  var ah = this.h[0];
  var al = this.h[1];
  var bh = this.h[2];
  var bl = this.h[3];
  var ch = this.h[4];
  var cl = this.h[5];
  var dh = this.h[6];
  var dl = this.h[7];
  var eh = this.h[8];
  var el = this.h[9];
  var fh = this.h[10];
  var fl = this.h[11];
  var gh = this.h[12];
  var gl = this.h[13];
  var hh = this.h[14];
  var hl = this.h[15];

  assert(this.k.length === W.length);
  for (var i = 0; i < W.length; i += 2) {
    var c0_hi = hh;
    var c0_lo = hl;
    var c1_hi = s1_512_hi(eh, el);
    var c1_lo = s1_512_lo(eh, el);
    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
    var c3_hi = this.k[i];
    var c3_lo = this.k[i + 1];
    var c4_hi = W[i];
    var c4_lo = W[i + 1];

    var T1_hi = sum64_5_hi(
      c0_hi, c0_lo,
      c1_hi, c1_lo,
      c2_hi, c2_lo,
      c3_hi, c3_lo,
      c4_hi, c4_lo);
    var T1_lo = sum64_5_lo(
      c0_hi, c0_lo,
      c1_hi, c1_lo,
      c2_hi, c2_lo,
      c3_hi, c3_lo,
      c4_hi, c4_lo);

    c0_hi = s0_512_hi(ah, al);
    c0_lo = s0_512_lo(ah, al);
    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);

    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);

    hh = gh;
    hl = gl;

    gh = fh;
    gl = fl;

    fh = eh;
    fl = el;

    eh = sum64_hi(dh, dl, T1_hi, T1_lo);
    el = sum64_lo(dl, dl, T1_hi, T1_lo);

    dh = ch;
    dl = cl;

    ch = bh;
    cl = bl;

    bh = ah;
    bl = al;

    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
  }

  sum64(this.h, 0, ah, al);
  sum64(this.h, 2, bh, bl);
  sum64(this.h, 4, ch, cl);
  sum64(this.h, 6, dh, dl);
  sum64(this.h, 8, eh, el);
  sum64(this.h, 10, fh, fl);
  sum64(this.h, 12, gh, gl);
  sum64(this.h, 14, hh, hl);
};

SHA512.prototype._digest = function digest(enc) {
  if (enc === 'hex')
    return utils.toHex32(this.h, 'big');
  else
    return utils.split32(this.h, 'big');
};

function ch64_hi(xh, xl, yh, yl, zh) {
  var r = (xh & yh) ^ ((~xh) & zh);
  if (r < 0)
    r += 0x100000000;
  return r;
}

function ch64_lo(xh, xl, yh, yl, zh, zl) {
  var r = (xl & yl) ^ ((~xl) & zl);
  if (r < 0)
    r += 0x100000000;
  return r;
}

function maj64_hi(xh, xl, yh, yl, zh) {
  var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
  if (r < 0)
    r += 0x100000000;
  return r;
}

function maj64_lo(xh, xl, yh, yl, zh, zl) {
  var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
  if (r < 0)
    r += 0x100000000;
  return r;
}

function s0_512_hi(xh, xl) {
  var c0_hi = rotr64_hi(xh, xl, 28);
  var c1_hi = rotr64_hi(xl, xh, 2);  // 34
  var c2_hi = rotr64_hi(xl, xh, 7);  // 39

  var r = c0_hi ^ c1_hi ^ c2_hi;
  if (r < 0)
    r += 0x100000000;
  return r;
}

function s0_512_lo(xh, xl) {
  var c0_lo = rotr64_lo(xh, xl, 28);
  var c1_lo = rotr64_lo(xl, xh, 2);  // 34
  var c2_lo = rotr64_lo(xl, xh, 7);  // 39

  var r = c0_lo ^ c1_lo ^ c2_lo;
  if (r < 0)
    r += 0x100000000;
  return r;
}

function s1_512_hi(xh, xl) {
  var c0_hi = rotr64_hi(xh, xl, 14);
  var c1_hi = rotr64_hi(xh, xl, 18);
  var c2_hi = rotr64_hi(xl, xh, 9);  // 41

  var r = c0_hi ^ c1_hi ^ c2_hi;
  if (r < 0)
    r += 0x100000000;
  return r;
}

function s1_512_lo(xh, xl) {
  var c0_lo = rotr64_lo(xh, xl, 14);
  var c1_lo = rotr64_lo(xh, xl, 18);
  var c2_lo = rotr64_lo(xl, xh, 9);  // 41

  var r = c0_lo ^ c1_lo ^ c2_lo;
  if (r < 0)
    r += 0x100000000;
  return r;
}

function g0_512_hi(xh, xl) {
  var c0_hi = rotr64_hi(xh, xl, 1);
  var c1_hi = rotr64_hi(xh, xl, 8);
  var c2_hi = shr64_hi(xh, xl, 7);

  var r = c0_hi ^ c1_hi ^ c2_hi;
  if (r < 0)
    r += 0x100000000;
  return r;
}

function g0_512_lo(xh, xl) {
  var c0_lo = rotr64_lo(xh, xl, 1);
  var c1_lo = rotr64_lo(xh, xl, 8);
  var c2_lo = shr64_lo(xh, xl, 7);

  var r = c0_lo ^ c1_lo ^ c2_lo;
  if (r < 0)
    r += 0x100000000;
  return r;
}

function g1_512_hi(xh, xl) {
  var c0_hi = rotr64_hi(xh, xl, 19);
  var c1_hi = rotr64_hi(xl, xh, 29);  // 61
  var c2_hi = shr64_hi(xh, xl, 6);

  var r = c0_hi ^ c1_hi ^ c2_hi;
  if (r < 0)
    r += 0x100000000;
  return r;
}

function g1_512_lo(xh, xl) {
  var c0_lo = rotr64_lo(xh, xl, 19);
  var c1_lo = rotr64_lo(xl, xh, 29);  // 61
  var c2_lo = shr64_lo(xh, xl, 6);

  var r = c0_lo ^ c1_lo ^ c2_lo;
  if (r < 0)
    r += 0x100000000;
  return r;
}


/***/ }),

/***/ 933622:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var utils = __webpack_require__(891899);
var rotr32 = utils.rotr32;

function ft_1(s, x, y, z) {
  if (s === 0)
    return ch32(x, y, z);
  if (s === 1 || s === 3)
    return p32(x, y, z);
  if (s === 2)
    return maj32(x, y, z);
}
exports.ft_1 = ft_1;

function ch32(x, y, z) {
  return (x & y) ^ ((~x) & z);
}
exports.ch32 = ch32;

function maj32(x, y, z) {
  return (x & y) ^ (x & z) ^ (y & z);
}
exports.maj32 = maj32;

function p32(x, y, z) {
  return x ^ y ^ z;
}
exports.p32 = p32;

function s0_256(x) {
  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
}
exports.s0_256 = s0_256;

function s1_256(x) {
  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
}
exports.s1_256 = s1_256;

function g0_256(x) {
  return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
}
exports.g0_256 = g0_256;

function g1_256(x) {
  return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
}
exports.g1_256 = g1_256;


/***/ }),

/***/ 891899:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var assert = __webpack_require__(79746);
var inherits = __webpack_require__(394378);

exports.inherits = inherits;

function toArray(msg, enc) {
  if (Array.isArray(msg))
    return msg.slice();
  if (!msg)
    return [];
  var res = [];
  if (typeof msg === 'string') {
    if (!enc) {
      for (var i = 0; i < msg.length; i++) {
        var c = msg.charCodeAt(i);
        var hi = c >> 8;
        var lo = c & 0xff;
        if (hi)
          res.push(hi, lo);
        else
          res.push(lo);
      }
    } else if (enc === 'hex') {
      msg = msg.replace(/[^a-z0-9]+/ig, '');
      if (msg.length % 2 !== 0)
        msg = '0' + msg;
      for (i = 0; i < msg.length; i += 2)
        res.push(parseInt(msg[i] + msg[i + 1], 16));
    }
  } else {
    for (i = 0; i < msg.length; i++)
      res[i] = msg[i] | 0;
  }
  return res;
}
exports.toArray = toArray;

function toHex(msg) {
  var res = '';
  for (var i = 0; i < msg.length; i++)
    res += zero2(msg[i].toString(16));
  return res;
}
exports.toHex = toHex;

function htonl(w) {
  var res = (w >>> 24) |
            ((w >>> 8) & 0xff00) |
            ((w << 8) & 0xff0000) |
            ((w & 0xff) << 24);
  return res >>> 0;
}
exports.htonl = htonl;

function toHex32(msg, endian) {
  var res = '';
  for (var i = 0; i < msg.length; i++) {
    var w = msg[i];
    if (endian === 'little')
      w = htonl(w);
    res += zero8(w.toString(16));
  }
  return res;
}
exports.toHex32 = toHex32;

function zero2(word) {
  if (word.length === 1)
    return '0' + word;
  else
    return word;
}
exports.zero2 = zero2;

function zero8(word) {
  if (word.length === 7)
    return '0' + word;
  else if (word.length === 6)
    return '00' + word;
  else if (word.length === 5)
    return '000' + word;
  else if (word.length === 4)
    return '0000' + word;
  else if (word.length === 3)
    return '00000' + word;
  else if (word.length === 2)
    return '000000' + word;
  else if (word.length === 1)
    return '0000000' + word;
  else
    return word;
}
exports.zero8 = zero8;

function join32(msg, start, end, endian) {
  var len = end - start;
  assert(len % 4 === 0);
  var res = new Array(len / 4);
  for (var i = 0, k = start; i < res.length; i++, k += 4) {
    var w;
    if (endian === 'big')
      w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
    else
      w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
    res[i] = w >>> 0;
  }
  return res;
}
exports.join32 = join32;

function split32(msg, endian) {
  var res = new Array(msg.length * 4);
  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
    var m = msg[i];
    if (endian === 'big') {
      res[k] = m >>> 24;
      res[k + 1] = (m >>> 16) & 0xff;
      res[k + 2] = (m >>> 8) & 0xff;
      res[k + 3] = m & 0xff;
    } else {
      res[k + 3] = m >>> 24;
      res[k + 2] = (m >>> 16) & 0xff;
      res[k + 1] = (m >>> 8) & 0xff;
      res[k] = m & 0xff;
    }
  }
  return res;
}
exports.split32 = split32;

function rotr32(w, b) {
  return (w >>> b) | (w << (32 - b));
}
exports.rotr32 = rotr32;

function rotl32(w, b) {
  return (w << b) | (w >>> (32 - b));
}
exports.rotl32 = rotl32;

function sum32(a, b) {
  return (a + b) >>> 0;
}
exports.sum32 = sum32;

function sum32_3(a, b, c) {
  return (a + b + c) >>> 0;
}
exports.sum32_3 = sum32_3;

function sum32_4(a, b, c, d) {
  return (a + b + c + d) >>> 0;
}
exports.sum32_4 = sum32_4;

function sum32_5(a, b, c, d, e) {
  return (a + b + c + d + e) >>> 0;
}
exports.sum32_5 = sum32_5;

function sum64(buf, pos, ah, al) {
  var bh = buf[pos];
  var bl = buf[pos + 1];

  var lo = (al + bl) >>> 0;
  var hi = (lo < al ? 1 : 0) + ah + bh;
  buf[pos] = hi >>> 0;
  buf[pos + 1] = lo;
}
exports.sum64 = sum64;

function sum64_hi(ah, al, bh, bl) {
  var lo = (al + bl) >>> 0;
  var hi = (lo < al ? 1 : 0) + ah + bh;
  return hi >>> 0;
}
exports.sum64_hi = sum64_hi;

function sum64_lo(ah, al, bh, bl) {
  var lo = al + bl;
  return lo >>> 0;
}
exports.sum64_lo = sum64_lo;

function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
  var carry = 0;
  var lo = al;
  lo = (lo + bl) >>> 0;
  carry += lo < al ? 1 : 0;
  lo = (lo + cl) >>> 0;
  carry += lo < cl ? 1 : 0;
  lo = (lo + dl) >>> 0;
  carry += lo < dl ? 1 : 0;

  var hi = ah + bh + ch + dh + carry;
  return hi >>> 0;
}
exports.sum64_4_hi = sum64_4_hi;

function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
  var lo = al + bl + cl + dl;
  return lo >>> 0;
}
exports.sum64_4_lo = sum64_4_lo;

function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
  var carry = 0;
  var lo = al;
  lo = (lo + bl) >>> 0;
  carry += lo < al ? 1 : 0;
  lo = (lo + cl) >>> 0;
  carry += lo < cl ? 1 : 0;
  lo = (lo + dl) >>> 0;
  carry += lo < dl ? 1 : 0;
  lo = (lo + el) >>> 0;
  carry += lo < el ? 1 : 0;

  var hi = ah + bh + ch + dh + eh + carry;
  return hi >>> 0;
}
exports.sum64_5_hi = sum64_5_hi;

function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
  var lo = al + bl + cl + dl + el;

  return lo >>> 0;
}
exports.sum64_5_lo = sum64_5_lo;

function rotr64_hi(ah, al, num) {
  var r = (al << (32 - num)) | (ah >>> num);
  return r >>> 0;
}
exports.rotr64_hi = rotr64_hi;

function rotr64_lo(ah, al, num) {
  var r = (ah << (32 - num)) | (al >>> num);
  return r >>> 0;
}
exports.rotr64_lo = rotr64_lo;

function shr64_hi(ah, al, num) {
  return ah >>> num;
}
exports.shr64_hi = shr64_hi;

function shr64_lo(ah, al, num) {
  var r = (ah << (32 - num)) | (al >>> num);
  return r >>> 0;
}
exports.shr64_lo = shr64_lo;


/***/ }),

/***/ 814460:
/***/ (function(module) {

"use strict";


(function(root) {
    var MAX_VALUE = 0x7fffffff;

    // The SHA256 and PBKDF2 implementation are from scrypt-async-js:
    // See: https://github.com/dchest/scrypt-async-js
    function SHA256(m) {
        var K = [
           0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b,
           0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01,
           0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7,
           0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
           0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152,
           0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
           0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,
           0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
           0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819,
           0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08,
           0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f,
           0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
           0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
       ];

        var h0 = 0x6a09e667, h1 = 0xbb67ae85, h2 = 0x3c6ef372, h3 = 0xa54ff53a;
        var h4 = 0x510e527f, h5 = 0x9b05688c, h6 = 0x1f83d9ab, h7 = 0x5be0cd19;
        var w = new Array(64);

        function blocks(p) {
            var off = 0, len = p.length;
            while (len >= 64) {
                var a = h0, b = h1, c = h2, d = h3, e = h4, f = h5, g = h6, h = h7, u, i, j, t1, t2;

                for (i = 0; i < 16; i++) {
                    j = off + i*4;
                    w[i] = ((p[j] & 0xff)<<24) | ((p[j+1] & 0xff)<<16) |
                    ((p[j+2] & 0xff)<<8) | (p[j+3] & 0xff);
                }

                for (i = 16; i < 64; i++) {
                    u = w[i-2];
                    t1 = ((u>>>17) | (u<<(32-17))) ^ ((u>>>19) | (u<<(32-19))) ^ (u>>>10);

                    u = w[i-15];
                    t2 = ((u>>>7) | (u<<(32-7))) ^ ((u>>>18) | (u<<(32-18))) ^ (u>>>3);

                    w[i] = (((t1 + w[i-7]) | 0) + ((t2 + w[i-16]) | 0)) | 0;
                }

                for (i = 0; i < 64; i++) {
                    t1 = ((((((e>>>6) | (e<<(32-6))) ^ ((e>>>11) | (e<<(32-11))) ^
                             ((e>>>25) | (e<<(32-25)))) + ((e & f) ^ (~e & g))) | 0) +
                          ((h + ((K[i] + w[i]) | 0)) | 0)) | 0;

                    t2 = ((((a>>>2) | (a<<(32-2))) ^ ((a>>>13) | (a<<(32-13))) ^
                           ((a>>>22) | (a<<(32-22)))) + ((a & b) ^ (a & c) ^ (b & c))) | 0;

                    h = g;
                    g = f;
                    f = e;
                    e = (d + t1) | 0;
                    d = c;
                    c = b;
                    b = a;
                    a = (t1 + t2) | 0;
                }

                h0 = (h0 + a) | 0;
                h1 = (h1 + b) | 0;
                h2 = (h2 + c) | 0;
                h3 = (h3 + d) | 0;
                h4 = (h4 + e) | 0;
                h5 = (h5 + f) | 0;
                h6 = (h6 + g) | 0;
                h7 = (h7 + h) | 0;

                off += 64;
                len -= 64;
            }
        }

        blocks(m);

        var i, bytesLeft = m.length % 64,
        bitLenHi = (m.length / 0x20000000) | 0,
        bitLenLo = m.length << 3,
        numZeros = (bytesLeft < 56) ? 56 : 120,
        p = m.slice(m.length - bytesLeft, m.length);

        p.push(0x80);
        for (i = bytesLeft + 1; i < numZeros; i++) { p.push(0); }
        p.push((bitLenHi>>>24) & 0xff);
        p.push((bitLenHi>>>16) & 0xff);
        p.push((bitLenHi>>>8)  & 0xff);
        p.push((bitLenHi>>>0)  & 0xff);
        p.push((bitLenLo>>>24) & 0xff);
        p.push((bitLenLo>>>16) & 0xff);
        p.push((bitLenLo>>>8)  & 0xff);
        p.push((bitLenLo>>>0)  & 0xff);

        blocks(p);

        return [
            (h0>>>24) & 0xff, (h0>>>16) & 0xff, (h0>>>8) & 0xff, (h0>>>0) & 0xff,
            (h1>>>24) & 0xff, (h1>>>16) & 0xff, (h1>>>8) & 0xff, (h1>>>0) & 0xff,
            (h2>>>24) & 0xff, (h2>>>16) & 0xff, (h2>>>8) & 0xff, (h2>>>0) & 0xff,
            (h3>>>24) & 0xff, (h3>>>16) & 0xff, (h3>>>8) & 0xff, (h3>>>0) & 0xff,
            (h4>>>24) & 0xff, (h4>>>16) & 0xff, (h4>>>8) & 0xff, (h4>>>0) & 0xff,
            (h5>>>24) & 0xff, (h5>>>16) & 0xff, (h5>>>8) & 0xff, (h5>>>0) & 0xff,
            (h6>>>24) & 0xff, (h6>>>16) & 0xff, (h6>>>8) & 0xff, (h6>>>0) & 0xff,
            (h7>>>24) & 0xff, (h7>>>16) & 0xff, (h7>>>8) & 0xff, (h7>>>0) & 0xff
        ];
    }

    function PBKDF2_HMAC_SHA256_OneIter(password, salt, dkLen) {
        // compress password if it's longer than hash block length
        password = password.length <= 64 ? password : SHA256(password);

        var i;
        var innerLen = 64 + salt.length + 4;
        var inner = new Array(innerLen);
        var outerKey = new Array(64);
        var dk = [];

        // inner = (password ^ ipad) || salt || counter
        for (i = 0; i < 64; i++) inner[i] = 0x36;
        for (i = 0; i < password.length; i++) inner[i] ^= password[i];
        for (i = 0; i < salt.length; i++) inner[64+i] = salt[i];
        for (i = innerLen - 4; i < innerLen; i++) inner[i] = 0;

        // outerKey = password ^ opad
        for (i = 0; i < 64; i++) outerKey[i] = 0x5c;
        for (i = 0; i < password.length; i++) outerKey[i] ^= password[i];

        // increments counter inside inner
        function incrementCounter() {
            for (var i = innerLen-1; i >= innerLen-4; i--) {
                inner[i]++;
                if (inner[i] <= 0xff) return;
                inner[i] = 0;
            }
        }

        // output blocks = SHA256(outerKey || SHA256(inner)) ...
        while (dkLen >= 32) {
            incrementCounter();
            dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))));
            dkLen -= 32;
        }
        if (dkLen > 0) {
            incrementCounter();
            dk = dk.concat(SHA256(outerKey.concat(SHA256(inner))).slice(0, dkLen));
        }

        return dk;
    }

    // The following is an adaptation of scryptsy
    // See: https://www.npmjs.com/package/scryptsy
    function blockmix_salsa8(BY, Yi, r, x, _X) {
        var i;

        arraycopy(BY, (2 * r - 1) * 16, _X, 0, 16);
        for (i = 0; i < 2 * r; i++) {
            blockxor(BY, i * 16, _X, 16);
            salsa20_8(_X, x);
            arraycopy(_X, 0, BY, Yi + (i * 16), 16);
        }

        for (i = 0; i < r; i++) {
            arraycopy(BY, Yi + (i * 2) * 16, BY, (i * 16), 16);
        }

        for (i = 0; i < r; i++) {
            arraycopy(BY, Yi + (i * 2 + 1) * 16, BY, (i + r) * 16, 16);
        }
    }

    function R(a, b) {
        return (a << b) | (a >>> (32 - b));
    }

    function salsa20_8(B, x) {
        arraycopy(B, 0, x, 0, 16);

        for (var i = 8; i > 0; i -= 2) {
            x[ 4] ^= R(x[ 0] + x[12], 7);
            x[ 8] ^= R(x[ 4] + x[ 0], 9);
            x[12] ^= R(x[ 8] + x[ 4], 13);
            x[ 0] ^= R(x[12] + x[ 8], 18);
            x[ 9] ^= R(x[ 5] + x[ 1], 7);
            x[13] ^= R(x[ 9] + x[ 5], 9);
            x[ 1] ^= R(x[13] + x[ 9], 13);
            x[ 5] ^= R(x[ 1] + x[13], 18);
            x[14] ^= R(x[10] + x[ 6], 7);
            x[ 2] ^= R(x[14] + x[10], 9);
            x[ 6] ^= R(x[ 2] + x[14], 13);
            x[10] ^= R(x[ 6] + x[ 2], 18);
            x[ 3] ^= R(x[15] + x[11], 7);
            x[ 7] ^= R(x[ 3] + x[15], 9);
            x[11] ^= R(x[ 7] + x[ 3], 13);
            x[15] ^= R(x[11] + x[ 7], 18);
            x[ 1] ^= R(x[ 0] + x[ 3], 7);
            x[ 2] ^= R(x[ 1] + x[ 0], 9);
            x[ 3] ^= R(x[ 2] + x[ 1], 13);
            x[ 0] ^= R(x[ 3] + x[ 2], 18);
            x[ 6] ^= R(x[ 5] + x[ 4], 7);
            x[ 7] ^= R(x[ 6] + x[ 5], 9);
            x[ 4] ^= R(x[ 7] + x[ 6], 13);
            x[ 5] ^= R(x[ 4] + x[ 7], 18);
            x[11] ^= R(x[10] + x[ 9], 7);
            x[ 8] ^= R(x[11] + x[10], 9);
            x[ 9] ^= R(x[ 8] + x[11], 13);
            x[10] ^= R(x[ 9] + x[ 8], 18);
            x[12] ^= R(x[15] + x[14], 7);
            x[13] ^= R(x[12] + x[15], 9);
            x[14] ^= R(x[13] + x[12], 13);
            x[15] ^= R(x[14] + x[13], 18);
        }

        for (i = 0; i < 16; ++i) {
            B[i] += x[i];
        }
    }

    // naive approach... going back to loop unrolling may yield additional performance
    function blockxor(S, Si, D, len) {
        for (var i = 0; i < len; i++) {
            D[i] ^= S[Si + i]
        }
    }

    function arraycopy(src, srcPos, dest, destPos, length) {
        while (length--) {
            dest[destPos++] = src[srcPos++];
        }
    }

    function checkBufferish(o) {
        if (!o || typeof(o.length) !== 'number') {
            return false;
        }
        for (var i = 0; i < o.length; i++) {
            if (typeof(o[i]) !== 'number') { return false; }

            var v = parseInt(o[i]);
            if (v != o[i] || v < 0 || v >= 256) {
                return false;
            }
        }
        return true;
    }

    function ensureInteger(value, name) {
        var intValue = parseInt(value);
        if (value != intValue) { throw new Error('invalid ' + name); }
        return intValue;
    }

    // N = Cpu cost, r = Memory cost, p = parallelization cost
    // callback(error, progress, key)
    function scrypt(password, salt, N, r, p, dkLen, callback) {

        if (!callback) { throw new Error('missing callback'); }

        N = ensureInteger(N, 'N');
        r = ensureInteger(r, 'r');
        p = ensureInteger(p, 'p');

        dkLen = ensureInteger(dkLen, 'dkLen');

        if (N === 0 || (N & (N - 1)) !== 0) { throw new Error('N must be power of 2'); }

        if (N > MAX_VALUE / 128 / r) { throw new Error('N too large'); }
        if (r > MAX_VALUE / 128 / p) { throw new Error('r too large'); }

        if (!checkBufferish(password)) {
            throw new Error('password must be an array or buffer');
        }
        password = Array.prototype.slice.call(password);

        if (!checkBufferish(salt)) {
            throw new Error('salt must be an array or buffer');
        }
        salt = Array.prototype.slice.call(salt);

        var b = PBKDF2_HMAC_SHA256_OneIter(password, salt, p * 128 * r);
        var B = new Uint32Array(p * 32 * r)
        for (var i = 0; i < B.length; i++) {
            var j = i * 4;
            B[i] = ((b[j + 3] & 0xff) << 24) |
                   ((b[j + 2] & 0xff) << 16) |
                   ((b[j + 1] & 0xff) << 8) |
                   ((b[j + 0] & 0xff) << 0);
        }

        var XY = new Uint32Array(64 * r);
        var V = new Uint32Array(32 * r * N);

        var Yi = 32 * r;

        // scratch space
        var x = new Uint32Array(16);       // salsa20_8
        var _X = new Uint32Array(16);      // blockmix_salsa8

        var totalOps = p * N * 2;
        var currentOp = 0;
        var lastPercent10 = null;

        // Set this to true to abandon the scrypt on the next step
        var stop = false;

        // State information
        var state = 0;
        var i0 = 0, i1;
        var Bi;

        // How many blockmix_salsa8 can we do per step?
        var limit = parseInt(1000 / r);

        // Trick from scrypt-async; if there is a setImmediate shim in place, use it
        var nextTick = (typeof(setImmediate) !== 'undefined') ? setImmediate : setTimeout;

        // This is really all I changed; making scryptsy a state machine so we occasionally
        // stop and give other evnts on the evnt loop a chance to run. ~RicMoo
        var incrementalSMix = function() {
            if (stop) {
                return callback(new Error('cancelled'), currentOp / totalOps);
            }

            switch (state) {
                case 0:
                    // for (var i = 0; i < p; i++)...
                    Bi = i0 * 32 * r;

                    arraycopy(B, Bi, XY, 0, Yi);                       // ROMix - 1

                    state = 1;                                         // Move to ROMix 2
                    i1 = 0;

                    // Fall through

                case 1:

                    // Run up to 1000 steps of the first inner smix loop
                    var steps = N - i1;
                    if (steps > limit) { steps = limit; }
                    for (var i = 0; i < steps; i++) {                  // ROMix - 2
                        arraycopy(XY, 0, V, (i1 + i) * Yi, Yi)         // ROMix - 3
                        blockmix_salsa8(XY, Yi, r, x, _X);             // ROMix - 4
                    }

                    // for (var i = 0; i < N; i++)
                    i1 += steps;
                    currentOp += steps;

                    // Call the callback with the progress (optionally stopping us)
                    var percent10 = parseInt(1000 * currentOp / totalOps);
                    if (percent10 !== lastPercent10) {
                        stop = callback(null, currentOp / totalOps);
                        if (stop) { break; }
                        lastPercent10 = percent10;
                    }

                    if (i1 < N) {
                        break;
                    }

                    i1 = 0;                                          // Move to ROMix 6
                    state = 2;

                    // Fall through

                case 2:

                    // Run up to 1000 steps of the second inner smix loop
                    var steps = N - i1;
                    if (steps > limit) { steps = limit; }
                    for (var i = 0; i < steps; i++) {                // ROMix - 6
                        var offset = (2 * r - 1) * 16;               // ROMix - 7
                        var j = XY[offset] & (N - 1);
                        blockxor(V, j * Yi, XY, Yi);                 // ROMix - 8 (inner)
                        blockmix_salsa8(XY, Yi, r, x, _X);           // ROMix - 9 (outer)
                    }

                    // for (var i = 0; i < N; i++)...
                    i1 += steps;
                    currentOp += steps;

                    // Call the callback with the progress (optionally stopping us)
                    var percent10 = parseInt(1000 * currentOp / totalOps);
                    if (percent10 !== lastPercent10) {
                        stop = callback(null, currentOp / totalOps);
                        if (stop) { break; }
                        lastPercent10 = percent10;
                    }

                    if (i1 < N) {
                        break;
                    }

                    arraycopy(XY, 0, B, Bi, Yi);                     // ROMix - 10

                    // for (var i = 0; i < p; i++)...
                    i0++;
                    if (i0 < p) {
                        state = 0;
                        break;
                    }

                    b = [];
                    for (var i = 0; i < B.length; i++) {
                        b.push((B[i] >>  0) & 0xff);
                        b.push((B[i] >>  8) & 0xff);
                        b.push((B[i] >> 16) & 0xff);
                        b.push((B[i] >> 24) & 0xff);
                    }

                    var derivedKey = PBKDF2_HMAC_SHA256_OneIter(password, b, dkLen);

                    // Done; don't break (which would reschedule)
                    return callback(null, 1.0, derivedKey);
                }

                // Schedule the next steps
                nextTick(incrementalSMix);
            }

            // Bootstrap the incremental smix
            incrementalSMix();
    }

    // node.js
    if (true) {
       module.exports = scrypt;

    // RequireJS/AMD
    // http://www.requirejs.org/docs/api.html
    // https://github.com/amdjs/amdjs-api/wiki/AMD
    } else {}

})(this);


/***/ }),

/***/ 263151:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var rb = __webpack_require__(676417).randomBytes;
module.exports = function() {
  return rb(16);
};


/***/ }),

/***/ 542862:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

//     uuid.js
//
//     Copyright (c) 2010-2012 Robert Kieffer
//     MIT License - http://opensource.org/licenses/mit-license.php

// Unique ID creation requires a high quality random # generator.  We feature
// detect to determine the best RNG source, normalizing to a function that
// returns 128-bits of randomness, since that's what's usually required
var _rng = __webpack_require__(263151);

// Maps for number <-> hex string conversion
var _byteToHex = [];
var _hexToByte = {};
for (var i = 0; i < 256; i++) {
  _byteToHex[i] = (i + 0x100).toString(16).substr(1);
  _hexToByte[_byteToHex[i]] = i;
}

// **`parse()` - Parse a UUID into it's component bytes**
function parse(s, buf, offset) {
  var i = (buf && offset) || 0, ii = 0;

  buf = buf || [];
  s.toLowerCase().replace(/[0-9a-f]{2}/g, function(oct) {
    if (ii < 16) { // Don't overflow!
      buf[i + ii++] = _hexToByte[oct];
    }
  });

  // Zero out remaining bytes if string was short
  while (ii < 16) {
    buf[i + ii++] = 0;
  }

  return buf;
}

// **`unparse()` - Convert UUID byte array (ala parse()) into a string**
function unparse(buf, offset) {
  var i = offset || 0, bth = _byteToHex;
  return  bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] + '-' +
          bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]] +
          bth[buf[i++]] + bth[buf[i++]];
}

// **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html

// random #'s we need to init node and clockseq
var _seedBytes = _rng();

// Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
var _nodeId = [
  _seedBytes[0] | 0x01,
  _seedBytes[1], _seedBytes[2], _seedBytes[3], _seedBytes[4], _seedBytes[5]
];

// Per 4.2.2, randomize (14 bit) clockseq
var _clockseq = (_seedBytes[6] << 8 | _seedBytes[7]) & 0x3fff;

// Previous uuid creation time
var _lastMSecs = 0, _lastNSecs = 0;

// See https://github.com/broofa/node-uuid for API details
function v1(options, buf, offset) {
  var i = buf && offset || 0;
  var b = buf || [];

  options = options || {};

  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;

  // UUID timestamps are 100 nano-second units since the Gregorian epoch,
  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();

  // Per 4.2.1.2, use count of uuid's generated during the current clock
  // cycle to simulate higher resolution clock
  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;

  // Time since last uuid creation (in msecs)
  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;

  // Per 4.2.1.2, Bump clockseq on clock regression
  if (dt < 0 && options.clockseq === undefined) {
    clockseq = clockseq + 1 & 0x3fff;
  }

  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
  // time interval
  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
    nsecs = 0;
  }

  // Per 4.2.1.2 Throw error if too many uuids are requested
  if (nsecs >= 10000) {
    throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
  }

  _lastMSecs = msecs;
  _lastNSecs = nsecs;
  _clockseq = clockseq;

  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
  msecs += 12219292800000;

  // `time_low`
  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
  b[i++] = tl >>> 24 & 0xff;
  b[i++] = tl >>> 16 & 0xff;
  b[i++] = tl >>> 8 & 0xff;
  b[i++] = tl & 0xff;

  // `time_mid`
  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
  b[i++] = tmh >>> 8 & 0xff;
  b[i++] = tmh & 0xff;

  // `time_high_and_version`
  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
  b[i++] = tmh >>> 16 & 0xff;

  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
  b[i++] = clockseq >>> 8 | 0x80;

  // `clock_seq_low`
  b[i++] = clockseq & 0xff;

  // `node`
  var node = options.node || _nodeId;
  for (var n = 0; n < 6; n++) {
    b[i + n] = node[n];
  }

  return buf ? buf : unparse(b);
}

// **`v4()` - Generate random UUID**

// See https://github.com/broofa/node-uuid for API details
function v4(options, buf, offset) {
  // Deprecated - 'format' argument, as supported in v1.2
  var i = buf && offset || 0;

  if (typeof(options) == 'string') {
    buf = options == 'binary' ? new Array(16) : null;
    options = null;
  }
  options = options || {};

  var rnds = options.random || (options.rng || _rng)();

  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
  rnds[6] = (rnds[6] & 0x0f) | 0x40;
  rnds[8] = (rnds[8] & 0x3f) | 0x80;

  // Copy bytes to buffer, if provided
  if (buf) {
    for (var ii = 0; ii < 16; ii++) {
      buf[i + ii] = rnds[ii];
    }
  }

  return buf || unparse(rnds);
}

// Export public API
var uuid = v4;
uuid.v1 = v1;
uuid.v4 = v4;
uuid.parse = parse;
uuid.unparse = unparse;

module.exports = uuid;


/***/ }),

/***/ 155514:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var properties_1 = __webpack_require__(180083);
;
;
///////////////////////////////
// Exported Abstracts
var Provider = /** @class */ (function () {
    function Provider() {
        properties_1.setType(this, 'Provider');
    }
    Provider.isProvider = function (value) {
        return properties_1.isType(value, 'Provider');
    };
    return Provider;
}());
exports.Provider = Provider;
//defineReadOnly(Signer, 'inherits', inheritable(Abstract));


/***/ }),

/***/ 669404:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var address_1 = __webpack_require__(215894);
var bignumber_1 = __webpack_require__(661895);
var bytes_1 = __webpack_require__(45901);
var constants_1 = __webpack_require__(48232);
var hash_1 = __webpack_require__(430319);
var networks_1 = __webpack_require__(796294);
var properties_1 = __webpack_require__(180083);
var rlp_1 = __webpack_require__(593086);
var transaction_1 = __webpack_require__(702749);
var utf8_1 = __webpack_require__(871254);
var web_1 = __webpack_require__(412163);
var errors = __importStar(__webpack_require__(766286));
///////////////////////////////
// Imported Abstracts
var abstract_provider_1 = __webpack_require__(155514);
//////////////////////////////
// Request and Response Checking
// @TODO: not any?
function check(format, object) {
    var result = {};
    for (var key in format) {
        try {
            var value = format[key](object[key]);
            if (value !== undefined) {
                result[key] = value;
            }
        }
        catch (error) {
            error.checkKey = key;
            error.checkValue = object[key];
            throw error;
        }
    }
    return result;
}
function allowNull(check, nullValue) {
    return (function (value) {
        if (value == null) {
            return nullValue;
        }
        return check(value);
    });
}
function allowFalsish(check, replaceValue) {
    return (function (value) {
        if (!value) {
            return replaceValue;
        }
        return check(value);
    });
}
function arrayOf(check) {
    return (function (array) {
        if (!Array.isArray(array)) {
            throw new Error('not an array');
        }
        var result = [];
        array.forEach(function (value) {
            result.push(check(value));
        });
        return result;
    });
}
function checkHash(hash, requirePrefix) {
    if (typeof (hash) === 'string') {
        // geth-etc does add a "0x" prefix on receipt.root
        if (!requirePrefix && hash.substring(0, 2) !== '0x') {
            hash = '0x' + hash;
        }
        if (bytes_1.hexDataLength(hash) === 32) {
            return hash.toLowerCase();
        }
    }
    errors.throwError('invalid hash', errors.INVALID_ARGUMENT, { arg: 'hash', value: hash });
    return null;
}
function checkNumber(number) {
    return bignumber_1.bigNumberify(number).toNumber();
}
// Returns the difficulty as a number, or if too large (i.e. PoA network) null
function checkDifficulty(value) {
    var v = bignumber_1.bigNumberify(value);
    try {
        return v.toNumber();
    }
    catch (error) { }
    return null;
}
function checkBoolean(value) {
    if (typeof (value) === 'boolean') {
        return value;
    }
    if (typeof (value) === 'string') {
        if (value === 'true') {
            return true;
        }
        if (value === 'false') {
            return false;
        }
    }
    throw new Error('invaid boolean - ' + value);
}
function checkUint256(uint256) {
    if (!bytes_1.isHexString(uint256)) {
        throw new Error('invalid uint256');
    }
    while (uint256.length < 66) {
        uint256 = '0x0' + uint256.substring(2);
    }
    return uint256;
}
/*
function checkString(string) {
    if (typeof(string) !== 'string') { throw new Error('invalid string'); }
    return string;
}
*/
function checkBlockTag(blockTag) {
    if (blockTag == null) {
        return 'latest';
    }
    if (blockTag === 'earliest') {
        return '0x0';
    }
    if (blockTag === 'latest' || blockTag === 'pending') {
        return blockTag;
    }
    if (typeof (blockTag) === 'number') {
        return bytes_1.hexStripZeros(bytes_1.hexlify(blockTag));
    }
    if (bytes_1.isHexString(blockTag)) {
        return bytes_1.hexStripZeros(blockTag);
    }
    throw new Error('invalid blockTag');
}
var formatTransaction = {
    hash: checkHash,
    blockHash: allowNull(checkHash, null),
    blockNumber: allowNull(checkNumber, null),
    transactionIndex: allowNull(checkNumber, null),
    confirmations: allowNull(checkNumber, null),
    from: address_1.getAddress,
    gasPrice: bignumber_1.bigNumberify,
    gasLimit: bignumber_1.bigNumberify,
    to: allowNull(address_1.getAddress, null),
    value: bignumber_1.bigNumberify,
    nonce: checkNumber,
    data: bytes_1.hexlify,
    r: allowNull(checkUint256),
    s: allowNull(checkUint256),
    v: allowNull(checkNumber),
    creates: allowNull(address_1.getAddress, null),
    raw: allowNull(bytes_1.hexlify),
};
function checkTransactionResponse(transaction) {
    // Rename gas to gasLimit
    if (transaction.gas != null && transaction.gasLimit == null) {
        transaction.gasLimit = transaction.gas;
    }
    // Some clients (TestRPC) do strange things like return 0x0 for the
    // 0 address; correct this to be a real address
    if (transaction.to && bignumber_1.bigNumberify(transaction.to).isZero()) {
        transaction.to = '0x0000000000000000000000000000000000000000';
    }
    // Rename input to data
    if (transaction.input != null && transaction.data == null) {
        transaction.data = transaction.input;
    }
    // If to and creates are empty, populate the creates from the transaction
    if (transaction.to == null && transaction.creates == null) {
        transaction.creates = address_1.getContractAddress(transaction);
    }
    // @TODO: use transaction.serialize? Have to add support for including v, r, and s...
    if (!transaction.raw) {
        // Very loose providers (e.g. TestRPC) don't provide a signature or raw
        if (transaction.v && transaction.r && transaction.s) {
            var raw = [
                bytes_1.stripZeros(bytes_1.hexlify(transaction.nonce)),
                bytes_1.stripZeros(bytes_1.hexlify(transaction.gasPrice)),
                bytes_1.stripZeros(bytes_1.hexlify(transaction.gasLimit)),
                (transaction.to || "0x"),
                bytes_1.stripZeros(bytes_1.hexlify(transaction.value || '0x')),
                bytes_1.hexlify(transaction.data || '0x'),
                bytes_1.stripZeros(bytes_1.hexlify(transaction.v || '0x')),
                bytes_1.stripZeros(bytes_1.hexlify(transaction.r)),
                bytes_1.stripZeros(bytes_1.hexlify(transaction.s)),
            ];
            transaction.raw = rlp_1.encode(raw);
        }
    }
    var result = check(formatTransaction, transaction);
    var networkId = transaction.networkId;
    // geth-etc returns chainId
    if (transaction.chainId != null && networkId == null && result.v == null) {
        networkId = transaction.chainId;
    }
    if (bytes_1.isHexString(networkId)) {
        networkId = bignumber_1.bigNumberify(networkId).toNumber();
    }
    if (typeof (networkId) !== 'number' && result.v != null) {
        networkId = (result.v - 35) / 2;
        if (networkId < 0) {
            networkId = 0;
        }
        networkId = parseInt(networkId);
    }
    if (typeof (networkId) !== 'number') {
        networkId = 0;
    }
    result.networkId = networkId;
    // 0x0000... should actually be null
    if (result.blockHash && result.blockHash.replace(/0/g, '') === 'x') {
        result.blockHash = null;
    }
    return result;
}
var formatBlock = {
    hash: checkHash,
    parentHash: checkHash,
    number: checkNumber,
    timestamp: checkNumber,
    nonce: allowNull(bytes_1.hexlify),
    difficulty: checkDifficulty,
    gasLimit: bignumber_1.bigNumberify,
    gasUsed: bignumber_1.bigNumberify,
    miner: address_1.getAddress,
    extraData: bytes_1.hexlify,
    transactions: allowNull(arrayOf(checkHash)),
};
var formatBlockWithTransactions = properties_1.shallowCopy(formatBlock);
formatBlockWithTransactions.transactions = allowNull(arrayOf(checkTransactionResponse));
function checkBlock(block, includeTransactions) {
    if (block.author != null && block.miner == null) {
        block.miner = block.author;
    }
    return check(includeTransactions ? formatBlockWithTransactions : formatBlock, block);
}
var formatTransactionRequest = {
    from: allowNull(address_1.getAddress),
    nonce: allowNull(checkNumber),
    gasLimit: allowNull(bignumber_1.bigNumberify),
    gasPrice: allowNull(bignumber_1.bigNumberify),
    to: allowNull(address_1.getAddress),
    value: allowNull(bignumber_1.bigNumberify),
    data: allowNull(bytes_1.hexlify),
};
function checkTransactionRequest(transaction) {
    return check(formatTransactionRequest, transaction);
}
var formatTransactionReceiptLog = {
    transactionLogIndex: allowNull(checkNumber),
    transactionIndex: checkNumber,
    blockNumber: checkNumber,
    transactionHash: checkHash,
    address: address_1.getAddress,
    topics: arrayOf(checkHash),
    data: bytes_1.hexlify,
    logIndex: checkNumber,
    blockHash: checkHash,
};
function checkTransactionReceiptLog(log) {
    return check(formatTransactionReceiptLog, log);
}
var formatTransactionReceipt = {
    to: allowNull(address_1.getAddress, null),
    from: allowNull(address_1.getAddress, null),
    contractAddress: allowNull(address_1.getAddress, null),
    transactionIndex: checkNumber,
    root: allowNull(checkHash),
    gasUsed: bignumber_1.bigNumberify,
    logsBloom: allowNull(bytes_1.hexlify),
    blockHash: checkHash,
    transactionHash: checkHash,
    logs: arrayOf(checkTransactionReceiptLog),
    blockNumber: checkNumber,
    confirmations: allowNull(checkNumber, null),
    cumulativeGasUsed: bignumber_1.bigNumberify,
    status: allowNull(checkNumber)
};
function checkTransactionReceipt(transactionReceipt) {
    //var status = transactionReceipt.status;
    //var root = transactionReceipt.root;
    var result = check(formatTransactionReceipt, transactionReceipt);
    result.logs.forEach(function (entry, index) {
        if (entry.transactionLogIndex == null) {
            entry.transactionLogIndex = index;
        }
    });
    if (transactionReceipt.status != null) {
        result.byzantium = true;
    }
    return result;
}
function checkTopics(topics) {
    if (Array.isArray(topics)) {
        topics.forEach(function (topic) {
            checkTopics(topic);
        });
    }
    else if (topics != null) {
        checkHash(topics);
    }
    return topics;
}
var formatFilter = {
    fromBlock: allowNull(checkBlockTag, undefined),
    toBlock: allowNull(checkBlockTag, undefined),
    address: allowNull(address_1.getAddress, undefined),
    topics: allowNull(checkTopics, undefined),
};
var formatFilterByBlock = {
    blockHash: allowNull(checkHash, undefined),
    address: allowNull(address_1.getAddress, undefined),
    topics: allowNull(checkTopics, undefined),
};
function checkFilter(filter) {
    if (filter && filter.blockHash) {
        return check(formatFilterByBlock, filter);
    }
    return check(formatFilter, filter);
}
var formatLog = {
    blockNumber: allowNull(checkNumber),
    blockHash: allowNull(checkHash),
    transactionIndex: checkNumber,
    removed: allowNull(checkBoolean),
    address: address_1.getAddress,
    data: allowFalsish(bytes_1.hexlify, '0x'),
    topics: arrayOf(checkHash),
    transactionHash: checkHash,
    logIndex: checkNumber,
};
function checkLog(log) {
    return check(formatLog, log);
}
//////////////////////////////
// Event Serializeing
function serializeTopics(topics) {
    return topics.map(function (topic) {
        if (typeof (topic) === 'string') {
            return topic;
        }
        else if (Array.isArray(topic)) {
            topic.forEach(function (topic) {
                if (topic !== null && bytes_1.hexDataLength(topic) !== 32) {
                    errors.throwError('invalid topic', errors.INVALID_ARGUMENT, { argument: 'topic', value: topic });
                }
            });
            return topic.join(',');
        }
        else if (topic === null) {
            return '';
        }
        return errors.throwError('invalid topic value', errors.INVALID_ARGUMENT, { argument: 'topic', value: topic });
    }).join('&');
}
function deserializeTopics(data) {
    return data.split(/&/g).map(function (topic) {
        var comps = topic.split(',');
        if (comps.length === 1) {
            if (comps[0] === '') {
                return null;
            }
            return topic;
        }
        return comps.map(function (topic) {
            if (topic === '') {
                return null;
            }
            return topic;
        });
    });
}
function getEventTag(eventName) {
    if (typeof (eventName) === 'string') {
        if (bytes_1.hexDataLength(eventName) === 20) {
            return 'address:' + address_1.getAddress(eventName);
        }
        eventName = eventName.toLowerCase();
        if (bytes_1.hexDataLength(eventName) === 32) {
            return 'tx:' + eventName;
        }
        if (eventName.indexOf(':') === -1) {
            return eventName;
        }
    }
    else if (Array.isArray(eventName)) {
        return 'filter::' + serializeTopics(eventName);
    }
    else if (eventName && typeof (eventName) === 'object') {
        return 'filter:' + (eventName.address || '') + ':' + serializeTopics(eventName.topics || []);
    }
    throw new Error('invalid event - ' + eventName);
}
//////////////////////////////
// Helper Object
function getTime() {
    return (new Date()).getTime();
}
var BaseProvider = /** @class */ (function (_super) {
    __extends(BaseProvider, _super);
    function BaseProvider(network) {
        var _this = _super.call(this) || this;
        errors.checkNew(_this, abstract_provider_1.Provider);
        if (network instanceof Promise) {
            properties_1.defineReadOnly(_this, 'ready', network.then(function (network) {
                properties_1.defineReadOnly(_this, '_network', network);
                return network;
            }));
            // Squash any "unhandled promise" errors; the don't need to be handled
            _this.ready.catch(function (error) { });
        }
        else {
            var knownNetwork = networks_1.getNetwork((network == null) ? 'homestead' : network);
            if (knownNetwork) {
                properties_1.defineReadOnly(_this, '_network', knownNetwork);
                properties_1.defineReadOnly(_this, 'ready', Promise.resolve(_this._network));
            }
            else {
                errors.throwError('invalid network', errors.INVALID_ARGUMENT, { arg: 'network', value: network });
            }
        }
        _this._lastBlockNumber = -2;
        // Balances being watched for changes
        _this._balances = {};
        // Events being listened to
        _this._events = [];
        _this._pollingInterval = 4000;
        _this._emitted = { block: -2 };
        _this._fastQueryDate = 0;
        return _this;
    }
    BaseProvider.prototype._doPoll = function () {
        var _this = this;
        this.getBlockNumber().then(function (blockNumber) {
            if (!_this.polling) {
                return;
            }
            _this._setFastBlockNumber(blockNumber);
            // If the block hasn't changed, meh.
            if (blockNumber === _this._lastBlockNumber) {
                return;
            }
            // First polling cycle, trigger a "block" events
            if (_this._emitted.block === -2) {
                _this._emitted.block = blockNumber - 1;
            }
            // Notify all listener for each block that has passed
            for (var i = _this._emitted.block + 1; i <= blockNumber; i++) {
                _this.emit('block', i);
            }
            // The emitted block was updated, check for obsolete events
            if (_this._emitted.block !== blockNumber) {
                _this._emitted.block = blockNumber;
                Object.keys(_this._emitted).forEach(function (key) {
                    // The block event does not expire
                    if (key === 'block') {
                        return;
                    }
                    // The block we were at when we emitted this event
                    var eventBlockNumber = _this._emitted[key];
                    // We cannot garbage collect pending transactions or blocks here
                    // They should be garbage collected by the Provider when setting
                    // "pending" events
                    if (eventBlockNumber === 'pending') {
                        return;
                    }
                    // Evict any transaction hashes or block hashes over 12 blocks
                    // old, since they should not return null anyways
                    if (blockNumber - eventBlockNumber > 12) {
                        delete _this._emitted[key];
                    }
                });
            }
            // First polling cycle
            if (_this._lastBlockNumber === -2) {
                _this._lastBlockNumber = blockNumber - 1;
            }
            // Sweep balances and remove addresses we no longer have events for
            var newBalances = {};
            // Find all transaction hashes we are waiting on
            var uniqueEventTags = {};
            _this._events.forEach(function (event) {
                uniqueEventTags[event.tag] = true;
            });
            Object.keys(uniqueEventTags).forEach(function (tag) {
                var comps = tag.split(':');
                switch (comps[0]) {
                    case 'tx': {
                        var hash_2 = comps[1];
                        _this.getTransactionReceipt(hash_2).then(function (receipt) {
                            if (!receipt || receipt.blockNumber == null) {
                                return null;
                            }
                            _this._emitted['t:' + hash_2] = receipt.blockNumber;
                            _this.emit(hash_2, receipt);
                            return null;
                        }).catch(function (error) { _this.emit('error', error); });
                        break;
                    }
                    case 'address': {
                        var address_2 = comps[1];
                        if (_this._balances[address_2]) {
                            newBalances[address_2] = _this._balances[address_2];
                        }
                        _this.getBalance(address_2, 'latest').then(function (balance) {
                            var lastBalance = _this._balances[address_2];
                            if (lastBalance && balance.eq(lastBalance)) {
                                return;
                            }
                            _this._balances[address_2] = balance;
                            _this.emit(address_2, balance);
                            return null;
                        }).catch(function (error) { _this.emit('error', error); });
                        break;
                    }
                    case 'filter': {
                        var topics = deserializeTopics(comps[2]);
                        var filter_1 = {
                            address: comps[1],
                            fromBlock: _this._lastBlockNumber + 1,
                            toBlock: blockNumber,
                            topics: topics
                        };
                        if (!filter_1.address) {
                            delete filter_1.address;
                        }
                        _this.getLogs(filter_1).then(function (logs) {
                            if (logs.length === 0) {
                                return;
                            }
                            logs.forEach(function (log) {
                                _this._emitted['b:' + log.blockHash] = log.blockNumber;
                                _this._emitted['t:' + log.transactionHash] = log.blockNumber;
                                _this.emit(filter_1, log);
                            });
                            return null;
                        }).catch(function (error) { _this.emit('error', error); });
                        break;
                    }
                }
            });
            _this._lastBlockNumber = blockNumber;
            _this._balances = newBalances;
            return null;
        }).catch(function (error) { });
        this.doPoll();
    };
    BaseProvider.prototype.resetEventsBlock = function (blockNumber) {
        this._lastBlockNumber = blockNumber - 1;
        if (this.polling) {
            this._doPoll();
        }
    };
    Object.defineProperty(BaseProvider.prototype, "network", {
        get: function () {
            return this._network;
        },
        enumerable: true,
        configurable: true
    });
    BaseProvider.prototype.getNetwork = function () {
        return this.ready;
    };
    Object.defineProperty(BaseProvider.prototype, "blockNumber", {
        get: function () {
            return this._fastBlockNumber;
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(BaseProvider.prototype, "polling", {
        get: function () {
            return (this._poller != null);
        },
        set: function (value) {
            var _this = this;
            setTimeout(function () {
                if (value && !_this._poller) {
                    _this._poller = setInterval(_this._doPoll.bind(_this), _this.pollingInterval);
                    _this._doPoll();
                }
                else if (!value && _this._poller) {
                    clearInterval(_this._poller);
                    _this._poller = null;
                }
            }, 0);
        },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(BaseProvider.prototype, "pollingInterval", {
        get: function () {
            return this._pollingInterval;
        },
        set: function (value) {
            var _this = this;
            if (typeof (value) !== 'number' || value <= 0 || parseInt(String(value)) != value) {
                throw new Error('invalid polling interval');
            }
            this._pollingInterval = value;
            if (this._poller) {
                clearInterval(this._poller);
                this._poller = setInterval(function () { _this._doPoll(); }, this._pollingInterval);
            }
        },
        enumerable: true,
        configurable: true
    });
    BaseProvider.prototype._getFastBlockNumber = function () {
        var _this = this;
        var now = getTime();
        // Stale block number, request a newer value
        if ((now - this._fastQueryDate) > 2 * this._pollingInterval) {
            this._fastQueryDate = now;
            this._fastBlockNumberPromise = this.getBlockNumber().then(function (blockNumber) {
                if (_this._fastBlockNumber == null || blockNumber > _this._fastBlockNumber) {
                    _this._fastBlockNumber = blockNumber;
                }
                return _this._fastBlockNumber;
            });
        }
        return this._fastBlockNumberPromise;
    };
    BaseProvider.prototype._setFastBlockNumber = function (blockNumber) {
        // Older block, maybe a stale request
        if (this._fastBlockNumber != null && blockNumber < this._fastBlockNumber) {
            return;
        }
        // Update the time we updated the blocknumber
        this._fastQueryDate = getTime();
        // Newer block number, use  it
        if (this._fastBlockNumber == null || blockNumber > this._fastBlockNumber) {
            this._fastBlockNumber = blockNumber;
            this._fastBlockNumberPromise = Promise.resolve(blockNumber);
        }
    };
    // @TODO: Add .poller which must be an event emitter with a 'start', 'stop' and 'block' event;
    //        this will be used once we move to the WebSocket or other alternatives to polling
    BaseProvider.prototype.waitForTransaction = function (transactionHash, confirmations) {
        var _this = this;
        if (confirmations == null) {
            confirmations = 1;
        }
        return this.getTransactionReceipt(transactionHash).then(function (receipt) {
            if (confirmations === 0 || (receipt && receipt.confirmations >= confirmations)) {
                return receipt;
            }
            return (new Promise(function (resolve) {
                var handler = function (receipt) {
                    if (receipt.confirmations < confirmations) {
                        return;
                    }
                    _this.removeListener(transactionHash, handler);
                    resolve(receipt);
                };
                _this.on(transactionHash, handler);
            }));
        });
    };
    BaseProvider.prototype.getBlockNumber = function () {
        var _this = this;
        return this.ready.then(function () {
            return _this.perform('getBlockNumber', {}).then(function (result) {
                var value = parseInt(result);
                if (value != result) {
                    throw new Error('invalid response - getBlockNumber');
                }
                _this._setFastBlockNumber(value);
                return value;
            });
        });
    };
    BaseProvider.prototype.getGasPrice = function () {
        var _this = this;
        return this.ready.then(function () {
            return _this.perform('getGasPrice', {}).then(function (result) {
                return bignumber_1.bigNumberify(result);
            });
        });
    };
    BaseProvider.prototype.getBalance = function (addressOrName, blockTag) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) {
                var addressOrName = _a.addressOrName, blockTag = _a.blockTag;
                return _this._getAddress(addressOrName).then(function (address) {
                    var params = { address: address, blockTag: checkBlockTag(blockTag) };
                    return _this.perform('getBalance', params).then(function (result) {
                        return bignumber_1.bigNumberify(result);
                    });
                });
            });
        });
    };
    BaseProvider.prototype.getTransactionCount = function (addressOrName, blockTag) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) {
                var addressOrName = _a.addressOrName, blockTag = _a.blockTag;
                return _this._getAddress(addressOrName).then(function (address) {
                    var params = { address: address, blockTag: checkBlockTag(blockTag) };
                    return _this.perform('getTransactionCount', params).then(function (result) {
                        return bignumber_1.bigNumberify(result).toNumber();
                    });
                });
            });
        });
    };
    BaseProvider.prototype.getCode = function (addressOrName, blockTag) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties({ addressOrName: addressOrName, blockTag: blockTag }).then(function (_a) {
                var addressOrName = _a.addressOrName, blockTag = _a.blockTag;
                return _this._getAddress(addressOrName).then(function (address) {
                    var params = { address: address, blockTag: checkBlockTag(blockTag) };
                    return _this.perform('getCode', params).then(function (result) {
                        return bytes_1.hexlify(result);
                    });
                });
            });
        });
    };
    BaseProvider.prototype.getStorageAt = function (addressOrName, position, blockTag) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties({ addressOrName: addressOrName, position: position, blockTag: blockTag }).then(function (_a) {
                var addressOrName = _a.addressOrName, position = _a.position, blockTag = _a.blockTag;
                return _this._getAddress(addressOrName).then(function (address) {
                    var params = {
                        address: address,
                        blockTag: checkBlockTag(blockTag),
                        position: bytes_1.hexStripZeros(bytes_1.hexlify(position)),
                    };
                    return _this.perform('getStorageAt', params).then(function (result) {
                        return bytes_1.hexlify(result);
                    });
                });
            });
        });
    };
    BaseProvider.prototype.sendTransaction = function (signedTransaction) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties({ signedTransaction: signedTransaction }).then(function (_a) {
                var signedTransaction = _a.signedTransaction;
                var params = { signedTransaction: bytes_1.hexlify(signedTransaction) };
                return _this.perform('sendTransaction', params).then(function (hash) {
                    return _this._wrapTransaction(transaction_1.parse(signedTransaction), hash);
                }, function (error) {
                    error.transaction = transaction_1.parse(signedTransaction);
                    if (error.transaction.hash) {
                        error.transactionHash = error.transaction.hash;
                    }
                    throw error;
                });
            });
        });
    };
    // This should be called by any subclass wrapping a TransactionResponse
    BaseProvider.prototype._wrapTransaction = function (tx, hash) {
        var _this = this;
        if (hash != null && bytes_1.hexDataLength(hash) !== 32) {
            throw new Error('invalid response - sendTransaction');
        }
        var result = tx;
        // Check the hash we expect is the same as the hash the server reported
        if (hash != null && tx.hash !== hash) {
            errors.throwError('Transaction hash mismatch from Provider.sendTransaction.', errors.UNKNOWN_ERROR, { expectedHash: tx.hash, returnedHash: hash });
        }
        // @TODO: (confirmations? number, timeout? number)
        result.wait = function (confirmations) {
            // We know this transaction *must* exist (whether it gets mined is
            // another story), so setting an emitted value forces us to
            // wait even if the node returns null for the receipt
            if (confirmations !== 0) {
                _this._emitted['t:' + tx.hash] = 'pending';
            }
            return _this.waitForTransaction(tx.hash, confirmations).then(function (receipt) {
                if (receipt == null && confirmations === 0) {
                    return null;
                }
                // No longer pending, allow the polling loop to garbage collect this
                _this._emitted['t:' + tx.hash] = receipt.blockNumber;
                if (receipt.status === 0) {
                    errors.throwError('transaction failed', errors.CALL_EXCEPTION, {
                        transactionHash: tx.hash,
                        transaction: tx
                    });
                }
                return receipt;
            });
        };
        return result;
    };
    BaseProvider.prototype.call = function (transaction, blockTag) {
        var _this = this;
        var tx = properties_1.shallowCopy(transaction);
        return this.ready.then(function () {
            return properties_1.resolveProperties({ blockTag: blockTag, tx: tx }).then(function (_a) {
                var blockTag = _a.blockTag, tx = _a.tx;
                return _this._resolveNames(tx, ['to', 'from']).then(function (tx) {
                    var params = { blockTag: checkBlockTag(blockTag), transaction: checkTransactionRequest(tx) };
                    return _this.perform('call', params).then(function (result) {
                        return bytes_1.hexlify(result);
                    });
                });
            });
        });
    };
    BaseProvider.prototype.estimateGas = function (transaction) {
        var _this = this;
        var tx = {
            to: transaction.to,
            from: transaction.from,
            data: transaction.data,
            gasPrice: transaction.gasPrice,
            value: transaction.value
        };
        return this.ready.then(function () {
            return properties_1.resolveProperties(tx).then(function (tx) {
                return _this._resolveNames(tx, ['to', 'from']).then(function (tx) {
                    var params = { transaction: checkTransactionRequest(tx) };
                    return _this.perform('estimateGas', params).then(function (result) {
                        return bignumber_1.bigNumberify(result);
                    });
                });
            });
        });
    };
    BaseProvider.prototype.getBlock = function (blockHashOrBlockTag, includeTransactions) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties({ blockHashOrBlockTag: blockHashOrBlockTag }).then(function (_a) {
                var blockHashOrBlockTag = _a.blockHashOrBlockTag;
                try {
                    var blockHash_1 = bytes_1.hexlify(blockHashOrBlockTag);
                    if (bytes_1.hexDataLength(blockHash_1) === 32) {
                        return web_1.poll(function () {
                            return _this.perform('getBlock', { blockHash: blockHash_1, includeTransactions: !!includeTransactions }).then(function (block) {
                                if (block == null) {
                                    if (_this._emitted['b:' + blockHash_1] == null) {
                                        return null;
                                    }
                                    return undefined;
                                }
                                return checkBlock(block, includeTransactions);
                            });
                        }, { onceBlock: _this });
                    }
                }
                catch (error) { }
                try {
                    var blockNumber_1 = -128;
                    var blockTag_1 = checkBlockTag(blockHashOrBlockTag);
                    if (bytes_1.isHexString(blockTag_1)) {
                        blockNumber_1 = parseInt(blockTag_1.substring(2), 16);
                    }
                    return web_1.poll(function () {
                        return _this.perform('getBlock', { blockTag: blockTag_1, includeTransactions: !!includeTransactions }).then(function (block) {
                            if (block == null) {
                                if (blockNumber_1 <= _this._emitted.block) {
                                    return undefined;
                                }
                                return null;
                            }
                            return checkBlock(block, includeTransactions);
                        });
                    }, { onceBlock: _this });
                }
                catch (error) { }
                throw new Error('invalid block hash or block tag');
            });
        });
    };
    BaseProvider.prototype.getTransaction = function (transactionHash) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties({ transactionHash: transactionHash }).then(function (_a) {
                var transactionHash = _a.transactionHash;
                var params = { transactionHash: checkHash(transactionHash, true) };
                return web_1.poll(function () {
                    return _this.perform('getTransaction', params).then(function (result) {
                        if (result == null) {
                            if (_this._emitted['t:' + transactionHash] == null) {
                                return null;
                            }
                            return undefined;
                        }
                        var tx = BaseProvider.checkTransactionResponse(result);
                        if (tx.blockNumber == null) {
                            tx.confirmations = 0;
                        }
                        else if (tx.confirmations == null) {
                            return _this._getFastBlockNumber().then(function (blockNumber) {
                                // Add the confirmations using the fast block number (pessimistic)
                                var confirmations = (blockNumber - tx.blockNumber) + 1;
                                if (confirmations <= 0) {
                                    confirmations = 1;
                                }
                                tx.confirmations = confirmations;
                                return _this._wrapTransaction(tx);
                            });
                        }
                        return _this._wrapTransaction(tx);
                    });
                }, { onceBlock: _this });
            });
        });
    };
    BaseProvider.prototype.getTransactionReceipt = function (transactionHash) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties({ transactionHash: transactionHash }).then(function (_a) {
                var transactionHash = _a.transactionHash;
                var params = { transactionHash: checkHash(transactionHash, true) };
                return web_1.poll(function () {
                    return _this.perform('getTransactionReceipt', params).then(function (result) {
                        if (result == null) {
                            if (_this._emitted['t:' + transactionHash] == null) {
                                return null;
                            }
                            return undefined;
                        }
                        // "geth-etc" returns receipts before they are ready
                        if (result.blockHash == null) {
                            return undefined;
                        }
                        var receipt = checkTransactionReceipt(result);
                        if (receipt.blockNumber == null) {
                            receipt.confirmations = 0;
                        }
                        else if (receipt.confirmations == null) {
                            return _this._getFastBlockNumber().then(function (blockNumber) {
                                // Add the confirmations using the fast block number (pessimistic)
                                var confirmations = (blockNumber - receipt.blockNumber) + 1;
                                if (confirmations <= 0) {
                                    confirmations = 1;
                                }
                                receipt.confirmations = confirmations;
                                return receipt;
                            });
                        }
                        return receipt;
                    });
                }, { onceBlock: _this });
            });
        });
    };
    BaseProvider.prototype.getLogs = function (filter) {
        var _this = this;
        return this.ready.then(function () {
            return properties_1.resolveProperties(filter).then(function (filter) {
                return _this._resolveNames(filter, ['address']).then(function (filter) {
                    var params = { filter: checkFilter(filter) };
                    return _this.perform('getLogs', params).then(function (result) {
                        return arrayOf(checkLog)(result);
                    });
                });
            });
        });
    };
    BaseProvider.prototype.getEtherPrice = function () {
        var _this = this;
        return this.ready.then(function () {
            return _this.perform('getEtherPrice', {}).then(function (result) {
                // @TODO: Check valid float
                return result;
            });
        });
    };
    BaseProvider.prototype._getAddress = function (addressOrName) {
        return this.resolveName(addressOrName).then(function (address) {
            if (address == null) {
                errors.throwError("ENS name not configured", errors.UNSUPPORTED_OPERATION, { operation: "resolveName(" + JSON.stringify(addressOrName) + ")" });
            }
            return address;
        });
    };
    // @TODO: Could probably use resolveProperties instead?
    BaseProvider.prototype._resolveNames = function (object, keys) {
        var promises = [];
        var result = properties_1.shallowCopy(object);
        keys.forEach(function (key) {
            if (result[key] == null) {
                return;
            }
            promises.push(this._getAddress(result[key]).then(function (address) {
                result[key] = address;
                return;
            }));
        }, this);
        return Promise.all(promises).then(function () { return result; });
    };
    BaseProvider.prototype._getResolver = function (name) {
        var _this = this;
        // Get the resolver from the blockchain
        return this.getNetwork().then(function (network) {
            // No ENS...
            if (!network.ensAddress) {
                errors.throwError('network does not support ENS', errors.UNSUPPORTED_OPERATION, { operation: 'ENS', network: network.name });
            }
            // keccak256('resolver(bytes32)')
            var data = '0x0178b8bf' + hash_1.namehash(name).substring(2);
            var transaction = { to: network.ensAddress, data: data };
            return _this.call(transaction).then(function (data) {
                // extract the address from the data
                if (bytes_1.hexDataLength(data) !== 32) {
                    return null;
                }
                var address = address_1.getAddress(bytes_1.hexDataSlice(data, 12));
                if (address === constants_1.AddressZero) {
                    return null;
                }
                return address;
            });
        });
    };
    BaseProvider.prototype.resolveName = function (name) {
        var _this = this;
        // If it is a promise, resolve it then recurse
        if (name instanceof Promise) {
            return name.then(function (addressOrName) {
                return _this.resolveName(addressOrName);
            });
        }
        // If it is already an address, nothing to resolve
        try {
            return Promise.resolve(address_1.getAddress(name));
        }
        catch (error) { }
        var self = this;
        var nodeHash = hash_1.namehash(name);
        // Get the addr from the resovler
        return this._getResolver(name).then(function (resolverAddress) {
            if (resolverAddress == null) {
                return null;
            }
            // keccak256('addr(bytes32)')
            var data = '0x3b3b57de' + nodeHash.substring(2);
            var transaction = { to: resolverAddress, data: data };
            return self.call(transaction);
            // extract the address from the data
        }).then(function (data) {
            if (bytes_1.hexDataLength(data) !== 32) {
                return null;
            }
            var address = address_1.getAddress(bytes_1.hexDataSlice(data, 12));
            if (address === constants_1.AddressZero) {
                return null;
            }
            return address;
        });
    };
    BaseProvider.prototype.lookupAddress = function (address) {
        var _this = this;
        if (address instanceof Promise) {
            return address.then(function (address) {
                return _this.lookupAddress(address);
            });
        }
        address = address_1.getAddress(address);
        var name = address.substring(2) + '.addr.reverse';
        var nodehash = hash_1.namehash(name);
        var self = this;
        return this._getResolver(name).then(function (resolverAddress) {
            if (!resolverAddress) {
                return null;
            }
            // keccak('name(bytes32)')
            var data = '0x691f3431' + nodehash.substring(2);
            var transaction = { to: resolverAddress, data: data };
            return self.call(transaction);
        }).then(function (data) {
            if (data == null) {
                return null;
            }
            // Strip off the "0x"
            data = data.substring(2);
            // Strip off the dynamic string pointer (0x20)
            if (data.length < 64) {
                return null;
            }
            data = data.substring(64);
            if (data.length < 64) {
                return null;
            }
            var length = bignumber_1.bigNumberify('0x' + data.substring(0, 64)).toNumber();
            data = data.substring(64);
            if (2 * length > data.length) {
                return null;
            }
            var name = utf8_1.toUtf8String('0x' + data.substring(0, 2 * length));
            // Make sure the reverse record matches the foward record
            return self.resolveName(name).then(function (addr) {
                if (addr != address) {
                    return null;
                }
                return name;
            });
        });
    };
    BaseProvider.checkTransactionResponse = function (transaction) {
        return checkTransactionResponse(transaction);
    };
    BaseProvider.prototype.doPoll = function () {
    };
    BaseProvider.prototype.perform = function (method, params) {
        errors.throwError(method + ' not implemented', errors.NOT_IMPLEMENTED, { operation: method });
        return null;
    };
    BaseProvider.prototype._startPending = function () {
        errors.warn('WARNING: this provider does not support pending events');
    };
    BaseProvider.prototype._stopPending = function () {
    };
    BaseProvider.prototype._addEventListener = function (eventName, listener, once) {
        this._events.push({
            tag: getEventTag(eventName),
            listener: listener,
            once: once,
        });
        if (eventName === 'pending') {
            this._startPending();
        }
        this.polling = true;
    };
    BaseProvider.prototype.on = function (eventName, listener) {
        this._addEventListener(eventName, listener, false);
        return this;
    };
    BaseProvider.prototype.once = function (eventName, listener) {
        this._addEventListener(eventName, listener, true);
        return this;
    };
    BaseProvider.prototype.addEventListener = function (eventName, listener) {
        return this.on(eventName, listener);
    };
    BaseProvider.prototype.emit = function (eventName) {
        var _this = this;
        var args = [];
        for (var _i = 1; _i < arguments.length; _i++) {
            args[_i - 1] = arguments[_i];
        }
        var result = false;
        var eventTag = getEventTag(eventName);
        this._events = this._events.filter(function (event) {
            if (event.tag !== eventTag) {
                return true;
            }
            setTimeout(function () {
                event.listener.apply(_this, args);
            }, 0);
            result = true;
            return !(event.once);
        });
        if (this.listenerCount() === 0) {
            this.polling = false;
        }
        return result;
    };
    BaseProvider.prototype.listenerCount = function (eventName) {
        if (!eventName) {
            return this._events.length;
        }
        var eventTag = getEventTag(eventName);
        return this._events.filter(function (event) {
            return (event.tag === eventTag);
        }).length;
    };
    BaseProvider.prototype.listeners = function (eventName) {
        var eventTag = getEventTag(eventName);
        return this._events.filter(function (event) {
            return (event.tag === eventTag);
        }).map(function (event) {
            return event.listener;
        });
    };
    BaseProvider.prototype.removeAllListeners = function (eventName) {
        if (eventName == null) {
            this._events = [];
            this._stopPending();
        }
        else {
            var eventTag_1 = getEventTag(eventName);
            this._events = this._events.filter(function (event) {
                return (event.tag !== eventTag_1);
            });
            if (eventName === 'pending') {
                this._stopPending();
            }
        }
        if (this._events.length === 0) {
            this.polling = false;
        }
        return this;
    };
    BaseProvider.prototype.removeListener = function (eventName, listener) {
        var found = false;
        var eventTag = getEventTag(eventName);
        this._events = this._events.filter(function (event) {
            if (event.tag !== eventTag || event.listener != listener) {
                return true;
            }
            if (found) {
                return true;
            }
            found = true;
            return false;
        });
        if (eventName === 'pending' && this.listenerCount('pending') === 0) {
            this._stopPending();
        }
        if (this.listenerCount() === 0) {
            this.polling = false;
        }
        return this;
    };
    return BaseProvider;
}(abstract_provider_1.Provider));
exports.BaseProvider = BaseProvider;
properties_1.defineReadOnly(abstract_provider_1.Provider, 'inherits', properties_1.inheritable(abstract_provider_1.Provider));


/***/ }),

/***/ 88887:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var base_provider_1 = __webpack_require__(669404);
var bytes_1 = __webpack_require__(45901);
var properties_1 = __webpack_require__(180083);
var web_1 = __webpack_require__(412163);
var errors = __importStar(__webpack_require__(766286));
///////////////////////////////
// The transaction has already been sanitized by the calls in Provider
function getTransactionString(transaction) {
    var result = [];
    for (var key in transaction) {
        if (transaction[key] == null) {
            continue;
        }
        var value = bytes_1.hexlify(transaction[key]);
        if ({ gasLimit: true, gasPrice: true, nonce: true, value: true }[key]) {
            value = bytes_1.hexStripZeros(value);
        }
        result.push(key + '=' + value);
    }
    return result.join('&');
}
function getResult(result) {
    // getLogs, getHistory have weird success responses
    if (result.status == 0 && (result.message === 'No records found' || result.message === 'No transactions found')) {
        return result.result;
    }
    if (result.status != 1 || result.message != 'OK') {
        // @TODO: not any
        var error = new Error('invalid response');
        error.result = JSON.stringify(result);
        throw error;
    }
    return result.result;
}
function getJsonResult(result) {
    if (result.jsonrpc != '2.0') {
        // @TODO: not any
        var error = new Error('invalid response');
        error.result = JSON.stringify(result);
        throw error;
    }
    if (result.error) {
        // @TODO: not any
        var error = new Error(result.error.message || 'unknown error');
        if (result.error.code) {
            error.code = result.error.code;
        }
        if (result.error.data) {
            error.data = result.error.data;
        }
        throw error;
    }
    return result.result;
}
// The blockTag was normalized as a string by the Provider pre-perform operations
function checkLogTag(blockTag) {
    if (blockTag === 'pending') {
        throw new Error('pending not supported');
    }
    if (blockTag === 'latest') {
        return blockTag;
    }
    return parseInt(blockTag.substring(2), 16);
}
var EtherscanProvider = /** @class */ (function (_super) {
    __extends(EtherscanProvider, _super);
    function EtherscanProvider(network, apiKey) {
        var _this = _super.call(this, network) || this;
        errors.checkNew(_this, EtherscanProvider);
        var name = 'invalid';
        if (_this.network) {
            name = _this.network.name;
        }
        var baseUrl = null;
        switch (name) {
            case 'homestead':
                baseUrl = 'https://api.etherscan.io';
                break;
            case 'ropsten':
                baseUrl = 'https://api-ropsten.etherscan.io';
                break;
            case 'rinkeby':
                baseUrl = 'https://api-rinkeby.etherscan.io';
                break;
            case 'kovan':
                baseUrl = 'https://api-kovan.etherscan.io';
                break;
            case 'goerli':
                baseUrl = 'https://api-goerli.etherscan.io';
                break;
            default:
                throw new Error('unsupported network');
        }
        properties_1.defineReadOnly(_this, 'baseUrl', baseUrl);
        properties_1.defineReadOnly(_this, 'apiKey', apiKey);
        return _this;
    }
    EtherscanProvider.prototype.perform = function (method, params) {
        var _this = this;
        var url = this.baseUrl;
        var apiKey = '';
        if (this.apiKey) {
            apiKey += '&apikey=' + this.apiKey;
        }
        var get = function (url, procFunc) {
            return web_1.fetchJson(url, null, procFunc || getJsonResult).then(function (result) {
                _this.emit('debug', {
                    action: 'perform',
                    request: url,
                    response: result,
                    provider: _this
                });
                return result;
            });
        };
        switch (method) {
            case 'getBlockNumber':
                url += '/api?module=proxy&action=eth_blockNumber' + apiKey;
                return get(url);
            case 'getGasPrice':
                url += '/api?module=proxy&action=eth_gasPrice' + apiKey;
                return get(url);
            case 'getBalance':
                // Returns base-10 result
                url += '/api?module=account&action=balance&address=' + params.address;
                url += '&tag=' + params.blockTag + apiKey;
                return get(url, getResult);
            case 'getTransactionCount':
                url += '/api?module=proxy&action=eth_getTransactionCount&address=' + params.address;
                url += '&tag=' + params.blockTag + apiKey;
                return get(url);
            case 'getCode':
                url += '/api?module=proxy&action=eth_getCode&address=' + params.address;
                url += '&tag=' + params.blockTag + apiKey;
                return get(url, getJsonResult);
            case 'getStorageAt':
                url += '/api?module=proxy&action=eth_getStorageAt&address=' + params.address;
                url += '&position=' + params.position;
                url += '&tag=' + params.blockTag + apiKey;
                return get(url, getJsonResult);
            case 'sendTransaction':
                url += '/api?module=proxy&action=eth_sendRawTransaction&hex=' + params.signedTransaction;
                url += apiKey;
                return get(url).catch(function (error) {
                    if (error.responseText) {
                        // "Insufficient funds. The account you tried to send transaction from does not have enough funds. Required 21464000000000 and got: 0"
                        if (error.responseText.toLowerCase().indexOf('insufficient funds') >= 0) {
                            errors.throwError('insufficient funds', errors.INSUFFICIENT_FUNDS, {});
                        }
                        // "Transaction with the same hash was already imported."
                        if (error.responseText.indexOf('same hash was already imported') >= 0) {
                            errors.throwError('nonce has already been used', errors.NONCE_EXPIRED, {});
                        }
                        // "Transaction gas price is too low. There is another transaction with same nonce in the queue. Try increasing the gas price or incrementing the nonce."
                        if (error.responseText.indexOf('another transaction with same nonce') >= 0) {
                            errors.throwError('replacement fee too low', errors.REPLACEMENT_UNDERPRICED, {});
                        }
                    }
                    throw error;
                });
            case 'getBlock':
                if (params.blockTag) {
                    url += '/api?module=proxy&action=eth_getBlockByNumber&tag=' + params.blockTag;
                    if (params.includeTransactions) {
                        url += '&boolean=true';
                    }
                    else {
                        url += '&boolean=false';
                    }
                    url += apiKey;
                    return get(url);
                }
                throw new Error('getBlock by blockHash not implmeneted');
            case 'getTransaction':
                url += '/api?module=proxy&action=eth_getTransactionByHash&txhash=' + params.transactionHash;
                url += apiKey;
                return get(url);
            case 'getTransactionReceipt':
                url += '/api?module=proxy&action=eth_getTransactionReceipt&txhash=' + params.transactionHash;
                url += apiKey;
                return get(url);
            case 'call': {
                var transaction = getTransactionString(params.transaction);
                if (transaction) {
                    transaction = '&' + transaction;
                }
                url += '/api?module=proxy&action=eth_call' + transaction;
                //url += '&tag=' + params.blockTag + apiKey;
                if (params.blockTag !== 'latest') {
                    throw new Error('EtherscanProvider does not support blockTag for call');
                }
                url += apiKey;
                return get(url);
            }
            case 'estimateGas': {
                var transaction = getTransactionString(params.transaction);
                if (transaction) {
                    transaction = '&' + transaction;
                }
                url += '/api?module=proxy&action=eth_estimateGas&' + transaction;
                url += apiKey;
                return get(url);
            }
            case 'getLogs':
                url += '/api?module=logs&action=getLogs';
                try {
                    if (params.filter.fromBlock) {
                        url += '&fromBlock=' + checkLogTag(params.filter.fromBlock);
                    }
                    if (params.filter.toBlock) {
                        url += '&toBlock=' + checkLogTag(params.filter.toBlock);
                    }
                    if (params.filter.blockHash) {
                        try {
                            errors.throwError("Etherscan does not support blockHash filters", errors.UNSUPPORTED_OPERATION, {
                                operation: "getLogs(blockHash)"
                            });
                        }
                        catch (error) {
                            return Promise.reject(error);
                        }
                    }
                    if (params.filter.address) {
                        url += '&address=' + params.filter.address;
                    }
                    // @TODO: We can handle slightly more complicated logs using the logs API
                    if (params.filter.topics && params.filter.topics.length > 0) {
                        if (params.filter.topics.length > 1) {
                            throw new Error('unsupported topic format');
                        }
                        var topic0 = params.filter.topics[0];
                        if (typeof (topic0) !== 'string' || topic0.length !== 66) {
                            throw new Error('unsupported topic0 format');
                        }
                        url += '&topic0=' + topic0;
                    }
                }
                catch (error) {
                    return Promise.reject(error);
                }
                url += apiKey;
                var self = this;
                return get(url, getResult).then(function (logs) {
                    var txs = {};
                    var seq = Promise.resolve();
                    logs.forEach(function (log) {
                        seq = seq.then(function () {
                            if (log.blockHash != null) {
                                return null;
                            }
                            log.blockHash = txs[log.transactionHash];
                            if (log.blockHash == null) {
                                return self.getTransaction(log.transactionHash).then(function (tx) {
                                    txs[log.transactionHash] = tx.blockHash;
                                    log.blockHash = tx.blockHash;
                                    return null;
                                });
                            }
                            return null;
                        });
                    });
                    return seq.then(function () {
                        return logs;
                    });
                });
            case 'getEtherPrice':
                if (this.network.name !== 'homestead') {
                    return Promise.resolve(0.0);
                }
                url += '/api?module=stats&action=ethprice';
                url += apiKey;
                return get(url, getResult).then(function (result) {
                    return parseFloat(result.ethusd);
                });
            default:
                break;
        }
        return _super.prototype.perform.call(this, method, params);
    };
    // @TODO: Allow startBlock and endBlock to be Promises
    EtherscanProvider.prototype.getHistory = function (addressOrName, startBlock, endBlock) {
        var _this = this;
        var url = this.baseUrl;
        var apiKey = '';
        if (this.apiKey) {
            apiKey += '&apikey=' + this.apiKey;
        }
        if (startBlock == null) {
            startBlock = 0;
        }
        if (endBlock == null) {
            endBlock = 99999999;
        }
        return this.resolveName(addressOrName).then(function (address) {
            url += '/api?module=account&action=txlist&address=' + address;
            url += '&startblock=' + startBlock;
            url += '&endblock=' + endBlock;
            url += '&sort=asc' + apiKey;
            return web_1.fetchJson(url, null, getResult).then(function (result) {
                _this.emit('debug', {
                    action: 'getHistory',
                    request: url,
                    response: result,
                    provider: _this
                });
                var output = [];
                result.forEach(function (tx) {
                    ['contractAddress', 'to'].forEach(function (key) {
                        if (tx[key] == '') {
                            delete tx[key];
                        }
                    });
                    if (tx.creates == null && tx.contractAddress != null) {
                        tx.creates = tx.contractAddress;
                    }
                    var item = base_provider_1.BaseProvider.checkTransactionResponse(tx);
                    if (tx.timeStamp) {
                        item.timestamp = parseInt(tx.timeStamp);
                    }
                    output.push(item);
                });
                return output;
            });
        });
    };
    return EtherscanProvider;
}(base_provider_1.BaseProvider));
exports.EtherscanProvider = EtherscanProvider;


/***/ }),

/***/ 552319:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var base_provider_1 = __webpack_require__(669404);
var errors = __importStar(__webpack_require__(766286));
// Returns:
//  - true is all networks match
//  - false if any network is null
//  - throws if any 2 networks do not match
function checkNetworks(networks) {
    var result = true;
    var check = null;
    networks.forEach(function (network) {
        // Null
        if (network == null) {
            result = false;
            return;
        }
        // Have nothing to compre to yet
        if (check == null) {
            check = network;
            return;
        }
        // Matches!
        if (check.name === network.name &&
            check.chainId === network.chainId &&
            ((check.ensAddress === network.ensAddress) ||
                (check.ensAddress == null && network.ensAddress == null))) {
            return;
        }
        errors.throwError('provider mismatch', errors.INVALID_ARGUMENT, { arg: 'networks', value: networks });
    });
    return result;
}
var FallbackProvider = /** @class */ (function (_super) {
    __extends(FallbackProvider, _super);
    function FallbackProvider(providers) {
        var _this = this;
        if (providers.length === 0) {
            throw new Error('no providers');
        }
        // All networks are ready, we can know the network for certain
        var ready = checkNetworks(providers.map(function (p) { return p.network; }));
        if (ready) {
            _this = _super.call(this, providers[0].network) || this;
        }
        else {
            // The network won't be known until all child providers know
            var ready_1 = Promise.all(providers.map(function (p) { return p.getNetwork(); })).then(function (networks) {
                if (!checkNetworks(networks)) {
                    errors.throwError('getNetwork returned null', errors.UNKNOWN_ERROR, {});
                }
                return networks[0];
            });
            _this = _super.call(this, ready_1) || this;
        }
        errors.checkNew(_this, FallbackProvider);
        // Preserve a copy, so we don't get mutated
        _this._providers = providers.slice(0);
        return _this;
    }
    Object.defineProperty(FallbackProvider.prototype, "providers", {
        get: function () {
            // Return a copy, so we don't get mutated
            return this._providers.slice(0);
        },
        enumerable: true,
        configurable: true
    });
    FallbackProvider.prototype.perform = function (method, params) {
        // Creates a copy of the providers array
        var providers = this.providers;
        return new Promise(function (resolve, reject) {
            var firstError = null;
            function next() {
                if (!providers.length) {
                    reject(firstError);
                    return;
                }
                var provider = providers.shift();
                provider.perform(method, params).then(function (result) {
                    return resolve(result);
                }).catch(function (error) {
                    if (!firstError) {
                        firstError = error;
                    }
                    setTimeout(next, 0);
                });
            }
            next();
        });
    };
    return FallbackProvider;
}(base_provider_1.BaseProvider));
exports.FallbackProvider = FallbackProvider;


/***/ }),

/***/ 314047:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var abstract_provider_1 = __webpack_require__(155514);
exports.Provider = abstract_provider_1.Provider;
var base_provider_1 = __webpack_require__(669404);
exports.BaseProvider = base_provider_1.BaseProvider;
var etherscan_provider_1 = __webpack_require__(88887);
exports.EtherscanProvider = etherscan_provider_1.EtherscanProvider;
var fallback_provider_1 = __webpack_require__(552319);
exports.FallbackProvider = fallback_provider_1.FallbackProvider;
var ipc_provider_1 = __webpack_require__(57963);
exports.IpcProvider = ipc_provider_1.IpcProvider;
var infura_provider_1 = __webpack_require__(233678);
exports.InfuraProvider = infura_provider_1.InfuraProvider;
var json_rpc_provider_1 = __webpack_require__(462160);
exports.JsonRpcProvider = json_rpc_provider_1.JsonRpcProvider;
exports.JsonRpcSigner = json_rpc_provider_1.JsonRpcSigner;
var web3_provider_1 = __webpack_require__(866198);
exports.Web3Provider = web3_provider_1.Web3Provider;


/***/ }),

/***/ 233678:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var json_rpc_provider_1 = __webpack_require__(462160);
var bytes_1 = __webpack_require__(45901);
var networks_1 = __webpack_require__(796294);
var properties_1 = __webpack_require__(180083);
var errors = __importStar(__webpack_require__(766286));
var defaultProjectId = "7d0d81d0919f4f05b9ab6634be01ee73";
var InfuraProvider = /** @class */ (function (_super) {
    __extends(InfuraProvider, _super);
    function InfuraProvider(network, projectId) {
        var _this = this;
        var standard = networks_1.getNetwork((network == null) ? 'homestead' : network);
        if (projectId == null) {
            projectId = defaultProjectId;
        }
        var host = null;
        switch (standard.name) {
            case 'homestead':
                host = 'mainnet.infura.io';
                break;
            case 'ropsten':
                host = 'ropsten.infura.io';
                break;
            case 'rinkeby':
                host = 'rinkeby.infura.io';
                break;
            case 'goerli':
                host = 'goerli.infura.io';
                break;
            case 'kovan':
                host = 'kovan.infura.io';
                break;
            default:
                errors.throwError('unsupported network', errors.INVALID_ARGUMENT, {
                    argument: "network",
                    value: network
                });
        }
        // New-style Project ID
        if (bytes_1.isHexString("0x" + projectId, 16)) {
            _this = _super.call(this, 'https://' + host + '/v3/' + projectId, standard) || this;
            properties_1.defineReadOnly(_this, 'apiAccessToken', null);
            properties_1.defineReadOnly(_this, 'projectId', projectId);
            // Legacy API Access Token
        }
        else {
            errors.warn("The legacy INFURA apiAccesToken API is deprecated; please upgrade to a Project ID instead (see INFURA dshboard; https://infura.io)");
            _this = _super.call(this, 'https://' + host + '/' + projectId, standard) || this;
            properties_1.defineReadOnly(_this, 'apiAccessToken', projectId);
            properties_1.defineReadOnly(_this, 'projectId', null);
        }
        errors.checkNew(_this, InfuraProvider);
        return _this;
    }
    InfuraProvider.prototype._startPending = function () {
        errors.warn('WARNING: INFURA does not support pending filters');
    };
    InfuraProvider.prototype.getSigner = function (address) {
        return errors.throwError('INFURA does not support signing', errors.UNSUPPORTED_OPERATION, { operation: 'getSigner' });
    };
    InfuraProvider.prototype.listAccounts = function () {
        return Promise.resolve([]);
    };
    return InfuraProvider;
}(json_rpc_provider_1.JsonRpcProvider));
exports.InfuraProvider = InfuraProvider;


/***/ }),

/***/ 57963:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var net_1 = __importDefault(__webpack_require__(411631));
var json_rpc_provider_1 = __webpack_require__(462160);
var properties_1 = __webpack_require__(180083);
var errors = __importStar(__webpack_require__(766286));
var IpcProvider = /** @class */ (function (_super) {
    __extends(IpcProvider, _super);
    function IpcProvider(path, network) {
        var _this = this;
        if (path == null) {
            errors.throwError('missing path', errors.MISSING_ARGUMENT, {
                argument: 'path'
            });
        }
        _this = _super.call(this, 'ipc://' + path, network) || this;
        errors.checkNew(_this, IpcProvider);
        properties_1.defineReadOnly(_this, 'path', path);
        return _this;
    }
    // @TODO: Create a connection to the IPC path and use filters instead of polling for block
    IpcProvider.prototype.send = function (method, params) {
        // This method is very simple right now. We create a new socket
        // connection each time, which may be slower, but the main
        // advantage we are aiming for now is security. This simplifies
        // multiplexing requests (since we do not need to multiplex).
        var _this = this;
        var payload = JSON.stringify({
            method: method,
            params: params,
            id: 42,
            jsonrpc: "2.0"
        });
        return new Promise(function (resolve, reject) {
            var response = Buffer.alloc(0);
            var stream = net_1.default.connect(_this.path);
            stream.on('data', function (data) {
                response = Buffer.concat([response, data]);
            });
            stream.on("end", function () {
                try {
                    resolve(JSON.parse(response.toString('utf8')).result);
                    // @TODO: Better pull apart the error
                    stream.destroy();
                }
                catch (error) {
                    reject(error);
                    stream.destroy();
                }
            });
            stream.on('error', function (error) {
                reject(error);
                stream.destroy();
            });
            stream.write(payload);
            stream.end();
        });
    };
    return IpcProvider;
}(json_rpc_provider_1.JsonRpcProvider));
exports.IpcProvider = IpcProvider;


/***/ }),

/***/ 462160:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
// See: https://github.com/ethereum/wiki/wiki/JSON-RPC
var base_provider_1 = __webpack_require__(669404);
var abstract_signer_1 = __webpack_require__(625419);
var errors = __importStar(__webpack_require__(766286));
var address_1 = __webpack_require__(215894);
var bytes_1 = __webpack_require__(45901);
var networks_1 = __webpack_require__(796294);
var properties_1 = __webpack_require__(180083);
var utf8_1 = __webpack_require__(871254);
var web_1 = __webpack_require__(412163);
function timer(timeout) {
    return new Promise(function (resolve) {
        setTimeout(function () {
            resolve();
        }, timeout);
    });
}
function getResult(payload) {
    if (payload.error) {
        // @TODO: not any
        var error = new Error(payload.error.message);
        error.code = payload.error.code;
        error.data = payload.error.data;
        throw error;
    }
    return payload.result;
}
function getLowerCase(value) {
    if (value) {
        return value.toLowerCase();
    }
    return value;
}
var _constructorGuard = {};
// Some environments (Trust Wallet and company) use a global map
// to track JSON-RPC ID, so we try to keep IDs unique across all
// connections. See #489.
var _nextId = 42;
var JsonRpcSigner = /** @class */ (function (_super) {
    __extends(JsonRpcSigner, _super);
    function JsonRpcSigner(constructorGuard, provider, addressOrIndex) {
        var _this = _super.call(this) || this;
        errors.checkNew(_this, JsonRpcSigner);
        if (constructorGuard !== _constructorGuard) {
            throw new Error('do not call the JsonRpcSigner constructor directly; use provider.getSigner');
        }
        properties_1.defineReadOnly(_this, 'provider', provider);
        // Statically attach to a given address
        if (addressOrIndex) {
            if (typeof (addressOrIndex) === 'string') {
                properties_1.defineReadOnly(_this, '_address', address_1.getAddress(addressOrIndex));
            }
            else if (typeof (addressOrIndex) === 'number') {
                properties_1.defineReadOnly(_this, '_index', addressOrIndex);
            }
            else {
                errors.throwError('invalid address or index', errors.INVALID_ARGUMENT, { argument: 'addressOrIndex', value: addressOrIndex });
            }
        }
        else {
            properties_1.defineReadOnly(_this, '_index', 0);
        }
        return _this;
    }
    JsonRpcSigner.prototype.getAddress = function () {
        var _this = this;
        if (this._address) {
            return Promise.resolve(this._address);
        }
        return this.provider.send('eth_accounts', []).then(function (accounts) {
            if (accounts.length <= _this._index) {
                errors.throwError('unknown account #' + _this._index, errors.UNSUPPORTED_OPERATION, { operation: 'getAddress' });
            }
            _this._address = address_1.getAddress(accounts[_this._index]);
            return _this._address;
        });
    };
    JsonRpcSigner.prototype.getBalance = function (blockTag) {
        return this.provider.getBalance(this.getAddress(), blockTag);
    };
    JsonRpcSigner.prototype.getTransactionCount = function (blockTag) {
        return this.provider.getTransactionCount(this.getAddress(), blockTag);
    };
    JsonRpcSigner.prototype.sendUncheckedTransaction = function (transaction) {
        var _this = this;
        transaction = properties_1.shallowCopy(transaction);
        var fromAddress = this.getAddress().then(function (address) {
            if (address) {
                address = address.toLowerCase();
            }
            return address;
        });
        // The JSON-RPC for eth_sendTransaction uses 90000 gas; if the user
        // wishes to use this, it is easy to specify explicitly, otherwise
        // we look it up for them.
        if (transaction.gasLimit == null) {
            var estimate = properties_1.shallowCopy(transaction);
            estimate.from = fromAddress;
            transaction.gasLimit = this.provider.estimateGas(estimate);
        }
        return Promise.all([
            properties_1.resolveProperties(transaction),
            fromAddress
        ]).then(function (results) {
            var tx = results[0];
            var hexTx = JsonRpcProvider.hexlifyTransaction(tx);
            hexTx.from = results[1];
            return _this.provider.send('eth_sendTransaction', [hexTx]).then(function (hash) {
                return hash;
            }, function (error) {
                if (error.responseText) {
                    // See: JsonRpcProvider.sendTransaction (@TODO: Expose a ._throwError??)
                    if (error.responseText.indexOf('insufficient funds') >= 0) {
                        errors.throwError('insufficient funds', errors.INSUFFICIENT_FUNDS, {
                            transaction: tx
                        });
                    }
                    if (error.responseText.indexOf('nonce too low') >= 0) {
                        errors.throwError('nonce has already been used', errors.NONCE_EXPIRED, {
                            transaction: tx
                        });
                    }
                    if (error.responseText.indexOf('replacement transaction underpriced') >= 0) {
                        errors.throwError('replacement fee too low', errors.REPLACEMENT_UNDERPRICED, {
                            transaction: tx
                        });
                    }
                }
                throw error;
            });
        });
    };
    JsonRpcSigner.prototype.sendTransaction = function (transaction) {
        var _this = this;
        return this.sendUncheckedTransaction(transaction).then(function (hash) {
            return web_1.poll(function () {
                return _this.provider.getTransaction(hash).then(function (tx) {
                    if (tx === null) {
                        return undefined;
                    }
                    return _this.provider._wrapTransaction(tx, hash);
                });
            }, { fastRetry: 250, onceBlock: _this.provider }).catch(function (error) {
                error.transactionHash = hash;
                throw error;
            });
        });
    };
    JsonRpcSigner.prototype.signMessage = function (message) {
        var _this = this;
        var data = ((typeof (message) === 'string') ? utf8_1.toUtf8Bytes(message) : message);
        return this.getAddress().then(function (address) {
            // https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign
            return _this.provider.send('eth_sign', [address.toLowerCase(), bytes_1.hexlify(data)]);
        });
    };
    JsonRpcSigner.prototype.unlock = function (password) {
        var provider = this.provider;
        return this.getAddress().then(function (address) {
            return provider.send('personal_unlockAccount', [address.toLowerCase(), password, null]);
        });
    };
    return JsonRpcSigner;
}(abstract_signer_1.Signer));
exports.JsonRpcSigner = JsonRpcSigner;
var allowedTransactionKeys = {
    chainId: true, data: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true
};
var JsonRpcProvider = /** @class */ (function (_super) {
    __extends(JsonRpcProvider, _super);
    function JsonRpcProvider(url, network) {
        var _this = this;
        // One parameter, but it is a network name, so swap it with the URL
        if (typeof (url) === 'string') {
            if (network === null && networks_1.getNetwork(url)) {
                network = url;
                url = null;
            }
        }
        if (network) {
            // The network has been specified explicitly, we can use it
            _this = _super.call(this, network) || this;
        }
        else {
            // The network is unknown, query the JSON-RPC for it
            var ready = new Promise(function (resolve, reject) {
                setTimeout(function () {
                    _this.send('net_version', []).then(function (result) {
                        return resolve(networks_1.getNetwork(parseInt(result)));
                    }).catch(function (error) {
                        reject(error);
                    });
                });
            });
            _this = _super.call(this, ready) || this;
        }
        errors.checkNew(_this, JsonRpcProvider);
        // Default URL
        if (!url) {
            url = 'http://localhost:8545';
        }
        if (typeof (url) === 'string') {
            _this.connection = {
                url: url
            };
        }
        else {
            _this.connection = url;
        }
        return _this;
    }
    JsonRpcProvider.prototype.getSigner = function (addressOrIndex) {
        return new JsonRpcSigner(_constructorGuard, this, addressOrIndex);
    };
    JsonRpcProvider.prototype.listAccounts = function () {
        return this.send('eth_accounts', []).then(function (accounts) {
            return accounts.map(function (a) { return address_1.getAddress(a); });
        });
    };
    JsonRpcProvider.prototype.send = function (method, params) {
        var _this = this;
        var request = {
            method: method,
            params: params,
            id: (_nextId++),
            jsonrpc: "2.0"
        };
        return web_1.fetchJson(this.connection, JSON.stringify(request), getResult).then(function (result) {
            _this.emit('debug', {
                action: 'send',
                request: request,
                response: result,
                provider: _this
            });
            return result;
        });
    };
    JsonRpcProvider.prototype.perform = function (method, params) {
        switch (method) {
            case 'getBlockNumber':
                return this.send('eth_blockNumber', []);
            case 'getGasPrice':
                return this.send('eth_gasPrice', []);
            case 'getBalance':
                return this.send('eth_getBalance', [getLowerCase(params.address), params.blockTag]);
            case 'getTransactionCount':
                return this.send('eth_getTransactionCount', [getLowerCase(params.address), params.blockTag]);
            case 'getCode':
                return this.send('eth_getCode', [getLowerCase(params.address), params.blockTag]);
            case 'getStorageAt':
                return this.send('eth_getStorageAt', [getLowerCase(params.address), params.position, params.blockTag]);
            case 'sendTransaction':
                return this.send('eth_sendRawTransaction', [params.signedTransaction]).catch(function (error) {
                    if (error.responseText) {
                        // "insufficient funds for gas * price + value"
                        if (error.responseText.indexOf('insufficient funds') > 0) {
                            errors.throwError('insufficient funds', errors.INSUFFICIENT_FUNDS, {});
                        }
                        // "nonce too low"
                        if (error.responseText.indexOf('nonce too low') > 0) {
                            errors.throwError('nonce has already been used', errors.NONCE_EXPIRED, {});
                        }
                        // "replacement transaction underpriced"
                        if (error.responseText.indexOf('replacement transaction underpriced') > 0) {
                            errors.throwError('replacement fee too low', errors.REPLACEMENT_UNDERPRICED, {});
                        }
                    }
                    throw error;
                });
            case 'getBlock':
                if (params.blockTag) {
                    return this.send('eth_getBlockByNumber', [params.blockTag, !!params.includeTransactions]);
                }
                else if (params.blockHash) {
                    return this.send('eth_getBlockByHash', [params.blockHash, !!params.includeTransactions]);
                }
                return Promise.reject(new Error('invalid block tag or block hash'));
            case 'getTransaction':
                return this.send('eth_getTransactionByHash', [params.transactionHash]);
            case 'getTransactionReceipt':
                return this.send('eth_getTransactionReceipt', [params.transactionHash]);
            case 'call':
                return this.send('eth_call', [JsonRpcProvider.hexlifyTransaction(params.transaction, { from: true }), params.blockTag]);
            case 'estimateGas':
                return this.send('eth_estimateGas', [JsonRpcProvider.hexlifyTransaction(params.transaction, { from: true })]);
            case 'getLogs':
                if (params.filter && params.filter.address != null) {
                    params.filter.address = getLowerCase(params.filter.address);
                }
                return this.send('eth_getLogs', [params.filter]);
            default:
                break;
        }
        errors.throwError(method + ' not implemented', errors.NOT_IMPLEMENTED, { operation: method });
        return null;
    };
    JsonRpcProvider.prototype._startPending = function () {
        if (this._pendingFilter != null) {
            return;
        }
        var self = this;
        var pendingFilter = this.send('eth_newPendingTransactionFilter', []);
        this._pendingFilter = pendingFilter;
        pendingFilter.then(function (filterId) {
            function poll() {
                self.send('eth_getFilterChanges', [filterId]).then(function (hashes) {
                    if (self._pendingFilter != pendingFilter) {
                        return null;
                    }
                    var seq = Promise.resolve();
                    hashes.forEach(function (hash) {
                        // @TODO: This should be garbage collected at some point... How? When?
                        self._emitted['t:' + hash.toLowerCase()] = 'pending';
                        seq = seq.then(function () {
                            return self.getTransaction(hash).then(function (tx) {
                                self.emit('pending', tx);
                                return null;
                            });
                        });
                    });
                    return seq.then(function () {
                        return timer(1000);
                    });
                }).then(function () {
                    if (self._pendingFilter != pendingFilter) {
                        self.send('eth_uninstallFilter', [filterId]);
                        return;
                    }
                    setTimeout(function () { poll(); }, 0);
                    return null;
                }).catch(function (error) { });
            }
            poll();
            return filterId;
        }).catch(function (error) { });
    };
    JsonRpcProvider.prototype._stopPending = function () {
        this._pendingFilter = null;
    };
    // Convert an ethers.js transaction into a JSON-RPC transaction
    //  - gasLimit => gas
    //  - All values hexlified
    //  - All numeric values zero-striped
    // NOTE: This allows a TransactionRequest, but all values should be resolved
    //       before this is called
    JsonRpcProvider.hexlifyTransaction = function (transaction, allowExtra) {
        // Check only allowed properties are given
        var allowed = properties_1.shallowCopy(allowedTransactionKeys);
        if (allowExtra) {
            for (var key in allowExtra) {
                if (allowExtra[key]) {
                    allowed[key] = true;
                }
            }
        }
        properties_1.checkProperties(transaction, allowed);
        var result = {};
        // Some nodes (INFURA ropsten; INFURA mainnet is fine) don't like leading zeros.
        ['gasLimit', 'gasPrice', 'nonce', 'value'].forEach(function (key) {
            if (transaction[key] == null) {
                return;
            }
            var value = bytes_1.hexStripZeros(bytes_1.hexlify(transaction[key]));
            if (key === 'gasLimit') {
                key = 'gas';
            }
            result[key] = value;
        });
        ['from', 'to', 'data'].forEach(function (key) {
            if (transaction[key] == null) {
                return;
            }
            result[key] = bytes_1.hexlify(transaction[key]);
        });
        return result;
    };
    return JsonRpcProvider;
}(base_provider_1.BaseProvider));
exports.JsonRpcProvider = JsonRpcProvider;


/***/ }),

/***/ 866198:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var json_rpc_provider_1 = __webpack_require__(462160);
var properties_1 = __webpack_require__(180083);
var errors = __importStar(__webpack_require__(766286));
/*
@TODO
utils.defineProperty(Web3Signer, 'onchange', {

});

*/
var _nextId = 42;
var Web3Provider = /** @class */ (function (_super) {
    __extends(Web3Provider, _super);
    function Web3Provider(web3Provider, network) {
        var _this = 
        // HTTP has a host; IPC has a path.
        _super.call(this, web3Provider.host || web3Provider.path || '', network) || this;
        errors.checkNew(_this, Web3Provider);
        if (web3Provider) {
            if (web3Provider.sendAsync) {
                _this._sendAsync = web3Provider.sendAsync.bind(web3Provider);
            }
            else if (web3Provider.send) {
                _this._sendAsync = web3Provider.send.bind(web3Provider);
            }
        }
        if (!web3Provider || !_this._sendAsync) {
            errors.throwError('invalid web3Provider', errors.INVALID_ARGUMENT, { arg: 'web3Provider', value: web3Provider });
        }
        properties_1.defineReadOnly(_this, '_web3Provider', web3Provider);
        // @TODO: In v5 remove the above definition; only this one is needed
        properties_1.defineReadOnly(_this, 'provider', web3Provider);
        return _this;
    }
    Web3Provider.prototype.send = function (method, params) {
        var _this = this;
        // Metamask complains about eth_sign (and on some versions hangs)
        if (method == 'eth_sign' && this._web3Provider.isMetaMask) {
            // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign
            method = 'personal_sign';
            params = [params[1], params[0]];
        }
        return new Promise(function (resolve, reject) {
            var request = {
                method: method,
                params: params,
                id: (_nextId++),
                jsonrpc: "2.0"
            };
            _this._sendAsync(request, function (error, result) {
                if (error) {
                    reject(error);
                    return;
                }
                if (result.error) {
                    // @TODO: not any
                    var error_1 = new Error(result.error.message);
                    error_1.code = result.error.code;
                    error_1.data = result.error.data;
                    reject(error_1);
                    return;
                }
                resolve(result.result);
            });
        });
    };
    return Web3Provider;
}(json_rpc_provider_1.JsonRpcProvider));
exports.Web3Provider = Web3Provider;


/***/ }),

/***/ 485758:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var bytes_1 = __webpack_require__(45901);
///////////////////////////////
/*
declare class Buffer implements ArrayLike<number> {
    constructor(data: any, encoding?: string);
    toString(encoding?: string): any;
    [key: number]: number;
    length: number;
}
*/
function decode(textData) {
    return bytes_1.arrayify(new Uint8Array(Buffer.from(textData, 'base64')));
}
exports.decode = decode;
;
function encode(data) {
    return Buffer.from(bytes_1.arrayify(data)).toString('base64');
}
exports.encode = encode;


/***/ }),

/***/ 593423:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

/**
 * var basex = require('base-x');
 *
 * This implementation is heavily based on base-x. The main reason to
 * deviate was to prevent the dependency of Buffer.
 *
 * Contributors:
 *
 * base-x encoding
 * Forked from https://github.com/cryptocoinjs/bs58
 * Originally written by Mike Hearn for BitcoinJ
 * Copyright (c) 2011 Google Inc
 * Ported to JavaScript by Stefan Thomas
 * Merged Buffer refactorings from base58-native by Stephen Pair
 * Copyright (c) 2013 BitPay Inc
 *
 * The MIT License (MIT)
 *
 * Copyright base-x contributors (c) 2016
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.

 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
 * IN THE SOFTWARE.
 *
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
var bytes_1 = __webpack_require__(45901);
var properties_1 = __webpack_require__(180083);
var BaseX = /** @class */ (function () {
    function BaseX(alphabet) {
        properties_1.defineReadOnly(this, "alphabet", alphabet);
        properties_1.defineReadOnly(this, "base", alphabet.length);
        properties_1.defineReadOnly(this, "_alphabetMap", {});
        properties_1.defineReadOnly(this, "_leader", alphabet.charAt(0));
        // pre-compute lookup table
        for (var i = 0; i < alphabet.length; i++) {
            this._alphabetMap[alphabet.charAt(i)] = i;
        }
    }
    BaseX.prototype.encode = function (value) {
        var source = bytes_1.arrayify(value);
        if (source.length === 0) {
            return '';
        }
        var digits = [0];
        for (var i = 0; i < source.length; ++i) {
            var carry = source[i];
            for (var j = 0; j < digits.length; ++j) {
                carry += digits[j] << 8;
                digits[j] = carry % this.base;
                carry = (carry / this.base) | 0;
            }
            while (carry > 0) {
                digits.push(carry % this.base);
                carry = (carry / this.base) | 0;
            }
        }
        var string = '';
        // deal with leading zeros
        for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) {
            string += this._leader;
        }
        // convert digits to a string
        for (var q = digits.length - 1; q >= 0; --q) {
            string += this.alphabet[digits[q]];
        }
        return string;
    };
    BaseX.prototype.decode = function (value) {
        if (typeof (value) !== 'string') {
            throw new TypeError('Expected String');
        }
        var bytes = [];
        if (value.length === 0) {
            return new Uint8Array(bytes);
        }
        bytes.push(0);
        for (var i = 0; i < value.length; i++) {
            var byte = this._alphabetMap[value[i]];
            if (byte === undefined) {
                throw new Error('Non-base' + this.base + ' character');
            }
            var carry = byte;
            for (var j = 0; j < bytes.length; ++j) {
                carry += bytes[j] * this.base;
                bytes[j] = carry & 0xff;
                carry >>= 8;
            }
            while (carry > 0) {
                bytes.push(carry & 0xff);
                carry >>= 8;
            }
        }
        // deal with leading zeros
        for (var k = 0; value[k] === this._leader && k < value.length - 1; ++k) {
            bytes.push(0);
        }
        return bytes_1.arrayify(new Uint8Array(bytes.reverse()));
    };
    return BaseX;
}());
exports.BaseX = BaseX;
var Base32 = new BaseX("abcdefghijklmnopqrstuvwxyz234567");
exports.Base32 = Base32;
var Base58 = new BaseX("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");
exports.Base58 = Base58;
//console.log(Base58.decode("Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj"))
//console.log(Base58.encode(Base58.decode("Qmd2V777o5XvJbYMeMb8k2nU5f8d3ciUQ5YpYuWhzv8iDj")))


/***/ }),

/***/ 430319:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var errors = __importStar(__webpack_require__(766286));
var bytes_1 = __webpack_require__(45901);
var utf8_1 = __webpack_require__(871254);
var keccak256_1 = __webpack_require__(914622);
///////////////////////////////
var Zeros = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]);
var Partition = new RegExp("^((.*)\\.)?([^.]+)$");
var UseSTD3ASCIIRules = new RegExp("^[a-z0-9.-]*$");
function namehash(name) {
    if (typeof (name) !== 'string') {
        errors.throwError('invalid address - ' + String(name), errors.INVALID_ARGUMENT, {
            argument: 'name',
            value: name
        });
    }
    name = name.toLowerCase();
    // Supporting the full UTF-8 space requires additional (and large)
    // libraries, so for now we simply do not support them.
    // It should be fairly easy in the future to support systems with
    // String.normalize, but that is future work.
    if (!name.match(UseSTD3ASCIIRules)) {
        errors.throwError('contains invalid UseSTD3ASCIIRules characters', errors.INVALID_ARGUMENT, {
            argument: 'name',
            value: name
        });
    }
    var result = Zeros;
    while (name.length) {
        var partition = name.match(Partition);
        var label = utf8_1.toUtf8Bytes(partition[3]);
        result = keccak256_1.keccak256(bytes_1.concat([result, keccak256_1.keccak256(label)]));
        name = partition[2] || '';
    }
    return bytes_1.hexlify(result);
}
exports.namehash = namehash;
function id(text) {
    return keccak256_1.keccak256(utf8_1.toUtf8Bytes(text));
}
exports.id = id;
function hashMessage(message) {
    return keccak256_1.keccak256(bytes_1.concat([
        utf8_1.toUtf8Bytes('\x19Ethereum Signed Message:\n'),
        utf8_1.toUtf8Bytes(String(message.length)),
        ((typeof (message) === 'string') ? utf8_1.toUtf8Bytes(message) : message)
    ]));
}
exports.hashMessage = hashMessage;


/***/ }),

/***/ 785664:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
// See: https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki
// See: https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
var errors = __importStar(__webpack_require__(766286));
// The English language word list.
// For additional word lists, please see /src.tc/wordlists/
var lang_en_1 = __webpack_require__(77894);
// Automatically register English?
//import { register } from '../wordlists/wordlist';
//register(langEn);
var basex_1 = __webpack_require__(593423);
var bytes_1 = __webpack_require__(45901);
var bignumber_1 = __webpack_require__(661895);
var utf8_1 = __webpack_require__(871254);
var pbkdf2_1 = __webpack_require__(920982);
var hmac_1 = __webpack_require__(74858);
var properties_1 = __webpack_require__(180083);
var secp256k1_1 = __webpack_require__(893672);
var sha2_1 = __webpack_require__(231275);
var N = bignumber_1.bigNumberify("0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141");
// "Bitcoin seed"
var MasterSecret = utf8_1.toUtf8Bytes('Bitcoin seed');
var HardenedBit = 0x80000000;
// Returns a byte with the MSB bits set
function getUpperMask(bits) {
    return ((1 << bits) - 1) << (8 - bits);
}
// Returns a byte with the LSB bits set
function getLowerMask(bits) {
    return (1 << bits) - 1;
}
function bytes32(value) {
    return bytes_1.hexZeroPad(bytes_1.hexlify(value), 32);
}
function base58check(data) {
    var checksum = bytes_1.hexDataSlice(sha2_1.sha256(sha2_1.sha256(data)), 0, 4);
    return basex_1.Base58.encode(bytes_1.concat([data, checksum]));
}
var _constructorGuard = {};
exports.defaultPath = "m/44'/60'/0'/0/0";
var HDNode = /** @class */ (function () {
    /**
     *  This constructor should not be called directly.
     *
     *  Please use:
     *   - fromMnemonic
     *   - fromSeed
     */
    function HDNode(constructorGuard, privateKey, publicKey, parentFingerprint, chainCode, index, depth, mnemonic, path) {
        errors.checkNew(this, HDNode);
        if (constructorGuard !== _constructorGuard) {
            throw new Error('HDNode constructor cannot be called directly');
        }
        if (privateKey) {
            var keyPair = new secp256k1_1.KeyPair(privateKey);
            properties_1.defineReadOnly(this, 'privateKey', keyPair.privateKey);
            properties_1.defineReadOnly(this, 'publicKey', keyPair.compressedPublicKey);
        }
        else {
            properties_1.defineReadOnly(this, 'privateKey', null);
            properties_1.defineReadOnly(this, 'publicKey', bytes_1.hexlify(publicKey));
        }
        properties_1.defineReadOnly(this, 'parentFingerprint', parentFingerprint);
        properties_1.defineReadOnly(this, 'fingerprint', bytes_1.hexDataSlice(sha2_1.ripemd160(sha2_1.sha256(this.publicKey)), 0, 4));
        properties_1.defineReadOnly(this, 'address', secp256k1_1.computeAddress(this.publicKey));
        properties_1.defineReadOnly(this, 'chainCode', chainCode);
        properties_1.defineReadOnly(this, 'index', index);
        properties_1.defineReadOnly(this, 'depth', depth);
        properties_1.defineReadOnly(this, 'mnemonic', mnemonic);
        properties_1.defineReadOnly(this, 'path', path);
        properties_1.setType(this, 'HDNode');
    }
    Object.defineProperty(HDNode.prototype, "extendedKey", {
        get: function () {
            // We only support the mainnet values for now, but if anyone needs
            // testnet values, let me know. I believe current senitment is that
            // we should always use mainnet, and use BIP-44 to derive the network
            //   - Mainnet: public=0x0488B21E, private=0x0488ADE4
            //   - Testnet: public=0x043587CF, private=0x04358394
            if (this.depth >= 256) {
                throw new Error("Depth too large!");
            }
            return base58check(bytes_1.concat([
                ((this.privateKey != null) ? "0x0488ADE4" : "0x0488B21E"),
                bytes_1.hexlify(this.depth),
                this.parentFingerprint,
                bytes_1.hexZeroPad(bytes_1.hexlify(this.index), 4),
                this.chainCode,
                ((this.privateKey != null) ? bytes_1.concat(["0x00", this.privateKey]) : this.publicKey),
            ]));
        },
        enumerable: true,
        configurable: true
    });
    HDNode.prototype.neuter = function () {
        return new HDNode(_constructorGuard, null, this.publicKey, this.parentFingerprint, this.chainCode, this.index, this.depth, null, this.path);
    };
    HDNode.prototype._derive = function (index) {
        if (index > 0xffffffff) {
            throw new Error("invalid index - " + String(index));
        }
        // Base path
        var path = this.path;
        if (path) {
            path += '/' + (index & ~HardenedBit);
        }
        var data = new Uint8Array(37);
        if (index & HardenedBit) {
            if (!this.privateKey) {
                throw new Error('cannot derive child of neutered node');
            }
            // Data = 0x00 || ser_256(k_par)
            data.set(bytes_1.arrayify(this.privateKey), 1);
            // Hardened path
            if (path) {
                path += "'";
            }
        }
        else {
            // Data = ser_p(point(k_par))
            data.set(bytes_1.arrayify(this.publicKey));
        }
        // Data += ser_32(i)
        for (var i = 24; i >= 0; i -= 8) {
            data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff);
        }
        var I = hmac_1.computeHmac(hmac_1.SupportedAlgorithms.sha512, this.chainCode, data);
        var IL = I.slice(0, 32);
        var IR = I.slice(32);
        // The private key
        var ki = null;
        // The public key
        var Ki = null;
        if (this.privateKey) {
            ki = bytes32(bignumber_1.bigNumberify(IL).add(this.privateKey).mod(N));
        }
        else {
            var ek = new secp256k1_1.KeyPair(bytes_1.hexlify(IL));
            Ki = ek._addPoint(this.publicKey);
        }
        return new HDNode(_constructorGuard, ki, Ki, this.fingerprint, bytes32(IR), index, this.depth + 1, this.mnemonic, path);
    };
    HDNode.prototype.derivePath = function (path) {
        var components = path.split('/');
        if (components.length === 0 || (components[0] === 'm' && this.depth !== 0)) {
            throw new Error('invalid path - ' + path);
        }
        if (components[0] === 'm') {
            components.shift();
        }
        var result = this;
        for (var i = 0; i < components.length; i++) {
            var component = components[i];
            if (component.match(/^[0-9]+'$/)) {
                var index = parseInt(component.substring(0, component.length - 1));
                if (index >= HardenedBit) {
                    throw new Error('invalid path index - ' + component);
                }
                result = result._derive(HardenedBit + index);
            }
            else if (component.match(/^[0-9]+$/)) {
                var index = parseInt(component);
                if (index >= HardenedBit) {
                    throw new Error('invalid path index - ' + component);
                }
                result = result._derive(index);
            }
            else {
                throw new Error('invalid path component - ' + component);
            }
        }
        return result;
    };
    HDNode.isHDNode = function (value) {
        return properties_1.isType(value, 'HDNode');
    };
    return HDNode;
}());
exports.HDNode = HDNode;
function fromExtendedKey(extendedKey) {
    var bytes = basex_1.Base58.decode(extendedKey);
    if (bytes.length !== 82 || base58check(bytes.slice(0, 78)) !== extendedKey) {
        errors.throwError("invalid extended key", errors.INVALID_ARGUMENT, {
            argument: "extendedKey",
            value: "[REDACTED]"
        });
    }
    var depth = bytes[4];
    var parentFingerprint = bytes_1.hexlify(bytes.slice(5, 9));
    var index = parseInt(bytes_1.hexlify(bytes.slice(9, 13)).substring(2), 16);
    var chainCode = bytes_1.hexlify(bytes.slice(13, 45));
    var key = bytes.slice(45, 78);
    switch (bytes_1.hexlify(bytes.slice(0, 4))) {
        // Public Key
        case "0x0488b21e":
        case "0x043587cf":
            return new HDNode(_constructorGuard, null, bytes_1.hexlify(key), parentFingerprint, chainCode, index, depth, null, null);
        // Private Key
        case "0x0488ade4":
        case "0x04358394":
            if (key[0] !== 0) {
                break;
            }
            return new HDNode(_constructorGuard, bytes_1.hexlify(key.slice(1)), null, parentFingerprint, chainCode, index, depth, null, null);
    }
    return errors.throwError("invalid extended key", errors.INVALID_ARGUMENT, {
        argument: "extendedKey",
        value: "[REDACTED]"
    });
}
exports.fromExtendedKey = fromExtendedKey;
function _fromSeed(seed, mnemonic) {
    var seedArray = bytes_1.arrayify(seed);
    if (seedArray.length < 16 || seedArray.length > 64) {
        throw new Error('invalid seed');
    }
    var I = bytes_1.arrayify(hmac_1.computeHmac(hmac_1.SupportedAlgorithms.sha512, MasterSecret, seedArray));
    return new HDNode(_constructorGuard, bytes32(I.slice(0, 32)), null, "0x00000000", bytes32(I.slice(32)), 0, 0, mnemonic, 'm');
}
function fromMnemonic(mnemonic, wordlist, password) {
    // Normalize the mnemonic (also throws if the checksum is invalid)
    mnemonic = entropyToMnemonic(mnemonicToEntropy(mnemonic, wordlist), wordlist);
    return _fromSeed(mnemonicToSeed(mnemonic, password), mnemonic);
}
exports.fromMnemonic = fromMnemonic;
function fromSeed(seed) {
    return _fromSeed(seed, null);
}
exports.fromSeed = fromSeed;
function mnemonicToSeed(mnemonic, password) {
    if (!password) {
        password = '';
    }
    var salt = utf8_1.toUtf8Bytes('mnemonic' + password, utf8_1.UnicodeNormalizationForm.NFKD);
    return bytes_1.hexlify(pbkdf2_1.pbkdf2(utf8_1.toUtf8Bytes(mnemonic, utf8_1.UnicodeNormalizationForm.NFKD), salt, 2048, 64, 'sha512'));
}
exports.mnemonicToSeed = mnemonicToSeed;
function mnemonicToEntropy(mnemonic, wordlist) {
    if (!wordlist) {
        wordlist = lang_en_1.langEn;
    }
    errors.checkNormalize();
    var words = wordlist.split(mnemonic);
    if ((words.length % 3) !== 0) {
        throw new Error('invalid mnemonic');
    }
    var entropy = bytes_1.arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));
    var offset = 0;
    for (var i = 0; i < words.length; i++) {
        var index = wordlist.getWordIndex(words[i].normalize('NFKD'));
        if (index === -1) {
            throw new Error('invalid mnemonic');
        }
        for (var bit = 0; bit < 11; bit++) {
            if (index & (1 << (10 - bit))) {
                entropy[offset >> 3] |= (1 << (7 - (offset % 8)));
            }
            offset++;
        }
    }
    var entropyBits = 32 * words.length / 3;
    var checksumBits = words.length / 3;
    var checksumMask = getUpperMask(checksumBits);
    var checksum = bytes_1.arrayify(sha2_1.sha256(entropy.slice(0, entropyBits / 8)))[0];
    checksum &= checksumMask;
    if (checksum !== (entropy[entropy.length - 1] & checksumMask)) {
        throw new Error('invalid checksum');
    }
    return bytes_1.hexlify(entropy.slice(0, entropyBits / 8));
}
exports.mnemonicToEntropy = mnemonicToEntropy;
function entropyToMnemonic(entropy, wordlist) {
    entropy = bytes_1.arrayify(entropy);
    if ((entropy.length % 4) !== 0 || entropy.length < 16 || entropy.length > 32) {
        throw new Error('invalid entropy');
    }
    var indices = [0];
    var remainingBits = 11;
    for (var i = 0; i < entropy.length; i++) {
        // Consume the whole byte (with still more to go)
        if (remainingBits > 8) {
            indices[indices.length - 1] <<= 8;
            indices[indices.length - 1] |= entropy[i];
            remainingBits -= 8;
            // This byte will complete an 11-bit index
        }
        else {
            indices[indices.length - 1] <<= remainingBits;
            indices[indices.length - 1] |= entropy[i] >> (8 - remainingBits);
            // Start the next word
            indices.push(entropy[i] & getLowerMask(8 - remainingBits));
            remainingBits += 3;
        }
    }
    // Compute the checksum bits
    var checksum = bytes_1.arrayify(sha2_1.sha256(entropy))[0];
    var checksumBits = entropy.length / 4;
    checksum &= getUpperMask(checksumBits);
    // Shift the checksum into the word indices
    indices[indices.length - 1] <<= checksumBits;
    indices[indices.length - 1] |= (checksum >> (8 - checksumBits));
    if (!wordlist) {
        wordlist = lang_en_1.langEn;
    }
    return wordlist.join(indices.map(function (index) { return wordlist.getWord(index); }));
}
exports.entropyToMnemonic = entropyToMnemonic;
function isValidMnemonic(mnemonic, wordlist) {
    try {
        mnemonicToEntropy(mnemonic, wordlist);
        return true;
    }
    catch (error) { }
    return false;
}
exports.isValidMnemonic = isValidMnemonic;


/***/ }),

/***/ 74858:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var crypto_1 = __webpack_require__(676417);
var bytes_1 = __webpack_require__(45901);
var errors = __importStar(__webpack_require__(766286));
var SupportedAlgorithms;
(function (SupportedAlgorithms) {
    SupportedAlgorithms["sha256"] = "sha256";
    SupportedAlgorithms["sha512"] = "sha512";
})(SupportedAlgorithms = exports.SupportedAlgorithms || (exports.SupportedAlgorithms = {}));
;
function computeHmac(algorithm, key, data) {
    if (!SupportedAlgorithms[algorithm]) {
        errors.throwError('unsupported algorithm ' + algorithm, errors.UNSUPPORTED_OPERATION, { operation: 'hmac', algorithm: algorithm });
    }
    return bytes_1.arrayify(crypto_1.createHmac(algorithm, Buffer.from(bytes_1.arrayify(key))).update(Buffer.from(bytes_1.arrayify(data))).digest());
}
exports.computeHmac = computeHmac;


/***/ }),

/***/ 998006:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var abi_coder_1 = __webpack_require__(193959);
exports.AbiCoder = abi_coder_1.AbiCoder;
exports.defaultAbiCoder = abi_coder_1.defaultAbiCoder;
exports.formatSignature = abi_coder_1.formatSignature;
exports.formatParamType = abi_coder_1.formatParamType;
exports.parseSignature = abi_coder_1.parseSignature;
exports.parseParamType = abi_coder_1.parseParamType;
var address_1 = __webpack_require__(215894);
exports.getAddress = address_1.getAddress;
exports.getContractAddress = address_1.getContractAddress;
exports.getIcapAddress = address_1.getIcapAddress;
var base64 = __importStar(__webpack_require__(485758));
exports.base64 = base64;
var bignumber_1 = __webpack_require__(661895);
exports.BigNumber = bignumber_1.BigNumber;
exports.bigNumberify = bignumber_1.bigNumberify;
var bytes_1 = __webpack_require__(45901);
exports.arrayify = bytes_1.arrayify;
exports.concat = bytes_1.concat;
exports.hexDataSlice = bytes_1.hexDataSlice;
exports.hexDataLength = bytes_1.hexDataLength;
exports.hexlify = bytes_1.hexlify;
exports.hexStripZeros = bytes_1.hexStripZeros;
exports.hexZeroPad = bytes_1.hexZeroPad;
exports.isHexString = bytes_1.isHexString;
exports.joinSignature = bytes_1.joinSignature;
exports.padZeros = bytes_1.padZeros;
exports.splitSignature = bytes_1.splitSignature;
exports.stripZeros = bytes_1.stripZeros;
var hash_1 = __webpack_require__(430319);
exports.hashMessage = hash_1.hashMessage;
exports.id = hash_1.id;
exports.namehash = hash_1.namehash;
var HDNode = __importStar(__webpack_require__(785664));
exports.HDNode = HDNode;
var interface_1 = __webpack_require__(416578);
exports.Interface = interface_1.Interface;
var json_wallet_1 = __webpack_require__(940885);
exports.getJsonWalletAddress = json_wallet_1.getJsonWalletAddress;
var keccak256_1 = __webpack_require__(914622);
exports.keccak256 = keccak256_1.keccak256;
var sha2_1 = __webpack_require__(231275);
exports.sha256 = sha2_1.sha256;
var solidity_1 = __webpack_require__(689585);
exports.solidityKeccak256 = solidity_1.keccak256;
exports.solidityPack = solidity_1.pack;
exports.soliditySha256 = solidity_1.sha256;
var random_bytes_1 = __webpack_require__(164670);
exports.randomBytes = random_bytes_1.randomBytes;
var networks_1 = __webpack_require__(796294);
exports.getNetwork = networks_1.getNetwork;
var properties_1 = __webpack_require__(180083);
exports.checkProperties = properties_1.checkProperties;
exports.deepCopy = properties_1.deepCopy;
exports.defineReadOnly = properties_1.defineReadOnly;
exports.resolveProperties = properties_1.resolveProperties;
exports.shallowCopy = properties_1.shallowCopy;
var RLP = __importStar(__webpack_require__(593086));
exports.RLP = RLP;
var secp256k1_1 = __webpack_require__(893672);
exports.computeAddress = secp256k1_1.computeAddress;
exports.computePublicKey = secp256k1_1.computePublicKey;
exports.recoverAddress = secp256k1_1.recoverAddress;
exports.recoverPublicKey = secp256k1_1.recoverPublicKey;
exports.verifyMessage = secp256k1_1.verifyMessage;
var signing_key_1 = __webpack_require__(31913);
exports.SigningKey = signing_key_1.SigningKey;
var transaction_1 = __webpack_require__(702749);
exports.populateTransaction = transaction_1.populateTransaction;
var transaction_2 = __webpack_require__(702749);
exports.parseTransaction = transaction_2.parse;
exports.serializeTransaction = transaction_2.serialize;
var utf8_1 = __webpack_require__(871254);
exports.formatBytes32String = utf8_1.formatBytes32String;
exports.parseBytes32String = utf8_1.parseBytes32String;
exports.toUtf8Bytes = utf8_1.toUtf8Bytes;
exports.toUtf8String = utf8_1.toUtf8String;
var units_1 = __webpack_require__(846043);
exports.commify = units_1.commify;
exports.formatEther = units_1.formatEther;
exports.parseEther = units_1.parseEther;
exports.formatUnits = units_1.formatUnits;
exports.parseUnits = units_1.parseUnits;
var web_1 = __webpack_require__(412163);
exports.fetchJson = web_1.fetchJson;
exports.poll = web_1.poll;
////////////////////////
// Enums
var hmac_1 = __webpack_require__(74858);
exports.SupportedAlgorithms = hmac_1.SupportedAlgorithms;
var utf8_2 = __webpack_require__(871254);
exports.UnicodeNormalizationForm = utf8_2.UnicodeNormalizationForm;
var wordlist_1 = __webpack_require__(750817);
exports.Wordlist = wordlist_1.Wordlist;


/***/ }),

/***/ 416578:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI
var address_1 = __webpack_require__(215894);
var abi_coder_1 = __webpack_require__(193959);
var bignumber_1 = __webpack_require__(661895);
var bytes_1 = __webpack_require__(45901);
var hash_1 = __webpack_require__(430319);
var keccak256_1 = __webpack_require__(914622);
var properties_1 = __webpack_require__(180083);
var errors = __importStar(__webpack_require__(766286));
///////////////////////////////
var _Indexed = /** @class */ (function () {
    function _Indexed(hash) {
        properties_1.setType(this, 'Indexed');
        properties_1.defineReadOnly(this, 'hash', hash);
    }
    return _Indexed;
}());
var Description = /** @class */ (function () {
    function Description(info) {
        properties_1.setType(this, 'Description');
        for (var key in info) {
            properties_1.defineReadOnly(this, key, properties_1.deepCopy(info[key], true));
        }
        Object.freeze(this);
    }
    return Description;
}());
var _DeployDescription = /** @class */ (function (_super) {
    __extends(_DeployDescription, _super);
    function _DeployDescription() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    _DeployDescription.prototype.encode = function (bytecode, params) {
        if (!bytes_1.isHexString(bytecode)) {
            errors.throwError('invalid contract bytecode', errors.INVALID_ARGUMENT, {
                arg: 'bytecode',
                value: bytecode
            });
        }
        errors.checkArgumentCount(params.length, this.inputs.length, ' in Interface constructor');
        try {
            return (bytecode + abi_coder_1.defaultAbiCoder.encode(this.inputs, params).substring(2));
        }
        catch (error) {
            errors.throwError('invalid constructor argument', errors.INVALID_ARGUMENT, {
                arg: error.arg,
                reason: error.reason,
                value: error.value
            });
        }
        return null;
    };
    return _DeployDescription;
}(Description));
var _FunctionDescription = /** @class */ (function (_super) {
    __extends(_FunctionDescription, _super);
    function _FunctionDescription() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    _FunctionDescription.prototype.encode = function (params) {
        errors.checkArgumentCount(params.length, this.inputs.length, ' in interface function ' + this.name);
        try {
            return this.sighash + abi_coder_1.defaultAbiCoder.encode(this.inputs, params).substring(2);
        }
        catch (error) {
            errors.throwError('invalid input argument', errors.INVALID_ARGUMENT, {
                arg: error.arg,
                reason: error.reason,
                value: error.value
            });
        }
        return null;
    };
    _FunctionDescription.prototype.decode = function (data) {
        try {
            return abi_coder_1.defaultAbiCoder.decode(this.outputs, bytes_1.arrayify(data));
        }
        catch (error) {
            errors.throwError('invalid data for function output', errors.INVALID_ARGUMENT, {
                arg: 'data',
                errorArg: error.arg,
                errorValue: error.value,
                value: data,
                reason: error.reason
            });
        }
    };
    return _FunctionDescription;
}(Description));
var Result = /** @class */ (function (_super) {
    __extends(Result, _super);
    function Result() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    return Result;
}(Description));
var _EventDescription = /** @class */ (function (_super) {
    __extends(_EventDescription, _super);
    function _EventDescription() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    _EventDescription.prototype.encodeTopics = function (params) {
        var _this = this;
        if (params.length > this.inputs.length) {
            errors.throwError('too many arguments for ' + this.name, errors.UNEXPECTED_ARGUMENT, { maxCount: params.length, expectedCount: this.inputs.length });
        }
        var topics = [];
        if (!this.anonymous) {
            topics.push(this.topic);
        }
        params.forEach(function (arg, index) {
            var param = _this.inputs[index];
            if (!param.indexed) {
                if (arg != null) {
                    errors.throwError('cannot filter non-indexed parameters; must be null', errors.INVALID_ARGUMENT, { argument: (param.name || index), value: arg });
                }
                return;
            }
            if (arg == null) {
                topics.push(null);
            }
            else if (param.type === 'string') {
                topics.push(hash_1.id(arg));
            }
            else if (param.type === 'bytes') {
                topics.push(keccak256_1.keccak256(arg));
            }
            else if (param.type.indexOf('[') !== -1 || param.type.substring(0, 5) === 'tuple') {
                errors.throwError('filtering with tuples or arrays not implemented yet; bug us on GitHub', errors.NOT_IMPLEMENTED, { operation: 'filter(array|tuple)' });
            }
            else {
                if (param.type === 'address') {
                    address_1.getAddress(arg);
                }
                topics.push(bytes_1.hexZeroPad(bytes_1.hexlify(arg), 32).toLowerCase());
            }
        });
        // Trim off trailing nulls
        while (topics.length && topics[topics.length - 1] === null) {
            topics.pop();
        }
        return topics;
    };
    _EventDescription.prototype.decode = function (data, topics) {
        // Strip the signature off of non-anonymous topics
        if (topics != null && !this.anonymous) {
            topics = topics.slice(1);
        }
        var inputIndexed = [];
        var inputNonIndexed = [];
        var inputDynamic = [];
        this.inputs.forEach(function (param, index) {
            if (param.indexed) {
                if (param.type === 'string' || param.type === 'bytes' || param.type.indexOf('[') >= 0 || param.type.substring(0, 5) === 'tuple') {
                    inputIndexed.push({ type: 'bytes32', name: (param.name || '') });
                    inputDynamic.push(true);
                }
                else {
                    inputIndexed.push(param);
                    inputDynamic.push(false);
                }
            }
            else {
                inputNonIndexed.push(param);
                inputDynamic.push(false);
            }
        });
        if (topics != null) {
            var resultIndexed = abi_coder_1.defaultAbiCoder.decode(inputIndexed, bytes_1.concat(topics));
        }
        var resultNonIndexed = abi_coder_1.defaultAbiCoder.decode(inputNonIndexed, bytes_1.arrayify(data));
        var result = {};
        var nonIndexedIndex = 0, indexedIndex = 0;
        this.inputs.forEach(function (input, index) {
            if (input.indexed) {
                if (topics == null) {
                    result[index] = new _Indexed(null);
                }
                else if (inputDynamic[index]) {
                    result[index] = new _Indexed(resultIndexed[indexedIndex++]);
                }
                else {
                    result[index] = resultIndexed[indexedIndex++];
                }
            }
            else {
                result[index] = resultNonIndexed[nonIndexedIndex++];
            }
            if (input.name) {
                result[input.name] = result[index];
            }
        });
        result.length = this.inputs.length;
        return new Result(result);
    };
    return _EventDescription;
}(Description));
var _TransactionDescription = /** @class */ (function (_super) {
    __extends(_TransactionDescription, _super);
    function _TransactionDescription() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    return _TransactionDescription;
}(Description));
var _LogDescription = /** @class */ (function (_super) {
    __extends(_LogDescription, _super);
    function _LogDescription() {
        return _super !== null && _super.apply(this, arguments) || this;
    }
    return _LogDescription;
}(Description));
function addMethod(method) {
    switch (method.type) {
        case 'constructor': {
            var description = new _DeployDescription({
                inputs: method.inputs,
                payable: (method.payable == null || !!method.payable)
            });
            if (!this.deployFunction) {
                this.deployFunction = description;
            }
            break;
        }
        case 'function': {
            var signature = abi_coder_1.formatSignature(method).replace(/tuple/g, '');
            var sighash = hash_1.id(signature).substring(0, 10);
            var description = new _FunctionDescription({
                inputs: method.inputs,
                outputs: method.outputs,
                gas: method.gas,
                payable: (method.payable == null || !!method.payable),
                type: ((method.constant) ? 'call' : 'transaction'),
                name: method.name,
                signature: signature,
                sighash: sighash,
            });
            // Expose the first (and hopefully unique named function)
            if (method.name) {
                if (this.functions[method.name] == null) {
                    properties_1.defineReadOnly(this.functions, method.name, description);
                }
                else {
                    errors.warn('WARNING: Multiple definitions for ' + method.name);
                }
            }
            // Expose all methods by their signature, for overloaded functions
            if (this.functions[description.signature] == null) {
                properties_1.defineReadOnly(this.functions, description.signature, description);
            }
            break;
        }
        case 'event': {
            var signature = abi_coder_1.formatSignature(method).replace(/tuple/g, '');
            var description = new _EventDescription({
                name: method.name,
                signature: signature,
                inputs: method.inputs,
                topic: hash_1.id(signature),
                anonymous: (!!method.anonymous)
            });
            // Expose the first (and hopefully unique) event name
            if (method.name && this.events[method.name] == null) {
                properties_1.defineReadOnly(this.events, method.name, description);
            }
            // Expose all events by their signature, for overloaded functions
            if (this.events[description.signature] == null) {
                properties_1.defineReadOnly(this.events, description.signature, description);
            }
            break;
        }
        case 'fallback':
            // Nothing to do for fallback
            break;
        default:
            errors.warn('WARNING: unsupported ABI type - ' + method.type);
            break;
    }
}
var Interface = /** @class */ (function () {
    function Interface(abi) {
        errors.checkNew(this, Interface);
        if (typeof (abi) === 'string') {
            try {
                abi = JSON.parse(abi);
            }
            catch (error) {
                errors.throwError('could not parse ABI JSON', errors.INVALID_ARGUMENT, {
                    arg: 'abi',
                    errorMessage: error.message,
                    value: abi
                });
            }
            if (!Array.isArray(abi)) {
                errors.throwError('invalid abi', errors.INVALID_ARGUMENT, { arg: 'abi', value: abi });
                return null;
            }
        }
        properties_1.defineReadOnly(this, 'functions', {});
        properties_1.defineReadOnly(this, 'events', {});
        // Convert any supported ABI format into a standard ABI format
        var _abi = [];
        abi.forEach(function (fragment) {
            if (typeof (fragment) === 'string') {
                fragment = abi_coder_1.parseSignature(fragment);
            }
            // @TODO: We should probable do some validation; create abiCoder.formatSignature for checking
            _abi.push(fragment);
        });
        properties_1.defineReadOnly(this, 'abi', properties_1.deepCopy(_abi, true));
        _abi.forEach(addMethod, this);
        // If there wasn't a constructor, create the default constructor
        if (!this.deployFunction) {
            addMethod.call(this, { type: 'constructor', inputs: [] });
        }
        properties_1.setType(this, 'Interface');
    }
    Interface.prototype.parseTransaction = function (tx) {
        var sighash = tx.data.substring(0, 10).toLowerCase();
        for (var name in this.functions) {
            if (name.indexOf('(') === -1) {
                continue;
            }
            var func = this.functions[name];
            if (func.sighash === sighash) {
                var result = abi_coder_1.defaultAbiCoder.decode(func.inputs, '0x' + tx.data.substring(10));
                return new _TransactionDescription({
                    args: result,
                    decode: func.decode,
                    name: func.name,
                    signature: func.signature,
                    sighash: func.sighash,
                    value: bignumber_1.bigNumberify(tx.value || '0'),
                });
            }
        }
        return null;
    };
    Interface.prototype.parseLog = function (log) {
        for (var name in this.events) {
            if (name.indexOf('(') === -1) {
                continue;
            }
            var event = this.events[name];
            if (event.anonymous) {
                continue;
            }
            if (event.topic !== log.topics[0]) {
                continue;
            }
            // @TODO: If anonymous, and the only method, and the input count matches, should we parse and return it?
            return new _LogDescription({
                decode: event.decode,
                name: event.name,
                signature: event.signature,
                topic: event.topic,
                values: event.decode(log.data, log.topics)
            });
        }
        return null;
    };
    Interface.isInterface = function (value) {
        return properties_1.isType(value, 'Interface');
    };
    Interface.isIndexed = function (value) {
        return properties_1.isType(value, 'Indexed');
    };
    return Interface;
}());
exports.Interface = Interface;


/***/ }),

/***/ 940885:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var address_1 = __webpack_require__(215894);
function isCrowdsaleWallet(json) {
    try {
        var data = JSON.parse(json);
    }
    catch (error) {
        return false;
    }
    return (data.encseed && data.ethaddr);
}
exports.isCrowdsaleWallet = isCrowdsaleWallet;
function isSecretStorageWallet(json) {
    try {
        var data = JSON.parse(json);
    }
    catch (error) {
        return false;
    }
    if (!data.version || parseInt(data.version) !== data.version || parseInt(data.version) !== 3) {
        return false;
    }
    // @TODO: Put more checks to make sure it has kdf, iv and all that good stuff
    return true;
}
exports.isSecretStorageWallet = isSecretStorageWallet;
//export function isJsonWallet(json: string): boolean {
//    return (isSecretStorageWallet(json) || isCrowdsaleWallet(json));
//}
function getJsonWalletAddress(json) {
    if (isCrowdsaleWallet(json)) {
        try {
            return address_1.getAddress(JSON.parse(json).ethaddr);
        }
        catch (error) {
            return null;
        }
    }
    if (isSecretStorageWallet(json)) {
        try {
            return address_1.getAddress(JSON.parse(json).address);
        }
        catch (error) {
            return null;
        }
    }
    return null;
}
exports.getJsonWalletAddress = getJsonWalletAddress;


/***/ }),

/***/ 796294:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var errors = __importStar(__webpack_require__(766286));
function ethDefaultProvider(network) {
    return function (providers) {
        var providerList = [];
        if (providers.InfuraProvider) {
            providerList.push(new providers.InfuraProvider(network));
        }
        if (providers.EtherscanProvider) {
            providerList.push(new providers.EtherscanProvider(network));
        }
        if (providerList.length === 0) {
            return null;
        }
        if (providers.FallbackProvider) {
            return new providers.FallbackProvider(providerList);
            ;
        }
        return providerList[0];
    };
}
function etcDefaultProvider(url, network) {
    return function (providers) {
        if (providers.JsonRpcProvider) {
            return new providers.JsonRpcProvider(url, network);
        }
        return null;
    };
}
var homestead = {
    chainId: 1,
    ensAddress: "0x314159265dd8dbb310642f98f50c066173c1259b",
    name: "homestead",
    _defaultProvider: ethDefaultProvider('homestead')
};
var ropsten = {
    chainId: 3,
    ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
    name: "ropsten",
    _defaultProvider: ethDefaultProvider('ropsten')
};
var networks = {
    unspecified: {
        chainId: 0,
        name: 'unspecified'
    },
    homestead: homestead,
    mainnet: homestead,
    morden: {
        chainId: 2,
        name: 'morden'
    },
    ropsten: ropsten,
    testnet: ropsten,
    rinkeby: {
        chainId: 4,
        ensAddress: "0xe7410170f87102DF0055eB195163A03B7F2Bff4A",
        name: 'rinkeby',
        _defaultProvider: ethDefaultProvider('rinkeby')
    },
    goerli: {
        chainId: 5,
        ensAddress: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
        name: "goerli",
        _defaultProvider: ethDefaultProvider('goerli')
    },
    kovan: {
        chainId: 42,
        name: 'kovan',
        _defaultProvider: ethDefaultProvider('kovan')
    },
    classic: {
        chainId: 61,
        name: 'classic',
        _defaultProvider: etcDefaultProvider('https://web3.gastracker.io', 'classic')
    },
    classicTestnet: {
        chainId: 62,
        name: 'classicTestnet',
        _defaultProvider: etcDefaultProvider('https://web3.gastracker.io/morden', 'classicTestnet')
    }
};
/**
 *  getNetwork
 *
 *  Converts a named common networks or chain ID (network ID) to a Network
 *  and verifies a network is a valid Network..
 */
function getNetwork(network) {
    // No network (null)
    if (network == null) {
        return null;
    }
    if (typeof (network) === 'number') {
        for (var name_1 in networks) {
            var n_1 = networks[name_1];
            if (n_1.chainId === network) {
                return {
                    name: n_1.name,
                    chainId: n_1.chainId,
                    ensAddress: (n_1.ensAddress || null),
                    _defaultProvider: (n_1._defaultProvider || null)
                };
            }
        }
        return {
            chainId: network,
            name: 'unknown'
        };
    }
    if (typeof (network) === 'string') {
        var n_2 = networks[network];
        if (n_2 == null) {
            return null;
        }
        return {
            name: n_2.name,
            chainId: n_2.chainId,
            ensAddress: n_2.ensAddress,
            _defaultProvider: (n_2._defaultProvider || null)
        };
    }
    var n = networks[network.name];
    // Not a standard network; check that it is a valid network in general
    if (!n) {
        if (typeof (network.chainId) !== 'number') {
            errors.throwError('invalid network chainId', errors.INVALID_ARGUMENT, { arg: 'network', value: network });
        }
        return network;
    }
    // Make sure the chainId matches the expected network chainId (or is 0; disable EIP-155)
    if (network.chainId !== 0 && network.chainId !== n.chainId) {
        errors.throwError('network chainId mismatch', errors.INVALID_ARGUMENT, { arg: 'network', value: network });
    }
    // Standard Network (allow overriding the ENS address)
    return {
        name: network.name,
        chainId: n.chainId,
        ensAddress: (network.ensAddress || n.ensAddress || null),
        _defaultProvider: (network._defaultProvider || n._defaultProvider || null)
    };
}
exports.getNetwork = getNetwork;


/***/ }),

/***/ 920982:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var crypto_1 = __webpack_require__(676417);
var bytes_1 = __webpack_require__(45901);
function bufferify(value) {
    return Buffer.from(bytes_1.arrayify(value));
}
function pbkdf2(password, salt, iterations, keylen, hashAlgorithm) {
    return bytes_1.arrayify(crypto_1.pbkdf2Sync(bufferify(password), bufferify(salt), iterations, keylen, hashAlgorithm));
}
exports.pbkdf2 = pbkdf2;


/***/ }),

/***/ 164670:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var bytes_1 = __webpack_require__(45901);
var crypto_1 = __webpack_require__(676417);
function randomBytes(length) {
    return bytes_1.arrayify(crypto_1.randomBytes(length));
}
exports.randomBytes = randomBytes;


/***/ }),

/***/ 893672:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var elliptic_1 = __webpack_require__(186266);
var address_1 = __webpack_require__(215894);
var bytes_1 = __webpack_require__(45901);
var hash_1 = __webpack_require__(430319);
var keccak256_1 = __webpack_require__(914622);
var properties_1 = __webpack_require__(180083);
var errors = __importStar(__webpack_require__(766286));
///////////////////////////////
var _curve = null;
function getCurve() {
    if (!_curve) {
        _curve = new elliptic_1.ec('secp256k1');
    }
    return _curve;
}
var KeyPair = /** @class */ (function () {
    function KeyPair(privateKey) {
        var keyPair = getCurve().keyFromPrivate(bytes_1.arrayify(privateKey));
        properties_1.defineReadOnly(this, 'privateKey', bytes_1.hexlify(keyPair.priv.toArray('be', 32)));
        properties_1.defineReadOnly(this, 'publicKey', '0x' + keyPair.getPublic(false, 'hex'));
        properties_1.defineReadOnly(this, 'compressedPublicKey', '0x' + keyPair.getPublic(true, 'hex'));
        properties_1.defineReadOnly(this, 'publicKeyBytes', keyPair.getPublic().encode(null, true));
    }
    KeyPair.prototype.sign = function (digest) {
        var keyPair = getCurve().keyFromPrivate(bytes_1.arrayify(this.privateKey));
        var signature = keyPair.sign(bytes_1.arrayify(digest), { canonical: true });
        return {
            recoveryParam: signature.recoveryParam,
            r: bytes_1.hexZeroPad('0x' + signature.r.toString(16), 32),
            s: bytes_1.hexZeroPad('0x' + signature.s.toString(16), 32),
            v: 27 + signature.recoveryParam
        };
    };
    KeyPair.prototype.computeSharedSecret = function (otherKey) {
        var keyPair = getCurve().keyFromPrivate(bytes_1.arrayify(this.privateKey));
        var otherKeyPair = getCurve().keyFromPublic(bytes_1.arrayify(computePublicKey(otherKey)));
        return bytes_1.hexZeroPad('0x' + keyPair.derive(otherKeyPair.getPublic()).toString(16), 32);
    };
    KeyPair.prototype._addPoint = function (other) {
        var p0 = getCurve().keyFromPublic(bytes_1.arrayify(this.publicKey));
        var p1 = getCurve().keyFromPublic(bytes_1.arrayify(other));
        return "0x" + p0.pub.add(p1.pub).encodeCompressed("hex");
    };
    return KeyPair;
}());
exports.KeyPair = KeyPair;
function computePublicKey(key, compressed) {
    var bytes = bytes_1.arrayify(key);
    if (bytes.length === 32) {
        var keyPair = new KeyPair(bytes);
        if (compressed) {
            return keyPair.compressedPublicKey;
        }
        return keyPair.publicKey;
    }
    else if (bytes.length === 33) {
        if (compressed) {
            return bytes_1.hexlify(bytes);
        }
        return '0x' + getCurve().keyFromPublic(bytes).getPublic(false, 'hex');
    }
    else if (bytes.length === 65) {
        if (!compressed) {
            return bytes_1.hexlify(bytes);
        }
        return '0x' + getCurve().keyFromPublic(bytes).getPublic(true, 'hex');
    }
    errors.throwError('invalid public or private key', errors.INVALID_ARGUMENT, { arg: 'key', value: '[REDACTED]' });
    return null;
}
exports.computePublicKey = computePublicKey;
function computeAddress(key) {
    // Strip off the leading "0x04"
    var publicKey = '0x' + computePublicKey(key).slice(4);
    return address_1.getAddress('0x' + keccak256_1.keccak256(publicKey).substring(26));
}
exports.computeAddress = computeAddress;
function recoverPublicKey(digest, signature) {
    var sig = bytes_1.splitSignature(signature);
    var rs = { r: bytes_1.arrayify(sig.r), s: bytes_1.arrayify(sig.s) };
    return '0x' + getCurve().recoverPubKey(bytes_1.arrayify(digest), rs, sig.recoveryParam).encode('hex', false);
}
exports.recoverPublicKey = recoverPublicKey;
function recoverAddress(digest, signature) {
    return computeAddress(recoverPublicKey(bytes_1.arrayify(digest), signature));
}
exports.recoverAddress = recoverAddress;
function verifyMessage(message, signature) {
    return recoverAddress(hash_1.hashMessage(message), signature);
}
exports.verifyMessage = verifyMessage;


/***/ }),

/***/ 623551:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var aes_js_1 = __importDefault(__webpack_require__(78826));
var scrypt_js_1 = __importDefault(__webpack_require__(814460));
var uuid_1 = __importDefault(__webpack_require__(542862));
var signing_key_1 = __webpack_require__(31913);
var HDNode = __importStar(__webpack_require__(785664));
var address_1 = __webpack_require__(215894);
var bytes_1 = __webpack_require__(45901);
var pbkdf2_1 = __webpack_require__(920982);
var keccak256_1 = __webpack_require__(914622);
var utf8_1 = __webpack_require__(871254);
var random_bytes_1 = __webpack_require__(164670);
function looseArrayify(hexString) {
    if (typeof (hexString) === 'string' && hexString.substring(0, 2) !== '0x') {
        hexString = '0x' + hexString;
    }
    return bytes_1.arrayify(hexString);
}
function zpad(value, length) {
    value = String(value);
    while (value.length < length) {
        value = '0' + value;
    }
    return value;
}
function getPassword(password) {
    if (typeof (password) === 'string') {
        return utf8_1.toUtf8Bytes(password, utf8_1.UnicodeNormalizationForm.NFKC);
    }
    return bytes_1.arrayify(password);
}
// Search an Object and its children recursively, caselessly.
function searchPath(object, path) {
    var currentChild = object;
    var comps = path.toLowerCase().split('/');
    for (var i = 0; i < comps.length; i++) {
        // Search for a child object with a case-insensitive matching key
        var matchingChild = null;
        for (var key in currentChild) {
            if (key.toLowerCase() === comps[i]) {
                matchingChild = currentChild[key];
                break;
            }
        }
        // Didn't find one. :'(
        if (matchingChild === null) {
            return null;
        }
        // Now check this child...
        currentChild = matchingChild;
    }
    return currentChild;
}
// @TODO: Make a type for string or arrayish
// See: https://github.com/ethereum/pyethsaletool
function decryptCrowdsale(json, password) {
    var data = JSON.parse(json);
    password = getPassword(password);
    // Ethereum Address
    var ethaddr = address_1.getAddress(searchPath(data, 'ethaddr'));
    // Encrypted Seed
    var encseed = looseArrayify(searchPath(data, 'encseed'));
    if (!encseed || (encseed.length % 16) !== 0) {
        throw new Error('invalid encseed');
    }
    var key = pbkdf2_1.pbkdf2(password, password, 2000, 32, 'sha256').slice(0, 16);
    var iv = encseed.slice(0, 16);
    var encryptedSeed = encseed.slice(16);
    // Decrypt the seed
    var aesCbc = new aes_js_1.default.ModeOfOperation.cbc(key, iv);
    var seed = bytes_1.arrayify(aesCbc.decrypt(encryptedSeed));
    seed = aes_js_1.default.padding.pkcs7.strip(seed);
    // This wallet format is weird... Convert the binary encoded hex to a string.
    var seedHex = '';
    for (var i = 0; i < seed.length; i++) {
        seedHex += String.fromCharCode(seed[i]);
    }
    var seedHexBytes = utf8_1.toUtf8Bytes(seedHex);
    var signingKey = new signing_key_1.SigningKey(keccak256_1.keccak256(seedHexBytes));
    if (signingKey.address !== ethaddr) {
        throw new Error('corrupt crowdsale wallet');
    }
    return signingKey;
}
exports.decryptCrowdsale = decryptCrowdsale;
//@TODO: string or arrayish
function decrypt(json, password, progressCallback) {
    var data = JSON.parse(json);
    var passwordBytes = getPassword(password);
    var decrypt = function (key, ciphertext) {
        var cipher = searchPath(data, 'crypto/cipher');
        if (cipher === 'aes-128-ctr') {
            var iv = looseArrayify(searchPath(data, 'crypto/cipherparams/iv'));
            var counter = new aes_js_1.default.Counter(iv);
            var aesCtr = new aes_js_1.default.ModeOfOperation.ctr(key, counter);
            return bytes_1.arrayify(aesCtr.decrypt(ciphertext));
        }
        return null;
    };
    var computeMAC = function (derivedHalf, ciphertext) {
        return keccak256_1.keccak256(bytes_1.concat([derivedHalf, ciphertext]));
    };
    var getSigningKey = function (key, reject) {
        var ciphertext = looseArrayify(searchPath(data, 'crypto/ciphertext'));
        var computedMAC = bytes_1.hexlify(computeMAC(key.slice(16, 32), ciphertext)).substring(2);
        if (computedMAC !== searchPath(data, 'crypto/mac').toLowerCase()) {
            reject(new Error('invalid password'));
            return null;
        }
        var privateKey = decrypt(key.slice(0, 16), ciphertext);
        var mnemonicKey = key.slice(32, 64);
        if (!privateKey) {
            reject(new Error('unsupported cipher'));
            return null;
        }
        var signingKey = new signing_key_1.SigningKey(privateKey);
        if (data.address && signingKey.address !== address_1.getAddress(data.address)) {
            reject(new Error('address mismatch'));
            return null;
        }
        // Version 0.1 x-ethers metadata must contain an encrypted mnemonic phrase
        if (searchPath(data, 'x-ethers/version') === '0.1') {
            var mnemonicCiphertext = looseArrayify(searchPath(data, 'x-ethers/mnemonicCiphertext'));
            var mnemonicIv = looseArrayify(searchPath(data, 'x-ethers/mnemonicCounter'));
            var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv);
            var mnemonicAesCtr = new aes_js_1.default.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);
            var path = searchPath(data, 'x-ethers/path') || HDNode.defaultPath;
            var entropy = bytes_1.arrayify(mnemonicAesCtr.decrypt(mnemonicCiphertext));
            var mnemonic = HDNode.entropyToMnemonic(entropy);
            var node = HDNode.fromMnemonic(mnemonic).derivePath(path);
            if (node.privateKey != bytes_1.hexlify(privateKey)) {
                reject(new Error('mnemonic mismatch'));
                return null;
            }
            signingKey = new signing_key_1.SigningKey(node);
        }
        return signingKey;
    };
    return new Promise(function (resolve, reject) {
        var kdf = searchPath(data, 'crypto/kdf');
        if (kdf && typeof (kdf) === 'string') {
            if (kdf.toLowerCase() === 'scrypt') {
                var salt = looseArrayify(searchPath(data, 'crypto/kdfparams/salt'));
                var N = parseInt(searchPath(data, 'crypto/kdfparams/n'));
                var r = parseInt(searchPath(data, 'crypto/kdfparams/r'));
                var p = parseInt(searchPath(data, 'crypto/kdfparams/p'));
                if (!N || !r || !p) {
                    reject(new Error('unsupported key-derivation function parameters'));
                    return;
                }
                // Make sure N is a power of 2
                if ((N & (N - 1)) !== 0) {
                    reject(new Error('unsupported key-derivation function parameter value for N'));
                    return;
                }
                var dkLen = parseInt(searchPath(data, 'crypto/kdfparams/dklen'));
                if (dkLen !== 32) {
                    reject(new Error('unsupported key-derivation derived-key length'));
                    return;
                }
                if (progressCallback) {
                    progressCallback(0);
                }
                scrypt_js_1.default(passwordBytes, salt, N, r, p, 64, function (error, progress, key) {
                    if (error) {
                        error.progress = progress;
                        reject(error);
                    }
                    else if (key) {
                        key = bytes_1.arrayify(key);
                        var signingKey = getSigningKey(key, reject);
                        if (!signingKey) {
                            return;
                        }
                        if (progressCallback) {
                            progressCallback(1);
                        }
                        resolve(signingKey);
                    }
                    else if (progressCallback) {
                        return progressCallback(progress);
                    }
                });
            }
            else if (kdf.toLowerCase() === 'pbkdf2') {
                var salt = looseArrayify(searchPath(data, 'crypto/kdfparams/salt'));
                var prfFunc = null;
                var prf = searchPath(data, 'crypto/kdfparams/prf');
                if (prf === 'hmac-sha256') {
                    prfFunc = 'sha256';
                }
                else if (prf === 'hmac-sha512') {
                    prfFunc = 'sha512';
                }
                else {
                    reject(new Error('unsupported prf'));
                    return;
                }
                var c = parseInt(searchPath(data, 'crypto/kdfparams/c'));
                var dkLen = parseInt(searchPath(data, 'crypto/kdfparams/dklen'));
                if (dkLen !== 32) {
                    reject(new Error('unsupported key-derivation derived-key length'));
                    return;
                }
                var key = pbkdf2_1.pbkdf2(passwordBytes, salt, c, dkLen, prfFunc);
                var signingKey = getSigningKey(key, reject);
                if (!signingKey) {
                    return;
                }
                resolve(signingKey);
            }
            else {
                reject(new Error('unsupported key-derivation function'));
            }
        }
        else {
            reject(new Error('unsupported key-derivation function'));
        }
    });
}
exports.decrypt = decrypt;
function encrypt(privateKey, password, options, progressCallback) {
    // the options are optional, so adjust the call as needed
    if (typeof (options) === 'function' && !progressCallback) {
        progressCallback = options;
        options = {};
    }
    if (!options) {
        options = {};
    }
    // Check the private key
    var privateKeyBytes = null;
    if (signing_key_1.SigningKey.isSigningKey(privateKey)) {
        privateKeyBytes = bytes_1.arrayify(privateKey.privateKey);
    }
    else {
        privateKeyBytes = bytes_1.arrayify(privateKey);
    }
    if (privateKeyBytes.length !== 32) {
        throw new Error('invalid private key');
    }
    var passwordBytes = getPassword(password);
    var entropy = null;
    if (options.entropy) {
        entropy = bytes_1.arrayify(options.entropy);
    }
    if (options.mnemonic) {
        if (entropy) {
            if (HDNode.entropyToMnemonic(entropy) !== options.mnemonic) {
                throw new Error('entropy and mnemonic mismatch');
            }
        }
        else {
            entropy = bytes_1.arrayify(HDNode.mnemonicToEntropy(options.mnemonic));
        }
    }
    var path = options.path;
    if (entropy && !path) {
        path = HDNode.defaultPath;
    }
    var client = options.client;
    if (!client) {
        client = "ethers.js";
    }
    // Check/generate the salt
    var salt = null;
    if (options.salt) {
        salt = bytes_1.arrayify(options.salt);
    }
    else {
        salt = random_bytes_1.randomBytes(32);
        ;
    }
    // Override initialization vector
    var iv = null;
    if (options.iv) {
        iv = bytes_1.arrayify(options.iv);
        if (iv.length !== 16) {
            throw new Error('invalid iv');
        }
    }
    else {
        iv = random_bytes_1.randomBytes(16);
    }
    // Override the uuid
    var uuidRandom = null;
    if (options.uuid) {
        uuidRandom = bytes_1.arrayify(options.uuid);
        if (uuidRandom.length !== 16) {
            throw new Error('invalid uuid');
        }
    }
    else {
        uuidRandom = random_bytes_1.randomBytes(16);
    }
    // Override the scrypt password-based key derivation function parameters
    var N = (1 << 17), r = 8, p = 1;
    if (options.scrypt) {
        if (options.scrypt.N) {
            N = options.scrypt.N;
        }
        if (options.scrypt.r) {
            r = options.scrypt.r;
        }
        if (options.scrypt.p) {
            p = options.scrypt.p;
        }
    }
    return new Promise(function (resolve, reject) {
        if (progressCallback) {
            progressCallback(0);
        }
        // We take 64 bytes:
        //   - 32 bytes   As normal for the Web3 secret storage (derivedKey, macPrefix)
        //   - 32 bytes   AES key to encrypt mnemonic with (required here to be Ethers Wallet)
        scrypt_js_1.default(passwordBytes, salt, N, r, p, 64, function (error, progress, key) {
            if (error) {
                error.progress = progress;
                reject(error);
            }
            else if (key) {
                key = bytes_1.arrayify(key);
                // This will be used to encrypt the wallet (as per Web3 secret storage)
                var derivedKey = key.slice(0, 16);
                var macPrefix = key.slice(16, 32);
                // This will be used to encrypt the mnemonic phrase (if any)
                var mnemonicKey = key.slice(32, 64);
                // Get the address for this private key
                var address = (new signing_key_1.SigningKey(privateKeyBytes)).address;
                // Encrypt the private key
                var counter = new aes_js_1.default.Counter(iv);
                var aesCtr = new aes_js_1.default.ModeOfOperation.ctr(derivedKey, counter);
                var ciphertext = bytes_1.arrayify(aesCtr.encrypt(privateKeyBytes));
                // Compute the message authentication code, used to check the password
                var mac = keccak256_1.keccak256(bytes_1.concat([macPrefix, ciphertext]));
                // See: https://github.com/ethereum/wiki/wiki/Web3-Secret-Storage-Definition
                var data = {
                    address: address.substring(2).toLowerCase(),
                    id: uuid_1.default.v4({ random: uuidRandom }),
                    version: 3,
                    Crypto: {
                        cipher: 'aes-128-ctr',
                        cipherparams: {
                            iv: bytes_1.hexlify(iv).substring(2),
                        },
                        ciphertext: bytes_1.hexlify(ciphertext).substring(2),
                        kdf: 'scrypt',
                        kdfparams: {
                            salt: bytes_1.hexlify(salt).substring(2),
                            n: N,
                            dklen: 32,
                            p: p,
                            r: r
                        },
                        mac: mac.substring(2)
                    }
                };
                // If we have a mnemonic, encrypt it into the JSON wallet
                if (entropy) {
                    var mnemonicIv = random_bytes_1.randomBytes(16);
                    var mnemonicCounter = new aes_js_1.default.Counter(mnemonicIv);
                    var mnemonicAesCtr = new aes_js_1.default.ModeOfOperation.ctr(mnemonicKey, mnemonicCounter);
                    var mnemonicCiphertext = bytes_1.arrayify(mnemonicAesCtr.encrypt(entropy));
                    var now = new Date();
                    var timestamp = (now.getUTCFullYear() + '-' +
                        zpad(now.getUTCMonth() + 1, 2) + '-' +
                        zpad(now.getUTCDate(), 2) + 'T' +
                        zpad(now.getUTCHours(), 2) + '-' +
                        zpad(now.getUTCMinutes(), 2) + '-' +
                        zpad(now.getUTCSeconds(), 2) + '.0Z');
                    data['x-ethers'] = {
                        client: client,
                        gethFilename: ('UTC--' + timestamp + '--' + data.address),
                        mnemonicCounter: bytes_1.hexlify(mnemonicIv).substring(2),
                        mnemonicCiphertext: bytes_1.hexlify(mnemonicCiphertext).substring(2),
                        path: path,
                        version: "0.1"
                    };
                }
                if (progressCallback) {
                    progressCallback(1);
                }
                resolve(JSON.stringify(data));
            }
            else if (progressCallback) {
                return progressCallback(progress);
            }
        });
    });
}
exports.encrypt = encrypt;


/***/ }),

/***/ 231275:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var hash_js_1 = __importDefault(__webpack_require__(343040));
var bytes_1 = __webpack_require__(45901);
function ripemd160(data) {
    return '0x' + (hash_js_1.default.ripemd160().update(bytes_1.arrayify(data)).digest('hex'));
}
exports.ripemd160 = ripemd160;
function sha256(data) {
    return '0x' + (hash_js_1.default.sha256().update(bytes_1.arrayify(data)).digest('hex'));
}
exports.sha256 = sha256;
function sha512(data) {
    return '0x' + (hash_js_1.default.sha512().update(bytes_1.arrayify(data)).digest('hex'));
}
exports.sha512 = sha512;


/***/ }),

/***/ 793477:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

/* no shims for node */
Object.defineProperty(exports, "__esModule", ({ value: true }));
exports.platform = 'node';


/***/ }),

/***/ 31913:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
/**
 *  SigningKey
 *
 *
 */
var hdnode_1 = __webpack_require__(785664);
var bytes_1 = __webpack_require__(45901);
var properties_1 = __webpack_require__(180083);
var secp256k1_1 = __webpack_require__(893672);
var errors = __importStar(__webpack_require__(766286));
///////////////////////////////
var SigningKey = /** @class */ (function () {
    function SigningKey(privateKey) {
        errors.checkNew(this, SigningKey);
        var privateKeyBytes = null;
        if (hdnode_1.HDNode.isHDNode(privateKey)) {
            properties_1.defineReadOnly(this, 'mnemonic', privateKey.mnemonic);
            properties_1.defineReadOnly(this, 'path', privateKey.path);
            privateKeyBytes = bytes_1.arrayify(privateKey.privateKey);
        }
        else {
            // A lot of common tools do not prefix private keys with a 0x
            if (typeof (privateKey) === 'string' && privateKey.match(/^[0-9a-f]*$/i) && privateKey.length === 64) {
                privateKey = '0x' + privateKey;
            }
            privateKeyBytes = bytes_1.arrayify(privateKey);
        }
        try {
            if (privateKeyBytes.length !== 32) {
                errors.throwError('exactly 32 bytes required', errors.INVALID_ARGUMENT, { arg: 'privateKey', value: '[REDACTED]' });
            }
        }
        catch (error) {
            var params = { arg: 'privateKey', reason: error.reason, value: '[REDACTED]' };
            if (error.value) {
                if (typeof (error.value.length) === 'number') {
                    params.length = error.value.length;
                }
                params.type = typeof (error.value);
            }
            errors.throwError('invalid private key', error.code, params);
        }
        properties_1.defineReadOnly(this, 'privateKey', bytes_1.hexlify(privateKeyBytes));
        properties_1.defineReadOnly(this, 'keyPair', new secp256k1_1.KeyPair(privateKeyBytes));
        properties_1.defineReadOnly(this, 'publicKey', this.keyPair.publicKey);
        properties_1.defineReadOnly(this, 'address', secp256k1_1.computeAddress(this.keyPair.publicKey));
        properties_1.setType(this, 'SigningKey');
    }
    SigningKey.prototype.signDigest = function (digest) {
        return this.keyPair.sign(digest);
    };
    SigningKey.prototype.computeSharedSecret = function (key) {
        return this.keyPair.computeSharedSecret(bytes_1.arrayify(key));
    };
    SigningKey.isSigningKey = function (value) {
        return properties_1.isType(value, 'SigningKey');
    };
    return SigningKey;
}());
exports.SigningKey = SigningKey;


/***/ }),

/***/ 689585:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var bignumber_1 = __webpack_require__(661895);
var bytes_1 = __webpack_require__(45901);
var utf8_1 = __webpack_require__(871254);
var keccak256_1 = __webpack_require__(914622);
var sha2_1 = __webpack_require__(231275);
var regexBytes = new RegExp("^bytes([0-9]+)$");
var regexNumber = new RegExp("^(u?int)([0-9]*)$");
var regexArray = new RegExp("^(.*)\\[([0-9]*)\\]$");
var Zeros = '0000000000000000000000000000000000000000000000000000000000000000';
function _pack(type, value, isArray) {
    switch (type) {
        case 'address':
            if (isArray) {
                return bytes_1.padZeros(value, 32);
            }
            return bytes_1.arrayify(value);
        case 'string':
            return utf8_1.toUtf8Bytes(value);
        case 'bytes':
            return bytes_1.arrayify(value);
        case 'bool':
            value = (value ? '0x01' : '0x00');
            if (isArray) {
                return bytes_1.padZeros(value, 32);
            }
            return bytes_1.arrayify(value);
    }
    var match = type.match(regexNumber);
    if (match) {
        //var signed = (match[1] === 'int')
        var size = parseInt(match[2] || "256");
        if ((size % 8 != 0) || size === 0 || size > 256) {
            throw new Error('invalid number type - ' + type);
        }
        if (isArray) {
            size = 256;
        }
        value = bignumber_1.bigNumberify(value).toTwos(size);
        return bytes_1.padZeros(value, size / 8);
    }
    match = type.match(regexBytes);
    if (match) {
        var size = parseInt(match[1]);
        if (String(size) != match[1] || size === 0 || size > 32) {
            throw new Error('invalid number type - ' + type);
        }
        if (bytes_1.arrayify(value).byteLength !== size) {
            throw new Error('invalid value for ' + type);
        }
        if (isArray) {
            return bytes_1.arrayify((value + Zeros).substring(0, 66));
        }
        return value;
    }
    match = type.match(regexArray);
    if (match && Array.isArray(value)) {
        var baseType = match[1];
        var count = parseInt(match[2] || String(value.length));
        if (count != value.length) {
            throw new Error('invalid value for ' + type);
        }
        var result = [];
        value.forEach(function (value) {
            result.push(_pack(baseType, value, true));
        });
        return bytes_1.concat(result);
    }
    throw new Error('unknown type - ' + type);
}
// @TODO: Array Enum
function pack(types, values) {
    if (types.length != values.length) {
        throw new Error('type/value count mismatch');
    }
    var tight = [];
    types.forEach(function (type, index) {
        tight.push(_pack(type, values[index]));
    });
    return bytes_1.hexlify(bytes_1.concat(tight));
}
exports.pack = pack;
function keccak256(types, values) {
    return keccak256_1.keccak256(pack(types, values));
}
exports.keccak256 = keccak256;
function sha256(types, values) {
    return sha2_1.sha256(pack(types, values));
}
exports.sha256 = sha256;


/***/ }),

/***/ 702749:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var constants_1 = __webpack_require__(48232);
var errors = __importStar(__webpack_require__(766286));
var secp256k1_1 = __webpack_require__(893672);
var address_1 = __webpack_require__(215894);
var bignumber_1 = __webpack_require__(661895);
var bytes_1 = __webpack_require__(45901);
var keccak256_1 = __webpack_require__(914622);
var properties_1 = __webpack_require__(180083);
var RLP = __importStar(__webpack_require__(593086));
var abstract_provider_1 = __webpack_require__(155514);
///////////////////////////////
function handleAddress(value) {
    if (value === '0x') {
        return null;
    }
    return address_1.getAddress(value);
}
function handleNumber(value) {
    if (value === '0x') {
        return constants_1.Zero;
    }
    return bignumber_1.bigNumberify(value);
}
var transactionFields = [
    { name: 'nonce', maxLength: 32 },
    { name: 'gasPrice', maxLength: 32 },
    { name: 'gasLimit', maxLength: 32 },
    { name: 'to', length: 20 },
    { name: 'value', maxLength: 32 },
    { name: 'data' },
];
var allowedTransactionKeys = {
    chainId: true, data: true, gasLimit: true, gasPrice: true, nonce: true, to: true, value: true
};
function serialize(transaction, signature) {
    properties_1.checkProperties(transaction, allowedTransactionKeys);
    var raw = [];
    transactionFields.forEach(function (fieldInfo) {
        var value = transaction[fieldInfo.name] || ([]);
        value = bytes_1.arrayify(bytes_1.hexlify(value));
        // Fixed-width field
        if (fieldInfo.length && value.length !== fieldInfo.length && value.length > 0) {
            errors.throwError('invalid length for ' + fieldInfo.name, errors.INVALID_ARGUMENT, { arg: ('transaction' + fieldInfo.name), value: value });
        }
        // Variable-width (with a maximum)
        if (fieldInfo.maxLength) {
            value = bytes_1.stripZeros(value);
            if (value.length > fieldInfo.maxLength) {
                errors.throwError('invalid length for ' + fieldInfo.name, errors.INVALID_ARGUMENT, { arg: ('transaction' + fieldInfo.name), value: value });
            }
        }
        raw.push(bytes_1.hexlify(value));
    });
    if (transaction.chainId != null && transaction.chainId !== 0) {
        raw.push(bytes_1.hexlify(transaction.chainId));
        raw.push('0x');
        raw.push('0x');
    }
    var unsignedTransaction = RLP.encode(raw);
    // Requesting an unsigned transation
    if (!signature) {
        return unsignedTransaction;
    }
    // The splitSignature will ensure the transaction has a recoveryParam in the
    // case that the signTransaction function only adds a v.
    var sig = bytes_1.splitSignature(signature);
    // We pushed a chainId and null r, s on for hashing only; remove those
    var v = 27 + sig.recoveryParam;
    if (raw.length === 9) {
        raw.pop();
        raw.pop();
        raw.pop();
        v += transaction.chainId * 2 + 8;
    }
    raw.push(bytes_1.hexlify(v));
    raw.push(bytes_1.stripZeros(bytes_1.arrayify(sig.r)));
    raw.push(bytes_1.stripZeros(bytes_1.arrayify(sig.s)));
    return RLP.encode(raw);
}
exports.serialize = serialize;
function parse(rawTransaction) {
    var transaction = RLP.decode(rawTransaction);
    if (transaction.length !== 9 && transaction.length !== 6) {
        errors.throwError('invalid raw transaction', errors.INVALID_ARGUMENT, { arg: 'rawTransactin', value: rawTransaction });
    }
    var tx = {
        nonce: handleNumber(transaction[0]).toNumber(),
        gasPrice: handleNumber(transaction[1]),
        gasLimit: handleNumber(transaction[2]),
        to: handleAddress(transaction[3]),
        value: handleNumber(transaction[4]),
        data: transaction[5],
        chainId: 0
    };
    // Legacy unsigned transaction
    if (transaction.length === 6) {
        return tx;
    }
    try {
        tx.v = bignumber_1.bigNumberify(transaction[6]).toNumber();
    }
    catch (error) {
        errors.info(error);
        return tx;
    }
    tx.r = bytes_1.hexZeroPad(transaction[7], 32);
    tx.s = bytes_1.hexZeroPad(transaction[8], 32);
    if (bignumber_1.bigNumberify(tx.r).isZero() && bignumber_1.bigNumberify(tx.s).isZero()) {
        // EIP-155 unsigned transaction
        tx.chainId = tx.v;
        tx.v = 0;
    }
    else {
        // Signed Tranasaction
        tx.chainId = Math.floor((tx.v - 35) / 2);
        if (tx.chainId < 0) {
            tx.chainId = 0;
        }
        var recoveryParam = tx.v - 27;
        var raw = transaction.slice(0, 6);
        if (tx.chainId !== 0) {
            raw.push(bytes_1.hexlify(tx.chainId));
            raw.push('0x');
            raw.push('0x');
            recoveryParam -= tx.chainId * 2 + 8;
        }
        var digest = keccak256_1.keccak256(RLP.encode(raw));
        try {
            tx.from = secp256k1_1.recoverAddress(digest, { r: bytes_1.hexlify(tx.r), s: bytes_1.hexlify(tx.s), recoveryParam: recoveryParam });
        }
        catch (error) {
            errors.info(error);
        }
        tx.hash = keccak256_1.keccak256(rawTransaction);
    }
    return tx;
}
exports.parse = parse;
function populateTransaction(transaction, provider, from) {
    if (!abstract_provider_1.Provider.isProvider(provider)) {
        errors.throwError('missing provider', errors.INVALID_ARGUMENT, {
            argument: 'provider',
            value: provider
        });
    }
    properties_1.checkProperties(transaction, allowedTransactionKeys);
    var tx = properties_1.shallowCopy(transaction);
    if (tx.to != null) {
        tx.to = provider.resolveName(tx.to);
    }
    if (tx.gasPrice == null) {
        tx.gasPrice = provider.getGasPrice();
    }
    if (tx.nonce == null) {
        tx.nonce = provider.getTransactionCount(from);
    }
    if (tx.gasLimit == null) {
        var estimate = properties_1.shallowCopy(tx);
        estimate.from = from;
        tx.gasLimit = provider.estimateGas(estimate);
    }
    if (tx.chainId == null) {
        tx.chainId = provider.getNetwork().then(function (network) { return network.chainId; });
    }
    return properties_1.resolveProperties(tx);
}
exports.populateTransaction = populateTransaction;


/***/ }),

/***/ 846043:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var constants_1 = __webpack_require__(48232);
var errors = __importStar(__webpack_require__(766286));
var bignumber_1 = __webpack_require__(661895);
var names = [
    'wei',
    'kwei',
    'Mwei',
    'Gwei',
    'szabo',
    'finney',
    'ether',
];
var unitInfos = {};
function _getUnitInfo(value) {
    return {
        decimals: value.length - 1,
        tenPower: bignumber_1.bigNumberify(value)
    };
}
// Build cache of common units
(function () {
    // Cache the common units
    var value = '1';
    names.forEach(function (name) {
        var info = _getUnitInfo(value);
        unitInfos[name.toLowerCase()] = info;
        unitInfos[String(info.decimals)] = info;
        value += '000';
    });
})();
function getUnitInfo(name) {
    // Try the cache
    var info = unitInfos[String(name).toLowerCase()];
    if (!info && typeof (name) === 'number' && parseInt(String(name)) == name && name >= 0 && name <= 256) {
        var value = '1';
        for (var i = 0; i < name; i++) {
            value += '0';
        }
        info = _getUnitInfo(value);
    }
    // Make sure we got something
    if (!info) {
        errors.throwError('invalid unitType', errors.INVALID_ARGUMENT, { argument: 'name', value: name });
    }
    return info;
}
// Some environments have issues with RegEx that contain back-tracking, so we cannot
// use them.
function commify(value) {
    var comps = String(value).split('.');
    if (comps.length > 2 || !comps[0].match(/^-?[0-9]*$/) || (comps[1] && !comps[1].match(/^[0-9]*$/)) || value === '.' || value === '-.') {
        errors.throwError('invalid value', errors.INVALID_ARGUMENT, { argument: 'value', value: value });
    }
    // Make sure we have at least one whole digit (0 if none)
    var whole = comps[0];
    var negative = '';
    if (whole.substring(0, 1) === '-') {
        negative = '-';
        whole = whole.substring(1);
    }
    // Make sure we have at least 1 whole digit with no leading zeros
    while (whole.substring(0, 1) === '0') {
        whole = whole.substring(1);
    }
    if (whole === '') {
        whole = '0';
    }
    var suffix = '';
    if (comps.length === 2) {
        suffix = '.' + (comps[1] || '0');
    }
    var formatted = [];
    while (whole.length) {
        if (whole.length <= 3) {
            formatted.unshift(whole);
            break;
        }
        else {
            var index = whole.length - 3;
            formatted.unshift(whole.substring(index));
            whole = whole.substring(0, index);
        }
    }
    return negative + formatted.join(',') + suffix;
}
exports.commify = commify;
function formatUnits(value, unitType) {
    var unitInfo = getUnitInfo(unitType);
    // Make sure wei is a big number (convert as necessary)
    value = bignumber_1.bigNumberify(value);
    var negative = value.lt(constants_1.Zero);
    if (negative) {
        value = value.mul(constants_1.NegativeOne);
    }
    var fraction = value.mod(unitInfo.tenPower).toString();
    while (fraction.length < unitInfo.decimals) {
        fraction = '0' + fraction;
    }
    // Strip training 0
    fraction = fraction.match(/^([0-9]*[1-9]|0)(0*)/)[1];
    var whole = value.div(unitInfo.tenPower).toString();
    value = whole + '.' + fraction;
    if (negative) {
        value = '-' + value;
    }
    return value;
}
exports.formatUnits = formatUnits;
function parseUnits(value, unitType) {
    if (unitType == null) {
        unitType = 18;
    }
    var unitInfo = getUnitInfo(unitType);
    if (typeof (value) !== 'string' || !value.match(/^-?[0-9.,]+$/)) {
        errors.throwError('invalid decimal value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    if (unitInfo.decimals === 0) {
        return bignumber_1.bigNumberify(value);
    }
    // Is it negative?
    var negative = (value.substring(0, 1) === '-');
    if (negative) {
        value = value.substring(1);
    }
    if (value === '.') {
        errors.throwError('missing value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    // Split it into a whole and fractional part
    var comps = value.split('.');
    if (comps.length > 2) {
        errors.throwError('too many decimal points', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    var whole = comps[0], fraction = comps[1];
    if (!whole) {
        whole = '0';
    }
    if (!fraction) {
        fraction = '0';
    }
    // Prevent underflow
    if (fraction.length > unitInfo.decimals) {
        errors.throwError('underflow occurred', errors.NUMERIC_FAULT, { operation: 'division', fault: "underflow" });
    }
    // Fully pad the string with zeros to get to wei
    while (fraction.length < unitInfo.decimals) {
        fraction += '0';
    }
    var wholeValue = bignumber_1.bigNumberify(whole);
    var fractionValue = bignumber_1.bigNumberify(fraction);
    var wei = (wholeValue.mul(unitInfo.tenPower)).add(fractionValue);
    if (negative) {
        wei = wei.mul(constants_1.NegativeOne);
    }
    return wei;
}
exports.parseUnits = parseUnits;
function formatEther(wei) {
    return formatUnits(wei, 18);
}
exports.formatEther = formatEther;
function parseEther(ether) {
    return parseUnits(ether, 18);
}
exports.parseEther = parseEther;


/***/ }),

/***/ 412163:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var xmlhttprequest_1 = __webpack_require__(784844);
var base64_1 = __webpack_require__(485758);
var properties_1 = __webpack_require__(180083);
var utf8_1 = __webpack_require__(871254);
var errors = __importStar(__webpack_require__(766286));
function fetchJson(connection, json, processFunc) {
    var headers = {};
    var url = null;
    var timeout = 2 * 60 * 1000;
    if (typeof (connection) === 'string') {
        url = connection;
    }
    else if (typeof (connection) === 'object') {
        if (connection.url == null) {
            errors.throwError('missing URL', errors.MISSING_ARGUMENT, { arg: 'url' });
        }
        url = connection.url;
        if (typeof (connection.timeout) === 'number' && connection.timeout > 0) {
            timeout = connection.timeout;
        }
        if (connection.headers) {
            for (var key in connection.headers) {
                headers[key.toLowerCase()] = { key: key, value: String(connection.headers[key]) };
            }
        }
        if (connection.user != null && connection.password != null) {
            if (url.substring(0, 6) !== 'https:' && connection.allowInsecure !== true) {
                errors.throwError('basic authentication requires a secure https url', errors.INVALID_ARGUMENT, { arg: 'url', url: url, user: connection.user, password: '[REDACTED]' });
            }
            var authorization = connection.user + ':' + connection.password;
            headers['authorization'] = {
                key: 'Authorization',
                value: 'Basic ' + base64_1.encode(utf8_1.toUtf8Bytes(authorization))
            };
        }
    }
    return new Promise(function (resolve, reject) {
        var request = new xmlhttprequest_1.XMLHttpRequest();
        var timer = null;
        timer = setTimeout(function () {
            if (timer == null) {
                return;
            }
            timer = null;
            reject(new Error('timeout'));
            setTimeout(function () {
                request.abort();
            }, 0);
        }, timeout);
        var cancelTimeout = function () {
            if (timer == null) {
                return;
            }
            clearTimeout(timer);
            timer = null;
        };
        if (json) {
            request.open('POST', url, true);
            headers['content-type'] = { key: 'Content-Type', value: 'application/json' };
        }
        else {
            request.open('GET', url, true);
        }
        Object.keys(headers).forEach(function (key) {
            var header = headers[key];
            request.setRequestHeader(header.key, header.value);
        });
        request.onreadystatechange = function () {
            if (request.readyState !== 4) {
                return;
            }
            if (request.status != 200) {
                cancelTimeout();
                // @TODO: not any!
                var error = new Error('invalid response - ' + request.status);
                error.statusCode = request.status;
                if (request.responseText) {
                    error.responseText = request.responseText;
                }
                reject(error);
                return;
            }
            var result = null;
            try {
                result = JSON.parse(request.responseText);
            }
            catch (error) {
                cancelTimeout();
                // @TODO: not any!
                var jsonError = new Error('invalid json response');
                jsonError.orginialError = error;
                jsonError.responseText = request.responseText;
                if (json != null) {
                    jsonError.requestBody = json;
                }
                jsonError.url = url;
                reject(jsonError);
                return;
            }
            if (processFunc) {
                try {
                    result = processFunc(result);
                }
                catch (error) {
                    cancelTimeout();
                    error.url = url;
                    error.body = json;
                    error.responseText = request.responseText;
                    reject(error);
                    return;
                }
            }
            cancelTimeout();
            resolve(result);
        };
        request.onerror = function (error) {
            cancelTimeout();
            reject(error);
        };
        try {
            if (json != null) {
                request.send(json);
            }
            else {
                request.send();
            }
        }
        catch (error) {
            cancelTimeout();
            // @TODO: not any!
            var connectionError = new Error('connection error');
            connectionError.error = error;
            reject(connectionError);
        }
    });
}
exports.fetchJson = fetchJson;
function poll(func, options) {
    if (!options) {
        options = {};
    }
    options = properties_1.shallowCopy(options);
    if (options.floor == null) {
        options.floor = 0;
    }
    if (options.ceiling == null) {
        options.ceiling = 10000;
    }
    if (options.interval == null) {
        options.interval = 250;
    }
    return new Promise(function (resolve, reject) {
        var timer = null;
        var done = false;
        // Returns true if cancel was successful. Unsuccessful cancel means we're already done.
        var cancel = function () {
            if (done) {
                return false;
            }
            done = true;
            if (timer) {
                clearTimeout(timer);
            }
            return true;
        };
        if (options.timeout) {
            timer = setTimeout(function () {
                if (cancel()) {
                    reject(new Error('timeout'));
                }
            }, options.timeout);
        }
        var fastTimeout = options.fastRetry || null;
        var attempt = 0;
        function check() {
            return func().then(function (result) {
                // If we have a result, or are allowed null then we're done
                if (result !== undefined) {
                    if (cancel()) {
                        resolve(result);
                    }
                }
                else if (options.onceBlock) {
                    options.onceBlock.once('block', check);
                    // Otherwise, exponential back-off (up to 10s) our next request
                }
                else if (!done) {
                    attempt++;
                    var timeout = options.interval * parseInt(String(Math.random() * Math.pow(2, attempt)));
                    if (timeout < options.floor) {
                        timeout = options.floor;
                    }
                    if (timeout > options.ceiling) {
                        timeout = options.ceiling;
                    }
                    // Fast Timeout, means we quickly try again the first time
                    if (fastTimeout) {
                        attempt--;
                        timeout = fastTimeout;
                        fastTimeout = null;
                    }
                    setTimeout(check, timeout);
                }
                return null;
            }, function (error) {
                if (cancel()) {
                    reject(error);
                }
            });
        }
        check();
    });
}
exports.poll = poll;


/***/ }),

/***/ 750817:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
// This gets overriddenby gulp during bip39-XX
var exportWordlist = false;
var hash_1 = __webpack_require__(430319);
var properties_1 = __webpack_require__(180083);
function check(wordlist) {
    var words = [];
    for (var i = 0; i < 2048; i++) {
        var word = wordlist.getWord(i);
        if (i !== wordlist.getWordIndex(word)) {
            return '0x';
        }
        words.push(word);
    }
    return hash_1.id(words.join('\n') + '\n');
}
exports.check = check;
var Wordlist = /** @class */ (function () {
    function Wordlist(locale) {
        properties_1.defineReadOnly(this, 'locale', locale);
    }
    // Subclasses may override this
    Wordlist.prototype.split = function (mnemonic) {
        return mnemonic.toLowerCase().split(/ +/g);
    };
    // Subclasses may override this
    Wordlist.prototype.join = function (words) {
        return words.join(' ');
    };
    return Wordlist;
}());
exports.Wordlist = Wordlist;
function register(lang, name) {
    if (!name) {
        name = lang.locale;
    }
    if (exportWordlist) {
        var g = global;
        if (!(g.wordlists)) {
            properties_1.defineReadOnly(g, 'wordlists', {});
        }
        if (!g.wordlists[name]) {
            properties_1.defineReadOnly(g.wordlists, name, lang);
        }
        if (g.ethers && g.ethers.wordlists) {
            if (!g.ethers.wordlists[name]) {
                properties_1.defineReadOnly(g.ethers.wordlists, name, lang);
            }
        }
    }
}
exports.register = register;


/***/ }),

/***/ 505985:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var bytes_1 = __webpack_require__(45901);
var hash_1 = __webpack_require__(430319);
var hdnode_1 = __webpack_require__(785664);
var json_wallet_1 = __webpack_require__(940885);
var keccak256_1 = __webpack_require__(914622);
var properties_1 = __webpack_require__(180083);
var random_bytes_1 = __webpack_require__(164670);
var secretStorage = __importStar(__webpack_require__(623551));
var signing_key_1 = __webpack_require__(31913);
var transaction_1 = __webpack_require__(702749);
// Imported Abstracts
var abstract_signer_1 = __webpack_require__(625419);
var abstract_provider_1 = __webpack_require__(155514);
var errors = __importStar(__webpack_require__(766286));
var Wallet = /** @class */ (function (_super) {
    __extends(Wallet, _super);
    function Wallet(privateKey, provider) {
        var _this = _super.call(this) || this;
        errors.checkNew(_this, Wallet);
        // Make sure we have a valid signing key
        if (signing_key_1.SigningKey.isSigningKey(privateKey)) {
            properties_1.defineReadOnly(_this, 'signingKey', privateKey);
        }
        else {
            properties_1.defineReadOnly(_this, 'signingKey', new signing_key_1.SigningKey(privateKey));
        }
        properties_1.defineReadOnly(_this, 'provider', provider);
        return _this;
    }
    Object.defineProperty(Wallet.prototype, "address", {
        get: function () { return this.signingKey.address; },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Wallet.prototype, "mnemonic", {
        get: function () { return this.signingKey.mnemonic; },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Wallet.prototype, "path", {
        get: function () { return this.signingKey.path; },
        enumerable: true,
        configurable: true
    });
    Object.defineProperty(Wallet.prototype, "privateKey", {
        get: function () { return this.signingKey.privateKey; },
        enumerable: true,
        configurable: true
    });
    /**
     *  Create a new instance of this Wallet connected to provider.
     */
    Wallet.prototype.connect = function (provider) {
        if (!(abstract_provider_1.Provider.isProvider(provider))) {
            errors.throwError('invalid provider', errors.INVALID_ARGUMENT, { argument: 'provider', value: provider });
        }
        return new Wallet(this.signingKey, provider);
    };
    Wallet.prototype.getAddress = function () {
        return Promise.resolve(this.address);
    };
    Wallet.prototype.sign = function (transaction) {
        var _this = this;
        return properties_1.resolveProperties(transaction).then(function (tx) {
            var rawTx = transaction_1.serialize(tx);
            var signature = _this.signingKey.signDigest(keccak256_1.keccak256(rawTx));
            return transaction_1.serialize(tx, signature);
        });
    };
    Wallet.prototype.signMessage = function (message) {
        return Promise.resolve(bytes_1.joinSignature(this.signingKey.signDigest(hash_1.hashMessage(message))));
    };
    Wallet.prototype.getBalance = function (blockTag) {
        if (!this.provider) {
            throw new Error('missing provider');
        }
        return this.provider.getBalance(this.address, blockTag);
    };
    Wallet.prototype.getTransactionCount = function (blockTag) {
        if (!this.provider) {
            throw new Error('missing provider');
        }
        return this.provider.getTransactionCount(this.address, blockTag);
    };
    Wallet.prototype.sendTransaction = function (transaction) {
        var _this = this;
        if (!this.provider) {
            throw new Error('missing provider');
        }
        if (transaction.nonce == null) {
            transaction = properties_1.shallowCopy(transaction);
            transaction.nonce = this.getTransactionCount("pending");
        }
        return transaction_1.populateTransaction(transaction, this.provider, this.address).then(function (tx) {
            return _this.sign(tx).then(function (signedTransaction) {
                return _this.provider.sendTransaction(signedTransaction);
            });
        });
    };
    Wallet.prototype.encrypt = function (password, options, progressCallback) {
        if (typeof (options) === 'function' && !progressCallback) {
            progressCallback = options;
            options = {};
        }
        if (progressCallback && typeof (progressCallback) !== 'function') {
            throw new Error('invalid callback');
        }
        if (!options) {
            options = {};
        }
        if (this.mnemonic) {
            // Make sure we don't accidentally bubble the mnemonic up the call-stack
            options = properties_1.shallowCopy(options);
            // Set the mnemonic and path
            options.mnemonic = this.mnemonic;
            options.path = this.path;
        }
        return secretStorage.encrypt(this.privateKey, password, options, progressCallback);
    };
    /**
     *  Static methods to create Wallet instances.
     */
    Wallet.createRandom = function (options) {
        var entropy = random_bytes_1.randomBytes(16);
        if (!options) {
            options = {};
        }
        if (options.extraEntropy) {
            entropy = bytes_1.arrayify(keccak256_1.keccak256(bytes_1.concat([entropy, options.extraEntropy])).substring(0, 34));
        }
        var mnemonic = hdnode_1.entropyToMnemonic(entropy, options.locale);
        return Wallet.fromMnemonic(mnemonic, options.path, options.locale);
    };
    Wallet.fromEncryptedJson = function (json, password, progressCallback) {
        if (json_wallet_1.isCrowdsaleWallet(json)) {
            try {
                if (progressCallback) {
                    progressCallback(0);
                }
                var privateKey = secretStorage.decryptCrowdsale(json, password);
                if (progressCallback) {
                    progressCallback(1);
                }
                return Promise.resolve(new Wallet(privateKey));
            }
            catch (error) {
                return Promise.reject(error);
            }
        }
        else if (json_wallet_1.isSecretStorageWallet(json)) {
            return secretStorage.decrypt(json, password, progressCallback).then(function (signingKey) {
                return new Wallet(signingKey);
            });
        }
        return Promise.reject('invalid wallet JSON');
    };
    Wallet.fromMnemonic = function (mnemonic, path, wordlist) {
        if (!path) {
            path = hdnode_1.defaultPath;
        }
        return new Wallet(hdnode_1.fromMnemonic(mnemonic, wordlist).derivePath(path));
    };
    return Wallet;
}(abstract_signer_1.Signer));
exports.Wallet = Wallet;


/***/ }),

/***/ 428000:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var lang_en_1 = __webpack_require__(77894);
var lang_es_1 = __webpack_require__(530395);
var lang_fr_1 = __webpack_require__(702374);
var lang_ja_1 = __webpack_require__(166564);
var lang_ko_1 = __webpack_require__(116818);
var lang_it_1 = __webpack_require__(903835);
var lang_zh_1 = __webpack_require__(713496);
var en = lang_en_1.langEn;
exports.en = en;
var es = lang_es_1.langEs;
exports.es = es;
var fr = lang_fr_1.langFr;
exports.fr = fr;
var it = lang_it_1.langIt;
exports.it = it;
var ja = lang_ja_1.langJa;
exports.ja = ja;
var ko = lang_ko_1.langKo;
exports.ko = ko;
var zh = lang_zh_1.langZhCn;
exports.zh = zh;
var zh_cn = lang_zh_1.langZhCn;
exports.zh_cn = zh_cn;
var zh_tw = lang_zh_1.langZhTw;
exports.zh_tw = zh_tw;


/***/ }),

/***/ 77894:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
var wordlist_1 = __webpack_require__(750817);
var words = " ";
var wordlist = null;
function loadWords(lang) {
    if (wordlist != null) {
        return;
    }
    wordlist = words.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' ');
    if (wordlist_1.check(lang) !== '0x3c8acc1e7b08d8e76f9fda015ef48dc8c710a73cb7e0f77b2c18a9b5a7adde60') {
        wordlist = null;
        throw new Error('BIP39 Wordlist for en (English) FAILED');
    }
}
var LangEn = /** @class */ (function (_super) {
    __extends(LangEn, _super);
    function LangEn() {
        return _super.call(this, 'en') || this;
    }
    LangEn.prototype.getWord = function (index) {
        loadWords(this);
        return wordlist[index];
    };
    LangEn.prototype.getWordIndex = function (word) {
        loadWords(this);
        return wordlist.indexOf(word);
    };
    return LangEn;
}(wordlist_1.Wordlist));
var langEn = new LangEn();
exports.langEn = langEn;
wordlist_1.register(langEn);


/***/ }),

/***/ 530395:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
var wordlist_1 = __webpack_require__(750817);
var utf8_1 = __webpack_require__(871254);
var errors_1 = __webpack_require__(766286);
var words = "A/bacoAbdomenAbejaAbiertoAbogadoAbonoAbortoAbrazoAbrirAbueloAbusoAcabarAcademiaAccesoAccio/nAceiteAcelgaAcentoAceptarA/cidoAclararAcne/AcogerAcosoActivoActoActrizActuarAcudirAcuerdoAcusarAdictoAdmitirAdoptarAdornoAduanaAdultoAe/reoAfectarAficio/nAfinarAfirmarA/gilAgitarAgoni/aAgostoAgotarAgregarAgrioAguaAgudoA/guilaAgujaAhogoAhorroAireAislarAjedrezAjenoAjusteAlacra/nAlambreAlarmaAlbaA/lbumAlcaldeAldeaAlegreAlejarAlertaAletaAlfilerAlgaAlgodo/nAliadoAlientoAlivioAlmaAlmejaAlmi/barAltarAltezaAltivoAltoAlturaAlumnoAlzarAmableAmanteAmapolaAmargoAmasarA/mbarA/mbitoAmenoAmigoAmistadAmorAmparoAmplioAnchoAncianoAnclaAndarAnde/nAnemiaA/nguloAnilloA/nimoAni/sAnotarAntenaAntiguoAntojoAnualAnularAnuncioA~adirA~ejoA~oApagarAparatoApetitoApioAplicarApodoAporteApoyoAprenderAprobarApuestaApuroAradoAra~aArarA/rbitroA/rbolArbustoArchivoArcoArderArdillaArduoA/reaA/ridoAriesArmoni/aArne/sAromaArpaArpo/nArregloArrozArrugaArteArtistaAsaAsadoAsaltoAscensoAsegurarAseoAsesorAsientoAsiloAsistirAsnoAsombroA/speroAstillaAstroAstutoAsumirAsuntoAtajoAtaqueAtarAtentoAteoA/ticoAtletaA/tomoAtraerAtrozAtu/nAudazAudioAugeAulaAumentoAusenteAutorAvalAvanceAvaroAveAvellanaAvenaAvestruzAvio/nAvisoAyerAyudaAyunoAzafra/nAzarAzoteAzu/carAzufreAzulBabaBaborBacheBahi/aBaileBajarBalanzaBalco/nBaldeBambu/BancoBandaBa~oBarbaBarcoBarnizBarroBa/sculaBasto/nBasuraBatallaBateri/aBatirBatutaBau/lBazarBebe/BebidaBelloBesarBesoBestiaBichoBienBingoBlancoBloqueBlusaBoaBobinaBoboBocaBocinaBodaBodegaBoinaBolaBoleroBolsaBombaBondadBonitoBonoBonsa/iBordeBorrarBosqueBoteBoti/nBo/vedaBozalBravoBrazoBrechaBreveBrilloBrincoBrisaBrocaBromaBronceBroteBrujaBruscoBrutoBuceoBucleBuenoBueyBufandaBufo/nBu/hoBuitreBultoBurbujaBurlaBurroBuscarButacaBuzo/nCaballoCabezaCabinaCabraCacaoCada/verCadenaCaerCafe/Cai/daCaima/nCajaCajo/nCalCalamarCalcioCaldoCalidadCalleCalmaCalorCalvoCamaCambioCamelloCaminoCampoCa/ncerCandilCanelaCanguroCanicaCantoCa~aCa~o/nCaobaCaosCapazCapita/nCapoteCaptarCapuchaCaraCarbo/nCa/rcelCaretaCargaCari~oCarneCarpetaCarroCartaCasaCascoCaseroCaspaCastorCatorceCatreCaudalCausaCazoCebollaCederCedroCeldaCe/lebreCelosoCe/lulaCementoCenizaCentroCercaCerdoCerezaCeroCerrarCertezaCe/spedCetroChacalChalecoChampu/ChanclaChapaCharlaChicoChisteChivoChoqueChozaChuletaChuparCiclo/nCiegoCieloCienCiertoCifraCigarroCimaCincoCineCintaCipre/sCircoCiruelaCisneCitaCiudadClamorClanClaroClaseClaveClienteClimaCli/nicaCobreCoccio/nCochinoCocinaCocoCo/digoCodoCofreCogerCoheteCoji/nCojoColaColchaColegioColgarColinaCollarColmoColumnaCombateComerComidaCo/modoCompraCondeConejoCongaConocerConsejoContarCopaCopiaCorazo/nCorbataCorchoCordo/nCoronaCorrerCoserCosmosCostaCra/neoCra/terCrearCrecerCrei/doCremaCri/aCrimenCriptaCrisisCromoCro/nicaCroquetaCrudoCruzCuadroCuartoCuatroCuboCubrirCucharaCuelloCuentoCuerdaCuestaCuevaCuidarCulebraCulpaCultoCumbreCumplirCunaCunetaCuotaCupo/nCu/pulaCurarCuriosoCursoCurvaCutisDamaDanzaDarDardoDa/tilDeberDe/bilDe/cadaDecirDedoDefensaDefinirDejarDelfi/nDelgadoDelitoDemoraDensoDentalDeporteDerechoDerrotaDesayunoDeseoDesfileDesnudoDestinoDesvi/oDetalleDetenerDeudaDi/aDiabloDiademaDiamanteDianaDiarioDibujoDictarDienteDietaDiezDifi/cilDignoDilemaDiluirDineroDirectoDirigirDiscoDise~oDisfrazDivaDivinoDobleDoceDolorDomingoDonDonarDoradoDormirDorsoDosDosisDrago/nDrogaDuchaDudaDueloDue~oDulceDu/oDuqueDurarDurezaDuroE/banoEbrioEcharEcoEcuadorEdadEdicio/nEdificioEditorEducarEfectoEficazEjeEjemploElefanteElegirElementoElevarElipseE/liteElixirElogioEludirEmbudoEmitirEmocio/nEmpateEmpe~oEmpleoEmpresaEnanoEncargoEnchufeEnci/aEnemigoEneroEnfadoEnfermoEnga~oEnigmaEnlaceEnormeEnredoEnsayoEnse~arEnteroEntrarEnvaseEnvi/oE/pocaEquipoErizoEscalaEscenaEscolarEscribirEscudoEsenciaEsferaEsfuerzoEspadaEspejoEspi/aEsposaEspumaEsqui/EstarEsteEstiloEstufaEtapaEternoE/ticaEtniaEvadirEvaluarEventoEvitarExactoExamenExcesoExcusaExentoExigirExilioExistirE/xitoExpertoExplicarExponerExtremoFa/bricaFa/bulaFachadaFa/cilFactorFaenaFajaFaldaFalloFalsoFaltarFamaFamiliaFamosoFarao/nFarmaciaFarolFarsaFaseFatigaFaunaFavorFaxFebreroFechaFelizFeoFeriaFerozFe/rtilFervorFesti/nFiableFianzaFiarFibraFiccio/nFichaFideoFiebreFielFieraFiestaFiguraFijarFijoFilaFileteFilialFiltroFinFincaFingirFinitoFirmaFlacoFlautaFlechaFlorFlotaFluirFlujoFlu/orFobiaFocaFogataFogo/nFolioFolletoFondoFormaForroFortunaForzarFosaFotoFracasoFra/gilFranjaFraseFraudeFrei/rFrenoFresaFri/oFritoFrutaFuegoFuenteFuerzaFugaFumarFuncio/nFundaFurgo/nFuriaFusilFu/tbolFuturoGacelaGafasGaitaGajoGalaGaleri/aGalloGambaGanarGanchoGangaGansoGarajeGarzaGasolinaGastarGatoGavila/nGemeloGemirGenGe/neroGenioGenteGeranioGerenteGermenGestoGiganteGimnasioGirarGiroGlaciarGloboGloriaGolGolfoGolosoGolpeGomaGordoGorilaGorraGotaGoteoGozarGradaGra/ficoGranoGrasaGratisGraveGrietaGrilloGripeGrisGritoGrosorGru/aGruesoGrumoGrupoGuanteGuapoGuardiaGuerraGui/aGui~oGuionGuisoGuitarraGusanoGustarHaberHa/bilHablarHacerHachaHadaHallarHamacaHarinaHazHaza~aHebillaHebraHechoHeladoHelioHembraHerirHermanoHe/roeHervirHieloHierroHi/gadoHigieneHijoHimnoHistoriaHocicoHogarHogueraHojaHombreHongoHonorHonraHoraHormigaHornoHostilHoyoHuecoHuelgaHuertaHuesoHuevoHuidaHuirHumanoHu/medoHumildeHumoHundirHuraca/nHurtoIconoIdealIdiomaI/doloIglesiaIglu/IgualIlegalIlusio/nImagenIma/nImitarImparImperioImponerImpulsoIncapazI/ndiceInerteInfielInformeIngenioInicioInmensoInmuneInnatoInsectoInstanteIntere/sI/ntimoIntuirInu/tilInviernoIraIrisIroni/aIslaIsloteJabali/Jabo/nJamo/nJarabeJardi/nJarraJaulaJazmi/nJefeJeringaJineteJornadaJorobaJovenJoyaJuergaJuevesJuezJugadorJugoJugueteJuicioJuncoJunglaJunioJuntarJu/piterJurarJustoJuvenilJuzgarKiloKoalaLabioLacioLacraLadoLadro/nLagartoLa/grimaLagunaLaicoLamerLa/minaLa/mparaLanaLanchaLangostaLanzaLa/pizLargoLarvaLa/stimaLataLa/texLatirLaurelLavarLazoLealLeccio/nLecheLectorLeerLegio/nLegumbreLejanoLenguaLentoLe~aLeo/nLeopardoLesio/nLetalLetraLeveLeyendaLibertadLibroLicorLi/derLidiarLienzoLigaLigeroLimaLi/miteLimo/nLimpioLinceLindoLi/neaLingoteLinoLinternaLi/quidoLisoListaLiteraLitioLitroLlagaLlamaLlantoLlaveLlegarLlenarLlevarLlorarLloverLluviaLoboLocio/nLocoLocuraLo/gicaLogroLombrizLomoLonjaLoteLuchaLucirLugarLujoLunaLunesLupaLustroLutoLuzMacetaMachoMaderaMadreMaduroMaestroMafiaMagiaMagoMai/zMaldadMaletaMallaMaloMama/MamboMamutMancoMandoManejarMangaManiqui/ManjarManoMansoMantaMa~anaMapaMa/quinaMarMarcoMareaMarfilMargenMaridoMa/rmolMarro/nMartesMarzoMasaMa/scaraMasivoMatarMateriaMatizMatrizMa/ximoMayorMazorcaMechaMedallaMedioMe/dulaMejillaMejorMelenaMelo/nMemoriaMenorMensajeMenteMenu/MercadoMerengueMe/ritoMesMeso/nMetaMeterMe/todoMetroMezclaMiedoMielMiembroMigaMilMilagroMilitarMillo/nMimoMinaMineroMi/nimoMinutoMiopeMirarMisaMiseriaMisilMismoMitadMitoMochilaMocio/nModaModeloMohoMojarMoldeMolerMolinoMomentoMomiaMonarcaMonedaMonjaMontoMo~oMoradaMorderMorenoMorirMorroMorsaMortalMoscaMostrarMotivoMoverMo/vilMozoMuchoMudarMuebleMuelaMuerteMuestraMugreMujerMulaMuletaMultaMundoMu~ecaMuralMuroMu/sculoMuseoMusgoMu/sicaMusloNa/carNacio/nNadarNaipeNaranjaNarizNarrarNasalNatalNativoNaturalNa/useaNavalNaveNavidadNecioNe/ctarNegarNegocioNegroNeo/nNervioNetoNeutroNevarNeveraNichoNidoNieblaNietoNi~ezNi~oNi/tidoNivelNoblezaNocheNo/minaNoriaNormaNorteNotaNoticiaNovatoNovelaNovioNubeNucaNu/cleoNudilloNudoNueraNueveNuezNuloNu/meroNutriaOasisObesoObispoObjetoObraObreroObservarObtenerObvioOcaOcasoOce/anoOchentaOchoOcioOcreOctavoOctubreOcultoOcuparOcurrirOdiarOdioOdiseaOesteOfensaOfertaOficioOfrecerOgroOi/doOi/rOjoOlaOleadaOlfatoOlivoOllaOlmoOlorOlvidoOmbligoOndaOnzaOpacoOpcio/nO/peraOpinarOponerOptarO/pticaOpuestoOracio/nOradorOralO/rbitaOrcaOrdenOrejaO/rganoOrgi/aOrgulloOrienteOrigenOrillaOroOrquestaOrugaOsadi/aOscuroOseznoOsoOstraOto~oOtroOvejaO/vuloO/xidoOxi/genoOyenteOzonoPactoPadrePaellaPa/ginaPagoPai/sPa/jaroPalabraPalcoPaletaPa/lidoPalmaPalomaPalparPanPanalPa/nicoPanteraPa~ueloPapa/PapelPapillaPaquetePararParcelaParedParirParoPa/rpadoParquePa/rrafoPartePasarPaseoPasio/nPasoPastaPataPatioPatriaPausaPautaPavoPayasoPeato/nPecadoPeceraPechoPedalPedirPegarPeinePelarPelda~oPeleaPeligroPellejoPeloPelucaPenaPensarPe~o/nPeo/nPeorPepinoPeque~oPeraPerchaPerderPerezaPerfilPericoPerlaPermisoPerroPersonaPesaPescaPe/simoPesta~aPe/taloPetro/leoPezPezu~aPicarPicho/nPiePiedraPiernaPiezaPijamaPilarPilotoPimientaPinoPintorPinzaPi~aPiojoPipaPirataPisarPiscinaPisoPistaPito/nPizcaPlacaPlanPlataPlayaPlazaPleitoPlenoPlomoPlumaPluralPobrePocoPoderPodioPoemaPoesi/aPoetaPolenPolici/aPolloPolvoPomadaPomeloPomoPompaPonerPorcio/nPortalPosadaPoseerPosiblePostePotenciaPotroPozoPradoPrecozPreguntaPremioPrensaPresoPrevioPrimoPri/ncipePrisio/nPrivarProaProbarProcesoProductoProezaProfesorProgramaProlePromesaProntoPropioPro/ximoPruebaPu/blicoPucheroPudorPuebloPuertaPuestoPulgaPulirPulmo/nPulpoPulsoPumaPuntoPu~alPu~oPupaPupilaPure/QuedarQuejaQuemarQuererQuesoQuietoQui/micaQuinceQuitarRa/banoRabiaRaboRacio/nRadicalRai/zRamaRampaRanchoRangoRapazRa/pidoRaptoRasgoRaspaRatoRayoRazaRazo/nReaccio/nRealidadReba~oReboteRecaerRecetaRechazoRecogerRecreoRectoRecursoRedRedondoReducirReflejoReformaRefra/nRefugioRegaloRegirReglaRegresoRehe/nReinoRei/rRejaRelatoRelevoRelieveRellenoRelojRemarRemedioRemoRencorRendirRentaRepartoRepetirReposoReptilResRescateResinaRespetoRestoResumenRetiroRetornoRetratoReunirReve/sRevistaReyRezarRicoRiegoRiendaRiesgoRifaRi/gidoRigorRinco/nRi~o/nRi/oRiquezaRisaRitmoRitoRizoRobleRoceRociarRodarRodeoRodillaRoerRojizoRojoRomeroRomperRonRoncoRondaRopaRoperoRosaRoscaRostroRotarRubi/RuborRudoRuedaRugirRuidoRuinaRuletaRuloRumboRumorRupturaRutaRutinaSa/badoSaberSabioSableSacarSagazSagradoSalaSaldoSaleroSalirSalmo/nSalo/nSalsaSaltoSaludSalvarSambaSancio/nSandi/aSanearSangreSanidadSanoSantoSapoSaqueSardinaSarte/nSastreSata/nSaunaSaxofo/nSeccio/nSecoSecretoSectaSedSeguirSeisSelloSelvaSemanaSemillaSendaSensorSe~alSe~orSepararSepiaSequi/aSerSerieSermo/nServirSesentaSesio/nSetaSetentaSeveroSexoSextoSidraSiestaSieteSigloSignoSi/labaSilbarSilencioSillaSi/mboloSimioSirenaSistemaSitioSituarSobreSocioSodioSolSolapaSoldadoSoledadSo/lidoSoltarSolucio/nSombraSondeoSonidoSonoroSonrisaSopaSoplarSoporteSordoSorpresaSorteoSoste/nSo/tanoSuaveSubirSucesoSudorSuegraSueloSue~oSuerteSufrirSujetoSulta/nSumarSuperarSuplirSuponerSupremoSurSurcoSure~oSurgirSustoSutilTabacoTabiqueTablaTabu/TacoTactoTajoTalarTalcoTalentoTallaTalo/nTama~oTamborTangoTanqueTapaTapeteTapiaTapo/nTaquillaTardeTareaTarifaTarjetaTarotTarroTartaTatuajeTauroTazaTazo/nTeatroTechoTeclaTe/cnicaTejadoTejerTejidoTelaTele/fonoTemaTemorTemploTenazTenderTenerTenisTensoTeori/aTerapiaTercoTe/rminoTernuraTerrorTesisTesoroTestigoTeteraTextoTezTibioTiburo/nTiempoTiendaTierraTiesoTigreTijeraTildeTimbreTi/midoTimoTintaTi/oTi/picoTipoTiraTiro/nTita/nTi/tereTi/tuloTizaToallaTobilloTocarTocinoTodoTogaToldoTomarTonoTontoToparTopeToqueTo/raxToreroTormentaTorneoToroTorpedoTorreTorsoTortugaTosToscoToserTo/xicoTrabajoTractorTraerTra/ficoTragoTrajeTramoTranceTratoTraumaTrazarTre/bolTreguaTreintaTrenTreparTresTribuTrigoTripaTristeTriunfoTrofeoTrompaTroncoTropaTroteTrozoTrucoTruenoTrufaTuberi/aTuboTuertoTumbaTumorTu/nelTu/nicaTurbinaTurismoTurnoTutorUbicarU/lceraUmbralUnidadUnirUniversoUnoUntarU~aUrbanoUrbeUrgenteUrnaUsarUsuarioU/tilUtopi/aUvaVacaVaci/oVacunaVagarVagoVainaVajillaValeVa/lidoValleValorVa/lvulaVampiroVaraVariarVaro/nVasoVecinoVectorVehi/culoVeinteVejezVelaVeleroVelozVenaVencerVendaVenenoVengarVenirVentaVenusVerVeranoVerboVerdeVeredaVerjaVersoVerterVi/aViajeVibrarVicioVi/ctimaVidaVi/deoVidrioViejoViernesVigorVilVillaVinagreVinoVi~edoVioli/nViralVirgoVirtudVisorVi/speraVistaVitaminaViudoVivazViveroVivirVivoVolca/nVolumenVolverVorazVotarVotoVozVueloVulgarYacerYateYeguaYemaYernoYesoYodoYogaYogurZafiroZanjaZapatoZarzaZonaZorroZumoZurdo";
var lookup = {};
var wordlist = null;
function dropDiacritic(word) {
    errors_1.checkNormalize();
    return utf8_1.toUtf8String(Array.prototype.filter.call(utf8_1.toUtf8Bytes(word.normalize('NFD').toLowerCase()), function (c) {
        return ((c >= 65 && c <= 90) || (c >= 97 && c <= 123));
    }));
}
function expand(word) {
    var output = [];
    Array.prototype.forEach.call(utf8_1.toUtf8Bytes(word), function (c) {
        // Acute accent
        if (c === 47) {
            output.push(204);
            output.push(129);
            // n-tilde
        }
        else if (c === 126) {
            output.push(110);
            output.push(204);
            output.push(131);
        }
        else {
            output.push(c);
        }
    });
    return utf8_1.toUtf8String(output);
}
function loadWords(lang) {
    if (wordlist != null) {
        return;
    }
    wordlist = words.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' ').map(function (w) { return expand(w); });
    wordlist.forEach(function (word, index) {
        lookup[dropDiacritic(word)] = index;
    });
    if (wordlist_1.check(lang) !== '0xf74fb7092aeacdfbf8959557de22098da512207fb9f109cb526994938cf40300') {
        wordlist = null;
        throw new Error('BIP39 Wordlist for es (Spanish) FAILED');
    }
}
var LangEs = /** @class */ (function (_super) {
    __extends(LangEs, _super);
    function LangEs() {
        return _super.call(this, 'es') || this;
    }
    LangEs.prototype.getWord = function (index) {
        loadWords(this);
        return wordlist[index];
    };
    LangEs.prototype.getWordIndex = function (word) {
        loadWords(this);
        var index = lookup[dropDiacritic(word)];
        if (typeof (index) !== 'number') {
            return -1;
        }
        return index;
    };
    return LangEs;
}(wordlist_1.Wordlist));
var langEs = new LangEs();
exports.langEs = langEs;
wordlist_1.register(langEs);


/***/ }),

/***/ 702374:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
var wordlist_1 = __webpack_require__(750817);
var utf8_1 = __webpack_require__(871254);
var errors_1 = __webpack_require__(766286);
var words = " ";
var wordlist = null;
var lookup = {};
function dropDiacritic(word) {
    errors_1.checkNormalize();
    return utf8_1.toUtf8String(Array.prototype.filter.call(utf8_1.toUtf8Bytes(word.normalize('NFD').toLowerCase()), function (c) {
        return ((c >= 65 && c <= 90) || (c >= 97 && c <= 123));
    }));
}
function expand(word) {
    var output = [];
    Array.prototype.forEach.call(utf8_1.toUtf8Bytes(word), function (c) {
        // Acute accent
        if (c === 47) {
            output.push(204);
            output.push(129);
            // Grave accent
        }
        else if (c === 45) {
            output.push(204);
            output.push(128);
        }
        else {
            output.push(c);
        }
    });
    return utf8_1.toUtf8String(output);
}
function loadWords(lang) {
    if (wordlist != null) {
        return;
    }
    wordlist = words.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' ').map(function (w) { return expand(w); });
    wordlist.forEach(function (word, index) {
        lookup[dropDiacritic(word)] = index;
    });
    if (wordlist_1.check(lang) !== '0x51deb7ae009149dc61a6bd18a918eb7ac78d2775726c68e598b92d002519b045') {
        wordlist = null;
        throw new Error('BIP39 Wordlist for fr (French) FAILED');
    }
}
var LangFr = /** @class */ (function (_super) {
    __extends(LangFr, _super);
    function LangFr() {
        return _super.call(this, 'fr') || this;
    }
    LangFr.prototype.getWord = function (index) {
        loadWords(this);
        return wordlist[index];
    };
    LangFr.prototype.getWordIndex = function (word) {
        loadWords(this);
        var index = lookup[dropDiacritic(word)];
        if (typeof (index) !== 'number') {
            return -1;
        }
        return index;
    };
    return LangFr;
}(wordlist_1.Wordlist));
var langFr = new LangFr();
exports.langFr = langFr;
wordlist_1.register(langFr);


/***/ }),

/***/ 903835:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
var wordlist_1 = __webpack_require__(750817);
var words = " ";
var wordlist = null;
function loadWords(lang) {
    if (wordlist != null) {
        return;
    }
    wordlist = words.replace(/([A-Z])/g, ' $1').toLowerCase().substring(1).split(' ');
    if (wordlist_1.check(lang) !== '0x5c1362d88fd4cf614a96f3234941d29f7d37c08c5292fde03bf62c2db6ff7620') {
        wordlist = null;
        throw new Error('BIP39 Wordlist for it (Italian) FAILED');
    }
}
var LangIt = /** @class */ (function (_super) {
    __extends(LangIt, _super);
    function LangIt() {
        return _super.call(this, 'it') || this;
    }
    LangIt.prototype.getWord = function (index) {
        loadWords(this);
        return wordlist[index];
    };
    LangIt.prototype.getWordIndex = function (word) {
        loadWords(this);
        return wordlist.indexOf(word);
    };
    return LangIt;
}(wordlist_1.Wordlist));
var langIt = new LangIt();
exports.langIt = langIt;
wordlist_1.register(langIt);


/***/ }),

/***/ 166564:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
var wordlist_1 = __webpack_require__(750817);
var bytes_1 = __webpack_require__(45901);
var utf8_1 = __webpack_require__(871254);
var errors = __importStar(__webpack_require__(766286));
var data = [
    // 4-kana words
    'AQRASRAGBAGUAIRAHBAghAURAdBAdcAnoAMEAFBAFCBKFBQRBSFBCXBCDBCHBGFBEQBpBBpQBIkBHNBeOBgFBVCBhBBhNBmOBmRBiHBiFBUFBZDBvFBsXBkFBlcBjYBwDBMBBTBBTRBWBBWXXaQXaRXQWXSRXCFXYBXpHXOQXHRXhRXuRXmXXbRXlXXwDXTRXrCXWQXWGaBWaKcaYgasFadQalmaMBacAKaRKKBKKXKKjKQRKDRKCYKCRKIDKeVKHcKlXKjHKrYNAHNBWNaRNKcNIBNIONmXNsXNdXNnBNMBNRBNrXNWDNWMNFOQABQAHQBrQXBQXFQaRQKXQKDQKOQKFQNBQNDQQgQCXQCDQGBQGDQGdQYXQpBQpQQpHQLXQHuQgBQhBQhCQuFQmXQiDQUFQZDQsFQdRQkHQbRQlOQlmQPDQjDQwXQMBQMDQcFQTBQTHQrDDXQDNFDGBDGQDGRDpFDhFDmXDZXDbRDMYDRdDTRDrXSAhSBCSBrSGQSEQSHBSVRShYShkSyQSuFSiBSdcSoESocSlmSMBSFBSFKSFNSFdSFcCByCaRCKcCSBCSRCCrCGbCEHCYXCpBCpQCIBCIHCeNCgBCgFCVECVcCmkCmwCZXCZFCdRClOClmClFCjDCjdCnXCwBCwXCcRCFQCFjGXhGNhGDEGDMGCDGCHGIFGgBGVXGVEGVRGmXGsXGdYGoSGbRGnXGwXGwDGWRGFNGFLGFOGFdGFkEABEBDEBFEXOEaBEKSENBENDEYXEIgEIkEgBEgQEgHEhFEudEuFEiBEiHEiFEZDEvBEsXEsFEdXEdREkFEbBEbRElFEPCEfkEFNYAEYAhYBNYQdYDXYSRYCEYYoYgQYgRYuRYmCYZTYdBYbEYlXYjQYRbYWRpKXpQopQnpSFpCXpIBpISphNpdBpdRpbRpcZpFBpFNpFDpFopFrLADLBuLXQLXcLaFLCXLEhLpBLpFLHXLeVLhILdHLdRLoDLbRLrXIABIBQIBCIBsIBoIBMIBRIXaIaRIKYIKRINBINuICDIGBIIDIIkIgRIxFIyQIiHIdRIbYIbRIlHIwRIMYIcRIRVITRIFBIFNIFQOABOAFOBQOaFONBONMOQFOSFOCDOGBOEQOpBOLXOIBOIFOgQOgFOyQOycOmXOsXOdIOkHOMEOMkOWWHBNHXNHXWHNXHDuHDRHSuHSRHHoHhkHmRHdRHkQHlcHlRHwBHWcgAEgAggAkgBNgBQgBEgXOgYcgLXgHjgyQgiBgsFgdagMYgWSgFQgFEVBTVXEVKBVKNVKDVKYVKRVNBVNYVDBVDxVSBVSRVCjVGNVLXVIFVhBVhcVsXVdRVbRVlRhBYhKYhDYhGShxWhmNhdahdkhbRhjohMXhTRxAXxXSxKBxNBxEQxeNxeQxhXxsFxdbxlHxjcxFBxFNxFQxFOxFoyNYyYoybcyMYuBQuBRuBruDMuCouHBudQukkuoBulVuMXuFEmCYmCRmpRmeDmiMmjdmTFmFQiADiBOiaRiKRiNBiNRiSFiGkiGFiERipRiLFiIFihYibHijBijEiMXiWBiFBiFCUBQUXFUaRUNDUNcUNRUNFUDBUSHUCDUGBUGFUEqULNULoUIRUeEUeYUgBUhFUuRUiFUsXUdFUkHUbBUjSUjYUwXUMDUcHURdUTBUrBUrXUrQZAFZXZZaRZKFZNBZQFZCXZGBZYdZpBZLDZIFZHXZHNZeQZVRZVFZmXZiBZvFZdFZkFZbHZbFZwXZcCZcRZRBvBQvBGvBLvBWvCovMYsAFsBDsaRsKFsNFsDrsSHsSFsCXsCRsEBsEHsEfspBsLBsLDsIgsIRseGsbRsFBsFQsFSdNBdSRdCVdGHdYDdHcdVbdySduDdsXdlRdwXdWYdWcdWRkBMkXOkaRkNIkNFkSFkCFkYBkpRkeNkgBkhVkmXksFklVkMBkWDkFNoBNoaQoaFoNBoNXoNaoNEoSRoEroYXoYCoYbopRopFomXojkowXorFbBEbEIbdBbjYlaRlDElMXlFDjKjjSRjGBjYBjYkjpRjLXjIBjOFjeVjbRjwBnXQnSHnpFnLXnINnMBnTRwXBwXNwXYwNFwQFwSBwGFwLXwLDweNwgBwuHwjDwnXMBXMpFMIBMeNMTHcaQcNBcDHcSFcCXcpBcLXcLDcgFcuFcnXcwXccDcTQcrFTQErXNrCHrpFrgFrbFrTHrFcWNYWNbWEHWMXWTR',
    // 5-kana words
    'ABGHABIJAEAVAYJQALZJAIaRAHNXAHdcAHbRAZJMAZJRAZTRAdVJAklmAbcNAjdRAMnRAMWYAWpRAWgRAFgBAFhBAFdcBNJBBNJDBQKBBQhcBQlmBDEJBYJkBYJTBpNBBpJFBIJBBIJDBIcABOKXBOEJBOVJBOiJBOZJBepBBeLXBeIFBegBBgGJBVJXBuocBiJRBUJQBlXVBlITBwNFBMYVBcqXBTlmBWNFBWiJBWnRBFGHBFwXXKGJXNJBXNZJXDTTXSHSXSVRXSlHXCJDXGQJXEhXXYQJXYbRXOfXXeNcXVJFXhQJXhEJXdTRXjdXXMhBXcQTXRGBXTEBXTnQXFCXXFOFXFgFaBaFaBNJaBCJaBpBaBwXaNJKaNJDaQIBaDpRaEPDaHMFamDJalEJaMZJaFaFaFNBaFQJaFLDaFVHKBCYKBEBKBHDKXaFKXGdKXEJKXpHKXIBKXZDKXwXKKwLKNacKNYJKNJoKNWcKDGdKDTRKChXKGaRKGhBKGbRKEBTKEaRKEPTKLMDKLWRKOHDKVJcKdBcKlIBKlOPKFSBKFEPKFpFNBNJNJBQNBGHNBEPNBHXNBgFNBVXNBZDNBsXNBwXNNaRNNJDNNJENNJkNDCJNDVDNGJRNJiDNZJNNsCJNJFNNFSBNFCXNFEPNFLXNFIFQJBFQCaRQJEQQLJDQLJFQIaRQOqXQHaFQHHQQVJXQVJDQhNJQmEIQZJFQsJXQJrFQWbRDJABDBYJDXNFDXCXDXLXDXZDDXsJDQqXDSJFDJCXDEPkDEqXDYmQDpSJDOCkDOGQDHEIDVJDDuDuDWEBDJFgSBNDSBSFSBGHSBIBSBTQSKVYSJQNSJQiSJCXSEqXSJYVSIiJSOMYSHAHSHaQSeCFSepQSegBSHdHSHrFShSJSJuHSJUFSkNRSrSrSWEBSFaHSJFQSFCXSFGDSFYXSFODSFgBSFVXSFhBSFxFSFkFSFbBSFMFCADdCJXBCXaFCXKFCXNFCXCXCXGBCXEJCXYBCXLDCXIBCXOPCXHXCXgBCXhBCXiBCXlDCXcHCJNBCJNFCDCJCDGBCDVXCDhBCDiDCDJdCCmNCpJFCIaRCOqXCHCHCHZJCViJCuCuCmddCJiFCdNBCdHhClEJCnUJCreSCWlgCWTRCFBFCFNBCFYBCFVFCFhFCFdSCFTBCFWDGBNBGBQFGJBCGBEqGBpBGBgQGNBEGNJYGNkOGNJRGDUFGJpQGHaBGJeNGJeEGVBlGVKjGiJDGvJHGsVJGkEBGMIJGWjNGFBFGFCXGFGBGFYXGFpBGFMFEASJEAWpEJNFECJVEIXSEIQJEOqXEOcFEeNcEHEJEHlFEJgFEhlmEmDJEmZJEiMBEUqXEoSREPBFEPXFEPKFEPSFEPEFEPpFEPLXEPIBEJPdEPcFEPTBEJnXEqlHEMpREFCXEFODEFcFYASJYJAFYBaBYBVXYXpFYDhBYCJBYJGFYYbRYeNcYJeVYiIJYZJcYvJgYvJRYJsXYsJFYMYMYreVpBNHpBEJpBwXpQxFpYEJpeNDpJeDpeSFpeCHpHUJpHbBpHcHpmUJpiiJpUJrpsJuplITpFaBpFQqpFGBpFEfpFYBpFpBpFLJpFIDpFgBpFVXpFyQpFuFpFlFpFjDpFnXpFwXpJFMpFTBLXCJLXEFLXhFLXUJLXbFLalmLNJBLSJQLCLCLGJBLLDJLHaFLeNFLeSHLeCXLepFLhaRLZsJLsJDLsJrLocaLlLlLMdbLFNBLFSBLFEHLFkFIBBFIBXFIBaQIBKXIBSFIBpHIBLXIBgBIBhBIBuHIBmXIBiFIBZXIBvFIBbFIBjQIBwXIBWFIKTRIQUJIDGFICjQIYSRIINXIJeCIVaRImEkIZJFIvJRIsJXIdCJIJoRIbBQIjYBIcqXITFVIreVIFKFIFSFIFCJIFGFIFLDIFIBIJFOIFgBIFVXIJFhIFxFIFmXIFdHIFbBIJFrIJFWOBGBOQfXOOKjOUqXOfXBOqXEOcqXORVJOFIBOFlDHBIOHXiFHNTRHCJXHIaRHHJDHHEJHVbRHZJYHbIBHRsJHRkDHWlmgBKFgBSBgBCDgBGHgBpBgBIBgBVJgBuBgBvFgKDTgQVXgDUJgGSJgOqXgmUMgZIJgTUJgWIEgFBFgFNBgFDJgFSFgFGBgFYXgJFOgFgQgFVXgFhBgFbHgJFWVJABVQKcVDgFVOfXVeDFVhaRVmGdViJYVMaRVFNHhBNDhBCXhBEqhBpFhBLXhNJBhSJRheVXhhKEhxlmhZIJhdBQhkIJhbMNhMUJhMZJxNJgxQUJxDEkxDdFxSJRxplmxeSBxeCXxeGFxeYXxepQxegBxWVcxFEQxFLXxFIBxFgBxFxDxFZtxFdcxFbBxFwXyDJXyDlcuASJuDJpuDIBuCpJuGSJuIJFueEFuZIJusJXudWEuoIBuWGJuFBcuFKEuFNFuFQFuFDJuFGJuFVJuFUtuFdHuFTBmBYJmNJYmQhkmLJDmLJomIdXmiJYmvJRmsJRmklmmMBymMuCmclmmcnQiJABiJBNiJBDiBSFiBCJiBEFiBYBiBpFiBLXiBTHiJNciDEfiCZJiECJiJEqiOkHiHKFieNDiHJQieQcieDHieSFieCXieGFieEFieIHiegFihUJixNoioNXiFaBiFKFiFNDiFEPiFYXitFOitFHiFgBiFVEiFmXiFitiFbBiFMFiFrFUCXQUIoQUIJcUHQJUeCEUHwXUUJDUUqXUdWcUcqXUrnQUFNDUFSHUFCFUFEfUFLXUtFOZBXOZXSBZXpFZXVXZEQJZEJkZpDJZOqXZeNHZeCDZUqXZFBQZFEHZFLXvBAFvBKFvBCXvBEPvBpHvBIDvBgFvBuHvQNJvFNFvFGBvFIBvJFcsXCDsXLXsXsXsXlFsXcHsQqXsJQFsEqXseIFsFEHsFjDdBxOdNpRdNJRdEJbdpJRdhZJdnSJdrjNdFNJdFQHdFhNkNJDkYaRkHNRkHSRkVbRkuMRkjSJkcqDoSJFoEiJoYZJoOfXohEBoMGQocqXbBAFbBXFbBaFbBNDbBGBbBLXbBTBbBWDbGJYbIJHbFQqbFpQlDgQlOrFlVJRjGEBjZJRnXvJnXbBnEfHnOPDngJRnxfXnUJWwXEJwNpJwDpBwEfXwrEBMDCJMDGHMDIJMLJDcQGDcQpHcqXccqNFcqCXcFCJRBSBRBGBRBEJRBpQTBNFTBQJTBpBTBVXTFABTFSBTFCFTFGBTFMDrXCJrXLDrDNJrEfHrFQJrFitWNjdWNTR',
    // 6-kana words
    'AKLJMANOPFASNJIAEJWXAYJNRAIIbRAIcdaAeEfDAgidRAdjNYAMYEJAMIbRAFNJBAFpJFBBIJYBDZJFBSiJhBGdEBBEJfXBEJqXBEJWRBpaUJBLXrXBIYJMBOcfXBeEfFBestXBjNJRBcDJOBFEqXXNvJRXDMBhXCJNYXOAWpXONJWXHDEBXeIaRXhYJDXZJSJXMDJOXcASJXFVJXaBQqXaBZJFasXdQaFSJQaFEfXaFpJHaFOqXKBNSRKXvJBKQJhXKEJQJKEJGFKINJBKIJjNKgJNSKVElmKVhEBKiJGFKlBgJKjnUJKwsJYKMFIJKFNJDKFIJFKFOfXNJBSFNJBCXNBpJFNJBvQNJBMBNJLJXNJOqXNJeCXNJeGFNdsJCNbTKFNwXUJQNFEPQDiJcQDMSJQSFpBQGMQJQJeOcQyCJEQUJEBQJFBrQFEJqDXDJFDJXpBDJXIMDGiJhDIJGRDJeYcDHrDJDVXgFDkAWpDkIgRDjDEqDMvJRDJFNFDJFIBSKclmSJQOFSJQVHSJQjDSJGJBSJGJFSECJoSHEJqSJHTBSJVJDSViJYSZJNBSJsJDSFSJFSFEfXSJFLXCBUJVCJXSBCJXpBCXVJXCJXsXCJXdFCJNJHCLIJgCHiJFCVNJMChCJhCUHEJCsJTRCJdYcCoQJCCFEfXCFIJgCFUJxCFstFGJBaQGJBIDGQJqXGYJNRGJHKFGeQqDGHEJFGJeLXGHIiJGHdBlGUJEBGkIJTGFQPDGJFEqEAGegEJIJBEJVJXEhQJTEiJNcEJZJFEJoEqEjDEqEPDsXEPGJBEPOqXEPeQFEfDiDEJfEFEfepQEfMiJEqXNBEqDIDEqeSFEqVJXEMvJRYXNJDYXEJHYKVJcYYJEBYJeEcYJUqXYFpJFYFstXpAZJMpBSJFpNBNFpeQPDpHLJDpHIJFpHgJFpeitFpHZJFpJFADpFSJFpJFCJpFOqXpFitBpJFZJLXIJFLIJgRLVNJWLVHJMLwNpJLFGJBLFLJDLFOqXLJFUJIBDJXIBGJBIJBYQIJBIBIBOqXIBcqDIEGJFILNJTIIJEBIOiJhIJeNBIJeIBIhiJIIWoTRIJFAHIJFpBIJFuHIFUtFIJFTHOSBYJOEcqXOHEJqOvBpFOkVJrObBVJOncqDOcNJkHhNJRHuHJuHdMhBgBUqXgBsJXgONJBgHNJDgHHJQgJeitgHsJXgJyNagyDJBgZJDrgsVJQgkEJNgkjSJgJFAHgFCJDgFZtMVJXNFVXQfXVJXDJVXoQJVQVJQVDEfXVDvJHVEqNFVeQfXVHpJFVHxfXVVJSRVVmaRVlIJOhCXVJhHjYkhxCJVhWVUJhWiJcxBNJIxeEqDxfXBFxcFEPxFSJFxFYJXyBDQJydaUJyFOPDuYCJYuLvJRuHLJXuZJLDuFOPDuFZJHuFcqXmKHJdmCQJcmOsVJiJAGFitLCFieOfXiestXiZJMEikNJQirXzFiFQqXiFIJFiFZJFiFvtFUHpJFUteIcUteOcUVCJkUhdHcUbEJEUJqXQUMNJhURjYkUFitFZDGJHZJIxDZJVJXZJFDJZJFpQvBNJBvBSJFvJxBrseQqDsVFVJdFLJDkEJNBkmNJYkFLJDoQJOPoGsJRoEAHBoEJfFbBQqDbBZJHbFVJXlFIJBjYIrXjeitcjjCEBjWMNBwXQfXwXOaFwDsJXwCJTRwrCZJMDNJQcDDJFcqDOPRYiJFTBsJXTQIJBTFEfXTFLJDrXEJFrEJXMrFZJFWEJdEWYTlm',
    // 7-kana words
    'ABCDEFACNJTRAMBDJdAcNJVXBLNJEBXSIdWRXErNJkXYDJMBXZJCJaXMNJaYKKVJKcKDEJqXKDcNJhKVJrNYKbgJVXKFVJSBNBYBwDNJeQfXNJeEqXNhGJWENJFiJRQlIJbEQJfXxDQqXcfXQFNDEJQFwXUJDYcnUJDJIBgQDIUJTRDJFEqDSJQSJFSJQIJFSOPeZtSJFZJHCJXQfXCTDEqFGJBSJFGJBOfXGJBcqXGJHNJDGJRLiJEJfXEqEJFEJPEFpBEJYJBZJFYBwXUJYiJMEBYJZJyTYTONJXpQMFXFpeGIDdpJFstXpJFcPDLBVSJRLHQJqXLJFZJFIJBNJDIJBUqXIBkFDJIJEJPTIYJGWRIJeQPDIJeEfHIJFsJXOqGDSFHXEJqXgJCsJCgGQJqXgdQYJEgFMFNBgJFcqDVJwXUJVJFZJchIgJCCxOEJqXxOwXUJyDJBVRuscisciJBiJBieUtqXiJFDJkiFsJXQUGEZJcUJFsJXZtXIrXZDZJDrZJFNJDZJFstXvJFQqXvJFCJEsJXQJqkhkNGBbDJdTRbYJMEBlDwXUJMEFiJFcfXNJDRcNJWMTBLJXC',
    // 8-kana words
    'BraFUtHBFSJFdbNBLJXVJQoYJNEBSJBEJfHSJHwXUJCJdAZJMGjaFVJXEJPNJBlEJfFiJFpFbFEJqIJBVJCrIBdHiJhOPFChvJVJZJNJWxGFNIFLueIBQJqUHEJfUFstOZJDrlXEASJRlXVJXSFwVJNJWD',
    // 9-kana words
    'QJEJNNJDQJEJIBSFQJEJxegBQJEJfHEPSJBmXEJFSJCDEJqXLXNJFQqXIcQsFNJFIFEJqXUJgFsJXIJBUJEJfHNFvJxEqXNJnXUJFQqD',
    // 10-kana words
    'IJBEJqXZJ'
];
// Maps each character into its kana value (the index)
var mapping = "~~AzB~X~a~KN~Q~D~S~C~G~E~Y~p~L~I~O~eH~g~V~hxyumi~~U~~Z~~v~~s~~dkoblPjfnqwMcRTr~W~~~F~~~~~Jt";
var wordlist = null;
function hex(word) {
    return bytes_1.hexlify(utf8_1.toUtf8Bytes(word));
}
var KiYoKu = '0xe3818de38284e3818f';
var KyoKu = '0xe3818de38283e3818f';
function loadWords(lang) {
    if (wordlist !== null) {
        return;
    }
    wordlist = [];
    // Transforms for normalizing (sort is a not quite UTF-8)
    var transform = {};
    // Delete the diacritic marks
    transform[utf8_1.toUtf8String([227, 130, 154])] = false;
    transform[utf8_1.toUtf8String([227, 130, 153])] = false;
    // Some simple transforms that sort out most of the order
    transform[utf8_1.toUtf8String([227, 130, 133])] = utf8_1.toUtf8String([227, 130, 134]);
    transform[utf8_1.toUtf8String([227, 129, 163])] = utf8_1.toUtf8String([227, 129, 164]);
    transform[utf8_1.toUtf8String([227, 130, 131])] = utf8_1.toUtf8String([227, 130, 132]);
    transform[utf8_1.toUtf8String([227, 130, 135])] = utf8_1.toUtf8String([227, 130, 136]);
    // Normalize words using the transform
    function normalize(word) {
        var result = '';
        for (var i = 0; i < word.length; i++) {
            var kana = word[i];
            var target = transform[kana];
            if (target === false) {
                continue;
            }
            if (target) {
                kana = target;
            }
            result += kana;
        }
        return result;
    }
    // Sort how the Japanese list is sorted
    function sortJapanese(a, b) {
        a = normalize(a);
        b = normalize(b);
        if (a < b) {
            return -1;
        }
        if (a > b) {
            return 1;
        }
        return 0;
    }
    // Load all the words
    for (var length_1 = 3; length_1 <= 9; length_1++) {
        var d = data[length_1 - 3];
        for (var offset = 0; offset < d.length; offset += length_1) {
            var word = [];
            for (var i = 0; i < length_1; i++) {
                var k = mapping.indexOf(d[offset + i]);
                word.push(227);
                word.push((k & 0x40) ? 130 : 129);
                word.push((k & 0x3f) + 128);
            }
            wordlist.push(utf8_1.toUtf8String(word));
        }
    }
    wordlist.sort(sortJapanese);
    // For some reason kyoku and kiyoku are flipped in node (!!).
    // The order SHOULD be:
    //   - kyoku
    //   - kiyoku
    if (hex(wordlist[442]) === KiYoKu && hex(wordlist[443]) === KyoKu) {
        var tmp = wordlist[442];
        wordlist[442] = wordlist[443];
        wordlist[443] = tmp;
    }
    if (wordlist_1.check(lang) !== '0xcb36b09e6baa935787fd762ce65e80b0c6a8dabdfbc3a7f86ac0e2c4fd111600') {
        wordlist = null;
        throw new Error('BIP39 Wordlist for ja (Japanese) FAILED');
    }
}
var LangJa = /** @class */ (function (_super) {
    __extends(LangJa, _super);
    function LangJa() {
        return _super.call(this, 'ja') || this;
    }
    LangJa.prototype.getWord = function (index) {
        loadWords(this);
        return wordlist[index];
    };
    LangJa.prototype.getWordIndex = function (word) {
        loadWords(this);
        return wordlist.indexOf(word);
    };
    LangJa.prototype.split = function (mnemonic) {
        errors.checkNormalize();
        return mnemonic.split(/(?:\u3000| )+/g);
    };
    LangJa.prototype.join = function (words) {
        return words.join('\u3000');
    };
    return LangJa;
}(wordlist_1.Wordlist));
var langJa = new LangJa();
exports.langJa = langJa;
wordlist_1.register(langJa);


/***/ }),

/***/ 116818:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
var wordlist_1 = __webpack_require__(750817);
var utf8_1 = __webpack_require__(871254);
var data = [
    'OYAa',
    'ATAZoATBl3ATCTrATCl8ATDloATGg3ATHT8ATJT8ATJl3ATLlvATLn4ATMT8ATMX8ATMboATMgoAToLbAToMTATrHgATvHnAT3AnAT3JbAT3MTAT8DbAT8JTAT8LmAT8MYAT8MbAT#LnAUHT8AUHZvAUJXrAUJX8AULnrAXJnvAXLUoAXLgvAXMn6AXRg3AXrMbAX3JTAX3QbAYLn3AZLgvAZrSUAZvAcAZ8AaAZ8AbAZ8AnAZ8HnAZ8LgAZ8MYAZ8MgAZ8OnAaAboAaDTrAaFTrAaJTrAaJboAaLVoAaMXvAaOl8AaSeoAbAUoAbAg8AbAl4AbGnrAbMT8AbMXrAbMn4AbQb8AbSV8AbvRlAb8AUAb8AnAb8HgAb8JTAb8NTAb8RbAcGboAcLnvAcMT8AcMX8AcSToAcrAaAcrFnAc8AbAc8MgAfGgrAfHboAfJnvAfLV8AfLkoAfMT8AfMnoAfQb8AfScrAfSgrAgAZ8AgFl3AgGX8AgHZvAgHgrAgJXoAgJX8AgJboAgLZoAgLn4AgOX8AgoATAgoAnAgoCUAgoJgAgoLXAgoMYAgoSeAgrDUAgrJTAhrFnAhrLjAhrQgAjAgoAjJnrAkMX8AkOnoAlCTvAlCV8AlClvAlFg4AlFl6AlFn3AloSnAlrAXAlrAfAlrFUAlrFbAlrGgAlrOXAlvKnAlvMTAl3AbAl3MnAnATrAnAcrAnCZ3AnCl8AnDg8AnFboAnFl3AnHX4AnHbrAnHgrAnIl3AnJgvAnLXoAnLX4AnLbrAnLgrAnLhrAnMXoAnMgrAnOn3AnSbrAnSeoAnvLnAn3OnCTGgvCTSlvCTvAUCTvKnCTvNTCT3CZCT3GUCT3MTCT8HnCUCZrCULf8CULnvCU3HnCU3JUCY6NUCbDb8CbFZoCbLnrCboOTCboScCbrFnCbvLnCb8AgCb8HgCb$LnCkLfoClBn3CloDUDTHT8DTLl3DTSU8DTrAaDTrLXDTrLjDTrOYDTrOgDTvFXDTvFnDT3HUDT3LfDUCT9DUDT4DUFVoDUFV8DUFkoDUGgrDUJnrDULl8DUMT8DUMXrDUMX4DUMg8DUOUoDUOgvDUOg8DUSToDUSZ8DbDXoDbDgoDbGT8DbJn3DbLg3DbLn4DbMXrDbMg8DbOToDboJXGTClvGTDT8GTFZrGTLVoGTLlvGTLl3GTMg8GTOTvGTSlrGToCUGTrDgGTrJYGTrScGTtLnGTvAnGTvQgGUCZrGUDTvGUFZoGUHXrGULnvGUMT8GUoMgGXoLnGXrMXGXrMnGXvFnGYLnvGZOnvGZvOnGZ8LaGZ8LmGbAl3GbDYvGbDlrGbHX3GbJl4GbLV8GbLn3GbMn4GboJTGboRfGbvFUGb3GUGb4JnGgDX3GgFl$GgJlrGgLX6GgLZoGgLf8GgOXoGgrAgGgrJXGgrMYGgrScGgvATGgvOYGnAgoGnJgvGnLZoGnLg3GnLnrGnQn8GnSbrGnrMgHTClvHTDToHTFT3HTQT8HToJTHToJgHTrDUHTrMnHTvFYHTvRfHT8MnHT8SUHUAZ8HUBb4HUDTvHUoMYHXFl6HXJX6HXQlrHXrAUHXrMnHXrSbHXvFYHXvKXHX3LjHX3MeHYvQlHZrScHZvDbHbAcrHbFT3HbFl3HbJT8HbLTrHbMT8HbMXrHbMbrHbQb8HbSX3HboDbHboJTHbrFUHbrHgHbrJTHb8JTHb8MnHb8QgHgAlrHgDT3HgGgrHgHgrHgJTrHgJT8HgLX@HgLnrHgMT8HgMX8HgMboHgOnrHgQToHgRg3HgoHgHgrCbHgrFnHgrLVHgvAcHgvAfHnAloHnCTrHnCnvHnGTrHnGZ8HnGnvHnJT8HnLf8HnLkvHnMg8HnRTrITvFUITvFnJTAXrJTCV8JTFT3JTFT8JTFn4JTGgvJTHT8JTJT8JTJXvJTJl3JTJnvJTLX4JTLf8JTLhvJTMT8JTMXrJTMnrJTObrJTQT8JTSlvJT8DUJT8FkJT8MTJT8OXJT8OgJT8QUJT8RfJUHZoJXFT4JXFlrJXGZ8JXGnrJXLV8JXLgvJXMXoJXMX3JXNboJXPlvJXoJTJXoLkJXrAXJXrHUJXrJgJXvJTJXvOnJX4KnJYAl3JYJT8JYLhvJYQToJYrQXJY6NUJbAl3JbCZrJbDloJbGT8JbGgrJbJXvJbJboJbLf8JbLhrJbLl3JbMnvJbRg8JbSZ8JboDbJbrCZJbrSUJb3KnJb8LnJfRn8JgAXrJgCZrJgDTrJgGZrJgGZ8JgHToJgJT8JgJXoJgJgvJgLX4JgLZ3JgLZ8JgLn4JgMgrJgMn4JgOgvJgPX6JgRnvJgSToJgoCZJgoJbJgoMYJgrJXJgrJgJgrLjJg6MTJlCn3JlGgvJlJl8Jl4AnJl8FnJl8HgJnAToJnATrJnAbvJnDUoJnGnrJnJXrJnJXvJnLhvJnLnrJnLnvJnMToJnMT8JnMXvJnMX3JnMg8JnMlrJnMn4JnOX8JnST4JnSX3JnoAgJnoAnJnoJTJnoObJnrAbJnrAkJnrHnJnrJTJnrJYJnrOYJnrScJnvCUJnvFaJnvJgJnvJnJnvOYJnvQUJnvRUJn3FnJn3JTKnFl3KnLT6LTDlvLTMnoLTOn3LTRl3LTSb4LTSlrLToAnLToJgLTrAULTrAcLTrCULTrHgLTrMgLT3JnLULnrLUMX8LUoJgLVATrLVDTrLVLb8LVoJgLV8MgLV8RTLXDg3LXFlrLXrCnLXrLXLX3GTLX4GgLX4OYLZAXrLZAcrLZAgrLZAhrLZDXyLZDlrLZFbrLZFl3LZJX6LZJX8LZLc8LZLnrLZSU8LZoJTLZoJnLZrAgLZrAnLZrJYLZrLULZrMgLZrSkLZvAnLZvGULZvJeLZvOTLZ3FZLZ4JXLZ8STLZ8ScLaAT3LaAl3LaHT8LaJTrLaJT8LaJXrLaJgvLaJl4LaLVoLaMXrLaMXvLaMX8LbClvLbFToLbHlrLbJn4LbLZ3LbLhvLbMXrLbMnoLbvSULcLnrLc8HnLc8MTLdrMnLeAgoLeOgvLeOn3LfAl3LfLnvLfMl3LfOX8Lf8AnLf8JXLf8LXLgJTrLgJXrLgJl8LgMX8LgRZrLhCToLhrAbLhrFULhrJXLhvJYLjHTrLjHX4LjJX8LjLhrLjSX3LjSZ4LkFX4LkGZ8LkGgvLkJTrLkMXoLkSToLkSU8LkSZ8LkoOYLl3FfLl3MgLmAZrLmCbrLmGgrLmHboLmJnoLmJn3LmLfoLmLhrLmSToLnAX6LnAb6LnCZ3LnCb3LnDTvLnDb8LnFl3LnGnrLnHZvLnHgvLnITvLnJT8LnJX8LnJlvLnLf8LnLg6LnLhvLnLnoLnMXrLnMg8LnQlvLnSbrLnrAgLnrAnLnrDbLnrFkLnrJdLnrMULnrOYLnrSTLnvAnLnvDULnvHgLnvOYLnvOnLn3GgLn4DULn4JTLn4JnMTAZoMTAloMTDb8MTFT8MTJnoMTJnrMTLZrMTLhrMTLkvMTMX8MTRTrMToATMTrDnMTrOnMT3JnMT4MnMT8FUMT8FaMT8FlMT8GTMT8GbMT8GnMT8HnMT8JTMT8JbMT8OTMUCl8MUJTrMUJU8MUMX8MURTrMUSToMXAX6MXAb6MXCZoMXFXrMXHXrMXLgvMXOgoMXrAUMXrAnMXrHgMXrJYMXrJnMXrMTMXrMgMXrOYMXrSZMXrSgMXvDUMXvOTMX3JgMX3OTMX4JnMX8DbMX8FnMX8HbMX8HgMX8HnMX8LbMX8MnMX8OnMYAb8MYGboMYHTvMYHX4MYLTrMYLnvMYMToMYOgvMYRg3MYSTrMbAToMbAXrMbAl3MbAn8MbGZ8MbJT8MbJXrMbMXvMbMX8MbMnoMbrMUMb8AfMb8FbMb8FkMcJXoMeLnrMgFl3MgGTvMgGXoMgGgrMgGnrMgHT8MgHZrMgJnoMgLnrMgLnvMgMT8MgQUoMgrHnMgvAnMg8HgMg8JYMg8LfMloJnMl8ATMl8AXMl8JYMnAToMnAT4MnAZ8MnAl3MnAl4MnCl8MnHT8MnHg8MnJnoMnLZoMnLhrMnMXoMnMX3MnMnrMnOgvMnrFbMnrFfMnrFnMnrNTMnvJXNTMl8OTCT3OTFV8OTFn3OTHZvOTJXrOTOl3OT3ATOT3JUOT3LZOT3LeOT3MbOT8ATOT8AbOT8AgOT8MbOUCXvOUMX3OXHXvOXLl3OXrMUOXvDbOX6NUOX8JbOYFZoOYLbrOYLkoOYMg8OYSX3ObHTrObHT4ObJgrObLhrObMX3ObOX8Ob8FnOeAlrOeJT8OeJXrOeJnrOeLToOeMb8OgJXoOgLXoOgMnrOgOXrOgOloOgoAgOgoJbOgoMYOgoSTOg8AbOjLX4OjMnoOjSV8OnLVoOnrAgOn3DUPXQlrPXvFXPbvFTPdAT3PlFn3PnvFbQTLn4QToAgQToMTQULV8QURg8QUoJnQXCXvQbFbrQb8AaQb8AcQb8FbQb8MYQb8ScQeAlrQeLhrQjAn3QlFXoQloJgQloSnRTLnvRTrGURTrJTRUJZrRUoJlRUrQnRZrLmRZrMnRZrSnRZ8ATRZ8JbRZ8ScRbMT8RbST3RfGZrRfMX8RfMgrRfSZrRnAbrRnGT8RnvJgRnvLfRnvMTRn8AaSTClvSTJgrSTOXrSTRg3STRnvSToAcSToAfSToAnSToHnSToLjSToMTSTrAaSTrEUST3BYST8AgST8LmSUAZvSUAgrSUDT4SUDT8SUGgvSUJXoSUJXvSULTrSU8JTSU8LjSV8AnSV8JgSXFToSXLf8SYvAnSZrDUSZrMUSZrMnSZ8HgSZ8JTSZ8JgSZ8MYSZ8QUSaQUoSbCT3SbHToSbQYvSbSl4SboJnSbvFbSb8HbSb8JgSb8OTScGZrScHgrScJTvScMT8ScSToScoHbScrMTScvAnSeAZrSeAcrSeHboSeJUoSeLhrSeMT8SeMXrSe6JgSgHTrSkJnoSkLnvSk8CUSlFl3SlrSnSl8GnSmAboSmGT8SmJU8',
    'ATLnDlATrAZoATrJX4ATrMT8ATrMX4ATrRTrATvDl8ATvJUoATvMl8AT3AToAT3MX8AT8CT3AT8DT8AT8HZrAT8HgoAUAgFnAUCTFnAXoMX8AXrAT8AXrGgvAXrJXvAXrOgoAXvLl3AZvAgoAZvFbrAZvJXoAZvJl8AZvJn3AZvMX8AZvSbrAZ8FZoAZ8LZ8AZ8MU8AZ8OTvAZ8SV8AZ8SX3AbAgFZAboJnoAbvGboAb8ATrAb8AZoAb8AgrAb8Al4Ab8Db8Ab8JnoAb8LX4Ab8LZrAb8LhrAb8MT8Ab8OUoAb8Qb8Ab8ST8AcrAUoAcrAc8AcrCZ3AcrFT3AcrFZrAcrJl4AcrJn3AcrMX3AcrOTvAc8AZ8Ac8MT8AfAcJXAgoFn4AgoGgvAgoGnrAgoLc8AgoMXoAgrLnrAkrSZ8AlFXCTAloHboAlrHbrAlrLhrAlrLkoAl3CZrAl3LUoAl3LZrAnrAl4AnrMT8An3HT4BT3IToBX4MnvBb!Ln$CTGXMnCToLZ4CTrHT8CT3JTrCT3RZrCT#GTvCU6GgvCU8Db8CU8GZrCU8HT8CboLl3CbrGgrCbrMU8Cb8DT3Cb8GnrCb8LX4Cb8MT8Cb8ObrCgrGgvCgrKX4Cl8FZoDTrAbvDTrDboDTrGT6DTrJgrDTrMX3DTrRZrDTrRg8DTvAVvDTvFZoDT3DT8DT3Ln3DT4HZrDT4MT8DT8AlrDT8MT8DUAkGbDUDbJnDYLnQlDbDUOYDbMTAnDbMXSnDboAT3DboFn4DboLnvDj6JTrGTCgFTGTGgFnGTJTMnGTLnPlGToJT8GTrCT3GTrLVoGTrLnvGTrMX3GTrMboGTvKl3GZClFnGZrDT3GZ8DTrGZ8FZ8GZ8MXvGZ8On8GZ8ST3GbCnQXGbMbFnGboFboGboJg3GboMXoGb3JTvGb3JboGb3Mn6Gb3Qb8GgDXLjGgMnAUGgrDloGgrHX4GgrSToGgvAXrGgvAZvGgvFbrGgvLl3GgvMnvGnDnLXGnrATrGnrMboGnuLl3HTATMnHTAgCnHTCTCTHTrGTvHTrHTvHTrJX8HTrLl8HTrMT8HTrMgoHTrOTrHTuOn3HTvAZrHTvDTvHTvGboHTvJU8HTvLl3HTvMXrHTvQb4HT4GT6HT4JT8HT4Jb#HT8Al3HT8GZrHT8GgrHT8HX4HT8Jb8HT8JnoHT8LTrHT8LgvHT8SToHT8SV8HUoJUoHUoJX8HUoLnrHXrLZoHXvAl3HX3LnrHX4FkvHX4LhrHX4MXoHX4OnoHZrAZ8HZrDb8HZrGZ8HZrJnrHZvGZ8HZvLnvHZ8JnvHZ8LhrHbCXJlHbMTAnHboJl4HbpLl3HbrJX8HbrLnrHbrMnvHbvRYrHgoSTrHgrFV8HgrGZ8HgrJXoHgrRnvHgvBb!HgvGTrHgvHX4HgvHn!HgvLTrHgvSU8HnDnLbHnFbJbHnvDn8Hn6GgvHn!BTvJTCTLnJTQgFnJTrAnvJTrLX4JTrOUoJTvFn3JTvLnrJTvNToJT3AgoJT3Jn4JT3LhvJT3ObrJT8AcrJT8Al3JT8JT8JT8JnoJT8LX4JT8LnrJT8MX3JT8Rg3JT8Sc8JUoBTvJU8AToJU8GZ8JU8GgvJU8JTrJU8JXrJU8JnrJU8LnvJU8ScvJXHnJlJXrGgvJXrJU8JXrLhrJXrMT8JXrMXrJXrQUoJXvCTvJXvGZ8JXvGgrJXvQT8JX8Ab8JX8DT8JX8GZ8JX8HZvJX8LnrJX8MT8JX8MXoJX8MnvJX8ST3JYGnCTJbAkGbJbCTAnJbLTAcJboDT3JboLb6JbrAnvJbrCn3JbrDl8JbrGboJbrIZoJbrJnvJbrMnvJbrQb4Jb8RZrJeAbAnJgJnFbJgScAnJgrATrJgvHZ8JgvMn4JlJlFbJlLiQXJlLjOnJlRbOlJlvNXoJlvRl3Jl4AcrJl8AUoJl8MnrJnFnMlJnHgGbJnoDT8JnoFV8JnoGgvJnoIT8JnoQToJnoRg3JnrCZ3JnrGgrJnrHTvJnrLf8JnrOX8JnvAT3JnvFZoJnvGT8JnvJl4JnvMT8JnvMX8JnvOXrJnvPX6JnvSX3JnvSZrJn3MT8Jn3MX8Jn3RTrLTATKnLTJnLTLTMXKnLTRTQlLToGb8LTrAZ8LTrCZ8LTrDb8LTrHT8LT3PX6LT4FZoLT$CTvLT$GgrLUvHX3LVoATrLVoAgoLVoJboLVoMX3LVoRg3LV8CZ3LV8FZoLV8GTvLXrDXoLXrFbrLXvAgvLXvFlrLXvLl3LXvRn6LX4Mb8LX8GT8LYCXMnLYrMnrLZoSTvLZrAZvLZrAloLZrFToLZrJXvLZrJboLZrJl4LZrLnrLZrMT8LZrOgvLZrRnvLZrST4LZvMX8LZvSlvLZ8AgoLZ8CT3LZ8JT8LZ8LV8LZ8LZoLZ8Lg8LZ8SV8LZ8SbrLZ$HT8LZ$Mn4La6CTvLbFbMnLbRYFTLbSnFZLboJT8LbrAT9LbrGb3LbrQb8LcrJX8LcrMXrLerHTvLerJbrLerNboLgrDb8LgrGZ8LgrHTrLgrMXrLgrSU8LgvJTrLgvLl3Lg6Ll3LhrLnrLhrMT8LhvAl4LiLnQXLkoAgrLkoJT8LkoJn4LlrSU8Ll3FZoLl3HTrLl3JX8Ll3JnoLl3LToLmLeFbLnDUFbLnLVAnLnrATrLnrAZoLnrAb8LnrAlrLnrGgvLnrJU8LnrLZrLnrLhrLnrMb8LnrOXrLnrSZ8LnvAb4LnvDTrLnvDl8LnvHTrLnvHbrLnvJT8LnvJU8LnvJbrLnvLhvLnvMX8LnvMb8LnvNnoLnvSU8Ln3Al3Ln4FZoLn4GT6Ln4JgvLn4LhrLn4MT8Ln4SToMToCZrMToJX8MToLX4MToLf8MToRg3MTrEloMTvGb6MT3BTrMT3Lb6MT8AcrMT8AgrMT8GZrMT8JnoMT8LnrMT8MX3MUOUAnMXAbFnMXoAloMXoJX8MXoLf8MXoLl8MXrAb8MXrDTvMXrGT8MXrGgrMXrHTrMXrLf8MXrMU8MXrOXvMXrQb8MXvGT8MXvHTrMXvLVoMX3AX3MX3Jn3MX3LhrMX3MX3MX4AlrMX4OboMX8GTvMX8GZrMX8GgrMX8JT8MX8JX8MX8LhrMX8MT8MYDUFbMYMgDbMbGnFfMbvLX4MbvLl3Mb8Mb8Mb8ST4MgGXCnMg8ATrMg8AgoMg8CZrMg8DTrMg8DboMg8HTrMg8JgrMg8LT8MloJXoMl8AhrMl8JT8MnLgAUMnoJXrMnoLX4MnoLhrMnoMT8MnrAl4MnrDb8MnrOTvMnrOgvMnrQb8MnrSU8MnvGgrMnvHZ8Mn3MToMn4DTrMn4LTrMn4Mg8NnBXAnOTFTFnOToAToOTrGgvOTrJX8OT3JXoOT6MTrOT8GgrOT8HTpOT8MToOUoHT8OUoJT8OUoLn3OXrAgoOXrDg8OXrMT8OXvSToOX6CTvOX8CZrOX8OgrOb6HgvOb8AToOb8MT8OcvLZ8OgvAlrOgvHTvOgvJTrOgvJnrOgvLZrOgvLn4OgvMT8OgvRTrOg8AZoOg8DbvOnrOXoOnvJn4OnvLhvOnvRTrOn3GgoOn3JnvOn6JbvOn8OTrPTGYFTPbBnFnPbGnDnPgDYQTPlrAnvPlrETvPlrLnvPlrMXvPlvFX4QTMTAnQTrJU8QYCnJlQYJlQlQbGTQbQb8JnrQb8LZoQb8LnvQb8MT8Qb8Ml8Qb8ST4QloAl4QloHZvQloJX8QloMn8QnJZOlRTrAZvRTrDTrRTvJn4RTvLhvRT4Jb8RZrAZrRZ8AkrRZ8JU8RZ8LV8RZ8LnvRbJlQXRg3GboRg3MnvRg8AZ8Rg8JboRg8Jl4RnLTCbRnvFl3RnvQb8SToAl4SToCZrSToFZoSToHXrSToJU8SToJgvSToJl4SToLhrSToMX3STrAlvSTrCT9STrCgrSTrGgrSTrHXrSTrHboSTrJnoSTrNboSTvLnrST4AZoST8Ab8ST8JT8SUoJn3SU6HZ#SU6JTvSU8Db8SU8HboSU8LgrSV8JT8SZrAcrSZrAl3SZrJT8SZrJnvSZrMT8SZvLUoSZ4FZoSZ8JnoSZ8RZrScoLnrScoMT8ScoMX8ScrAT4ScrAZ8ScrLZ8ScrLkvScvDb8ScvLf8ScvNToSgrFZrShvKnrSloHUoSloLnrSlrMXoSl8HgrSmrJUoSn3BX6',
    'ATFlOn3ATLgrDYAT4MTAnAT8LTMnAYJnRTrAbGgJnrAbLV8LnAbvNTAnAeFbLg3AgOYMXoAlQbFboAnDboAfAnJgoJTBToDgAnBUJbAl3BboDUAnCTDlvLnCTFTrSnCYoQTLnDTwAbAnDUDTrSnDUHgHgrDX8LXFnDbJXAcrETvLTLnGTFTQbrGTMnGToGT3DUFbGUJlPX3GbQg8LnGboJbFnGb3GgAYGgAg8ScGgMbAXrGgvAbAnGnJTLnvGnvATFgHTDT6ATHTrDlJnHYLnMn8HZrSbJTHZ8LTFnHbFTJUoHgSeMT8HgrLjAnHgvAbAnHlFUrDlHnDgvAnHnHTFT3HnQTGnrJTAaMXvJTGbCn3JTOgrAnJXvAXMnJbMg8SnJbMnRg3Jb8LTMnJnAl3OnJnGYrQlJnJlQY3LTDlCn3LTJjLg3LTLgvFXLTMg3GTLV8HUOgLXFZLg3LXNXrMnLX8QXFnLX9AlMYLYLXPXrLZAbJU8LZDUJU8LZMXrSnLZ$AgFnLaPXrDULbFYrMnLbMn8LXLboJgJgLeFbLg3LgLZrSnLgOYAgoLhrRnJlLkCTrSnLkOnLhrLnFX%AYLnFZoJXLnHTvJbLnLloAbMTATLf8MTHgJn3MTMXrAXMT3MTFnMUITvFnMXFX%AYMXMXvFbMXrFTDbMYAcMX3MbLf8SnMb8JbFnMgMXrMTMgvAXFnMgvGgCmMnAloSnMnFnJTrOXvMXSnOX8HTMnObJT8ScObLZFl3ObMXCZoPTLgrQXPUFnoQXPU3RXJlPX3RkQXPbrJXQlPlrJbFnQUAhrDbQXGnCXvQYLnHlvQbLfLnvRTOgvJbRXJYrQlRYLnrQlRbLnrQlRlFT8JlRlFnrQXSTClCn3STHTrAnSTLZQlrSTMnGTrSToHgGbSTrGTDnSTvGXCnST3HgFbSU3HXAXSbAnJn3SbFT8LnScLfLnv',
    'AT3JgJX8AT8FZoSnAT8JgFV8AT8LhrDbAZ8JT8DbAb8GgLhrAb8SkLnvAe8MT8SnAlMYJXLVAl3GYDTvAl3LfLnvBUDTvLl3CTOn3HTrCT3DUGgrCU8MT8AbCbFTrJUoCgrDb8MTDTLV8JX8DTLnLXQlDT8LZrSnDUQb8FZ8DUST4JnvDb8ScOUoDj6GbJl4GTLfCYMlGToAXvFnGboAXvLnGgAcrJn3GgvFnSToGnLf8JnvGn#HTDToHTLnFXJlHTvATFToHTvHTDToHTvMTAgoHT3STClvHT4AlFl6HT8HTDToHUoDgJTrHUoScMX3HbRZrMXoHboJg8LTHgDb8JTrHgMToLf8HgvLnLnoHnHn3HT4Hn6MgvAnJTJU8ScvJT3AaQT8JT8HTrAnJXrRg8AnJbAloMXoJbrATFToJbvMnoSnJgDb6GgvJgDb8MXoJgSX3JU8JguATFToJlPYLnQlJlQkDnLbJlQlFYJlJl8Lf8OTJnCTFnLbJnLTHXMnJnLXGXCnJnoFfRg3JnrMYRg3Jn3HgFl3KT8Dg8LnLTRlFnPTLTvPbLbvLVoSbrCZLXMY6HT3LXNU7DlrLXNXDTATLX8DX8LnLZDb8JU8LZMnoLhrLZSToJU8LZrLaLnrLZvJn3SnLZ8LhrSnLaJnoMT8LbFlrHTvLbrFTLnrLbvATLlvLb6OTFn3LcLnJZOlLeAT6Mn4LeJT3ObrLg6LXFlrLhrJg8LnLhvDlPX4LhvLfLnvLj6JTFT3LnFbrMXoLnQluCTvLnrQXCY6LnvLfLnvLnvMgLnvLnvSeLf8MTMbrJn3MT3JgST3MT8AnATrMT8LULnrMUMToCZrMUScvLf8MXoDT8SnMX6ATFToMX8AXMT8MX8FkMT8MX8HTrDUMX8ScoSnMYJT6CTvMgAcrMXoMg8SToAfMlvAXLg3MnFl3AnvOT3AnFl3OUoATHT8OU3RnLXrOXrOXrSnObPbvFn6Og8HgrSnOg8OX8DbPTvAgoJgPU3RYLnrPXrDnJZrPb8CTGgvPlrLTDlvPlvFUJnoQUvFXrQlQeMnoAl3QlrQlrSnRTFTrJUoSTDlLiLXSTFg6HT3STJgoMn4STrFTJTrSTrLZFl3ST4FnMXoSUrDlHUoScvHTvSnSfLkvMXo',
    'AUoAcrMXoAZ8HboAg8AbOg6ATFgAg8AloMXoAl3AT8JTrAl8MX8MXoCT3SToJU8Cl8Db8MXoDT8HgrATrDboOT8MXoGTOTrATMnGT8LhrAZ8GnvFnGnQXHToGgvAcrHTvAXvLl3HbrAZoMXoHgBlFXLg3HgMnFXrSnHgrSb8JUoHn6HT8LgvITvATrJUoJUoLZrRnvJU8HT8Jb8JXvFX8QT8JXvLToJTrJYrQnGnQXJgrJnoATrJnoJU8ScvJnvMnvMXoLTCTLgrJXLTJlRTvQlLbRnJlQYvLbrMb8LnvLbvFn3RnoLdCVSTGZrLeSTvGXCnLg3MnoLn3MToLlrETvMT8SToAl3MbrDU6GTvMb8LX4LhrPlrLXGXCnSToLf8Rg3STrDb8LTrSTvLTHXMnSb3RYLnMnSgOg6ATFg',
    'HUDlGnrQXrJTrHgLnrAcJYMb8DULc8LTvFgGnCk3Mg8JbAnLX4QYvFYHnMXrRUoJnGnvFnRlvFTJlQnoSTrBXHXrLYSUJgLfoMT8Se8DTrHbDb',
    'AbDl8SToJU8An3RbAb8ST8DUSTrGnrAgoLbFU6Db8LTrMg8AaHT8Jb8ObDl8SToJU8Pb3RlvFYoJl'
];
var codes = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*';
function getHangul(code) {
    if (code >= 40) {
        code = code + 168 - 40;
    }
    else if (code >= 19) {
        code = code + 97 - 19;
    }
    return utf8_1.toUtf8String([225, (code >> 6) + 132, (code & 0x3f) + 128]);
}
var wordlist = null;
function loadWords(lang) {
    if (wordlist != null) {
        return;
    }
    wordlist = [];
    data.forEach(function (data, length) {
        length += 4;
        for (var i = 0; i < data.length; i += length) {
            var word = '';
            for (var j = 0; j < length; j++) {
                word += getHangul(codes.indexOf(data[i + j]));
            }
            wordlist.push(word);
        }
    });
    wordlist.sort();
    if (wordlist_1.check(lang) !== '0xf9eddeace9c5d3da9c93cf7d3cd38f6a13ed3affb933259ae865714e8a3ae71a') {
        wordlist = null;
        throw new Error('BIP39 Wordlist for ko (Korean) FAILED');
    }
}
var LangKo = /** @class */ (function (_super) {
    __extends(LangKo, _super);
    function LangKo() {
        return _super.call(this, 'ko') || this;
    }
    LangKo.prototype.getWord = function (index) {
        loadWords(this);
        return wordlist[index];
    };
    LangKo.prototype.getWordIndex = function (word) {
        loadWords(this);
        return wordlist.indexOf(word);
    };
    return LangKo;
}(wordlist_1.Wordlist));
var langKo = new LangKo();
exports.langKo = langKo;
wordlist_1.register(langKo);


/***/ }),

/***/ 713496:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
Object.defineProperty(exports, "__esModule", ({ value: true }));
var wordlist_1 = __webpack_require__(750817);
var utf8_1 = __webpack_require__(871254);
var data = "}aE#4A=Yv&co#4N#6G=cJ&SM#66|/Z#4t&kn~46#4K~4q%b9=IR#7l,mB#7W_X2*dl}Uo~7s}Uf&Iw#9c&cw~6O&H6&wx&IG%v5=IQ~8a&Pv#47$PR&50%Ko&QM&3l#5f,D9#4L|/H&tQ;v0~6n]nN<di,AM=W5%QO&ka&ua,hM^tm=zV=JA=wR&+X]7P&NB#4J#5L|/b[dA}tJ<Do&6m&u2[U1&Kb.HM&mC=w0&MW<rY,Hq#6M}QG,13&wP}Jp]Ow%ue&Kg<HP<D9~4k~9T&I2_c6$9T#9/[C5~7O~4a=cs&O7=KK=An&l9$6U$8A&uD&QI|/Y&bg}Ux&F2#6b}E2&JN&kW&kp=U/&bb=Xl<Cj}k+~5J#6L&5z&9i}b4&Fo,ho(X0_g3~4O$Fz&QE<HN=Ww]6/%GF-Vw=tj&/D&PN#9g=YO}cL&Of&PI~5I&Ip=vU=IW#9G;0o-wU}ss&QR<BT&R9=tk$PY_dh&Pq-yh]7T,nj.Xu=EP&76=cI&Fs*Xg}z7$Gb&+I=DF,AF=cA}rL#7j=Dz&3y<Aa$52=PQ}b0(iY$Fa}oL&xV#6U=ec=WZ,xh%RY<dp#9N&Fl&44=WH*A7=sh&TB&8P=07;u+&PK}uh}J5#72)V/=xC,AB$k0&f6;1E|+5=1B,3v]6n&wR%b+&xx]7f=Ol}fl;+D^wG]7E;nB;uh^Ir&l5=JL,nS=cf=g5;u6|/Q$Gc=MH%Hg#5d%M6^86=U+$Gz,l/,ir^5y&Ba&/F-IY&FI&be%IZ#77&PW_Nu$kE(Yf&NX]7Z,Jy&FJ(Xo&Nz#/d=y7&MX<Ag}Z+;nE]Dt(iG#4D=13&Pj~4c%v8&Zo%OL&/X#4W<HR&ie~6J_1O(Y2=y5=Ad*cv_eB#6k&PX:BU#7A;uk&Ft&Fx_dD=U2;vB=U5=4F}+O&GN.HH:9s=b0%NV(jO&IH=JT}Z9=VZ<Af,Kx^4m&uJ%c6,6r;9m#+L}cf%Kh&F3~4H=vP}bu,Hz|++,1w]nv}k6;uu$jw*Kl*WX&uM[x7&Fr[m7$NO&QN]hu=JN}nR^8g#/h(ps|KC;vd}xz=V0}p6&FD$G1#7K<bG_4p~8g&cf;u4=tl}+k%5/}fz;uw<cA=u1}gU}VM=LJ=eX&+L&Pr#4U}p2:nC,2K]7H:jF&9x}uX#9O=MB<fz~8X~5m&4D&kN&u5%E/(h7(ZF&VG<de(qM|/e-Wt=3x(a+,/R]f/&ND$Ro&nU}0g=KA%kH&NK$Ke<dS}cB&IX~5g$TN]6m=Uv,Is&Py=Ef%Kz#+/%bi&+A<F4$OG&4C&FL#9V<Zk=2I_eE&6c]nw&kq$HG}y+&A8$P3}OH=XP]70%IS(AJ_gH%GZ&tY&AZ=vb~6y&/r=VI=Wv<Zi=fl=xf&eL}c8}OL=MJ=g8$F7=YT}9u=0+^xC}JH&nL^N0~4T]K2,Cy%OC#6s;vG(AC^xe^cG&MF}Br#9P;wD-7h$O/&xA}Fn^PC]6i]7G&8V$Qs;vl(TB~73~4l<mW&6V=2y&uY&+3)aP}XF;LP&kx$wU=t7;uy<FN&lz)7E=Oo*Y+;wI}9q}le;J6&Ri&4t&Qr#8B=cb&vG=J5|Ql(h5<Yy~4+}QD,Lx=wn%K/&RK=dO&Pw,Q9=co%4u;9u}g0@6a^4I%b0=zo|/c&tX=dQ=OS#+b=yz_AB&wB&Pm=W9$HP_gR=62=AO=ti=hI,oA&jr&dH=tm&b6$P2(x8=zi;nG~7F;05]0n[Ix&3m}rg=Xp=cd&uz]7t;97=cN;vV<jf&FF&F1=6Q&Ik*Kk&P4,2z=fQ]7D&3u,H0=d/}Uw<ZN<7R}Kv;0f$H7,MD]7n$F0#88~9Z%da=by;+T#/u=VF&fO&kr^kf<AB]sU,I5$Ng&Pz;0i&QD&vM=Yl:BM;nJ_xJ]U7&Kf&30,3f|Z9*dC)je_jA&Q4&Kp$NH(Yz#6S&Id%Ib=KX,AD=KV%dP}tW&Pk^+E_Ni=cq,3R}VZ(Si=b+}rv;0j}rZ]uA,/w(Sx&Jv$w9&4d&wE,NJ$Gy=J/]Ls#7k<ZQ<Y/&uj]Ov$PM;v3,2F&+u:up=On&3e,Jv;90=J+&Qm]6q}bK#+d~8Y(h2]hA;99&AS=I/}qB&dQ}yJ-VM}Vl&ui,iB&G3|Dc]7d=eQ%dX%JC_1L~4d^NP;vJ&/1)ZI#7N]9X[bQ&PL=0L(UZ,Lm&kc&IR}n7(iR<AQ<dg=33=vN}ft}au]7I,Ba=x9=dR~6R&Tq=Xi,3d$Nr&Bc}DI&ku&vf]Dn,/F&iD,Ll&Nw=0y&I7=Ls=/A&tU=Qe}Ua&uk&+F=g4=gh=Vj#+1&Qn}Uy*44#5F,Pc&Rz*Xn=oh=5W;0n_Nf(iE<Y7=vr=Zu]oz#5Z%mI=kN=Bv_Jp(T2;vt_Ml<FS&uI=L/&6P]64$M7}86<bo%QX(SI%IY&VK=Al&Ux;vv;ut*E/%uh<ZE|O3,M2(yc]yu=Wk&tp:Ex}hr,Cl&WE)+Z=8U}I2_4Q,hA_si=iw=OM=tM=yZ%Ia=U7;wT}b+;uo=Za}yS!5x}HD}fb#5O_dA;Nv%uB(yB;01(Sf}Fk;v7}Pt#8v<mZ#7L,/r&Pl~4w&f5=Ph$Fw_LF&8m,bL=yJ&BH}p/*Jn}tU~5Q;wB(h6]Df]8p^+B;E4&Wc=d+;Ea&bw$8C&FN,DM=Yf}mP~5w=fT#6V=mC=Fi=AV}jB&AN}lW}aH#/D)dZ;hl;vE}/7,CJ;31&w8,hj%u9_Js=jJ&4M~8k=TN&eC}nL&uc-wi&lX}dj=Mv=e2#6u=cr$uq$6G]8W}Jb:nm=Yg<b3(UA;vX&6n&xF=KT,jC,De&R8&oY=Zv&oB]7/=Z2&Oa}bf,hh(4h^tZ&72&Nx;D2&xL~5h~40)ZG)h+=OJ&RA]Bv$yB=Oq=df,AQ%Jn}OJ;11,3z&Tl&tj;v+^Hv,Dh(id=s+]7N&N3)9Q~8f,S4=uW=w4&uX,LX&3d]CJ&yp&8x<b2_do&lP=y/<cy_dG=Oi=7R(VH(lt_1T,Iq_AA;12^6T%k6#8K[B1{oO<AU[Bt;1b$9S&Ps<8T=St{bY,jB(Zp&63&Uv$9V,PM]6v&Af}zW[bW_oq}sm}nB&Kq&gC&ff_eq_2m&5F&TI}rf}Gf;Zr_z9;ER&jk}iz_sn<BN~+n&vo=Vi%97|ZR=Wc,WE&6t]6z%85(ly#84=KY)6m_5/=aX,N3}Tm&he&6K]tR_B2-I3;u/&hU&lH<AP=iB&IA=XL;/5&Nh=wv<BH#79=vS=zl<AA=0X_RG}Bw&9p$NW,AX&kP_Lp&/Z(Tc]Mu}hs#6I}5B&cI<bq&H9#6m=K9}vH(Y1(Y0#4B&w6,/9&gG<bE,/O=zb}I4_l8<B/;wL%Qo<HO[Mq=XX}0v&BP&F4(mG}0i}nm,EC=9u{I3,xG&/9=JY*DK&hR)BX=EI=cx=b/{6k}yX%A+&wa}Xb=la;wi^lL;0t}jo&Qb=xg=XB}iO<qo{bR=NV&8f=a0&Jy;0v=uK)HK;vN#6h&jB(h/%ud&NI%wY.X7=Pt}Cu-uL&Gs_hl%mH,tm]78=Lb^Q0#7Y=1u<Bt&+Q=Co_RH,w3;1e}ux<aU;ui}U3&Q5%bt]63&UQ|0l&uL}O7&3o,AV&dm|Nj(Xt*5+(Uu&Hh(p7(UF=VR=Bp^Jl&Hd[ix)9/=Iq]C8<67]66}mB%6f}bb}JI]8T$HA}db=YM&pa=2J}tS&Y0=PS&y4=cX$6E,hX,XP&nR;04,FQ&l0&Vm_Dv#5Y~8Z=Bi%MA]6x=JO:+p,Az&9q,Hj~6/}SD=K1:EJ}nA;Qo#/E]9R,Ie&6X%W3]61&v4=xX_MC=0q;06(Xq=fs}IG}Dv=0l}o7$iZ;9v&LH&DP-7a&OY,SZ,Kz,Cv&dh=fx|Nh,F/~7q=XF&w+;9n&Gw;0h}Z7<7O&JK(S7&LS<AD<ac=wo<Dt&zw%4B=4v#8P;9o~6p*vV=Tm,Or&I6=1q}nY=P0=gq&Bl&Uu,Ch%yb}UY=zh}dh}rl(T4_xk(YA#8R*xH,IN}Jn]7V}C4&Ty}j3]7p=cL=3h&wW%Qv<Z3=f0&RI&+S(ic_zq}oN&/Y=z1;Td=LW=0e=OI(Vc,+b^ju(UL;0r:Za%8v=Rp=zw&58&73&wK}qX]6y&8E)a2}WR=wP^ur&nQ<cH}Re=Aq&wk}Q0&+q=PP,Gc|/d^k5,Fw]8Y}Pg]p3=ju=ed}r5_yf&Cs]7z$/G<Cm&Jp&54_1G_gP_Ll}JZ;0u]k8_7k(Sg]65{9i=LN&Sx&WK,iW&fD&Lk{9a}Em-9c#8N&io=sy]8d&nT&IK(lx#7/$lW(Td<s8~49,3o<7Y=MW(T+_Jr&Wd,iL}Ct=xh&5V;v4&8n%Kx=iF&l2_0B{B+,If(J0,Lv;u8=Kx-vB=HC&vS=Z6&fU&vE^xK;3D=4h=MR#45:Jw;0d}iw=LU}I5=I0]gB*im,K9}GU,1k_4U&Tt=Vs(iX&lU(TF#7y,ZO}oA&m5#5P}PN}Uz=hM<B1&FB<aG,e6~7T<tP(UQ_ZT=wu&F8)aQ]iN,1r_Lo&/g:CD}84{J1_Ki&Na&3n$jz&FE=dc;uv;va}in}ll=fv(h1&3h}fp=Cy}BM(+E~8m}lo%v7=hC(T6$cj=BQ=Bw(DR,2j=Ks,NS|F+;00=fU=70}Mb(YU;+G&m7&hr=Sk%Co]t+(X5_Jw}0r}gC(AS-IP&QK<Z2#8Q$WC]WX}T2&pG_Ka,HC=R4&/N;Z+;ch(C7,D4$3p_Mk&B2$8D=n9%Ky#5z(CT&QJ#7B]DC]gW}nf~5M;Iw#80}Tc_1F#4Z-aC}Hl=ph=fz,/3=aW}JM}nn;DG;vm}wn,4P}T3;wx&RG$u+}zK=0b;+J_Ek{re<aZ=AS}yY#5D]7q,Cp}xN=VP*2C}GZ}aG~+m_Cs=OY#6r]6g<GS}LC(UB=3A=Bo}Jy<c4}Is;1P<AG}Op<Z1}ld}nS=1Z,yM&95&98=CJ(4t:2L$Hk=Zo}Vc;+I}np&N1}9y=iv}CO*7p=jL)px]tb^zh&GS&Vl%v/;vR=14=zJ&49|/f]hF}WG;03=8P}o/&Gg&rp;DB,Kv}Ji&Pb;aA^ll(4j%yt}+K$Ht#4y&hY]7Y<F1,eN}bG(Uh%6Z]t5%G7;+F_RE;it}tL=LS&Da=Xx(S+(4f=8G=yI}cJ}WP=37=jS}pX}hd)fp<A8=Jt~+o$HJ=M6}iX=g9}CS=dv=Cj(mP%Kd,xq|+9&LD(4/=Xm&QP=Lc}LX&fL;+K=Op(lu=Qs.qC:+e&L+=Jj#8w;SL]7S(b+#4I=c1&nG_Lf&uH;+R)ZV<bV%B/,TE&0H&Jq&Ah%OF&Ss(p2,Wv&I3=Wl}Vq;1L&lJ#9b_1H=8r=b8=JH(SZ=hD=J2#7U,/U#/X~6P,FU<eL=jx,mG=hG=CE&PU=Se(qX&LY=X6=y4&tk&QQ&tf=4g&xI}W+&mZ=Dc#7w}Lg;DA;wQ_Kb(cJ=hR%yX&Yb,hw{bX_4X;EP;1W_2M}Uc=b5(YF,CM&Tp^OJ{DD]6s=vF=Yo~8q}XH}Fu%P5(SJ=Qt;MO]s8<F3&B3&8T(Ul-BS*dw&dR<87}/8]62$PZ]Lx<Au}9Q]7c=ja=KR,Go,Us&v6(qk}pG&G2=ev^GM%w4&H4]7F&dv]J6}Ew:9w=sj-ZL}Ym$+h(Ut(Um~4n=Xs(U7%eE=Qc_JR<CA#6t<Fv|/I,IS,EG<F2(Xy$/n<Fa(h9}+9_2o&N4#7X<Zq|+f_Dp=dt&na,Ca=NJ)jY=8C=YG=s6&Q+<DO}D3=xB&R1(lw;Qn<bF(Cu|/B}HV=SS&n7,10&u0]Dm%A6^4Q=WR(TD=Xo<GH,Rj(l8)bP&n/=LM&CF,F5&ml=PJ;0k=LG=tq,Rh,D6@4i=1p&+9=YC%er_Mh;nI;0q=Fw]80=xq=FM$Gv;v6&nc;wK%H2&Kj;vs,AA=YP,66}bI(qR~5U=6q~4b$Ni=K5.X3$So&Iu(p+]8G=Cf=RY(TS_O3(iH&57=fE=Dg_Do#9z#7H;FK{qd_2k%JR}en&gh_z8;Rx}9p<cN_Ne,DO;LN_7o~/p=NF=5Y}gN<ce<C1,QE]Wv=3u<BC}GK]yq}DY&u/_hj=II(pz&rC,jV&+Z}ut=NQ;Cg-SR_ZS,+o=u/;Oy_RK_QF(Fx&xP}Wr&TA,Uh&g1=yr{ax[VF$Pg(YB;Ox=Vy;+W(Sp}XV%dd&33(l/]l4#4Y}OE=6c=bw(A7&9t%wd&N/&mo,JH&Qe)fm=Ao}fu=tH";
var deltaData = "FAZDC6BALcLZCA+GBARCW8wNCcDDZ8LVFBOqqDUiou+M42TFAyERXFb7EjhP+vmBFpFrUpfDV2F7eB+eCltCHJFWLFCED+pWTojEIHFXc3aFn4F68zqjEuKidS1QBVPDEhE7NA4mhMF7oThD49ot3FgtzHFCK0acW1x8DH1EmLoIlrWFBLE+y5+NA3Cx65wJHTaEZVaK1mWAmPGxgYCdxwOjTDIt/faOEhTl1vqNsKtJCOhJWuio2g07KLZEQsFBUpNtwEByBgxFslFheFbiEPvi61msDvApxCzB6rBCzox7joYA5UdDc+Cb4FSgIabpXFAj3bjkmFAxCZE+mD/SFf/0ELecYCt3nLoxC6WEZf2tKDB4oZvrEmqFkKk7BwILA7gtYBpsTq//D4jD0F0wEB9pyQ1BD5Ba0oYHDI+sbDFhvrHXdDHfgFEIJLi5r8qercNFBgFLC4bo5ERJtamWBDFy73KCEb6M8VpmEt330ygCTK58EIIFkYgF84gtGA9Uyh3m68iVrFbWFbcbqiCYHZ9J1jeRPbL8yswhMiDbhEhdNoSwFbZrLT740ABEqgCkO8J1BLd1VhKKR4sD1yUo0z+FF59Mvg71CFbyEhbHSFBKEIKyoQNgQppq9T0KAqePu0ZFGrXOHdKJqkoTFhYvpDNyuuznrN84thJbsCoO6Cu6Xlvntvy0QYuAExQEYtTUBf3CoCqwgGFZ4u1HJFzDVwEy3cjcpV4QvsPaBC3rCGyCF23o4K3pp2gberGgFEJEHo4nHICtyKH2ZqyxhN05KBBJIQlKh/Oujv/DH32VrlqFdIFC7Fz9Ct4kaqFME0UETLprnN9kfy+kFmtQBB0+5CFu0N9Ij8l/VvJDh2oq3hT6EzjTHKFN7ZjZwoTsAZ4Exsko6Fpa6WC+sduz8jyrLpegTv2h1EBeYpLpm2czQW0KoCcS0bCVXCmuWJDBjN1nQNLdF58SFJ0h7i3pC3oEOKy/FjBklL70XvBEEIWp2yZ04xObzAWDDJG7f+DbqBEA7LyiR95j7MDVdDViz2RE5vWlBMv5e4+VfhP3aXNPhvLSynb9O2x4uFBV+3jqu6d5pCG28/sETByvmu/+IJ0L3wb4rj9DNOLBF6XPIODr4L19U9RRofAG6Nxydi8Bki8BhGJbBAJKzbJxkZSlF9Q2Cu8oKqggB9hBArwLLqEBWEtFowy8XK8bEyw9snT+BeyFk1ZCSrdmgfEwFePTgCjELBEnIbjaDDPJm36rG9pztcEzT8dGk23SBhXBB1H4z+OWze0ooFzz8pDBYFvp9j9tvFByf9y4EFdVnz026CGR5qMr7fxMHN8UUdlyJAzlTBDRC28k+L4FB8078ljyD91tUj1ocnTs8vdEf7znbzm+GIjEZnoZE5rnLL700Xc7yHfz05nWxy03vBB9YGHYOWxgMQGBCR24CVYNE1hpfKxN0zKnfJDmmMgMmBWqNbjfSyFCBWSCGCgR8yFXiHyEj+VtD1FB3FpC1zI0kFbzifiKTLm9yq5zFmur+q8FHqjoOBWsBPiDbnCC2ErunV6cJ6TygXFYHYp7MKN9RUlSIS8/xBAGYLzeqUnBF4QbsTuUkUqGs6CaiDWKWjQK9EJkjpkTmNCPYXL";
// @TODO: Load lazily
var wordlist = {
    zh_cn: null,
    zh_tw: null
};
var Checks = {
    zh_cn: '0x17bcc4d8547e5a7135e365d1ab443aaae95e76d8230c2782c67305d4f21497a1',
    zh_tw: '0x51e720e90c7b87bec1d70eb6e74a21a449bd3ec9c020b01d3a40ed991b60ce5d'
};
var codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var style = "~!@#$%^&*_-=[]{}|;:,.()<>?";
function loadWords(lang) {
    if (wordlist[lang.locale] !== null) {
        return;
    }
    wordlist[lang.locale] = [];
    var deltaOffset = 0;
    for (var i = 0; i < 2048; i++) {
        var s = style.indexOf(data[i * 3]);
        var bytes = [
            228 + (s >> 2),
            128 + codes.indexOf(data[i * 3 + 1]),
            128 + codes.indexOf(data[i * 3 + 2]),
        ];
        if (lang.locale === 'zh_tw') {
            var common = s % 4;
            for (var i_1 = common; i_1 < 3; i_1++) {
                bytes[i_1] = codes.indexOf(deltaData[deltaOffset++]) + ((i_1 == 0) ? 228 : 128);
            }
        }
        wordlist[lang.locale].push(utf8_1.toUtf8String(bytes));
    }
    if (wordlist_1.check(lang) !== Checks[lang.locale]) {
        wordlist[lang.locale] = null;
        throw new Error('BIP39 Wordlist for ' + lang.locale + ' (Chinese) FAILED');
    }
}
var LangZh = /** @class */ (function (_super) {
    __extends(LangZh, _super);
    function LangZh(country) {
        return _super.call(this, 'zh_' + country) || this;
    }
    LangZh.prototype.getWord = function (index) {
        loadWords(this);
        return wordlist[this.locale][index];
    };
    LangZh.prototype.getWordIndex = function (word) {
        loadWords(this);
        return wordlist[this.locale].indexOf(word);
    };
    LangZh.prototype.split = function (mnemonic) {
        mnemonic = mnemonic.replace(/(?:\u3000| )+/g, '');
        return mnemonic.split('');
    };
    return LangZh;
}(wordlist_1.Wordlist));
var langZhCn = new LangZh('cn');
exports.langZhCn = langZhCn;
wordlist_1.register(langZhCn);
wordlist_1.register(langZhCn, 'zh');
var langZhTw = new LangZh('tw');
exports.langZhTw = langZhTw;
wordlist_1.register(langZhTw);


/***/ }),

/***/ 869373:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contract_name\":\"PackageIndex\",\"abi\":[{\"constant\":true,\"inputs\":[],\"name\":\"getNumReleases\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newReleaseValidator\",\"type\":\"address\"}],\"name\":\"setReleaseValidator\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"offset\",\"type\":\"uint256\"},{\"name\":\"numReleases\",\"type\":\"uint256\"}],\"name\":\"getPackageReleaseHashes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"preRelease\",\"type\":\"string\"},{\"name\":\"build\",\"type\":\"string\"}],\"name\":\"getReleaseLockfileURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newPackageDb\",\"type\":\"address\"}],\"name\":\"setPackageDb\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"preRelease\",\"type\":\"string\"},{\"name\":\"build\",\"type\":\"string\"}],\"name\":\"releaseExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"getReleaseData\",\"outputs\":[{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"preRelease\",\"type\":\"string\"},{\"name\":\"build\",\"type\":\"string\"},{\"name\":\"releaseLockfileURI\",\"type\":\"string\"},{\"name\":\"createdAt\",\"type\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getAllReleaseHashes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"newPackageOwner\",\"type\":\"address\"}],\"name\":\"transferPackageOwner\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getReleaseHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"preRelease\",\"type\":\"string\"},{\"name\":\"build\",\"type\":\"string\"},{\"name\":\"releaseLockfileURI\",\"type\":\"string\"}],\"name\":\"release\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getNumPackages\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"offset\",\"type\":\"uint256\"},{\"name\":\"numReleases\",\"type\":\"uint256\"}],\"name\":\"getReleaseHashes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"packageExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"releaseDb\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"packageDb\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"releaseValidator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"getPackageData\",\"outputs\":[{\"name\":\"packageOwner\",\"type\":\"address\"},{\"name\":\"createdAt\",\"type\":\"uint256\"},{\"name\":\"numReleases\",\"type\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"}],\"name\":\"getAllPackageReleaseHashes\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32[]\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"releaseIdx\",\"type\":\"uint256\"}],\"name\":\"getReleaseHashForPackage\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getPackageName\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newReleaseDb\",\"type\":\"address\"}],\"name\":\"setReleaseDb\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"PackageRelease\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"PackageTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldAuthority\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"AuthorityUpdate\",\"type\":\"event\"}],\"unlinked_binary\":\" \",\"networks\":{},\"schema_version\":\"0.0.4\",\"updated_at\":1485371857576}");

/***/ }),

/***/ 578457:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"contract_name\":\"ReleaseDB\",\"abi\":[{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"versionHash\",\"type\":\"bytes32\"}],\"name\":\"isLatestPreReleaseTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getReleaseHashForNameHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"versionHash\",\"type\":\"bytes32\"}],\"name\":\"getMajorMinorPatch\",\"outputs\":[{\"name\":\"\",\"type\":\"uint32\"},{\"name\":\"\",\"type\":\"uint32\"},{\"name\":\"\",\"type\":\"uint32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"getNumReleases\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"preRelease\",\"type\":\"string\"},{\"name\":\"build\",\"type\":\"string\"}],\"name\":\"hashVersion\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"setOwner\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"}],\"name\":\"getNumReleasesForNameHash\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"releaseHash\",\"type\":\"bytes32\"},{\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"removeRelease\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"getReleaseLockfileURI\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"}],\"name\":\"getLatestMajorTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"releaseExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"getReleaseData\",\"outputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"versionHash\",\"type\":\"bytes32\"},{\"name\":\"createdAt\",\"type\":\"uint256\"},{\"name\":\"updatedAt\",\"type\":\"uint256\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"}],\"name\":\"getLatestPatchTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"idx\",\"type\":\"uint256\"}],\"name\":\"getReleaseHash\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"setAuthority\",\"outputs\":[],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"updateLatestTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"versionHash\",\"type\":\"bytes32\"},{\"name\":\"releaseLockfileURI\",\"type\":\"string\"}],\"name\":\"setRelease\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"getBuild\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"versionHash\",\"type\":\"bytes32\"}],\"name\":\"hashRelease\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"},{\"name\":\"preRelease\",\"type\":\"string\"},{\"name\":\"build\",\"type\":\"string\"}],\"name\":\"setVersion\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"versionHash\",\"type\":\"bytes32\"}],\"name\":\"versionExists\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"authority\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"versionHash\",\"type\":\"bytes32\"}],\"name\":\"isLatestPatchTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"versionHash\",\"type\":\"bytes32\"}],\"name\":\"isLatestMinorTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"versionHash\",\"type\":\"bytes32\"}],\"name\":\"isLatestMajorTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"major\",\"type\":\"uint32\"},{\"name\":\"minor\",\"type\":\"uint32\"},{\"name\":\"patch\",\"type\":\"uint32\"}],\"name\":\"getLatestPreReleaseTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"nameHash\",\"type\":\"bytes32\"},{\"name\":\"major\",\"type\":\"uint32\"}],\"name\":\"getLatestMinorTree\",\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\"}],\"payable\":false,\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"getPreRelease\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"ReleaseCreate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"releaseHash\",\"type\":\"bytes32\"}],\"name\":\"ReleaseUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"releaseHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"name\":\"reason\",\"type\":\"string\"}],\"name\":\"ReleaseDelete\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldOwner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"oldAuthority\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"newAuthority\",\"type\":\"address\"}],\"name\":\"AuthorityUpdate\",\"type\":\"event\"}],\"unlinked_binary\":\" \",\"networks\":{},\"schema_version\":\"0.0.4\",\"updated_at\":1485371857577}");

/***/ }),

/***/ 838182:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var contract = __webpack_require__(277986);
var Registry = __webpack_require__(10048);
var Web3 = __webpack_require__(250787);

var EPMRegistry = {
  use: function(address, from_address, provider) {
    const registry = new Registry(address, from_address, provider);
    return registry.configurePackageIndex(address, from_address, provider)
      .then(() => registry);
  }
};

module.exports = EPMRegistry;


/***/ }),

/***/ 10048:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var contract = __webpack_require__(277986);
var PackageIndex = contract(__webpack_require__(869373));
var ReleaseDB = contract(__webpack_require__(578457));
var semver = __webpack_require__(236625);

function Registry(registry_address, from_address, provider) {
  ReleaseDB.setProvider(provider);

  ReleaseDB.defaults({
    from: from_address,
    gas: 3141592
  });
};

Registry.prototype.configurePackageIndex = function(address, from_address, provider) {
  PackageIndex.setProvider(provider);
  PackageIndex.defaults({
    from: from_address,
    gas: 3141592
  });
  return PackageIndex.at(address)
    .then((packageIndex) => this.package_index = packageIndex);
}

Registry.prototype.getAllVersions = function(package_name) {
  var self = this;

  return this.package_index.getAllPackageReleaseHashes(package_name).then(function(hashes) {
    var promises = hashes.map(function(hash) {
      return self.package_index.getReleaseData(hash);
    });

    return Promise.all(promises);
  }).then(function(releases) {

    // Convert releases to version strings
    var versions = releases.map(function(release) {
      var major = release[0];
      var minor = release[1];
      var patch = release[2];
      var preRelease = release[3];
      var build = release[4];

      var version_string = major + "." + minor + "." + patch;

      if (preRelease != 0 && preRelease != "") {
        version_string += "-" + preRelease;
      }

      if (build != 0 && build != "") {
        version_string += "+" + build;
      }

      return version_string;
    }).sort(semver.compare); // Sort via semver lib

    return versions;
  });
}

Registry.prototype.resolveVersion = function(package_name, version_range) {
  return this.getAllVersions(package_name).then(function(versions) {
    // This can be optimized.
    var max = null;

    versions.forEach(function(version) {
      if (semver.satisfies(version, version_range)) {
        if (max == null || semver.gte(version, max)) {
          max = version;
        }
      }
    });

    return max;
  });
};

Registry.prototype.getLockfileURI = function(package_name, version_range) {
  var self = this;
  var version_registry;
  var version;

  return this.resolveVersion(package_name, version_range).then(function(v) {
    if (v == null) {
      throw new Error("Cannot find any published versions of '" + package_name + "' with the specified version range (" + version_range + ")");
    }

    version = self.convertToObject(v);
    return self.package_index.getReleaseLockfileURI(package_name, version.major, version.minor, version.patch, version.preRelease, version.build);
  });
};

Registry.prototype.register = function(package_name, version, lockfileURI) {
  var self = this;
  return Promise.resolve().then(function() {
    version = self.convertToObject(version);
  }).then(function() {
    return self.package_index.release(package_name, version.major, version.minor, version.patch, version.preRelease, version.build, lockfileURI);
  }).then(function(results) {
    var release_log = null;

    for (var i = 0; i < results.logs.length; i++) {
      var log = results.logs[i];
      if (log.event == "PackageRelease") {
        release_log = log;
        break;
      }
    }

    if (release_log == null) {
      throw new Error("Could not publish package. Please check version number and ensure it was not previously published.")
    }
  });
};

Registry.prototype.convertToObject = function(version) {
  var pieces = version.split("+");
  version = pieces[0];

  var build = "";

  if (pieces.length > 1) {
    build = pieces[1];
  }

  var major = semver.major(version);
  var minor = semver.minor(version);
  var patch = semver.patch(version);
  var preRelease = (semver.prerelease(version) || []).join("."); // r

  return {
    major: major,
    minor: minor,
    patch: patch,
    preRelease: preRelease,
    build: build
  };
};

module.exports = Registry;


/***/ }),

/***/ 652662:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();

var Bytes = __webpack_require__(450921);
var Nat = __webpack_require__(347174);
var elliptic = __webpack_require__(186266);
var rlp = __webpack_require__(810412);
var secp256k1 = new elliptic.ec("secp256k1"); // eslint-disable-line

var _require = __webpack_require__(421952),
    keccak256 = _require.keccak256,
    keccak256s = _require.keccak256s;

var create = function create(entropy) {
  var innerHex = keccak256(Bytes.concat(Bytes.random(32), entropy || Bytes.random(32)));
  var middleHex = Bytes.concat(Bytes.concat(Bytes.random(32), innerHex), Bytes.random(32));
  var outerHex = keccak256(middleHex);
  return fromPrivate(outerHex);
};

var toChecksum = function toChecksum(address) {
  var addressHash = keccak256s(address.slice(2));
  var checksumAddress = "0x";
  for (var i = 0; i < 40; i++) {
    checksumAddress += parseInt(addressHash[i + 2], 16) > 7 ? address[i + 2].toUpperCase() : address[i + 2];
  }return checksumAddress;
};

var fromPrivate = function fromPrivate(privateKey) {
  var buffer = new Buffer(privateKey.slice(2), "hex");
  var ecKey = secp256k1.keyFromPrivate(buffer);
  var publicKey = "0x" + ecKey.getPublic(false, 'hex').slice(2);
  var publicHash = keccak256(publicKey);
  var address = toChecksum("0x" + publicHash.slice(-40));
  return {
    address: address,
    privateKey: privateKey
  };
};

var encodeSignature = function encodeSignature(_ref) {
  var _ref2 = _slicedToArray(_ref, 3),
      v = _ref2[0],
      r = Bytes.pad(32, _ref2[1]),
      s = Bytes.pad(32, _ref2[2]);

  return Bytes.flatten([r, s, v]);
};

var decodeSignature = function decodeSignature(hex) {
  return [Bytes.slice(64, Bytes.length(hex), hex), Bytes.slice(0, 32, hex), Bytes.slice(32, 64, hex)];
};

var makeSigner = function makeSigner(addToV) {
  return function (hash, privateKey) {
    var signature = secp256k1.keyFromPrivate(new Buffer(privateKey.slice(2), "hex")).sign(new Buffer(hash.slice(2), "hex"), { canonical: true });
    return encodeSignature([Nat.fromString(Bytes.fromNumber(addToV + signature.recoveryParam)), Bytes.pad(32, Bytes.fromNat("0x" + signature.r.toString(16))), Bytes.pad(32, Bytes.fromNat("0x" + signature.s.toString(16)))]);
  };
};

var sign = makeSigner(27); // v=27|28 instead of 0|1...

var recover = function recover(hash, signature) {
  var vals = decodeSignature(signature);
  var vrs = { v: Bytes.toNumber(vals[0]), r: vals[1].slice(2), s: vals[2].slice(2) };
  var ecPublicKey = secp256k1.recoverPubKey(new Buffer(hash.slice(2), "hex"), vrs, vrs.v < 2 ? vrs.v : 1 - vrs.v % 2); // because odd vals mean v=0... sadly that means v=0 means v=1... I hate that
  var publicKey = "0x" + ecPublicKey.encode("hex", false).slice(2);
  var publicHash = keccak256(publicKey);
  var address = toChecksum("0x" + publicHash.slice(-40));
  return address;
};

module.exports = {
  create: create,
  toChecksum: toChecksum,
  fromPrivate: fromPrivate,
  sign: sign,
  makeSigner: makeSigner,
  recover: recover,
  encodeSignature: encodeSignature,
  decodeSignature: decodeSignature
};

/***/ }),

/***/ 80235:
/***/ ((module) => {

var generate = function generate(num, fn) {
  var a = [];
  for (var i = 0; i < num; ++i) {
    a.push(fn(i));
  }return a;
};

var replicate = function replicate(num, val) {
  return generate(num, function () {
    return val;
  });
};

var concat = function concat(a, b) {
  return a.concat(b);
};

var flatten = function flatten(a) {
  var r = [];
  for (var j = 0, J = a.length; j < J; ++j) {
    for (var i = 0, I = a[j].length; i < I; ++i) {
      r.push(a[j][i]);
    }
  }return r;
};

var chunksOf = function chunksOf(n, a) {
  var b = [];
  for (var i = 0, l = a.length; i < l; i += n) {
    b.push(a.slice(i, i + n));
  }return b;
};

module.exports = {
  generate: generate,
  replicate: replicate,
  concat: concat,
  flatten: flatten,
  chunksOf: chunksOf
};

/***/ }),

/***/ 450921:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var A = __webpack_require__(80235);

var at = function at(bytes, index) {
  return parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16);
};

var random = function random(bytes) {
  var rnd = void 0;
  if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (true) rnd = __webpack_require__(676417).randomBytes(bytes);else {}
  var hex = "0x";
  for (var i = 0; i < bytes; ++i) {
    hex += ("00" + rnd[i].toString(16)).slice(-2);
  }return hex;
};

var length = function length(a) {
  return (a.length - 2) / 2;
};

var flatten = function flatten(a) {
  return "0x" + a.reduce(function (r, s) {
    return r + s.slice(2);
  }, "");
};

var slice = function slice(i, j, bs) {
  return "0x" + bs.slice(i * 2 + 2, j * 2 + 2);
};

var reverse = function reverse(hex) {
  var rev = "0x";
  for (var i = 0, l = length(hex); i < l; ++i) {
    rev += hex.slice((l - i) * 2, (l - i + 1) * 2);
  }
  return rev;
};

var pad = function pad(l, hex) {
  return hex.length === l * 2 + 2 ? hex : pad(l, "0x" + "0" + hex.slice(2));
};

var padRight = function padRight(l, hex) {
  return hex.length === l * 2 + 2 ? hex : padRight(l, hex + "0");
};

var toArray = function toArray(hex) {
  var arr = [];
  for (var i = 2, l = hex.length; i < l; i += 2) {
    arr.push(parseInt(hex.slice(i, i + 2), 16));
  }return arr;
};

var fromArray = function fromArray(arr) {
  var hex = "0x";
  for (var i = 0, l = arr.length; i < l; ++i) {
    var b = arr[i];
    hex += (b < 16 ? "0" : "") + b.toString(16);
  }
  return hex;
};

var toUint8Array = function toUint8Array(hex) {
  return new Uint8Array(toArray(hex));
};

var fromUint8Array = function fromUint8Array(arr) {
  return fromArray([].slice.call(arr, 0));
};

var fromNumber = function fromNumber(num) {
  var hex = num.toString(16);
  return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex;
};

var toNumber = function toNumber(hex) {
  return parseInt(hex.slice(2), 16);
};

var concat = function concat(a, b) {
  return a.concat(b.slice(2));
};

var fromNat = function fromNat(bn) {
  return bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2);
};

var toNat = function toNat(bn) {
  return bn[2] === "0" ? "0x" + bn.slice(3) : bn;
};

var fromAscii = function fromAscii(ascii) {
  var hex = "0x";
  for (var i = 0; i < ascii.length; ++i) {
    hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2);
  }return hex;
};

var toAscii = function toAscii(hex) {
  var ascii = "";
  for (var i = 2; i < hex.length; i += 2) {
    ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16));
  }return ascii;
};

// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330
var fromString = function fromString(s) {
  var makeByte = function makeByte(uint8) {
    var b = uint8.toString(16);
    return b.length < 2 ? "0" + b : b;
  };
  var bytes = "0x";
  for (var ci = 0; ci != s.length; ci++) {
    var c = s.charCodeAt(ci);
    if (c < 128) {
      bytes += makeByte(c);
      continue;
    }
    if (c < 2048) {
      bytes += makeByte(c >> 6 | 192);
    } else {
      if (c > 0xd7ff && c < 0xdc00) {
        if (++ci == s.length) return null;
        var c2 = s.charCodeAt(ci);
        if (c2 < 0xdc00 || c2 > 0xdfff) return null;
        c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);
        bytes += makeByte(c >> 18 | 240);
        bytes += makeByte(c >> 12 & 63 | 128);
      } else {
        // c <= 0xffff
        bytes += makeByte(c >> 12 | 224);
      }
      bytes += makeByte(c >> 6 & 63 | 128);
    }
    bytes += makeByte(c & 63 | 128);
  }
  return bytes;
};

var toString = function toString(bytes) {
  var s = '';
  var i = 0;
  var l = length(bytes);
  while (i < l) {
    var c = at(bytes, i++);
    if (c > 127) {
      if (c > 191 && c < 224) {
        if (i >= l) return null;
        c = (c & 31) << 6 | at(bytes, i) & 63;
      } else if (c > 223 && c < 240) {
        if (i + 1 >= l) return null;
        c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63;
      } else if (c > 239 && c < 248) {
        if (i + 2 >= l) return null;
        c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63;
      } else return null;
      ++i;
    }
    if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) {
      c -= 0x10000;
      s += String.fromCharCode(c >> 10 | 0xd800);
      s += String.fromCharCode(c & 0x3FF | 0xdc00);
    } else return null;
  }
  return s;
};

module.exports = {
  random: random,
  length: length,
  concat: concat,
  flatten: flatten,
  slice: slice,
  reverse: reverse,
  pad: pad,
  padRight: padRight,
  fromAscii: fromAscii,
  toAscii: toAscii,
  fromString: fromString,
  toString: toString,
  fromNumber: fromNumber,
  toNumber: toNumber,
  fromNat: fromNat,
  toNat: toNat,
  fromArray: fromArray,
  toArray: toArray,
  fromUint8Array: fromUint8Array,
  toUint8Array: toUint8Array
};

/***/ }),

/***/ 421952:
/***/ ((module) => {

// This was ported from https://github.com/emn178/js-sha3, with some minor
// modifications and pruning. It is licensed under MIT:
//
// Copyright 2015-2016 Chen, Yi-Cyuan
//  
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

var HEX_CHARS = '0123456789abcdef'.split('');
var KECCAK_PADDING = [1, 256, 65536, 16777216];
var SHIFT = [0, 8, 16, 24];
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];

var Keccak = function Keccak(bits) {
  return {
    blocks: [],
    reset: true,
    block: 0,
    start: 0,
    blockCount: 1600 - (bits << 1) >> 5,
    outputBlocks: bits >> 5,
    s: function (s) {
      return [].concat(s, s, s, s, s);
    }([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  };
};

var update = function update(state, message) {
  var length = message.length,
      blocks = state.blocks,
      byteCount = state.blockCount << 2,
      blockCount = state.blockCount,
      outputBlocks = state.outputBlocks,
      s = state.s,
      index = 0,
      i,
      code;

  // update
  while (index < length) {
    if (state.reset) {
      state.reset = false;
      blocks[0] = state.block;
      for (i = 1; i < blockCount + 1; ++i) {
        blocks[i] = 0;
      }
    }
    if (typeof message !== "string") {
      for (i = state.start; index < length && i < byteCount; ++index) {
        blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
      }
    } else {
      for (i = state.start; index < length && i < byteCount; ++index) {
        code = message.charCodeAt(index);
        if (code < 0x80) {
          blocks[i >> 2] |= code << SHIFT[i++ & 3];
        } else if (code < 0x800) {
          blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        } else if (code < 0xd800 || code >= 0xe000) {
          blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        } else {
          code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);
          blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        }
      }
    }
    state.lastByteIndex = i;
    if (i >= byteCount) {
      state.start = i - byteCount;
      state.block = blocks[blockCount];
      for (i = 0; i < blockCount; ++i) {
        s[i] ^= blocks[i];
      }
      f(s);
      state.reset = true;
    } else {
      state.start = i;
    }
  }

  // finalize
  i = state.lastByteIndex;
  blocks[i >> 2] |= KECCAK_PADDING[i & 3];
  if (state.lastByteIndex === byteCount) {
    blocks[0] = blocks[blockCount];
    for (i = 1; i < blockCount + 1; ++i) {
      blocks[i] = 0;
    }
  }
  blocks[blockCount - 1] |= 0x80000000;
  for (i = 0; i < blockCount; ++i) {
    s[i] ^= blocks[i];
  }
  f(s);

  // toString
  var hex = '',
      i = 0,
      j = 0,
      block;
  while (j < outputBlocks) {
    for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
      block = s[i];
      hex += HEX_CHARS[block >> 4 & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[block >> 12 & 0x0F] + HEX_CHARS[block >> 8 & 0x0F] + HEX_CHARS[block >> 20 & 0x0F] + HEX_CHARS[block >> 16 & 0x0F] + HEX_CHARS[block >> 28 & 0x0F] + HEX_CHARS[block >> 24 & 0x0F];
    }
    if (j % blockCount === 0) {
      f(s);
      i = 0;
    }
  }
  return "0x" + hex;
};

var f = function f(s) {
  var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;

  for (n = 0; n < 48; n += 2) {
    c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
    c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
    c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
    c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
    c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
    c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
    c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
    c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
    c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
    c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];

    h = c8 ^ (c2 << 1 | c3 >>> 31);
    l = c9 ^ (c3 << 1 | c2 >>> 31);
    s[0] ^= h;
    s[1] ^= l;
    s[10] ^= h;
    s[11] ^= l;
    s[20] ^= h;
    s[21] ^= l;
    s[30] ^= h;
    s[31] ^= l;
    s[40] ^= h;
    s[41] ^= l;
    h = c0 ^ (c4 << 1 | c5 >>> 31);
    l = c1 ^ (c5 << 1 | c4 >>> 31);
    s[2] ^= h;
    s[3] ^= l;
    s[12] ^= h;
    s[13] ^= l;
    s[22] ^= h;
    s[23] ^= l;
    s[32] ^= h;
    s[33] ^= l;
    s[42] ^= h;
    s[43] ^= l;
    h = c2 ^ (c6 << 1 | c7 >>> 31);
    l = c3 ^ (c7 << 1 | c6 >>> 31);
    s[4] ^= h;
    s[5] ^= l;
    s[14] ^= h;
    s[15] ^= l;
    s[24] ^= h;
    s[25] ^= l;
    s[34] ^= h;
    s[35] ^= l;
    s[44] ^= h;
    s[45] ^= l;
    h = c4 ^ (c8 << 1 | c9 >>> 31);
    l = c5 ^ (c9 << 1 | c8 >>> 31);
    s[6] ^= h;
    s[7] ^= l;
    s[16] ^= h;
    s[17] ^= l;
    s[26] ^= h;
    s[27] ^= l;
    s[36] ^= h;
    s[37] ^= l;
    s[46] ^= h;
    s[47] ^= l;
    h = c6 ^ (c0 << 1 | c1 >>> 31);
    l = c7 ^ (c1 << 1 | c0 >>> 31);
    s[8] ^= h;
    s[9] ^= l;
    s[18] ^= h;
    s[19] ^= l;
    s[28] ^= h;
    s[29] ^= l;
    s[38] ^= h;
    s[39] ^= l;
    s[48] ^= h;
    s[49] ^= l;

    b0 = s[0];
    b1 = s[1];
    b32 = s[11] << 4 | s[10] >>> 28;
    b33 = s[10] << 4 | s[11] >>> 28;
    b14 = s[20] << 3 | s[21] >>> 29;
    b15 = s[21] << 3 | s[20] >>> 29;
    b46 = s[31] << 9 | s[30] >>> 23;
    b47 = s[30] << 9 | s[31] >>> 23;
    b28 = s[40] << 18 | s[41] >>> 14;
    b29 = s[41] << 18 | s[40] >>> 14;
    b20 = s[2] << 1 | s[3] >>> 31;
    b21 = s[3] << 1 | s[2] >>> 31;
    b2 = s[13] << 12 | s[12] >>> 20;
    b3 = s[12] << 12 | s[13] >>> 20;
    b34 = s[22] << 10 | s[23] >>> 22;
    b35 = s[23] << 10 | s[22] >>> 22;
    b16 = s[33] << 13 | s[32] >>> 19;
    b17 = s[32] << 13 | s[33] >>> 19;
    b48 = s[42] << 2 | s[43] >>> 30;
    b49 = s[43] << 2 | s[42] >>> 30;
    b40 = s[5] << 30 | s[4] >>> 2;
    b41 = s[4] << 30 | s[5] >>> 2;
    b22 = s[14] << 6 | s[15] >>> 26;
    b23 = s[15] << 6 | s[14] >>> 26;
    b4 = s[25] << 11 | s[24] >>> 21;
    b5 = s[24] << 11 | s[25] >>> 21;
    b36 = s[34] << 15 | s[35] >>> 17;
    b37 = s[35] << 15 | s[34] >>> 17;
    b18 = s[45] << 29 | s[44] >>> 3;
    b19 = s[44] << 29 | s[45] >>> 3;
    b10 = s[6] << 28 | s[7] >>> 4;
    b11 = s[7] << 28 | s[6] >>> 4;
    b42 = s[17] << 23 | s[16] >>> 9;
    b43 = s[16] << 23 | s[17] >>> 9;
    b24 = s[26] << 25 | s[27] >>> 7;
    b25 = s[27] << 25 | s[26] >>> 7;
    b6 = s[36] << 21 | s[37] >>> 11;
    b7 = s[37] << 21 | s[36] >>> 11;
    b38 = s[47] << 24 | s[46] >>> 8;
    b39 = s[46] << 24 | s[47] >>> 8;
    b30 = s[8] << 27 | s[9] >>> 5;
    b31 = s[9] << 27 | s[8] >>> 5;
    b12 = s[18] << 20 | s[19] >>> 12;
    b13 = s[19] << 20 | s[18] >>> 12;
    b44 = s[29] << 7 | s[28] >>> 25;
    b45 = s[28] << 7 | s[29] >>> 25;
    b26 = s[38] << 8 | s[39] >>> 24;
    b27 = s[39] << 8 | s[38] >>> 24;
    b8 = s[48] << 14 | s[49] >>> 18;
    b9 = s[49] << 14 | s[48] >>> 18;

    s[0] = b0 ^ ~b2 & b4;
    s[1] = b1 ^ ~b3 & b5;
    s[10] = b10 ^ ~b12 & b14;
    s[11] = b11 ^ ~b13 & b15;
    s[20] = b20 ^ ~b22 & b24;
    s[21] = b21 ^ ~b23 & b25;
    s[30] = b30 ^ ~b32 & b34;
    s[31] = b31 ^ ~b33 & b35;
    s[40] = b40 ^ ~b42 & b44;
    s[41] = b41 ^ ~b43 & b45;
    s[2] = b2 ^ ~b4 & b6;
    s[3] = b3 ^ ~b5 & b7;
    s[12] = b12 ^ ~b14 & b16;
    s[13] = b13 ^ ~b15 & b17;
    s[22] = b22 ^ ~b24 & b26;
    s[23] = b23 ^ ~b25 & b27;
    s[32] = b32 ^ ~b34 & b36;
    s[33] = b33 ^ ~b35 & b37;
    s[42] = b42 ^ ~b44 & b46;
    s[43] = b43 ^ ~b45 & b47;
    s[4] = b4 ^ ~b6 & b8;
    s[5] = b5 ^ ~b7 & b9;
    s[14] = b14 ^ ~b16 & b18;
    s[15] = b15 ^ ~b17 & b19;
    s[24] = b24 ^ ~b26 & b28;
    s[25] = b25 ^ ~b27 & b29;
    s[34] = b34 ^ ~b36 & b38;
    s[35] = b35 ^ ~b37 & b39;
    s[44] = b44 ^ ~b46 & b48;
    s[45] = b45 ^ ~b47 & b49;
    s[6] = b6 ^ ~b8 & b0;
    s[7] = b7 ^ ~b9 & b1;
    s[16] = b16 ^ ~b18 & b10;
    s[17] = b17 ^ ~b19 & b11;
    s[26] = b26 ^ ~b28 & b20;
    s[27] = b27 ^ ~b29 & b21;
    s[36] = b36 ^ ~b38 & b30;
    s[37] = b37 ^ ~b39 & b31;
    s[46] = b46 ^ ~b48 & b40;
    s[47] = b47 ^ ~b49 & b41;
    s[8] = b8 ^ ~b0 & b2;
    s[9] = b9 ^ ~b1 & b3;
    s[18] = b18 ^ ~b10 & b12;
    s[19] = b19 ^ ~b11 & b13;
    s[28] = b28 ^ ~b20 & b22;
    s[29] = b29 ^ ~b21 & b23;
    s[38] = b38 ^ ~b30 & b32;
    s[39] = b39 ^ ~b31 & b33;
    s[48] = b48 ^ ~b40 & b42;
    s[49] = b49 ^ ~b41 & b43;

    s[0] ^= RC[n];
    s[1] ^= RC[n + 1];
  }
};

var keccak = function keccak(bits) {
  return function (str) {
    var msg;
    if (str.slice(0, 2) === "0x") {
      msg = [];
      for (var i = 2, l = str.length; i < l; i += 2) {
        msg.push(parseInt(str.slice(i, i + 2), 16));
      }
    } else {
      msg = str;
    }
    return update(Keccak(bits, bits), msg);
  };
};

module.exports = {
  keccak256: keccak(256),
  keccak512: keccak(512),
  keccak256s: keccak(256),
  keccak512s: keccak(512)
};

/***/ }),

/***/ 347174:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var BN = __webpack_require__(213550);
var Bytes = __webpack_require__(450921);

var fromBN = function fromBN(bn) {
  return "0x" + bn.toString("hex");
};

var toBN = function toBN(str) {
  return new BN(str.slice(2), 16);
};

var fromString = function fromString(str) {
  var bn = "0x" + (str.slice(0, 2) === "0x" ? new BN(str.slice(2), 16) : new BN(str, 10)).toString("hex");
  return bn === "0x0" ? "0x" : bn;
};

var toEther = function toEther(wei) {
  return toNumber(div(wei, fromString("10000000000"))) / 100000000;
};

var fromEther = function fromEther(eth) {
  return mul(fromNumber(Math.floor(eth * 100000000)), fromString("10000000000"));
};

var toString = function toString(a) {
  return toBN(a).toString(10);
};

var fromNumber = function fromNumber(a) {
  return typeof a === "string" ? /^0x/.test(a) ? a : "0x" + a : "0x" + new BN(a).toString("hex");
};

var toNumber = function toNumber(a) {
  return toBN(a).toNumber();
};

var toUint256 = function toUint256(a) {
  return Bytes.pad(32, a);
};

var bin = function bin(method) {
  return function (a, b) {
    return fromBN(toBN(a)[method](toBN(b)));
  };
};

var add = bin("add");
var mul = bin("mul");
var div = bin("div");
var sub = bin("sub");

module.exports = {
  toString: toString,
  fromString: fromString,
  toNumber: toNumber,
  fromNumber: fromNumber,
  toEther: toEther,
  fromEther: fromEther,
  toUint256: toUint256,
  add: add,
  mul: mul,
  div: div,
  sub: sub
};

/***/ }),

/***/ 810412:
/***/ ((module) => {

// The RLP format
// Serialization and deserialization for the BytesTree type, under the following grammar:
// | First byte | Meaning                                                                    |
// | ---------- | -------------------------------------------------------------------------- |
// | 0   to 127 | HEX(leaf)                                                                  |
// | 128 to 183 | HEX(length_of_leaf + 128) + HEX(leaf)                                      |
// | 184 to 191 | HEX(length_of_length_of_leaf + 128 + 55) + HEX(length_of_leaf) + HEX(leaf) |
// | 192 to 247 | HEX(length_of_node + 192) + HEX(node)                                      |
// | 248 to 255 | HEX(length_of_length_of_node + 128 + 55) + HEX(length_of_node) + HEX(node) |

var encode = function encode(tree) {
  var padEven = function padEven(str) {
    return str.length % 2 === 0 ? str : "0" + str;
  };

  var uint = function uint(num) {
    return padEven(num.toString(16));
  };

  var length = function length(len, add) {
    return len < 56 ? uint(add + len) : uint(add + uint(len).length / 2 + 55) + uint(len);
  };

  var dataTree = function dataTree(tree) {
    if (typeof tree === "string") {
      var hex = tree.slice(2);
      var pre = hex.length != 2 || hex >= "80" ? length(hex.length / 2, 128) : "";
      return pre + hex;
    } else {
      var _hex = tree.map(dataTree).join("");
      var _pre = length(_hex.length / 2, 192);
      return _pre + _hex;
    }
  };

  return "0x" + dataTree(tree);
};

var decode = function decode(hex) {
  var i = 2;

  var parseTree = function parseTree() {
    if (i >= hex.length) throw "";
    var head = hex.slice(i, i + 2);
    return head < "80" ? (i += 2, "0x" + head) : head < "c0" ? parseHex() : parseList();
  };

  var parseLength = function parseLength() {
    var len = parseInt(hex.slice(i, i += 2), 16) % 64;
    return len < 56 ? len : parseInt(hex.slice(i, i += (len - 55) * 2), 16);
  };

  var parseHex = function parseHex() {
    var len = parseLength();
    return "0x" + hex.slice(i, i += len * 2);
  };

  var parseList = function parseList() {
    var lim = parseLength() * 2 + i;
    var list = [];
    while (i < lim) {
      list.push(parseTree());
    }return list;
  };

  try {
    return parseTree();
  } catch (e) {
    return [];
  }
};

module.exports = { encode: encode, decode: decode };

/***/ }),

/***/ 789002:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
// See: https://github.com/ethereum/wiki/wiki/Ethereum-Contract-ABI
var address_1 = __webpack_require__(371575);
var bignumber_1 = __webpack_require__(973766);
var bytes_1 = __webpack_require__(447212);
var utf8_1 = __webpack_require__(417882);
var properties_1 = __webpack_require__(321614);
var errors = __importStar(__webpack_require__(399204));
var paramTypeBytes = new RegExp(/^bytes([0-9]*)$/);
var paramTypeNumber = new RegExp(/^(u?int)([0-9]*)$/);
var paramTypeArray = new RegExp(/^(.*)\[([0-9]*)\]$/);
exports.defaultCoerceFunc = function (type, value) {
    var match = type.match(paramTypeNumber);
    if (match && parseInt(match[2]) <= 48) {
        return value.toNumber();
    }
    return value;
};
///////////////////////////////////
// Parsing for Solidity Signatures
var regexParen = new RegExp("^([^)(]*)\\((.*)\\)([^)(]*)$");
var regexIdentifier = new RegExp("^[A-Za-z_][A-Za-z0-9_]*$");
function verifyType(type) {
    // These need to be transformed to their full description
    if (type.match(/^uint($|[^1-9])/)) {
        type = 'uint256' + type.substring(4);
    }
    else if (type.match(/^int($|[^1-9])/)) {
        type = 'int256' + type.substring(3);
    }
    return type;
}
function parseParam(param, allowIndexed) {
    function throwError(i) {
        throw new Error('unexpected character "' + param[i] + '" at position ' + i + ' in "' + param + '"');
    }
    var parent = { type: '', name: '', state: { allowType: true } };
    var node = parent;
    for (var i = 0; i < param.length; i++) {
        var c = param[i];
        switch (c) {
            case '(':
                if (!node.state.allowParams) {
                    throwError(i);
                }
                node.state.allowType = false;
                node.type = verifyType(node.type);
                node.components = [{ type: '', name: '', parent: node, state: { allowType: true } }];
                node = node.components[0];
                break;
            case ')':
                delete node.state;
                if (allowIndexed && node.name === 'indexed') {
                    node.indexed = true;
                    node.name = '';
                }
                node.type = verifyType(node.type);
                var child = node;
                node = node.parent;
                if (!node) {
                    throwError(i);
                }
                delete child.parent;
                node.state.allowParams = false;
                node.state.allowName = true;
                node.state.allowArray = true;
                break;
            case ',':
                delete node.state;
                if (allowIndexed && node.name === 'indexed') {
                    node.indexed = true;
                    node.name = '';
                }
                node.type = verifyType(node.type);
                var sibling = { type: '', name: '', parent: node.parent, state: { allowType: true } };
                node.parent.components.push(sibling);
                delete node.parent;
                node = sibling;
                break;
            // Hit a space...
            case ' ':
                // If reading type, the type is done and may read a param or name
                if (node.state.allowType) {
                    if (node.type !== '') {
                        node.type = verifyType(node.type);
                        delete node.state.allowType;
                        node.state.allowName = true;
                        node.state.allowParams = true;
                    }
                }
                // If reading name, the name is done
                if (node.state.allowName) {
                    if (node.name !== '') {
                        if (allowIndexed && node.name === 'indexed') {
                            node.indexed = true;
                            node.name = '';
                        }
                        else {
                            node.state.allowName = false;
                        }
                    }
                }
                break;
            case '[':
                if (!node.state.allowArray) {
                    throwError(i);
                }
                node.type += c;
                node.state.allowArray = false;
                node.state.allowName = false;
                node.state.readArray = true;
                break;
            case ']':
                if (!node.state.readArray) {
                    throwError(i);
                }
                node.type += c;
                node.state.readArray = false;
                node.state.allowArray = true;
                node.state.allowName = true;
                break;
            default:
                if (node.state.allowType) {
                    node.type += c;
                    node.state.allowParams = true;
                    node.state.allowArray = true;
                }
                else if (node.state.allowName) {
                    node.name += c;
                    delete node.state.allowArray;
                }
                else if (node.state.readArray) {
                    node.type += c;
                }
                else {
                    throwError(i);
                }
        }
    }
    if (node.parent) {
        throw new Error("unexpected eof");
    }
    delete parent.state;
    if (allowIndexed && node.name === 'indexed') {
        node.indexed = true;
        node.name = '';
    }
    parent.type = verifyType(parent.type);
    return parent;
}
// @TODO: Better return type
function parseSignatureEvent(fragment) {
    var abi = {
        anonymous: false,
        inputs: [],
        name: '',
        type: 'event'
    };
    var match = fragment.match(regexParen);
    if (!match) {
        throw new Error('invalid event: ' + fragment);
    }
    abi.name = match[1].trim();
    splitNesting(match[2]).forEach(function (param) {
        param = parseParam(param, true);
        param.indexed = !!param.indexed;
        abi.inputs.push(param);
    });
    match[3].split(' ').forEach(function (modifier) {
        switch (modifier) {
            case 'anonymous':
                abi.anonymous = true;
                break;
            case '':
                break;
            default:
                console.log('unknown modifier: ' + modifier);
        }
    });
    if (abi.name && !abi.name.match(regexIdentifier)) {
        throw new Error('invalid identifier: "' + abi.name + '"');
    }
    return abi;
}
function parseSignatureFunction(fragment) {
    var abi = {
        constant: false,
        inputs: [],
        name: '',
        outputs: [],
        payable: false,
        stateMutability: null,
        type: 'function'
    };
    var comps = fragment.split(' returns ');
    var left = comps[0].match(regexParen);
    if (!left) {
        throw new Error('invalid signature');
    }
    abi.name = left[1].trim();
    if (!abi.name.match(regexIdentifier)) {
        throw new Error('invalid identifier: "' + left[1] + '"');
    }
    splitNesting(left[2]).forEach(function (param) {
        abi.inputs.push(parseParam(param));
    });
    left[3].split(' ').forEach(function (modifier) {
        switch (modifier) {
            case 'constant':
                abi.constant = true;
                break;
            case 'payable':
                abi.payable = true;
                break;
            case 'pure':
                abi.constant = true;
                abi.stateMutability = 'pure';
                break;
            case 'view':
                abi.constant = true;
                abi.stateMutability = 'view';
                break;
            case '':
                break;
            default:
                console.log('unknown modifier: ' + modifier);
        }
    });
    // We have outputs
    if (comps.length > 1) {
        var right = comps[1].match(regexParen);
        if (right[1].trim() != '' || right[3].trim() != '') {
            throw new Error('unexpected tokens');
        }
        splitNesting(right[2]).forEach(function (param) {
            abi.outputs.push(parseParam(param));
        });
    }
    return abi;
}
function parseParamType(type) {
    return parseParam(type, true);
}
exports.parseParamType = parseParamType;
// @TODO: Allow a second boolean to expose names
function formatParamType(paramType) {
    return getParamCoder(exports.defaultCoerceFunc, paramType).type;
}
exports.formatParamType = formatParamType;
// @TODO: Allow a second boolean to expose names and modifiers
function formatSignature(fragment) {
    return fragment.name + '(' + fragment.inputs.map(function (i) { return formatParamType(i); }).join(',') + ')';
}
exports.formatSignature = formatSignature;
function parseSignature(fragment) {
    if (typeof (fragment) === 'string') {
        // Make sure the "returns" is surrounded by a space and all whitespace is exactly one space
        fragment = fragment.replace(/\(/g, ' (').replace(/\)/g, ') ').replace(/\s+/g, ' ');
        fragment = fragment.trim();
        if (fragment.substring(0, 6) === 'event ') {
            return parseSignatureEvent(fragment.substring(6).trim());
        }
        else {
            if (fragment.substring(0, 9) === 'function ') {
                fragment = fragment.substring(9);
            }
            return parseSignatureFunction(fragment.trim());
        }
    }
    throw new Error('unknown signature');
}
exports.parseSignature = parseSignature;
var Coder = /** @class */ (function () {
    function Coder(coerceFunc, name, type, localName, dynamic) {
        this.coerceFunc = coerceFunc;
        this.name = name;
        this.type = type;
        this.localName = localName;
        this.dynamic = dynamic;
    }
    return Coder;
}());
// Clones the functionality of an existing Coder, but without a localName
var CoderAnonymous = /** @class */ (function (_super) {
    __extends(CoderAnonymous, _super);
    function CoderAnonymous(coder) {
        var _this = _super.call(this, coder.coerceFunc, coder.name, coder.type, undefined, coder.dynamic) || this;
        properties_1.defineReadOnly(_this, 'coder', coder);
        return _this;
    }
    CoderAnonymous.prototype.encode = function (value) { return this.coder.encode(value); };
    CoderAnonymous.prototype.decode = function (data, offset) { return this.coder.decode(data, offset); };
    return CoderAnonymous;
}(Coder));
var CoderNull = /** @class */ (function (_super) {
    __extends(CoderNull, _super);
    function CoderNull(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'null', '', localName, false) || this;
    }
    CoderNull.prototype.encode = function (value) {
        return bytes_1.arrayify([]);
    };
    CoderNull.prototype.decode = function (data, offset) {
        if (offset > data.length) {
            throw new Error('invalid null');
        }
        return {
            consumed: 0,
            value: this.coerceFunc('null', undefined)
        };
    };
    return CoderNull;
}(Coder));
var CoderNumber = /** @class */ (function (_super) {
    __extends(CoderNumber, _super);
    function CoderNumber(coerceFunc, size, signed, localName) {
        var _this = this;
        var name = ((signed ? 'int' : 'uint') + (size * 8));
        _this = _super.call(this, coerceFunc, name, name, localName, false) || this;
        _this.size = size;
        _this.signed = signed;
        return _this;
    }
    CoderNumber.prototype.encode = function (value) {
        try {
            var v = bignumber_1.bigNumberify(value);
            v = v.toTwos(this.size * 8).maskn(this.size * 8);
            //value = value.toTwos(size * 8).maskn(size * 8);
            if (this.signed) {
                v = v.fromTwos(this.size * 8).toTwos(256);
            }
            return bytes_1.padZeros(bytes_1.arrayify(v), 32);
        }
        catch (error) {
            errors.throwError('invalid number value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: this.name,
                value: value
            });
        }
        return null;
    };
    CoderNumber.prototype.decode = function (data, offset) {
        if (data.length < offset + 32) {
            errors.throwError('insufficient data for ' + this.name + ' type', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: this.name,
                value: bytes_1.hexlify(data.slice(offset, offset + 32))
            });
        }
        var junkLength = 32 - this.size;
        var value = bignumber_1.bigNumberify(data.slice(offset + junkLength, offset + 32));
        if (this.signed) {
            value = value.fromTwos(this.size * 8);
        }
        else {
            value = value.maskn(this.size * 8);
        }
        return {
            consumed: 32,
            value: this.coerceFunc(this.name, value),
        };
    };
    return CoderNumber;
}(Coder));
var uint256Coder = new CoderNumber(function (type, value) { return value; }, 32, false, 'none');
var CoderBoolean = /** @class */ (function (_super) {
    __extends(CoderBoolean, _super);
    function CoderBoolean(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'bool', 'bool', localName, false) || this;
    }
    CoderBoolean.prototype.encode = function (value) {
        return uint256Coder.encode(!!value ? 1 : 0);
    };
    CoderBoolean.prototype.decode = function (data, offset) {
        try {
            var result = uint256Coder.decode(data, offset);
        }
        catch (error) {
            if (error.reason === 'insufficient data for uint256 type') {
                errors.throwError('insufficient data for boolean type', errors.INVALID_ARGUMENT, {
                    arg: this.localName,
                    coderType: 'boolean',
                    value: error.value
                });
            }
            throw error;
        }
        return {
            consumed: result.consumed,
            value: this.coerceFunc('bool', !result.value.isZero())
        };
    };
    return CoderBoolean;
}(Coder));
var CoderFixedBytes = /** @class */ (function (_super) {
    __extends(CoderFixedBytes, _super);
    function CoderFixedBytes(coerceFunc, length, localName) {
        var _this = this;
        var name = ('bytes' + length);
        _this = _super.call(this, coerceFunc, name, name, localName, false) || this;
        _this.length = length;
        return _this;
    }
    CoderFixedBytes.prototype.encode = function (value) {
        var result = new Uint8Array(32);
        try {
            var data = bytes_1.arrayify(value);
            if (data.length > 32) {
                throw new Error();
            }
            result.set(data);
        }
        catch (error) {
            errors.throwError('invalid ' + this.name + ' value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: this.name,
                value: (error.value || value)
            });
        }
        return result;
    };
    CoderFixedBytes.prototype.decode = function (data, offset) {
        if (data.length < offset + 32) {
            errors.throwError('insufficient data for ' + name + ' type', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: this.name,
                value: bytes_1.hexlify(data.slice(offset, offset + 32))
            });
        }
        return {
            consumed: 32,
            value: this.coerceFunc(this.name, bytes_1.hexlify(data.slice(offset, offset + this.length)))
        };
    };
    return CoderFixedBytes;
}(Coder));
var CoderAddress = /** @class */ (function (_super) {
    __extends(CoderAddress, _super);
    function CoderAddress(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'address', 'address', localName, false) || this;
    }
    CoderAddress.prototype.encode = function (value) {
        var result = new Uint8Array(32);
        try {
            result.set(bytes_1.arrayify(address_1.getAddress(value)), 12);
        }
        catch (error) {
            errors.throwError('invalid address', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'address',
                value: value
            });
        }
        return result;
    };
    CoderAddress.prototype.decode = function (data, offset) {
        if (data.length < offset + 32) {
            errors.throwError('insufficuent data for address type', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'address',
                value: bytes_1.hexlify(data.slice(offset, offset + 32))
            });
        }
        return {
            consumed: 32,
            value: this.coerceFunc('address', address_1.getAddress(bytes_1.hexlify(data.slice(offset + 12, offset + 32))))
        };
    };
    return CoderAddress;
}(Coder));
function _encodeDynamicBytes(value) {
    var dataLength = 32 * Math.ceil(value.length / 32);
    var padding = new Uint8Array(dataLength - value.length);
    return bytes_1.concat([
        uint256Coder.encode(value.length),
        value,
        padding
    ]);
}
function _decodeDynamicBytes(data, offset, localName) {
    if (data.length < offset + 32) {
        errors.throwError('insufficient data for dynamicBytes length', errors.INVALID_ARGUMENT, {
            arg: localName,
            coderType: 'dynamicBytes',
            value: bytes_1.hexlify(data.slice(offset, offset + 32))
        });
    }
    var length = uint256Coder.decode(data, offset).value;
    try {
        length = length.toNumber();
    }
    catch (error) {
        errors.throwError('dynamic bytes count too large', errors.INVALID_ARGUMENT, {
            arg: localName,
            coderType: 'dynamicBytes',
            value: length.toString()
        });
    }
    if (data.length < offset + 32 + length) {
        errors.throwError('insufficient data for dynamicBytes type', errors.INVALID_ARGUMENT, {
            arg: localName,
            coderType: 'dynamicBytes',
            value: bytes_1.hexlify(data.slice(offset, offset + 32 + length))
        });
    }
    return {
        consumed: 32 + 32 * Math.ceil(length / 32),
        value: data.slice(offset + 32, offset + 32 + length),
    };
}
var CoderDynamicBytes = /** @class */ (function (_super) {
    __extends(CoderDynamicBytes, _super);
    function CoderDynamicBytes(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'bytes', 'bytes', localName, true) || this;
    }
    CoderDynamicBytes.prototype.encode = function (value) {
        try {
            return _encodeDynamicBytes(bytes_1.arrayify(value));
        }
        catch (error) {
            errors.throwError('invalid bytes value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'bytes',
                value: error.value
            });
        }
        return null;
    };
    CoderDynamicBytes.prototype.decode = function (data, offset) {
        var result = _decodeDynamicBytes(data, offset, this.localName);
        result.value = this.coerceFunc('bytes', bytes_1.hexlify(result.value));
        return result;
    };
    return CoderDynamicBytes;
}(Coder));
var CoderString = /** @class */ (function (_super) {
    __extends(CoderString, _super);
    function CoderString(coerceFunc, localName) {
        return _super.call(this, coerceFunc, 'string', 'string', localName, true) || this;
    }
    CoderString.prototype.encode = function (value) {
        if (typeof (value) !== 'string') {
            errors.throwError('invalid string value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'string',
                value: value
            });
        }
        return _encodeDynamicBytes(utf8_1.toUtf8Bytes(value));
    };
    CoderString.prototype.decode = function (data, offset) {
        var result = _decodeDynamicBytes(data, offset, this.localName);
        result.value = this.coerceFunc('string', utf8_1.toUtf8String(result.value));
        return result;
    };
    return CoderString;
}(Coder));
function alignSize(size) {
    return 32 * Math.ceil(size / 32);
}
function pack(coders, values) {
    if (Array.isArray(values)) {
        // do nothing
    }
    else if (values && typeof (values) === 'object') {
        var arrayValues = [];
        coders.forEach(function (coder) {
            arrayValues.push(values[coder.localName]);
        });
        values = arrayValues;
    }
    else {
        errors.throwError('invalid tuple value', errors.INVALID_ARGUMENT, {
            coderType: 'tuple',
            value: values
        });
    }
    if (coders.length !== values.length) {
        errors.throwError('types/value length mismatch', errors.INVALID_ARGUMENT, {
            coderType: 'tuple',
            value: values
        });
    }
    var parts = [];
    coders.forEach(function (coder, index) {
        parts.push({ dynamic: coder.dynamic, value: coder.encode(values[index]) });
    });
    var staticSize = 0, dynamicSize = 0;
    parts.forEach(function (part) {
        if (part.dynamic) {
            staticSize += 32;
            dynamicSize += alignSize(part.value.length);
        }
        else {
            staticSize += alignSize(part.value.length);
        }
    });
    var offset = 0, dynamicOffset = staticSize;
    var data = new Uint8Array(staticSize + dynamicSize);
    parts.forEach(function (part) {
        if (part.dynamic) {
            //uint256Coder.encode(dynamicOffset).copy(data, offset);
            data.set(uint256Coder.encode(dynamicOffset), offset);
            offset += 32;
            //part.value.copy(data, dynamicOffset);  @TODO
            data.set(part.value, dynamicOffset);
            dynamicOffset += alignSize(part.value.length);
        }
        else {
            //part.value.copy(data, offset);  @TODO
            data.set(part.value, offset);
            offset += alignSize(part.value.length);
        }
    });
    return data;
}
function unpack(coders, data, offset) {
    var baseOffset = offset;
    var consumed = 0;
    var value = [];
    coders.forEach(function (coder) {
        if (coder.dynamic) {
            var dynamicOffset = uint256Coder.decode(data, offset);
            var result = coder.decode(data, baseOffset + dynamicOffset.value.toNumber());
            // The dynamic part is leap-frogged somewhere else; doesn't count towards size
            result.consumed = dynamicOffset.consumed;
        }
        else {
            var result = coder.decode(data, offset);
        }
        if (result.value != undefined) {
            value.push(result.value);
        }
        offset += result.consumed;
        consumed += result.consumed;
    });
    coders.forEach(function (coder, index) {
        var name = coder.localName;
        if (!name) {
            return;
        }
        if (name === 'length') {
            name = '_length';
        }
        if (value[name] != null) {
            return;
        }
        value[name] = value[index];
    });
    return {
        value: value,
        consumed: consumed
    };
}
var CoderArray = /** @class */ (function (_super) {
    __extends(CoderArray, _super);
    function CoderArray(coerceFunc, coder, length, localName) {
        var _this = this;
        var type = (coder.type + '[' + (length >= 0 ? length : '') + ']');
        var dynamic = (length === -1 || coder.dynamic);
        _this = _super.call(this, coerceFunc, 'array', type, localName, dynamic) || this;
        _this.coder = coder;
        _this.length = length;
        return _this;
    }
    CoderArray.prototype.encode = function (value) {
        if (!Array.isArray(value)) {
            errors.throwError('expected array value', errors.INVALID_ARGUMENT, {
                arg: this.localName,
                coderType: 'array',
                value: value
            });
        }
        var count = this.length;
        var result = new Uint8Array(0);
        if (count === -1) {
            count = value.length;
            result = uint256Coder.encode(count);
        }
        errors.checkArgumentCount(count, value.length, 'in coder array' + (this.localName ? (" " + this.localName) : ""));
        var coders = [];
        for (var i = 0; i < value.length; i++) {
            coders.push(this.coder);
        }
        return bytes_1.concat([result, pack(coders, value)]);
    };
    CoderArray.prototype.decode = function (data, offset) {
        // @TODO:
        //if (data.length < offset + length * 32) { throw new Error('invalid array'); }
        var consumed = 0;
        var count = this.length;
        if (count === -1) {
            try {
                var decodedLength = uint256Coder.decode(data, offset);
            }
            catch (error) {
                errors.throwError('insufficient data for dynamic array length', errors.INVALID_ARGUMENT, {
                    arg: this.localName,
                    coderType: 'array',
                    value: error.value
                });
            }
            try {
                count = decodedLength.value.toNumber();
            }
            catch (error) {
                errors.throwError('array count too large', errors.INVALID_ARGUMENT, {
                    arg: this.localName,
                    coderType: 'array',
                    value: decodedLength.value.toString()
                });
            }
            consumed += decodedLength.consumed;
            offset += decodedLength.consumed;
        }
        var coders = [];
        for (var i = 0; i < count; i++) {
            coders.push(new CoderAnonymous(this.coder));
        }
        var result = unpack(coders, data, offset);
        result.consumed += consumed;
        result.value = this.coerceFunc(this.type, result.value);
        return result;
    };
    return CoderArray;
}(Coder));
var CoderTuple = /** @class */ (function (_super) {
    __extends(CoderTuple, _super);
    function CoderTuple(coerceFunc, coders, localName) {
        var _this = this;
        var dynamic = false;
        var types = [];
        coders.forEach(function (coder) {
            if (coder.dynamic) {
                dynamic = true;
            }
            types.push(coder.type);
        });
        var type = ('tuple(' + types.join(',') + ')');
        _this = _super.call(this, coerceFunc, 'tuple', type, localName, dynamic) || this;
        _this.coders = coders;
        return _this;
    }
    CoderTuple.prototype.encode = function (value) {
        return pack(this.coders, value);
    };
    CoderTuple.prototype.decode = function (data, offset) {
        var result = unpack(this.coders, data, offset);
        result.value = this.coerceFunc(this.type, result.value);
        return result;
    };
    return CoderTuple;
}(Coder));
/*
function getTypes(coders) {
    var type = coderTuple(coders).type;
    return type.substring(6, type.length - 1);
}
*/
function splitNesting(value) {
    var result = [];
    var accum = '';
    var depth = 0;
    for (var offset = 0; offset < value.length; offset++) {
        var c = value[offset];
        if (c === ',' && depth === 0) {
            result.push(accum);
            accum = '';
        }
        else {
            accum += c;
            if (c === '(') {
                depth++;
            }
            else if (c === ')') {
                depth--;
                if (depth === -1) {
                    throw new Error('unbalanced parenthsis');
                }
            }
        }
    }
    result.push(accum);
    return result;
}
// @TODO: Is there a way to return "class"?
var paramTypeSimple = {
    address: CoderAddress,
    bool: CoderBoolean,
    string: CoderString,
    bytes: CoderDynamicBytes,
};
function getTupleParamCoder(coerceFunc, components, localName) {
    if (!components) {
        components = [];
    }
    var coders = [];
    components.forEach(function (component) {
        coders.push(getParamCoder(coerceFunc, component));
    });
    return new CoderTuple(coerceFunc, coders, localName);
}
function getParamCoder(coerceFunc, param) {
    var coder = paramTypeSimple[param.type];
    if (coder) {
        return new coder(coerceFunc, param.name);
    }
    var match = param.type.match(paramTypeNumber);
    if (match) {
        var size = parseInt(match[2] || "256");
        if (size === 0 || size > 256 || (size % 8) !== 0) {
            errors.throwError('invalid ' + match[1] + ' bit length', errors.INVALID_ARGUMENT, {
                arg: 'param',
                value: param
            });
        }
        return new CoderNumber(coerceFunc, size / 8, (match[1] === 'int'), param.name);
    }
    var match = param.type.match(paramTypeBytes);
    if (match) {
        var size = parseInt(match[1]);
        if (size === 0 || size > 32) {
            errors.throwError('invalid bytes length', errors.INVALID_ARGUMENT, {
                arg: 'param',
                value: param
            });
        }
        return new CoderFixedBytes(coerceFunc, size, param.name);
    }
    var match = param.type.match(paramTypeArray);
    if (match) {
        var size = parseInt(match[2] || "-1");
        param = properties_1.jsonCopy(param);
        param.type = match[1];
        return new CoderArray(coerceFunc, getParamCoder(coerceFunc, param), size, param.name);
    }
    if (param.type.substring(0, 5) === 'tuple') {
        return getTupleParamCoder(coerceFunc, param.components, param.name);
    }
    if (param.type === '') {
        return new CoderNull(coerceFunc, param.name);
    }
    errors.throwError('invalid type', errors.INVALID_ARGUMENT, {
        arg: 'type',
        value: param.type
    });
    return null;
}
var AbiCoder = /** @class */ (function () {
    function AbiCoder(coerceFunc) {
        errors.checkNew(this, AbiCoder);
        if (!coerceFunc) {
            coerceFunc = exports.defaultCoerceFunc;
        }
        properties_1.defineReadOnly(this, 'coerceFunc', coerceFunc);
    }
    AbiCoder.prototype.encode = function (types, values) {
        if (types.length !== values.length) {
            errors.throwError('types/values length mismatch', errors.INVALID_ARGUMENT, {
                count: { types: types.length, values: values.length },
                value: { types: types, values: values }
            });
        }
        var coders = [];
        types.forEach(function (type) {
            // Convert types to type objects
            //   - "uint foo" => { type: "uint", name: "foo" }
            //   - "tuple(uint, uint)" => { type: "tuple", components: [ { type: "uint" }, { type: "uint" }, ] }
            var typeObject = null;
            if (typeof (type) === 'string') {
                typeObject = parseParam(type);
            }
            else {
                typeObject = type;
            }
            coders.push(getParamCoder(this.coerceFunc, typeObject));
        }, this);
        return bytes_1.hexlify(new CoderTuple(this.coerceFunc, coders, '_').encode(values));
    };
    AbiCoder.prototype.decode = function (types, data) {
        var coders = [];
        types.forEach(function (type) {
            // See encode for details
            var typeObject = null;
            if (typeof (type) === 'string') {
                typeObject = parseParam(type);
            }
            else {
                typeObject = properties_1.jsonCopy(type);
            }
            coders.push(getParamCoder(this.coerceFunc, typeObject));
        }, this);
        return new CoderTuple(this.coerceFunc, coders, '_').decode(bytes_1.arrayify(data), 0).value;
    };
    return AbiCoder;
}());
exports.AbiCoder = AbiCoder;
exports.defaultAbiCoder = new AbiCoder();


/***/ }),

/***/ 371575:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
// We use this for base 36 maths
var bn_js_1 = __importDefault(__webpack_require__(213550));
var bytes_1 = __webpack_require__(447212);
var keccak256_1 = __webpack_require__(554281);
var rlp_1 = __webpack_require__(936321);
var errors = __webpack_require__(399204);
function getChecksumAddress(address) {
    if (typeof (address) !== 'string' || !address.match(/^0x[0-9A-Fa-f]{40}$/)) {
        errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
    }
    address = address.toLowerCase();
    var chars = address.substring(2).split('');
    var hashed = new Uint8Array(40);
    for (var i_1 = 0; i_1 < 40; i_1++) {
        hashed[i_1] = chars[i_1].charCodeAt(0);
    }
    hashed = bytes_1.arrayify(keccak256_1.keccak256(hashed));
    for (var i = 0; i < 40; i += 2) {
        if ((hashed[i >> 1] >> 4) >= 8) {
            chars[i] = chars[i].toUpperCase();
        }
        if ((hashed[i >> 1] & 0x0f) >= 8) {
            chars[i + 1] = chars[i + 1].toUpperCase();
        }
    }
    return '0x' + chars.join('');
}
// Shims for environments that are missing some required constants and functions
var MAX_SAFE_INTEGER = 0x1fffffffffffff;
function log10(x) {
    if (Math.log10) {
        return Math.log10(x);
    }
    return Math.log(x) / Math.LN10;
}
// See: https://en.wikipedia.org/wiki/International_Bank_Account_Number
// Create lookup table
var ibanLookup = {};
for (var i = 0; i < 10; i++) {
    ibanLookup[String(i)] = String(i);
}
for (var i = 0; i < 26; i++) {
    ibanLookup[String.fromCharCode(65 + i)] = String(10 + i);
}
// How many decimal digits can we process? (for 64-bit float, this is 15)
var safeDigits = Math.floor(log10(MAX_SAFE_INTEGER));
function ibanChecksum(address) {
    address = address.toUpperCase();
    address = address.substring(4) + address.substring(0, 2) + '00';
    var expanded = '';
    address.split('').forEach(function (c) {
        expanded += ibanLookup[c];
    });
    // Javascript can handle integers safely up to 15 (decimal) digits
    while (expanded.length >= safeDigits) {
        var block = expanded.substring(0, safeDigits);
        expanded = parseInt(block, 10) % 97 + expanded.substring(block.length);
    }
    var checksum = String(98 - (parseInt(expanded, 10) % 97));
    while (checksum.length < 2) {
        checksum = '0' + checksum;
    }
    return checksum;
}
;
function getAddress(address) {
    var result = null;
    if (typeof (address) !== 'string') {
        errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
    }
    if (address.match(/^(0x)?[0-9a-fA-F]{40}$/)) {
        // Missing the 0x prefix
        if (address.substring(0, 2) !== '0x') {
            address = '0x' + address;
        }
        result = getChecksumAddress(address);
        // It is a checksummed address with a bad checksum
        if (address.match(/([A-F].*[a-f])|([a-f].*[A-F])/) && result !== address) {
            errors.throwError('bad address checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
        }
        // Maybe ICAP? (we only support direct mode)
    }
    else if (address.match(/^XE[0-9]{2}[0-9A-Za-z]{30,31}$/)) {
        // It is an ICAP address with a bad checksum
        if (address.substring(2, 4) !== ibanChecksum(address)) {
            errors.throwError('bad icap checksum', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
        }
        result = (new bn_js_1.default.BN(address.substring(4), 36)).toString(16);
        while (result.length < 40) {
            result = '0' + result;
        }
        result = getChecksumAddress('0x' + result);
    }
    else {
        errors.throwError('invalid address', errors.INVALID_ARGUMENT, { arg: 'address', value: address });
    }
    return result;
}
exports.getAddress = getAddress;
function getIcapAddress(address) {
    var base36 = (new bn_js_1.default.BN(getAddress(address).substring(2), 16)).toString(36).toUpperCase();
    while (base36.length < 30) {
        base36 = '0' + base36;
    }
    return 'XE' + ibanChecksum('XE00' + base36) + base36;
}
exports.getIcapAddress = getIcapAddress;
// http://ethereum.stackexchange.com/questions/760/how-is-the-address-of-an-ethereum-contract-computed
function getContractAddress(transaction) {
    if (!transaction.from) {
        throw new Error('missing from address');
    }
    var nonce = transaction.nonce;
    return getAddress('0x' + keccak256_1.keccak256(rlp_1.encode([
        getAddress(transaction.from),
        bytes_1.stripZeros(bytes_1.hexlify(nonce))
    ])).substring(26));
}
exports.getContractAddress = getContractAddress;


/***/ }),

/***/ 973766:
/***/ (function(__unused_webpack_module, exports, __webpack_require__) {

"use strict";

var __extends = (this && this.__extends) || (function () {
    var extendStatics = Object.setPrototypeOf ||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
    return function (d, b) {
        extendStatics(d, b);
        function __() { this.constructor = d; }
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
    };
})();
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
    result["default"] = mod;
    return result;
};
Object.defineProperty(exports, "__esModule", ({ value: true }));
/**
 *  BigNumber
 *
 *  A wrapper around the BN.js object. We use the BN.js library
 *  because it is used by elliptic, so it is required regardles.
 *
 */
var bn_js_1 = __importDefault(__webpack_require__(213550));
var bytes_1 = __webpack_require__(447212);
var properties_1 = __webpack_require__(321614);
var types_1 = __webpack_require__(418661);
var errors = __importStar(__webpack_require__(399204));
var BN_1 = new bn_js_1.default.BN(-1);
function toHex(bn) {
    var value = bn.toString(16);
    if (value[0] === '-') {
        if ((value.length % 2) === 0) {
            return '-0x0' + value.substring(1);
        }
        return "-0x" + value.substring(1);
    }
    if ((value.length % 2) === 1) {
        return '0x0' + value;
    }
    return '0x' + value;
}
function toBN(value) {
    return bigNumberify(value)._bn;
}
function toBigNumber(bn) {
    return new BigNumber(toHex(bn));
}
var BigNumber = /** @class */ (function (_super) {
    __extends(BigNumber, _super);
    function BigNumber(value) {
        var _this = _super.call(this) || this;
        errors.checkNew(_this, BigNumber);
        if (typeof (value) === 'string') {
            if (bytes_1.isHexString(value)) {
                if (value == '0x') {
                    value = '0x0';
                }
                properties_1.defineReadOnly(_this, '_hex', value);
            }
            else if (value[0] === '-' && bytes_1.isHexString(value.substring(1))) {
                properties_1.defineReadOnly(_this, '_hex', value);
            }
            else if (value.match(/^-?[0-9]*$/)) {
                if (value == '') {
                    value = '0';
                }
                properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(value)));
            }
            else {
                errors.throwError('invalid BigNumber string value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
            }
        }
        else if (typeof (value) === 'number') {
            if (parseInt(String(value)) !== value) {
                errors.throwError('underflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'underflow', value: value, outputValue: parseInt(String(value)) });
            }
            try {
                properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(value)));
            }
            catch (error) {
                errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });
            }
        }
        else if (value instanceof BigNumber) {
            properties_1.defineReadOnly(_this, '_hex', value._hex);
        }
        else if (value.toHexString) {
            properties_1.defineReadOnly(_this, '_hex', toHex(toBN(value.toHexString())));
        }
        else if (bytes_1.isArrayish(value)) {
            properties_1.defineReadOnly(_this, '_hex', toHex(new bn_js_1.default.BN(bytes_1.hexlify(value).substring(2), 16)));
        }
        else {
            errors.throwError('invalid BigNumber value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        return _this;
    }
    Object.defineProperty(BigNumber.prototype, "_bn", {
        get: function () {
            if (this._hex[0] === '-') {
                return (new bn_js_1.default.BN(this._hex.substring(3), 16)).mul(BN_1);
            }
            return new bn_js_1.default.BN(this._hex.substring(2), 16);
        },
        enumerable: true,
        configurable: true
    });
    BigNumber.prototype.fromTwos = function (value) {
        return toBigNumber(this._bn.fromTwos(value));
    };
    BigNumber.prototype.toTwos = function (value) {
        return toBigNumber(this._bn.toTwos(value));
    };
    BigNumber.prototype.add = function (other) {
        return toBigNumber(this._bn.add(toBN(other)));
    };
    BigNumber.prototype.sub = function (other) {
        return toBigNumber(this._bn.sub(toBN(other)));
    };
    BigNumber.prototype.div = function (other) {
        var o = bigNumberify(other);
        if (o.isZero()) {
            errors.throwError('division by zero', errors.NUMERIC_FAULT, { operation: 'divide', fault: 'division by zero' });
        }
        return toBigNumber(this._bn.div(toBN(other)));
    };
    BigNumber.prototype.mul = function (other) {
        return toBigNumber(this._bn.mul(toBN(other)));
    };
    BigNumber.prototype.mod = function (other) {
        return toBigNumber(this._bn.mod(toBN(other)));
    };
    BigNumber.prototype.pow = function (other) {
        return toBigNumber(this._bn.pow(toBN(other)));
    };
    BigNumber.prototype.maskn = function (value) {
        return toBigNumber(this._bn.maskn(value));
    };
    BigNumber.prototype.eq = function (other) {
        return this._bn.eq(toBN(other));
    };
    BigNumber.prototype.lt = function (other) {
        return this._bn.lt(toBN(other));
    };
    BigNumber.prototype.lte = function (other) {
        return this._bn.lte(toBN(other));
    };
    BigNumber.prototype.gt = function (other) {
        return this._bn.gt(toBN(other));
    };
    BigNumber.prototype.gte = function (other) {
        return this._bn.gte(toBN(other));
    };
    BigNumber.prototype.isZero = function () {
        return this._bn.isZero();
    };
    BigNumber.prototype.toNumber = function () {
        try {
            return this._bn.toNumber();
        }
        catch (error) {
            errors.throwError('overflow', errors.NUMERIC_FAULT, { operation: 'setValue', fault: 'overflow', details: error.message });
        }
        return null;
    };
    BigNumber.prototype.toString = function () {
        return this._bn.toString(10);
    };
    BigNumber.prototype.toHexString = function () {
        return this._hex;
    };
    return BigNumber;
}(types_1.BigNumber));
function bigNumberify(value) {
    if (value instanceof BigNumber) {
        return value;
    }
    return new BigNumber(value);
}
exports.bigNumberify = bigNumberify;
exports.ConstantNegativeOne = bigNumberify(-1);
exports.ConstantZero = bigNumberify(0);
exports.ConstantOne = bigNumberify(1);
exports.ConstantTwo = bigNumberify(2);
exports.ConstantWeiPerEther = bigNumberify('1000000000000000000');


/***/ }),

/***/ 447212:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

/**
 *  Conversion Utilities
 *
 */
Object.defineProperty(exports, "__esModule", ({ value: true }));
var types_1 = __webpack_require__(418661);
var errors = __webpack_require__(399204);
exports.AddressZero = '0x0000000000000000000000000000000000000000';
exports.HashZero = '0x0000000000000000000000000000000000000000000000000000000000000000';
function isBigNumber(value) {
    return (value instanceof types_1.BigNumber);
}
function addSlice(array) {
    if (array.slice) {
        return array;
    }
    array.slice = function () {
        var args = Array.prototype.slice.call(arguments);
        return new Uint8Array(Array.prototype.slice.apply(array, args));
    };
    return array;
}
function isArrayish(value) {
    if (!value || parseInt(String(value.length)) != value.length || typeof (value) === 'string') {
        return false;
    }
    for (var i = 0; i < value.length; i++) {
        var v = value[i];
        if (v < 0 || v >= 256 || parseInt(String(v)) != v) {
            return false;
        }
    }
    return true;
}
exports.isArrayish = isArrayish;
function arrayify(value) {
    if (value == null) {
        errors.throwError('cannot convert null value to array', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    if (isBigNumber(value)) {
        value = value.toHexString();
    }
    if (typeof (value) === 'string') {
        var match = value.match(/^(0x)?[0-9a-fA-F]*$/);
        if (!match) {
            errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        if (match[1] !== '0x') {
            errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        value = value.substring(2);
        if (value.length % 2) {
            value = '0' + value;
        }
        var result = [];
        for (var i = 0; i < value.length; i += 2) {
            result.push(parseInt(value.substr(i, 2), 16));
        }
        return addSlice(new Uint8Array(result));
    }
    else if (typeof (value) === 'string') {
    }
    if (isArrayish(value)) {
        return addSlice(new Uint8Array(value));
    }
    errors.throwError('invalid arrayify value', null, { arg: 'value', value: value, type: typeof (value) });
    return null;
}
exports.arrayify = arrayify;
function concat(objects) {
    var arrays = [];
    var length = 0;
    for (var i = 0; i < objects.length; i++) {
        var object = arrayify(objects[i]);
        arrays.push(object);
        length += object.length;
    }
    var result = new Uint8Array(length);
    var offset = 0;
    for (var i = 0; i < arrays.length; i++) {
        result.set(arrays[i], offset);
        offset += arrays[i].length;
    }
    return addSlice(result);
}
exports.concat = concat;
function stripZeros(value) {
    var result = arrayify(value);
    if (result.length === 0) {
        return result;
    }
    // Find the first non-zero entry
    var start = 0;
    while (result[start] === 0) {
        start++;
    }
    // If we started with zeros, strip them
    if (start) {
        result = result.slice(start);
    }
    return result;
}
exports.stripZeros = stripZeros;
function padZeros(value, length) {
    value = arrayify(value);
    if (length < value.length) {
        throw new Error('cannot pad');
    }
    var result = new Uint8Array(length);
    result.set(value, length - value.length);
    return addSlice(result);
}
exports.padZeros = padZeros;
function isHexString(value, length) {
    if (typeof (value) !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
        return false;
    }
    if (length && value.length !== 2 + 2 * length) {
        return false;
    }
    return true;
}
exports.isHexString = isHexString;
var HexCharacters = '0123456789abcdef';
function hexlify(value) {
    if (isBigNumber(value)) {
        return value.toHexString();
    }
    if (typeof (value) === 'number') {
        if (value < 0) {
            errors.throwError('cannot hexlify negative value', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        var hex = '';
        while (value) {
            hex = HexCharacters[value & 0x0f] + hex;
            value = Math.floor(value / 16);
        }
        if (hex.length) {
            if (hex.length % 2) {
                hex = '0' + hex;
            }
            return '0x' + hex;
        }
        return '0x00';
    }
    if (typeof (value) === 'string') {
        var match = value.match(/^(0x)?[0-9a-fA-F]*$/);
        if (!match) {
            errors.throwError('invalid hexidecimal string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        if (match[1] !== '0x') {
            errors.throwError('hex string must have 0x prefix', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
        }
        if (value.length % 2) {
            value = '0x0' + value.substring(2);
        }
        return value;
    }
    if (isArrayish(value)) {
        var result = [];
        for (var i = 0; i < value.length; i++) {
            var v = value[i];
            result.push(HexCharacters[(v & 0xf0) >> 4] + HexCharacters[v & 0x0f]);
        }
        return '0x' + result.join('');
    }
    errors.throwError('invalid hexlify value', null, { arg: 'value', value: value });
    return 'never';
}
exports.hexlify = hexlify;
function hexDataLength(data) {
    if (!isHexString(data) || (data.length % 2) !== 0) {
        return null;
    }
    return (data.length - 2) / 2;
}
exports.hexDataLength = hexDataLength;
function hexDataSlice(data, offset, length) {
    if (!isHexString(data)) {
        errors.throwError('invalid hex data', errors.INVALID_ARGUMENT, { arg: 'value', value: data });
    }
    if ((data.length % 2) !== 0) {
        errors.throwError('hex data length must be even', errors.INVALID_ARGUMENT, { arg: 'value', value: data });
    }
    offset = 2 + 2 * offset;
    if (length != null) {
        return '0x' + data.substring(offset, offset + 2 * length);
    }
    return '0x' + data.substring(offset);
}
exports.hexDataSlice = hexDataSlice;
function hexStripZeros(value) {
    if (!isHexString(value)) {
        errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    while (value.length > 3 && value.substring(0, 3) === '0x0') {
        value = '0x' + value.substring(3);
    }
    return value;
}
exports.hexStripZeros = hexStripZeros;
function hexZeroPad(value, length) {
    if (!isHexString(value)) {
        errors.throwError('invalid hex string', errors.INVALID_ARGUMENT, { arg: 'value', value: value });
    }
    while (value.length < 2 * length + 2) {
        value = '0x0' + value.substring(2);
    }
    return value;
}
exports.hexZeroPad = hexZeroPad;
function isSignature(value) {
    return (value && value.r != null && value.s != null);
}
function splitSignature(signature) {
    var v = 0;
    var r = '0x', s = '0x';
    if (isSignature(signature)) {
        if (signature.v == null && signature.recoveryParam == null) {
            errors.throwError('at least on of recoveryParam or v must be specified', errors.INVALID_ARGUMENT, { argument: 'signature', value: signature });
        }
        r = hexZeroPad(signature.r, 32);
        s = hexZeroPad(signature.s, 32);
        v = signature.v;
        if (typeof (v) === 'string') {
            v = parseInt(v, 16);
        }
        var recoveryParam = signature.recoveryParam;
        if (recoveryParam == null && signature.v != null) {
            recoveryParam = 1 - (v % 2);
        }
        v = 27 + recoveryParam;
    }
    else {
        var bytes = arrayify(signature);
        if (bytes.length !== 65) {
            throw new Error('invalid signature');
        }
        r = hexlify(bytes.slice(0, 32));
        s = hexlify(bytes.slice(32, 64));
        v = bytes[64];
        if (v !== 27 && v !== 28) {
            v = 27 + (v % 2);
        }
    }
    return {
        r: r,
        s: s,
        recoveryParam: (v - 27),
        v: v
    };
}
exports.splitSignature = splitSignature;
function joinSignature(signature) {
    signature = splitSignature(signature);
    return hexlify(concat([
        signature.r,
        signature.s,
        (signature.recoveryParam ? '0x1c' : '0x1b')
    ]));
}
exports.joinSignature = joinSignature;


/***/ }),

/***/ 399204:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
// Unknown Error
exports.UNKNOWN_ERROR = 'UNKNOWN_ERROR';
// Not implemented
exports.NOT_IMPLEMENTED = 'NOT_IMPLEMENTED';
// Missing new operator to an object
//  - name: The name of the class
exports.MISSING_NEW = 'MISSING_NEW';
// Call exception
//  - transaction: the transaction
//  - address?: the contract address
//  - args?: The arguments passed into the function
//  - method?: The Solidity method signature
//  - errorSignature?: The EIP848 error signature
//  - errorArgs?: The EIP848 error parameters
//  - reason: The reason (only for EIP848 "Error(string)")
exports.CALL_EXCEPTION = 'CALL_EXCEPTION';
// Response from a server was invalid
//   - response: The body of the response
//'BAD_RESPONSE',
// Invalid argument (e.g. value is incompatible with type) to a function:
//   - arg: The argument name that was invalid
//   - value: The value of the argument
exports.INVALID_ARGUMENT = 'INVALID_ARGUMENT';
// Missing argument to a function:
//   - count: The number of arguments received
//   - expectedCount: The number of arguments expected
exports.MISSING_ARGUMENT = 'MISSING_ARGUMENT';
// Too many arguments
//   - count: The number of arguments received
//   - expectedCount: The number of arguments expected
exports.UNEXPECTED_ARGUMENT = 'UNEXPECTED_ARGUMENT';
// Numeric Fault
//   - operation: the operation being executed
//   - fault: the reason this faulted
exports.NUMERIC_FAULT = 'NUMERIC_FAULT';
// Unsupported operation
//   - operation
exports.UNSUPPORTED_OPERATION = 'UNSUPPORTED_OPERATION';
var _permanentCensorErrors = false;
var _censorErrors = false;
// @TODO: Enum
function throwError(message, code, params) {
    if (_censorErrors) {
        throw new Error('unknown error');
    }
    if (!code) {
        code = exports.UNKNOWN_ERROR;
    }
    if (!params) {
        params = {};
    }
    var messageDetails = [];
    Object.keys(params).forEach(function (key) {
        try {
            messageDetails.push(key + '=' + JSON.stringify(params[key]));
        }
        catch (error) {
            messageDetails.push(key + '=' + JSON.stringify(params[key].toString()));
        }
    });
    var reason = message;
    if (messageDetails.length) {
        message += ' (' + messageDetails.join(', ') + ')';
    }
    // @TODO: Any??
    var error = new Error(message);
    error.reason = reason;
    error.code = code;
    Object.keys(params).forEach(function (key) {
        error[key] = params[key];
    });
    throw error;
}
exports.throwError = throwError;
function checkNew(self, kind) {
    if (!(self instanceof kind)) {
        throwError('missing new', exports.MISSING_NEW, { name: kind.name });
    }
}
exports.checkNew = checkNew;
function checkArgumentCount(count, expectedCount, suffix) {
    if (!suffix) {
        suffix = '';
    }
    if (count < expectedCount) {
        throwError('missing argument' + suffix, exports.MISSING_ARGUMENT, { count: count, expectedCount: expectedCount });
    }
    if (count > expectedCount) {
        throwError('too many arguments' + suffix, exports.UNEXPECTED_ARGUMENT, { count: count, expectedCount: expectedCount });
    }
}
exports.checkArgumentCount = checkArgumentCount;
function setCensorship(censorship, permanent) {
    if (_permanentCensorErrors) {
        throwError('error censorship permanent', exports.UNSUPPORTED_OPERATION, { operation: 'setCersorship' });
    }
    _censorErrors = !!censorship;
    _permanentCensorErrors = !!permanent;
}
exports.setCensorship = setCensorship;


/***/ }),

/***/ 554281:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var sha3 = __webpack_require__(591094);
var bytes_1 = __webpack_require__(447212);
function keccak256(data) {
    return '0x' + sha3.keccak_256(bytes_1.arrayify(data));
}
exports.keccak256 = keccak256;


/***/ }),

/***/ 321614:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
function defineReadOnly(object, name, value) {
    Object.defineProperty(object, name, {
        enumerable: true,
        value: value,
        writable: false,
    });
}
exports.defineReadOnly = defineReadOnly;
function defineFrozen(object, name, value) {
    var frozen = JSON.stringify(value);
    Object.defineProperty(object, name, {
        enumerable: true,
        get: function () { return JSON.parse(frozen); }
    });
}
exports.defineFrozen = defineFrozen;
function resolveProperties(object) {
    var result = {};
    var promises = [];
    Object.keys(object).forEach(function (key) {
        var value = object[key];
        if (value instanceof Promise) {
            promises.push(value.then(function (value) {
                result[key] = value;
                return null;
            }));
        }
        else {
            result[key] = value;
        }
    });
    return Promise.all(promises).then(function () {
        return result;
    });
}
exports.resolveProperties = resolveProperties;
function shallowCopy(object) {
    var result = {};
    for (var key in object) {
        result[key] = object[key];
    }
    return result;
}
exports.shallowCopy = shallowCopy;
function jsonCopy(object) {
    return JSON.parse(JSON.stringify(object));
}
exports.jsonCopy = jsonCopy;


/***/ }),

/***/ 936321:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

//See: https://github.com/ethereum/wiki/wiki/RLP
Object.defineProperty(exports, "__esModule", ({ value: true }));
var bytes_1 = __webpack_require__(447212);
function arrayifyInteger(value) {
    var result = [];
    while (value) {
        result.unshift(value & 0xff);
        value >>= 8;
    }
    return result;
}
function unarrayifyInteger(data, offset, length) {
    var result = 0;
    for (var i = 0; i < length; i++) {
        result = (result * 256) + data[offset + i];
    }
    return result;
}
function _encode(object) {
    if (Array.isArray(object)) {
        var payload = [];
        object.forEach(function (child) {
            payload = payload.concat(_encode(child));
        });
        if (payload.length <= 55) {
            payload.unshift(0xc0 + payload.length);
            return payload;
        }
        var length = arrayifyInteger(payload.length);
        length.unshift(0xf7 + length.length);
        return length.concat(payload);
    }
    var data = Array.prototype.slice.call(bytes_1.arrayify(object));
    if (data.length === 1 && data[0] <= 0x7f) {
        return data;
    }
    else if (data.length <= 55) {
        data.unshift(0x80 + data.length);
        return data;
    }
    var length = arrayifyInteger(data.length);
    length.unshift(0xb7 + length.length);
    return length.concat(data);
}
function encode(object) {
    return bytes_1.hexlify(_encode(object));
}
exports.encode = encode;
function _decodeChildren(data, offset, childOffset, length) {
    var result = [];
    while (childOffset < offset + 1 + length) {
        var decoded = _decode(data, childOffset);
        result.push(decoded.result);
        childOffset += decoded.consumed;
        if (childOffset > offset + 1 + length) {
            throw new Error('invalid rlp');
        }
    }
    return { consumed: (1 + length), result: result };
}
// returns { consumed: number, result: Object }
function _decode(data, offset) {
    if (data.length === 0) {
        throw new Error('invalid rlp data');
    }
    // Array with extra length prefix
    if (data[offset] >= 0xf8) {
        var lengthLength = data[offset] - 0xf7;
        if (offset + 1 + lengthLength > data.length) {
            throw new Error('too short');
        }
        var length = unarrayifyInteger(data, offset + 1, lengthLength);
        if (offset + 1 + lengthLength + length > data.length) {
            throw new Error('to short');
        }
        return _decodeChildren(data, offset, offset + 1 + lengthLength, lengthLength + length);
    }
    else if (data[offset] >= 0xc0) {
        var length = data[offset] - 0xc0;
        if (offset + 1 + length > data.length) {
            throw new Error('invalid rlp data');
        }
        return _decodeChildren(data, offset, offset + 1, length);
    }
    else if (data[offset] >= 0xb8) {
        var lengthLength = data[offset] - 0xb7;
        if (offset + 1 + lengthLength > data.length) {
            throw new Error('invalid rlp data');
        }
        var length = unarrayifyInteger(data, offset + 1, lengthLength);
        if (offset + 1 + lengthLength + length > data.length) {
            throw new Error('invalid rlp data');
        }
        var result = bytes_1.hexlify(data.slice(offset + 1 + lengthLength, offset + 1 + lengthLength + length));
        return { consumed: (1 + lengthLength + length), result: result };
    }
    else if (data[offset] >= 0x80) {
        var length = data[offset] - 0x80;
        if (offset + 1 + length > data.length) {
            throw new Error('invlaid rlp data');
        }
        var result = bytes_1.hexlify(data.slice(offset + 1, offset + 1 + length));
        return { consumed: (1 + length), result: result };
    }
    return { consumed: 1, result: bytes_1.hexlify(data[offset]) };
}
function decode(data) {
    var bytes = bytes_1.arrayify(data);
    var decoded = _decode(bytes, 0);
    if (decoded.consumed !== bytes.length) {
        throw new Error('invalid rlp data');
    }
    return decoded.result;
}
exports.decode = decode;


/***/ }),

/***/ 418661:
/***/ ((__unused_webpack_module, exports) => {

"use strict";

///////////////////////////////
// Bytes
Object.defineProperty(exports, "__esModule", ({ value: true }));
///////////////////////////////
// BigNumber
var BigNumber = /** @class */ (function () {
    function BigNumber() {
    }
    return BigNumber;
}());
exports.BigNumber = BigNumber;
;
;
;
///////////////////////////////
// Interface
var Indexed = /** @class */ (function () {
    function Indexed() {
    }
    return Indexed;
}());
exports.Indexed = Indexed;
/**
 *  Provider
 *
 *  Note: We use an abstract class so we can use instanceof to determine if an
 *        object is a Provider.
 */
var MinimalProvider = /** @class */ (function () {
    function MinimalProvider() {
    }
    return MinimalProvider;
}());
exports.MinimalProvider = MinimalProvider;
/**
 *  Signer
 *
 *  Note: We use an abstract class so we can use instanceof to determine if an
 *        object is a Signer.
 */
var Signer = /** @class */ (function () {
    function Signer() {
    }
    return Signer;
}());
exports.Signer = Signer;
///////////////////////////////
// HDNode
var HDNode = /** @class */ (function () {
    function HDNode() {
    }
    return HDNode;
}());
exports.HDNode = HDNode;


/***/ }),

/***/ 417882:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

Object.defineProperty(exports, "__esModule", ({ value: true }));
var bytes_1 = __webpack_require__(447212);
var UnicodeNormalizationForm;
(function (UnicodeNormalizationForm) {
    UnicodeNormalizationForm["current"] = "";
    UnicodeNormalizationForm["NFC"] = "NFC";
    UnicodeNormalizationForm["NFD"] = "NFD";
    UnicodeNormalizationForm["NFKC"] = "NFKC";
    UnicodeNormalizationForm["NFKD"] = "NFKD";
})(UnicodeNormalizationForm = exports.UnicodeNormalizationForm || (exports.UnicodeNormalizationForm = {}));
;
// http://stackoverflow.com/questions/18729405/how-to-convert-utf8-string-to-byte-array
function toUtf8Bytes(str, form) {
    if (form === void 0) { form = UnicodeNormalizationForm.current; }
    if (form != UnicodeNormalizationForm.current) {
        str = str.normalize(form);
    }
    var result = [];
    var offset = 0;
    for (var i = 0; i < str.length; i++) {
        var c = str.charCodeAt(i);
        if (c < 128) {
            result[offset++] = c;
        }
        else if (c < 2048) {
            result[offset++] = (c >> 6) | 192;
            result[offset++] = (c & 63) | 128;
        }
        else if (((c & 0xFC00) == 0xD800) && (i + 1) < str.length && ((str.charCodeAt(i + 1) & 0xFC00) == 0xDC00)) {
            // Surrogate Pair
            c = 0x10000 + ((c & 0x03FF) << 10) + (str.charCodeAt(++i) & 0x03FF);
            result[offset++] = (c >> 18) | 240;
            result[offset++] = ((c >> 12) & 63) | 128;
            result[offset++] = ((c >> 6) & 63) | 128;
            result[offset++] = (c & 63) | 128;
        }
        else {
            result[offset++] = (c >> 12) | 224;
            result[offset++] = ((c >> 6) & 63) | 128;
            result[offset++] = (c & 63) | 128;
        }
    }
    return bytes_1.arrayify(result);
}
exports.toUtf8Bytes = toUtf8Bytes;
;
// http://stackoverflow.com/questions/13356493/decode-utf-8-with-javascript#13691499
function toUtf8String(bytes) {
    bytes = bytes_1.arrayify(bytes);
    var result = '';
    var i = 0;
    // Invalid bytes are ignored
    while (i < bytes.length) {
        var c = bytes[i++];
        if (c >> 7 == 0) {
            // 0xxx xxxx
            result += String.fromCharCode(c);
            continue;
        }
        // Invalid starting byte
        if (c >> 6 == 0x02) {
            continue;
        }
        // Multibyte; how many bytes left for thus character?
        var extraLength = null;
        if (c >> 5 == 0x06) {
            extraLength = 1;
        }
        else if (c >> 4 == 0x0e) {
            extraLength = 2;
        }
        else if (c >> 3 == 0x1e) {
            extraLength = 3;
        }
        else if (c >> 2 == 0x3e) {
            extraLength = 4;
        }
        else if (c >> 1 == 0x7e) {
            extraLength = 5;
        }
        else {
            continue;
        }
        // Do we have enough bytes in our data?
        if (i + extraLength > bytes.length) {
            // If there is an invalid unprocessed byte, try to continue
            for (; i < bytes.length; i++) {
                if (bytes[i] >> 6 != 0x02) {
                    break;
                }
            }
            if (i != bytes.length)
                continue;
            // All leftover bytes are valid.
            return result;
        }
        // Remove the UTF-8 prefix from the char (res)
        var res = c & ((1 << (8 - extraLength - 1)) - 1);
        var count;
        for (count = 0; count < extraLength; count++) {
            var nextChar = bytes[i++];
            // Is the char valid multibyte part?
            if (nextChar >> 6 != 0x02) {
                break;
            }
            ;
            res = (res << 6) | (nextChar & 0x3f);
        }
        if (count != extraLength) {
            i--;
            continue;
        }
        if (res <= 0xffff) {
            result += String.fromCharCode(res);
            continue;
        }
        res -= 0x10000;
        result += String.fromCharCode(((res >> 10) & 0x3ff) + 0xd800, (res & 0x3ff) + 0xdc00);
    }
    return result;
}
exports.toUtf8String = toUtf8String;


/***/ }),

/***/ 872188:
/***/ ((module) => {

"use strict";


var has = Object.prototype.hasOwnProperty
  , prefix = '~';

/**
 * Constructor to create a storage for our `EE` objects.
 * An `Events` instance is a plain object whose properties are event names.
 *
 * @constructor
 * @private
 */
function Events() {}

//
// We try to not inherit from `Object.prototype`. In some engines creating an
// instance in this way is faster than calling `Object.create(null)` directly.
// If `Object.create(null)` is not supported we prefix the event names with a
// character to make sure that the built-in object properties are not
// overridden or used as an attack vector.
//
if (Object.create) {
  Events.prototype = Object.create(null);

  //
  // This hack is needed because the `__proto__` property is still inherited in
  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.
  //
  if (!new Events().__proto__) prefix = false;
}

/**
 * Representation of a single event listener.
 *
 * @param {Function} fn The listener function.
 * @param {*} context The context to invoke the listener with.
 * @param {Boolean} [once=false] Specify if the listener is a one-time listener.
 * @constructor
 * @private
 */
function EE(fn, context, once) {
  this.fn = fn;
  this.context = context;
  this.once = once || false;
}

/**
 * Add a listener for a given event.
 *
 * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
 * @param {(String|Symbol)} event The event name.
 * @param {Function} fn The listener function.
 * @param {*} context The context to invoke the listener with.
 * @param {Boolean} once Specify if the listener is a one-time listener.
 * @returns {EventEmitter}
 * @private
 */
function addListener(emitter, event, fn, context, once) {
  if (typeof fn !== 'function') {
    throw new TypeError('The listener must be a function');
  }

  var listener = new EE(fn, context || emitter, once)
    , evt = prefix ? prefix + event : event;

  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
  else emitter._events[evt] = [emitter._events[evt], listener];

  return emitter;
}

/**
 * Clear event by name.
 *
 * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.
 * @param {(String|Symbol)} evt The Event name.
 * @private
 */
function clearEvent(emitter, evt) {
  if (--emitter._eventsCount === 0) emitter._events = new Events();
  else delete emitter._events[evt];
}

/**
 * Minimal `EventEmitter` interface that is molded against the Node.js
 * `EventEmitter` interface.
 *
 * @constructor
 * @public
 */
function EventEmitter() {
  this._events = new Events();
  this._eventsCount = 0;
}

/**
 * Return an array listing the events for which the emitter has registered
 * listeners.
 *
 * @returns {Array}
 * @public
 */
EventEmitter.prototype.eventNames = function eventNames() {
  var names = []
    , events
    , name;

  if (this._eventsCount === 0) return names;

  for (name in (events = this._events)) {
    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
  }

  if (Object.getOwnPropertySymbols) {
    return names.concat(Object.getOwnPropertySymbols(events));
  }

  return names;
};

/**
 * Return the listeners registered for a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @returns {Array} The registered listeners.
 * @public
 */
EventEmitter.prototype.listeners = function listeners(event) {
  var evt = prefix ? prefix + event : event
    , handlers = this._events[evt];

  if (!handlers) return [];
  if (handlers.fn) return [handlers.fn];

  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
    ee[i] = handlers[i].fn;
  }

  return ee;
};

/**
 * Return the number of listeners listening to a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @returns {Number} The number of listeners.
 * @public
 */
EventEmitter.prototype.listenerCount = function listenerCount(event) {
  var evt = prefix ? prefix + event : event
    , listeners = this._events[evt];

  if (!listeners) return 0;
  if (listeners.fn) return 1;
  return listeners.length;
};

/**
 * Calls each of the listeners registered for a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @returns {Boolean} `true` if the event had listeners, else `false`.
 * @public
 */
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
  var evt = prefix ? prefix + event : event;

  if (!this._events[evt]) return false;

  var listeners = this._events[evt]
    , len = arguments.length
    , args
    , i;

  if (listeners.fn) {
    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);

    switch (len) {
      case 1: return listeners.fn.call(listeners.context), true;
      case 2: return listeners.fn.call(listeners.context, a1), true;
      case 3: return listeners.fn.call(listeners.context, a1, a2), true;
      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
    }

    for (i = 1, args = new Array(len -1); i < len; i++) {
      args[i - 1] = arguments[i];
    }

    listeners.fn.apply(listeners.context, args);
  } else {
    var length = listeners.length
      , j;

    for (i = 0; i < length; i++) {
      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);

      switch (len) {
        case 1: listeners[i].fn.call(listeners[i].context); break;
        case 2: listeners[i].fn.call(listeners[i].context, a1); break;
        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
        default:
          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
            args[j - 1] = arguments[j];
          }

          listeners[i].fn.apply(listeners[i].context, args);
      }
    }
  }

  return true;
};

/**
 * Add a listener for a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @param {Function} fn The listener function.
 * @param {*} [context=this] The context to invoke the listener with.
 * @returns {EventEmitter} `this`.
 * @public
 */
EventEmitter.prototype.on = function on(event, fn, context) {
  return addListener(this, event, fn, context, false);
};

/**
 * Add a one-time listener for a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @param {Function} fn The listener function.
 * @param {*} [context=this] The context to invoke the listener with.
 * @returns {EventEmitter} `this`.
 * @public
 */
EventEmitter.prototype.once = function once(event, fn, context) {
  return addListener(this, event, fn, context, true);
};

/**
 * Remove the listeners of a given event.
 *
 * @param {(String|Symbol)} event The event name.
 * @param {Function} fn Only remove the listeners that match this function.
 * @param {*} context Only remove the listeners that have this context.
 * @param {Boolean} once Only remove one-time listeners.
 * @returns {EventEmitter} `this`.
 * @public
 */
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
  var evt = prefix ? prefix + event : event;

  if (!this._events[evt]) return this;
  if (!fn) {
    clearEvent(this, evt);
    return this;
  }

  var listeners = this._events[evt];

  if (listeners.fn) {
    if (
      listeners.fn === fn &&
      (!once || listeners.once) &&
      (!context || listeners.context === context)
    ) {
      clearEvent(this, evt);
    }
  } else {
    for (var i = 0, events = [], length = listeners.length; i < length; i++) {
      if (
        listeners[i].fn !== fn ||
        (once && !listeners[i].once) ||
        (context && listeners[i].context !== context)
      ) {
        events.push(listeners[i]);
      }
    }

    //
    // Reset the array, or remove it completely if we have no more listeners.
    //
    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
    else clearEvent(this, evt);
  }

  return this;
};

/**
 * Remove all listeners, or those of the specified event.
 *
 * @param {(String|Symbol)} [event] The event name.
 * @returns {EventEmitter} `this`.
 * @public
 */
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
  var evt;

  if (event) {
    evt = prefix ? prefix + event : event;
    if (this._events[evt]) clearEvent(this, evt);
  } else {
    this._events = new Events();
    this._eventsCount = 0;
  }

  return this;
};

//
// Alias methods names because people roll like that.
//
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
EventEmitter.prototype.addListener = EventEmitter.prototype.on;

//
// Expose the prefix.
//
EventEmitter.prefixed = prefix;

//
// Allow `EventEmitter` to be imported as module namespace.
//
EventEmitter.EventEmitter = EventEmitter;

//
// Expose the module.
//
if (true) {
  module.exports = EventEmitter;
}


/***/ }),

/***/ 142883:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const PassThrough = __webpack_require__(92413).PassThrough;

module.exports = opts => {
	opts = Object.assign({}, opts);

	const array = opts.array;
	let encoding = opts.encoding;
	const buffer = encoding === 'buffer';
	let objectMode = false;

	if (array) {
		objectMode = !(encoding || buffer);
	} else {
		encoding = encoding || 'utf8';
	}

	if (buffer) {
		encoding = null;
	}

	let len = 0;
	const ret = [];
	const stream = new PassThrough({objectMode});

	if (encoding) {
		stream.setEncoding(encoding);
	}

	stream.on('data', chunk => {
		ret.push(chunk);

		if (objectMode) {
			len = ret.length;
		} else {
			len += chunk.length;
		}
	});

	stream.getBufferedValue = () => {
		if (array) {
			return ret;
		}

		return buffer ? Buffer.concat(ret, len) : ret.join('');
	};

	stream.getBufferedLength = () => len;

	return stream;
};


/***/ }),

/***/ 590094:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const bufferStream = __webpack_require__(142883);

function getStream(inputStream, opts) {
	if (!inputStream) {
		return Promise.reject(new Error('Expected a stream'));
	}

	opts = Object.assign({maxBuffer: Infinity}, opts);

	const maxBuffer = opts.maxBuffer;
	let stream;
	let clean;

	const p = new Promise((resolve, reject) => {
		const error = err => {
			if (err) { // null check
				err.bufferedData = stream.getBufferedValue();
			}

			reject(err);
		};

		stream = bufferStream(opts);
		inputStream.once('error', error);
		inputStream.pipe(stream);

		stream.on('data', () => {
			if (stream.getBufferedLength() > maxBuffer) {
				reject(new Error('maxBuffer exceeded'));
			}
		});
		stream.once('error', error);
		stream.on('end', resolve);

		clean = () => {
			// some streams doesn't implement the `stream.Readable` interface correctly
			if (inputStream.unpipe) {
				inputStream.unpipe(stream);
			}
		};
	});

	p.then(clean, clean);

	return p.then(() => stream.getBufferedValue());
}

module.exports = getStream;
module.exports.buffer = (stream, opts) => getStream(stream, Object.assign({}, opts, {encoding: 'buffer'}));
module.exports.array = (stream, opts) => getStream(stream, Object.assign({}, opts, {array: true}));


/***/ }),

/***/ 607777:
/***/ ((module) => {

"use strict";


class CancelError extends Error {
	constructor() {
		super('Promise was canceled');
		this.name = 'CancelError';
	}
}

class PCancelable {
	static fn(fn) {
		return function () {
			const args = [].slice.apply(arguments);
			return new PCancelable((onCancel, resolve, reject) => {
				args.unshift(onCancel);
				fn.apply(null, args).then(resolve, reject);
			});
		};
	}

	constructor(executor) {
		this._pending = true;
		this._canceled = false;

		this._promise = new Promise((resolve, reject) => {
			this._reject = reject;

			return executor(
				fn => {
					this._cancel = fn;
				},
				val => {
					this._pending = false;
					resolve(val);
				},
				err => {
					this._pending = false;
					reject(err);
				}
			);
		});
	}

	then() {
		return this._promise.then.apply(this._promise, arguments);
	}

	catch() {
		return this._promise.catch.apply(this._promise, arguments);
	}

	cancel() {
		if (!this._pending || this._canceled) {
			return;
		}

		if (typeof this._cancel === 'function') {
			try {
				this._cancel();
			} catch (err) {
				this._reject(err);
			}
		}

		this._canceled = true;
		this._reject(new CancelError());
	}

	get canceled() {
		return this._canceled;
	}
}

Object.setPrototypeOf(PCancelable.prototype, Promise.prototype);

module.exports = PCancelable;
module.exports.CancelError = CancelError;


/***/ }),

/***/ 368937:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const pFinally = __webpack_require__(527345);

class TimeoutError extends Error {
	constructor(message) {
		super(message);
		this.name = 'TimeoutError';
	}
}

module.exports = (promise, ms, fallback) => new Promise((resolve, reject) => {
	if (typeof ms !== 'number' || ms < 0) {
		throw new TypeError('Expected `ms` to be a positive number');
	}

	const timer = setTimeout(() => {
		if (typeof fallback === 'function') {
			resolve(fallback());
			return;
		}

		const message = typeof fallback === 'string' ? fallback : `Promise timed out after ${ms} milliseconds`;
		const err = fallback instanceof Error ? fallback : new TimeoutError(message);

		reject(err);
	}, ms);

	pFinally(
		promise.then(resolve, reject),
		() => {
			clearTimeout(timer);
		}
	);
});

module.exports.TimeoutError = TimeoutError;


/***/ }),

/***/ 967237:
/***/ ((module) => {

"use strict";

module.exports = function (url) {
	if (typeof url !== 'string') {
		throw new TypeError('Expected a string, got ' + typeof url);
	}

	url = url.trim();

	if (/^\.*\/|^(?!localhost)\w+:/.test(url)) {
		return url;
	}

	return url.replace(/^(?!(?:\w+:)?\/\/)/, 'http://');
};


/***/ }),

/***/ 85084:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"windows-amd64\":{\"archive\":\"swarm-windows-amd64-1.6.7.exe\",\"binaryMD5\":\"c2d827dc4553d9b91a7d6c1d5a6140fd\",\"archiveMD5\":\"059196d21548060a18a12e17cc0ee59a\"},\"linux-amd64\":{\"archive\":\"swarm-linux-amd64-1.6.7\",\"binaryMD5\":\"85002d79b8ebc2d2f2f10fb198636a81\",\"archiveMD5\":\"3e8874299ab8c0e3043d70ebb6673879\"},\"linux-386\":{\"archive\":\"swarm-linux-386-1.6.7\",\"binaryMD5\":\"35bc2ab976f60f96a2cede117e0df19d\",\"archiveMD5\":\"7868a86c9cbdf8ac7ac2e5682b4ce40f\"},\"darwin-amd64\":{\"archive\":\"swarm-darwin-amd64-1.6.7\",\"binaryMD5\":\"c499b186645229260dd6ab685dd58f07\",\"archiveMD5\":\"0794d111e5018eac3b657bcb29851121\"},\"linux-arm5\":{\"archive\":\"swarm-linux-arm5-1.6.7\",\"binaryMD5\":\"516fcd85246c905529442cd9b689c12f\",\"archiveMD5\":\"47312708d417cb196b07ba0af1d3abb4\"},\"linux-arm6\":{\"archive\":\"swarm-linux-arm6-1.6.7\",\"binaryMD5\":\"82ff7bdbe388b4a190f4101c5150d3b4\",\"archiveMD5\":\"350276de7bb175a15c314cfc4cb7f8fd\"},\"linux-mips\":{\"archive\":\"swarm-linux-mips-1.6.7\",\"binaryMD5\":\"e1e95280441c0ca35633927792ef5317\",\"archiveMD5\":\"8fb4b64e94cd73aa718db787b9d4c53e\"},\"linux-arm7\":{\"archive\":\"swarm-linux-arm7-1.6.7\",\"binaryMD5\":\"bfc0b4d1c86d8a975af052fc7854bdd3\",\"archiveMD5\":\"4378641d8e1e1fbb947f941c8fca8613\"},\"linux-arm64\":{\"archive\":\"swarm-linux-arm64-1.6.7\",\"binaryMD5\":\"bbac21a6c6fa8208f67ca4123d3f948a\",\"archiveMD5\":\"4e503160327c5fbcca0414f17c54e5ee\"},\"linux-mipsle\":{\"archive\":\"swarm-linux-mipsle-1.6.7\",\"binaryMD5\":\"a82f191b2f9d2c470d0273219c820657\",\"archiveMD5\":\"3016bdb6d237ae654c0cdf36fe85dc7c\"},\"windows-386\":{\"archive\":\"swarm-windows-386-1.6.7.exe\",\"binaryMD5\":\"ce0b34640642e58068ae5a359faef102\",\"archiveMD5\":\"640aede4da08a3a9d8a6ac0434ba7c0f\"},\"linux-mips64\":{\"archive\":\"swarm-linux-mips64-1.6.7\",\"binaryMD5\":\"9da967664f384817adb5083fd1ffe8f1\",\"archiveMD5\":\"357a33be470f8f89ba2619957a08deff\"},\"linux-mips64le\":{\"archive\":\"swarm-linux-mips64le-1.6.7\",\"binaryMD5\":\"ec1abcf7b216e87645ec83954d8344cd\",\"archiveMD5\":\"a81fd0158190d99813c738ffa4f87627\"}}");

/***/ }),

/***/ 248006:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var fs = __webpack_require__(202584);

var files = __webpack_require__(777367);

var os = __webpack_require__(712087);

var path = __webpack_require__(385622);

var child_process = __webpack_require__(63129);

var mimetype = __webpack_require__(580983);

var defaultArchives = __webpack_require__(85084);

var requester = __webpack_require__(254736);

var downloadUrl = "http://ethereum-mist.s3.amazonaws.com/swarm/";

var bytes = __webpack_require__(965737);

var hash = __webpack_require__(286073);

var pick = __webpack_require__(73125);

var swarm = __webpack_require__(973840); // Fixes issue that causes xhr-request-promise on Node.js to only accept Buffer


var request = function request(url, params) {
  var newParams = {};

  for (var key in params) {
    newParams[key] = params[key];
  }

  if (typeof newParams.body !== "undefined") {
    newParams.body = newParams.body instanceof Buffer ? newParams.body : new Buffer(newParams.body);
  }

  return requester(url, newParams);
};

module.exports = swarm({
  fs: fs,
  files: files,
  os: os,
  path: path,
  child_process: child_process,
  defaultArchives: defaultArchives,
  mimetype: mimetype,
  request: request,
  downloadUrl: downloadUrl,
  bytes: bytes,
  hash: hash,
  pick: pick
});

/***/ }),

/***/ 777367:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// This module implements some file download utils. Its most important export
// is `safeDownloadTargzFile`, which, given a file, its md5, a tar.gz url, its
// md5 and a path, returns a Promise that will only resolve once the exact file
// you expect is available on that path.
var Q = __webpack_require__(93786);

var assert = __webpack_require__(742357);

var crypto = __webpack_require__(676417);

var fs = __webpack_require__(202584);

var got = __webpack_require__(37193);

var mkdirp = __webpack_require__(828762);

var path = __webpack_require__(385622);

var tar = __webpack_require__(97998); // String -> String ~> Promise String
//   Downloads a file from an url to a path.
//   Returns a promise containing the path.


var download = function download(url) {
  return function (filePath) {
    var promise = Q.resolve(mkdirp(path.dirname(filePath))).then(function () {
      return new Q(function (resolve, reject) {
        var writeStream = fs.createWriteStream(filePath);
        var downloadStream = got.stream(url);
        downloadStream.on("end", function () {
          return resolve(filePath);
        });
        downloadStream.on("data", function (chunk) {
          return promise.onDataCallback(chunk);
        });
        downloadStream.on("error", reject);
        downloadStream.pipe(writeStream);
      });
    });

    promise.onDataCallback = function () {};

    promise.onData = function (callback) {
      promise.onDataCallback = callback || function () {};

      return promise;
    };

    return promise;
  };
}; // String -> String ~> Promise String
//   Hashes a file using the given algorithm (ex: "md5").
//   Returns a promise containing the hashed string.


var hash = function hash(algorithm) {
  return function (path) {
    return new Q(function (resolve, reject) {
      var readStream = fs.ReadStream(path);
      var hash = crypto.createHash(algorithm);
      readStream.on("data", function (d) {
        return hash.update(d);
      });
      readStream.on("end", function () {
        return resolve(hash.digest("hex"));
      });
      readStream.on("error", reject);
    });
  };
}; // String -> String ~> Promise ()
//   Asserts a file matches this md5 hash.
//   Returns a promise containing its path.


var checksum = function checksum(fileHash) {
  return function (path) {
    return hash("md5")(path).then(function (actualHash) {
      return actualHash === fileHash;
    }).then(assert).then(function () {
      return path;
    });
  };
}; // String ~> String ~> String ~> Promise String
//   Downloads a file to a directory, check.
//   Checks if the md5 hash matches.
//   Returns a promise containing the path.


var downloadAndCheck = function downloadAndCheck(url) {
  return function (path) {
    return function (fileHash) {
      return download(url)(path).then(checksum(fileHash));
    };
  };
}; // String -> String ~> Promise String
//   TODO: work for zip and other types


var extract = function extract(fromPath) {
  return function (toPath) {
    return tar.x(fromPath, toPath).then(function () {
      return toPath;
    });
  };
}; // String ~> Promise String
//   Reads a file as an UTF8 string.
//   Returns a promise containing that string.


var readUTF8 = function readUTF8(path) {
  return fs.readFile(path, {
    encoding: "utf8"
  });
}; // String ~> Promise Bool


var isDirectory = function isDirectory(path) {
  return fs.exists(path).then(assert).then(function () {
    return fs.lstat(path);
  }).then(function (stats) {
    return stats.isDirectory();
  }).catch(function () {
    return false;
  });
}; // String -> Promise String


var directoryTree = function directoryTree(dirPath) {
  var paths = [];

  var search = function search(dirPath) {
    return isDirectory(dirPath).then(function (isDir) {
      if (isDir) {
        var searchOnDir = function searchOnDir(dir) {
          return search(path.join(dirPath, dir));
        };

        return Q.all(Q.map(fs.readdir(dirPath), searchOnDir));
      } else {
        paths.push(dirPath);
      }

      ;
    });
  };

  return Q.all(search(dirPath)).then(function () {
    return paths;
  });
}; // Regex -> String ~> Promise (Array String)


var search = function search(regex) {
  return function (dirPath) {
    return directoryTree(dirPath).then(function (tree) {
      return tree.filter(function (path) {
        return regex.test(path);
      });
    });
  };
}; // String -> String -> String -> String ~> Promise String
//   Downloads a file inside a tar.gz and places it at `filePath`.
//   Checks the md5 hash of the tar before extracting it.
//   Checks the md5 hash of the file after extracting it.
//   If all is OK, returns a promise containing the file path.


var safeDownloadArchived = function safeDownloadArchived(url) {
  return function (archiveHash) {
    return function (fileHash) {
      return function (filePath) {
        var fileDir = path.dirname(filePath);
        var fileName = path.basename(filePath);
        var archivePath = path.join(fileDir, ".swarm_downloads/files.tar.gz");
        var archiveDir = path.dirname(archivePath);
        var promise = Q.resolve(mkdirp(archiveDir)).then(function () {
          return checksum(fileHash)(filePath);
        }).then(function () {
          return filePath;
        }).catch(function () {
          return fs.exists(archiveDir).then(function (exists) {
            return !exists ? fs.mkdir(archiveDir) : null;
          }).then(function () {
            return download(url)(archivePath).onData(promise.onDataCallback);
          }).then(function () {
            return hash("md5")(archivePath);
          }).then(function () {
            return archiveHash ? checksum(archiveHash)(archivePath) : null;
          }).then(function () {
            return extract(archivePath)(archiveDir);
          }).then(function () {
            return search(new RegExp(fileName + "$"))(archiveDir);
          }).then(function (fp) {
            return fs.rename(fp[0], filePath);
          }).then(function () {
            return fs.unlink(archivePath);
          }).then(function () {
            return fileHash ? checksum(fileHash)(filePath) : null;
          }).then(function () {
            return filePath;
          });
        });

        promise.onDataCallback = function () {};

        promise.onData = function (callback) {
          promise.onDataCallback = callback || function () {};

          return promise;
        };

        return promise;
      };
    };
  };
}; // String -> String ~> Promise String
//   Like `safeDownloadArchivedFile`, but without the checksums.


var downloadArchived = function downloadArchived(url) {
  return function (path) {
    return safeDownloadArchived(url)(null)(null)(path);
  };
}; // () => Promise Bool
//   Tests the implementation by downloading a predetermined tar.gz
//   from a mocked HTTP-server into a mocked filesystem. Does some
//   redundancy tests such as checking the file constents and double
//   checking its MD5 hash.
//   Returns a promise containing a boolean, true if tests passed.


var test = function test() {
  var filePath = "/swarm/foo.txt";
  var fileHash = "d3b07384d113edec49eaa6238ad5ff00";
  var archiveUrl = "http://localhost:12534";
  var archiveHash = "7fa45f946bb2a696bdd9972e0fbceac2";
  var archiveData = new Buffer([0x1f, 0x8b, 0x08, 0x00, 0xf1, 0x34, 0xaf, 0x58, 0x00, 0x03, 0xed, 0xcf, 0x3d, 0x0e, 0x83, 0x30, 0x0c, 0x86, 0x61, 0x66, 0x4e, 0xe1, 0x13, 0x54, 0xce, 0x0f, 0xc9, 0x79, 0x58, 0xb2, 0x46, 0x82, 0x14, 0x71, 0x7c, 0xd2, 0x06, 0x31, 0x52, 0x75, 0x40, 0x08, 0xe9, 0x7d, 0x96, 0x4f, 0x96, 0x3d, 0x7c, 0x4e, 0x39, 0xbf, 0xca, 0x5a, 0xba, 0x2b, 0xa9, 0x6a, 0xf0, 0x5e, 0x3e, 0x19, 0xc3, 0xf0, 0x4d, 0xb5, 0x6d, 0xde, 0x79, 0x31, 0x4e, 0x07, 0x17, 0x9c, 0xb5, 0x31, 0x8a, 0x1a, 0xab, 0xc6, 0x77, 0xa2, 0x97, 0xb6, 0xda, 0xbd, 0xe7, 0x32, 0x4e, 0xb5, 0xca, 0xf2, 0xe3, 0xae, 0x9e, 0xa5, 0x74, 0xb2, 0x6f, 0x8f, 0xc8, 0x91, 0x0f, 0x91, 0x72, 0xee, 0xef, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xdf, 0x06, 0xb3, 0x2a, 0xda, 0xed, 0x00, 0x28, 0x00, 0x00]);

  var crypto = __webpack_require__(676417);

  var fsMock = __webpack_require__(174910)({
    "/swarm": {}
  });

  var httpMock = __webpack_require__(298605).createServer(function (_, res) {
    return res.end(archiveData);
  }).listen(12534);

  return safeDownloadArchived(archiveUrl)(archiveHash)(fileHash)(filePath).then(checksum(fileHash)).then(readUTF8).then(function (text) {
    return text === "foo\n";
  }).then(assert).then(function () {
    return safeDownloadArchived(archiveUrl)(archiveHash)(fileHash)(filePath);
  }).then(function () {
    return true;
  }).catch(false).finally(function () {
    return httpMock.close();
  });
};

module.exports = {
  download: download,
  hash: hash,
  checksum: checksum,
  downloadAndCheck: downloadAndCheck,
  extract: extract,
  readUTF8: readUTF8,
  safeDownloadArchived: safeDownloadArchived,
  directoryTree: directoryTree,
  downloadArchived: downloadArchived,
  search: search,
  test: test
};

/***/ }),

/***/ 73125:
/***/ ((module) => {

var picker = function picker(type) {
  return function () {
    return new Promise(function (resolve, reject) {
      var fileLoader = function fileLoader(e) {
        var directory = {};
        var totalFiles = e.target.files.length;
        var loadedFiles = 0;
        [].map.call(e.target.files, function (file) {
          var reader = new FileReader();

          reader.onload = function (e) {
            var data = new Uint8Array(e.target.result);

            if (type === "directory") {
              var path = file.webkitRelativePath;
              directory[path.slice(path.indexOf("/") + 1)] = {
                type: "text/plain",
                data: data
              };
              if (++loadedFiles === totalFiles) resolve(directory);
            } else if (type === "file") {
              var _path = file.webkitRelativePath;
              resolve({
                "type": mimetype.lookup(_path),
                "data": data
              });
            } else {
              resolve(data);
            }
          };

          reader.readAsArrayBuffer(file);
        });
      };

      var fileInput;

      if (type === "directory") {
        fileInput = document.createElement("input");
        fileInput.addEventListener("change", fileLoader);
        fileInput.type = "file";
        fileInput.webkitdirectory = true;
        fileInput.mozdirectory = true;
        fileInput.msdirectory = true;
        fileInput.odirectory = true;
        fileInput.directory = true;
      } else {
        fileInput = document.createElement("input");
        fileInput.addEventListener("change", fileLoader);
        fileInput.type = "file";
      }

      ;
      var mouseEvent = document.createEvent("MouseEvents");
      mouseEvent.initEvent("click", true, false);
      fileInput.dispatchEvent(mouseEvent);
    });
  };
};

module.exports = {
  data: picker("data"),
  file: picker("file"),
  directory: picker("directory")
};

/***/ }),

/***/ 286073:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// Thanks https://github.com/axic/swarmhash
var keccak = __webpack_require__(735178).keccak256;

var Bytes = __webpack_require__(965737);

var swarmHashBlock = function swarmHashBlock(length, data) {
  var lengthEncoded = Bytes.reverse(Bytes.pad(6, Bytes.fromNumber(length)));
  var bytes = Bytes.flatten([lengthEncoded, "0x0000", data]);
  return keccak(bytes).slice(2);
}; // (Bytes | Uint8Array | String) -> String


var swarmHash = function swarmHash(data) {
  if (typeof data === "string" && data.slice(0, 2) !== "0x") {
    data = Bytes.fromString(data);
  } else if (typeof data !== "string" && data.length !== undefined) {
    data = Bytes.fromUint8Array(data);
  }

  var length = Bytes.length(data);

  if (length <= 4096) {
    return swarmHashBlock(length, data);
  }

  var maxSize = 4096;

  while (maxSize * (4096 / 32) < length) {
    maxSize *= 4096 / 32;
  }

  var innerNodes = [];

  for (var i = 0; i < length; i += maxSize) {
    var size = maxSize < length - i ? maxSize : length - i;
    innerNodes.push(swarmHash(Bytes.slice(data, i, i + size)));
  }

  return swarmHashBlock(length, Bytes.flatten(innerNodes));
};

module.exports = swarmHash;

/***/ }),

/***/ 973840:
/***/ ((module) => {

// TODO: this is a temporary fix to hide those libraries from the browser. A
// slightly better long-term solution would be to split this file into two,
// separating the functions that are used on Node.js from the functions that
// are used only on the browser.
module.exports = function (_ref) {
  var fs = _ref.fs,
      files = _ref.files,
      os = _ref.os,
      path = _ref.path,
      child_process = _ref.child_process,
      mimetype = _ref.mimetype,
      defaultArchives = _ref.defaultArchives,
      request = _ref.request,
      downloadUrl = _ref.downloadUrl,
      bytes = _ref.bytes,
      hash = _ref.hash,
      pick = _ref.pick;

  // ∀ a . String -> JSON -> Map String a -o Map String a
  //   Inserts a key/val pair in an object impurely.
  var impureInsert = function impureInsert(key) {
    return function (val) {
      return function (map) {
        return map[key] = val, map;
      };
    };
  }; // String -> JSON -> Map String JSON
  //   Merges an array of keys and an array of vals into an object.


  var toMap = function toMap(keys) {
    return function (vals) {
      var map = {};

      for (var i = 0, l = keys.length; i < l; ++i) {
        map[keys[i]] = vals[i];
      }

      return map;
    };
  }; // ∀ a . Map String a -> Map String a -> Map String a
  //   Merges two maps into one.


  var merge = function merge(a) {
    return function (b) {
      var map = {};

      for (var key in a) {
        map[key] = a[key];
      }

      for (var _key in b) {
        map[_key] = b[_key];
      }

      return map;
    };
  }; // ∀ a . [a] -> [a] -> Bool


  var equals = function equals(a) {
    return function (b) {
      if (a.length !== b.length) {
        return false;
      } else {
        for (var i = 0, l = a.length; i < l; ++i) {
          if (a[i] !== b[i]) return false;
        }
      }

      return true;
    };
  }; // String -> String -> String


  var rawUrl = function rawUrl(swarmUrl) {
    return function (hash) {
      return "".concat(swarmUrl, "/bzzr:/").concat(hash);
    };
  }; // String -> String -> Promise Uint8Array
  //   Gets the raw contents of a Swarm hash address.


  var downloadData = function downloadData(swarmUrl) {
    return function (hash) {
      return request(rawUrl(swarmUrl)(hash), {
        responseType: "arraybuffer"
      }).then(function (arrayBuffer) {
        var uint8Array = new Uint8Array(arrayBuffer);
        var error404 = [52, 48, 52, 32, 112, 97, 103, 101, 32, 110, 111, 116, 32, 102, 111, 117, 110, 100, 10];
        if (equals(uint8Array)(error404)) throw "Error 404.";
        return uint8Array;
      });
    };
  }; // type Entry = {"type": String, "hash": String}
  // type File = {"type": String, "data": Uint8Array}
  // String -> String -> Promise (Map String Entry)
  //   Solves the manifest of a Swarm address recursively.
  //   Returns a map from full paths to entries.


  var downloadEntries = function downloadEntries(swarmUrl) {
    return function (hash) {
      var search = function search(hash) {
        return function (path) {
          return function (routes) {
            // Formats an entry to the Swarm.js type.
            var format = function format(entry) {
              return {
                type: entry.contentType,
                hash: entry.hash
              };
            }; // To download a single entry:
            //   if type is bzz-manifest, go deeper
            //   if not, add it to the routing table


            var downloadEntry = function downloadEntry(entry) {
              if (entry.path === undefined) {
                return Promise.resolve();
              } else {
                return entry.contentType === "application/bzz-manifest+json" ? search(entry.hash)(path + entry.path)(routes) : Promise.resolve(impureInsert(path + entry.path)(format(entry))(routes));
              }
            }; // Downloads the initial manifest and then each entry.


            return downloadData(swarmUrl)(hash).then(function (text) {
              return JSON.parse(toString(text)).entries;
            }).then(function (entries) {
              return Promise.all(entries.map(downloadEntry));
            }).then(function () {
              return routes;
            });
          };
        };
      };

      return search(hash)("")({});
    };
  }; // String -> String -> Promise (Map String String)
  //   Same as `downloadEntries`, but returns only hashes (no types).


  var downloadRoutes = function downloadRoutes(swarmUrl) {
    return function (hash) {
      return downloadEntries(swarmUrl)(hash).then(function (entries) {
        return toMap(Object.keys(entries))(Object.keys(entries).map(function (route) {
          return entries[route].hash;
        }));
      });
    };
  }; // String -> String -> Promise (Map String File)
  //   Gets the entire directory tree in a Swarm address.
  //   Returns a promise mapping paths to file contents.


  var downloadDirectory = function downloadDirectory(swarmUrl) {
    return function (hash) {
      return downloadEntries(swarmUrl)(hash).then(function (entries) {
        var paths = Object.keys(entries);
        var hashs = paths.map(function (path) {
          return entries[path].hash;
        });
        var types = paths.map(function (path) {
          return entries[path].type;
        });
        var datas = hashs.map(downloadData(swarmUrl));

        var files = function files(datas) {
          return datas.map(function (data, i) {
            return {
              type: types[i],
              data: data
            };
          });
        };

        return Promise.all(datas).then(function (datas) {
          return toMap(paths)(files(datas));
        });
      });
    };
  }; // String -> String -> String -> Promise String
  //   Gets the raw contents of a Swarm hash address.
  //   Returns a promise with the downloaded file path.


  var downloadDataToDisk = function downloadDataToDisk(swarmUrl) {
    return function (hash) {
      return function (filePath) {
        return files.download(rawUrl(swarmUrl)(hash))(filePath);
      };
    };
  }; // String -> String -> String -> Promise (Map String String)
  //   Gets the entire directory tree in a Swarm address.
  //   Returns a promise mapping paths to file contents.


  var downloadDirectoryToDisk = function downloadDirectoryToDisk(swarmUrl) {
    return function (hash) {
      return function (dirPath) {
        return downloadRoutes(swarmUrl)(hash).then(function (routingTable) {
          var downloads = [];

          for (var route in routingTable) {
            if (route.length > 0) {
              var filePath = path.join(dirPath, route);
              downloads.push(downloadDataToDisk(swarmUrl)(routingTable[route])(filePath));
            }

            ;
          }

          ;
          return Promise.all(downloads).then(function () {
            return dirPath;
          });
        });
      };
    };
  }; // String -> Uint8Array -> Promise String
  //   Uploads raw data to Swarm.
  //   Returns a promise with the uploaded hash.


  var uploadData = function uploadData(swarmUrl) {
    return function (data) {
      return request("".concat(swarmUrl, "/bzzr:/"), {
        body: typeof data === "string" ? fromString(data) : data,
        method: "POST"
      });
    };
  }; // String -> String -> String -> File -> Promise String
  //   Uploads a file to the Swarm manifest at a given hash, under a specific
  //   route. Returns a promise containing the uploaded hash.
  //   FIXME: for some reasons Swarm-Gateways is sometimes returning
  //   error 404 (bad request), so we retry up to 3 times. Why?


  var uploadToManifest = function uploadToManifest(swarmUrl) {
    return function (hash) {
      return function (route) {
        return function (file) {
          var attempt = function attempt(n) {
            var slashRoute = route[0] === "/" ? route : "/" + route;
            var url = "".concat(swarmUrl, "/bzz:/").concat(hash).concat(slashRoute);
            var opt = {
              method: "PUT",
              headers: {
                "Content-Type": file.type
              },
              body: file.data
            };
            return request(url, opt).then(function (response) {
              if (response.indexOf("error") !== -1) {
                throw response;
              }

              return response;
            }).catch(function (e) {
              return n > 0 && attempt(n - 1);
            });
          };

          return attempt(3);
        };
      };
    };
  }; // String -> {type: String, data: Uint8Array} -> Promise String


  var uploadFile = function uploadFile(swarmUrl) {
    return function (file) {
      return uploadDirectory(swarmUrl)({
        "": file
      });
    };
  }; // String -> String -> Promise String


  var uploadFileFromDisk = function uploadFileFromDisk(swarmUrl) {
    return function (filePath) {
      return fs.readFile(filePath).then(function (data) {
        return uploadFile(swarmUrl)({
          type: mimetype.lookup(filePath),
          data: data
        });
      });
    };
  }; // String -> Map String File -> Promise String
  //   Uploads a directory to Swarm. The directory is
  //   represented as a map of routes and files.
  //   A default path is encoded by having a "" route.


  var uploadDirectory = function uploadDirectory(swarmUrl) {
    return function (directory) {
      return uploadData(swarmUrl)("{}").then(function (hash) {
        var uploadRoute = function uploadRoute(route) {
          return function (hash) {
            return uploadToManifest(swarmUrl)(hash)(route)(directory[route]);
          };
        };

        var uploadToHash = function uploadToHash(hash, route) {
          return hash.then(uploadRoute(route));
        };

        return Object.keys(directory).reduce(uploadToHash, Promise.resolve(hash));
      });
    };
  }; // String -> Promise String


  var uploadDataFromDisk = function uploadDataFromDisk(swarmUrl) {
    return function (filePath) {
      return fs.readFile(filePath).then(uploadData(swarmUrl));
    };
  }; // String -> Nullable String -> String -> Promise String


  var uploadDirectoryFromDisk = function uploadDirectoryFromDisk(swarmUrl) {
    return function (defaultPath) {
      return function (dirPath) {
        return files.directoryTree(dirPath).then(function (fullPaths) {
          return Promise.all(fullPaths.map(function (path) {
            return fs.readFile(path);
          })).then(function (datas) {
            var paths = fullPaths.map(function (path) {
              return path.slice(dirPath.length);
            });
            var types = fullPaths.map(function (path) {
              return mimetype.lookup(path) || "text/plain";
            });
            return toMap(paths)(datas.map(function (data, i) {
              return {
                type: types[i],
                data: data
              };
            }));
          });
        }).then(function (directory) {
          return merge(defaultPath ? {
            "": directory[defaultPath]
          } : {})(directory);
        }).then(uploadDirectory(swarmUrl));
      };
    };
  }; // String -> UploadInfo -> Promise String
  //   Simplified multi-type upload which calls the correct
  //   one based on the type of the argument given.


  var _upload = function upload(swarmUrl) {
    return function (arg) {
      // Upload raw data from browser
      if (arg.pick === "data") {
        return pick.data().then(uploadData(swarmUrl)); // Upload a file from browser
      } else if (arg.pick === "file") {
        return pick.file().then(uploadFile(swarmUrl)); // Upload a directory from browser
      } else if (arg.pick === "directory") {
        return pick.directory().then(uploadDirectory(swarmUrl)); // Upload directory/file from disk
      } else if (arg.path) {
        switch (arg.kind) {
          case "data":
            return uploadDataFromDisk(swarmUrl)(arg.path);

          case "file":
            return uploadFileFromDisk(swarmUrl)(arg.path);

          case "directory":
            return uploadDirectoryFromDisk(swarmUrl)(arg.defaultFile)(arg.path);
        }

        ; // Upload UTF-8 string or raw data (buffer)
      } else if (arg.length || typeof arg === "string") {
        return uploadData(swarmUrl)(arg); // Upload directory with JSON
      } else if (arg instanceof Object) {
        return uploadDirectory(swarmUrl)(arg);
      }

      return Promise.reject(new Error("Bad arguments"));
    };
  }; // String -> String -> Nullable String -> Promise (String | Uint8Array | Map String Uint8Array)
  //   Simplified multi-type download which calls the correct function based on
  //   the type of the argument given, and on whether the Swwarm address has a
  //   directory or a file.


  var _download = function download(swarmUrl) {
    return function (hash) {
      return function (path) {
        return isDirectory(swarmUrl)(hash).then(function (isDir) {
          if (isDir) {
            return path ? downloadDirectoryToDisk(swarmUrl)(hash)(path) : downloadDirectory(swarmUrl)(hash);
          } else {
            return path ? downloadDataToDisk(swarmUrl)(hash)(path) : downloadData(swarmUrl)(hash);
          }
        });
      };
    };
  }; // String -> Promise String
  //   Downloads the Swarm binaries into a path. Returns a promise that only
  //   resolves when the exact Swarm file is there, and verified to be correct.
  //   If it was already there to begin with, skips the download.


  var downloadBinary = function downloadBinary(path, archives) {
    var system = os.platform().replace("win32", "windows") + "-" + (os.arch() === "x64" ? "amd64" : "386");
    var archive = (archives || defaultArchives)[system];
    var archiveUrl = downloadUrl + archive.archive + ".tar.gz";
    var archiveMD5 = archive.archiveMD5;
    var binaryMD5 = archive.binaryMD5;
    return files.safeDownloadArchived(archiveUrl)(archiveMD5)(binaryMD5)(path);
  }; // type SwarmSetup = {
  //   account : String,
  //   password : String,
  //   dataDir : String,
  //   binPath : String,
  //   ensApi : String,
  //   onDownloadProgress : Number ~> (),
  //   archives : [{
  //     archive: String,
  //     binaryMD5: String,
  //     archiveMD5: String
  //   }]
  // }
  // SwarmSetup ~> Promise Process
  //   Starts the Swarm process.


  var startProcess = function startProcess(swarmSetup) {
    return new Promise(function (resolve, reject) {
      var spawn = child_process.spawn;

      var hasString = function hasString(str) {
        return function (buffer) {
          return ('' + buffer).indexOf(str) !== -1;
        };
      };

      var account = swarmSetup.account,
          password = swarmSetup.password,
          dataDir = swarmSetup.dataDir,
          ensApi = swarmSetup.ensApi,
          privateKey = swarmSetup.privateKey;
      var STARTUP_TIMEOUT_SECS = 3;
      var WAITING_PASSWORD = 0;
      var STARTING = 1;
      var LISTENING = 2;
      var PASSWORD_PROMPT_HOOK = "Passphrase";
      var LISTENING_HOOK = "Swarm http proxy started";
      var state = WAITING_PASSWORD;
      var swarmProcess = spawn(swarmSetup.binPath, ['--bzzaccount', account || privateKey, '--datadir', dataDir, '--ens-api', ensApi]);

      var handleProcessOutput = function handleProcessOutput(data) {
        if (state === WAITING_PASSWORD && hasString(PASSWORD_PROMPT_HOOK)(data)) {
          setTimeout(function () {
            state = STARTING;
            swarmProcess.stdin.write(password + '\n');
          }, 500);
        } else if (hasString(LISTENING_HOOK)(data)) {
          state = LISTENING;
          clearTimeout(timeout);
          resolve(swarmProcess);
        }
      };

      swarmProcess.stdout.on('data', handleProcessOutput);
      swarmProcess.stderr.on('data', handleProcessOutput); //swarmProcess.on('close', () => setTimeout(restart, 2000));

      var restart = function restart() {
        return startProcess(swarmSetup).then(resolve).catch(reject);
      };

      var error = function error() {
        return reject(new Error("Couldn't start swarm process."));
      };

      var timeout = setTimeout(error, 20000);
    });
  }; // Process ~> Promise ()
  //   Stops the Swarm process.


  var stopProcess = function stopProcess(process) {
    return new Promise(function (resolve, reject) {
      process.stderr.removeAllListeners('data');
      process.stdout.removeAllListeners('data');
      process.stdin.removeAllListeners('error');
      process.removeAllListeners('error');
      process.removeAllListeners('exit');
      process.kill('SIGINT');
      var killTimeout = setTimeout(function () {
        return process.kill('SIGKILL');
      }, 8000);
      process.once('close', function () {
        clearTimeout(killTimeout);
        resolve();
      });
    });
  }; // SwarmSetup -> (SwarmAPI -> Promise ()) -> Promise ()
  //   Receives a Swarm configuration object and a callback function. It then
  //   checks if a local Swarm node is running. If no local Swarm is found, it
  //   downloads the Swarm binaries to the dataDir (if not there), checksums,
  //   starts the Swarm process and calls the callback function with an API
  //   object using the local node. That callback must return a promise which
  //   will resolve when it is done using the API, so that this function can
  //   close the Swarm process properly. Returns a promise that resolves when the
  //   user is done with the API and the Swarm process is closed.
  //   TODO: check if Swarm process is already running (improve `isAvailable`)


  var local = function local(swarmSetup) {
    return function (useAPI) {
      return _isAvailable("http://localhost:8500").then(function (isAvailable) {
        return isAvailable ? useAPI(at("http://localhost:8500")).then(function () {}) : downloadBinary(swarmSetup.binPath, swarmSetup.archives).onData(function (data) {
          return (swarmSetup.onProgress || function () {})(data.length);
        }).then(function () {
          return startProcess(swarmSetup);
        }).then(function (process) {
          return useAPI(at("http://localhost:8500")).then(function () {
            return process;
          });
        }).then(stopProcess);
      });
    };
  }; // String ~> Promise Bool
  //   Returns true if Swarm is available on `url`.
  //   Perfoms a test upload to determine that.
  //   TODO: improve this?


  var _isAvailable = function isAvailable(swarmUrl) {
    var testFile = "test";
    var testHash = "c9a99c7d326dcc6316f32fe2625b311f6dc49a175e6877681ded93137d3569e7";
    return uploadData(swarmUrl)(testFile).then(function (hash) {
      return hash === testHash;
    }).catch(function () {
      return false;
    });
  }; // String -> String ~> Promise Bool
  //   Returns a Promise which is true if that Swarm address is a directory.
  //   Determines that by checking that it (i) is a JSON, (ii) has a .entries.
  //   TODO: improve this?


  var isDirectory = function isDirectory(swarmUrl) {
    return function (hash) {
      return downloadData(swarmUrl)(hash).then(function (data) {
        try {
          return !!JSON.parse(toString(data)).entries;
        } catch (e) {
          return false;
        }
      });
    };
  }; // Uncurries a function; used to allow the f(x,y,z) style on exports.


  var uncurry = function uncurry(f) {
    return function (a, b, c, d, e) {
      var p; // Hardcoded because efficiency (`arguments` is very slow).

      if (typeof a !== "undefined") p = f(a);
      if (typeof b !== "undefined") p = f(b);
      if (typeof c !== "undefined") p = f(c);
      if (typeof d !== "undefined") p = f(d);
      if (typeof e !== "undefined") p = f(e);
      return p;
    };
  }; // () -> Promise Bool
  //   Not sure how to mock Swarm to test it properly. Ideas?


  var test = function test() {
    return Promise.resolve(true);
  }; // Uint8Array -> String


  var toString = function toString(uint8Array) {
    return bytes.toString(bytes.fromUint8Array(uint8Array));
  }; // String -> Uint8Array


  var fromString = function fromString(string) {
    return bytes.toUint8Array(bytes.fromString(string));
  }; // String -> SwarmAPI
  //   Fixes the `swarmUrl`, returning an API where you don't have to pass it.


  var at = function at(swarmUrl) {
    return {
      download: function download(hash, path) {
        return _download(swarmUrl)(hash)(path);
      },
      downloadData: uncurry(downloadData(swarmUrl)),
      downloadDataToDisk: uncurry(downloadDataToDisk(swarmUrl)),
      downloadDirectory: uncurry(downloadDirectory(swarmUrl)),
      downloadDirectoryToDisk: uncurry(downloadDirectoryToDisk(swarmUrl)),
      downloadEntries: uncurry(downloadEntries(swarmUrl)),
      downloadRoutes: uncurry(downloadRoutes(swarmUrl)),
      isAvailable: function isAvailable() {
        return _isAvailable(swarmUrl);
      },
      upload: function upload(arg) {
        return _upload(swarmUrl)(arg);
      },
      uploadData: uncurry(uploadData(swarmUrl)),
      uploadFile: uncurry(uploadFile(swarmUrl)),
      uploadFileFromDisk: uncurry(uploadFile(swarmUrl)),
      uploadDataFromDisk: uncurry(uploadDataFromDisk(swarmUrl)),
      uploadDirectory: uncurry(uploadDirectory(swarmUrl)),
      uploadDirectoryFromDisk: uncurry(uploadDirectoryFromDisk(swarmUrl)),
      uploadToManifest: uncurry(uploadToManifest(swarmUrl)),
      pick: pick,
      hash: hash,
      fromString: fromString,
      toString: toString
    };
  };

  return {
    at: at,
    local: local,
    download: _download,
    downloadBinary: downloadBinary,
    downloadData: downloadData,
    downloadDataToDisk: downloadDataToDisk,
    downloadDirectory: downloadDirectory,
    downloadDirectoryToDisk: downloadDirectoryToDisk,
    downloadEntries: downloadEntries,
    downloadRoutes: downloadRoutes,
    isAvailable: _isAvailable,
    startProcess: startProcess,
    stopProcess: stopProcess,
    upload: _upload,
    uploadData: uploadData,
    uploadDataFromDisk: uploadDataFromDisk,
    uploadFile: uploadFile,
    uploadFileFromDisk: uploadFileFromDisk,
    uploadDirectory: uploadDirectory,
    uploadDirectoryFromDisk: uploadDirectoryFromDisk,
    uploadToManifest: uploadToManifest,
    pick: pick,
    hash: hash,
    fromString: fromString,
    toString: toString
  };
};

/***/ }),

/***/ 281227:
/***/ ((module) => {

var generate = function generate(num, fn) {
  var a = [];
  for (var i = 0; i < num; ++i) {
    a.push(fn(i));
  }return a;
};

var replicate = function replicate(num, val) {
  return generate(num, function () {
    return val;
  });
};

var concat = function concat(a, b) {
  return a.concat(b);
};

var flatten = function flatten(a) {
  var r = [];
  for (var j = 0, J = a.length; j < J; ++j) {
    for (var i = 0, I = a[j].length; i < I; ++i) {
      r.push(a[j][i]);
    }
  }return r;
};

var chunksOf = function chunksOf(n, a) {
  var b = [];
  for (var i = 0, l = a.length; i < l; i += n) {
    b.push(a.slice(i, i + n));
  }return b;
};

module.exports = {
  generate: generate,
  replicate: replicate,
  concat: concat,
  flatten: flatten,
  chunksOf: chunksOf
};

/***/ }),

/***/ 965737:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var A = __webpack_require__(281227);

var at = function at(bytes, index) {
  return parseInt(bytes.slice(index * 2 + 2, index * 2 + 4), 16);
};

var random = function random(bytes) {
  var rnd = void 0;
  if (typeof window !== "undefined" && window.crypto && window.crypto.getRandomValues) rnd = window.crypto.getRandomValues(new Uint8Array(bytes));else if (true) rnd = __webpack_require__(676417).randomBytes(bytes);else {}
  var hex = "0x";
  for (var i = 0; i < bytes; ++i) {
    hex += ("00" + rnd[i].toString(16)).slice(-2);
  }return hex;
};

var length = function length(a) {
  return (a.length - 2) / 2;
};

var flatten = function flatten(a) {
  return "0x" + a.reduce(function (r, s) {
    return r + s.slice(2);
  }, "");
};

var slice = function slice(i, j, bs) {
  return "0x" + bs.slice(i * 2 + 2, j * 2 + 2);
};

var reverse = function reverse(hex) {
  var rev = "0x";
  for (var i = 0, l = length(hex); i < l; ++i) {
    rev += hex.slice((l - i) * 2, (l - i + 1) * 2);
  }
  return rev;
};

var pad = function pad(l, hex) {
  return hex.length === l * 2 + 2 ? hex : pad(l, "0x" + "0" + hex.slice(2));
};

var padRight = function padRight(l, hex) {
  return hex.length === l * 2 + 2 ? hex : padRight(l, hex + "0");
};

var toArray = function toArray(hex) {
  var arr = [];
  for (var i = 2, l = hex.length; i < l; i += 2) {
    arr.push(parseInt(hex.slice(i, i + 2), 16));
  }return arr;
};

var fromArray = function fromArray(arr) {
  var hex = "0x";
  for (var i = 0, l = arr.length; i < l; ++i) {
    var b = arr[i];
    hex += (b < 16 ? "0" : "") + b.toString(16);
  }
  return hex;
};

var toUint8Array = function toUint8Array(hex) {
  return new Uint8Array(toArray(hex));
};

var fromUint8Array = function fromUint8Array(arr) {
  return fromArray([].slice.call(arr, 0));
};

var fromNumber = function fromNumber(num) {
  var hex = num.toString(16);
  return hex.length % 2 === 0 ? "0x" + hex : "0x0" + hex;
};

var toNumber = function toNumber(hex) {
  return parseInt(hex.slice(2), 16);
};

var concat = function concat(a, b) {
  return a.concat(b.slice(2));
};

var fromNat = function fromNat(bn) {
  return bn === "0x0" ? "0x" : bn.length % 2 === 0 ? bn : "0x0" + bn.slice(2);
};

var toNat = function toNat(bn) {
  return bn[2] === "0" ? "0x" + bn.slice(3) : bn;
};

var fromAscii = function fromAscii(ascii) {
  var hex = "0x";
  for (var i = 0; i < ascii.length; ++i) {
    hex += ("00" + ascii.charCodeAt(i).toString(16)).slice(-2);
  }return hex;
};

var toAscii = function toAscii(hex) {
  var ascii = "";
  for (var i = 2; i < hex.length; i += 2) {
    ascii += String.fromCharCode(parseInt(hex.slice(i, i + 2), 16));
  }return ascii;
};

// From https://gist.github.com/pascaldekloe/62546103a1576803dade9269ccf76330
var fromString = function fromString(s) {
  var makeByte = function makeByte(uint8) {
    var b = uint8.toString(16);
    return b.length < 2 ? "0" + b : b;
  };
  var bytes = "0x";
  for (var ci = 0; ci != s.length; ci++) {
    var c = s.charCodeAt(ci);
    if (c < 128) {
      bytes += makeByte(c);
      continue;
    }
    if (c < 2048) {
      bytes += makeByte(c >> 6 | 192);
    } else {
      if (c > 0xd7ff && c < 0xdc00) {
        if (++ci == s.length) return null;
        var c2 = s.charCodeAt(ci);
        if (c2 < 0xdc00 || c2 > 0xdfff) return null;
        c = 0x10000 + ((c & 0x03ff) << 10) + (c2 & 0x03ff);
        bytes += makeByte(c >> 18 | 240);
        bytes += makeByte(c >> 12 & 63 | 128);
      } else {
        // c <= 0xffff
        bytes += makeByte(c >> 12 | 224);
      }
      bytes += makeByte(c >> 6 & 63 | 128);
    }
    bytes += makeByte(c & 63 | 128);
  }
  return bytes;
};

var toString = function toString(bytes) {
  var s = '';
  var i = 0;
  var l = length(bytes);
  while (i < l) {
    var c = at(bytes, i++);
    if (c > 127) {
      if (c > 191 && c < 224) {
        if (i >= l) return null;
        c = (c & 31) << 6 | at(bytes, i) & 63;
      } else if (c > 223 && c < 240) {
        if (i + 1 >= l) return null;
        c = (c & 15) << 12 | (at(bytes, i) & 63) << 6 | at(bytes, ++i) & 63;
      } else if (c > 239 && c < 248) {
        if (i + 2 >= l) return null;
        c = (c & 7) << 18 | (at(bytes, i) & 63) << 12 | (at(bytes, ++i) & 63) << 6 | at(bytes, ++i) & 63;
      } else return null;
      ++i;
    }
    if (c <= 0xffff) s += String.fromCharCode(c);else if (c <= 0x10ffff) {
      c -= 0x10000;
      s += String.fromCharCode(c >> 10 | 0xd800);
      s += String.fromCharCode(c & 0x3FF | 0xdc00);
    } else return null;
  }
  return s;
};

module.exports = {
  random: random,
  length: length,
  concat: concat,
  flatten: flatten,
  slice: slice,
  reverse: reverse,
  pad: pad,
  padRight: padRight,
  fromAscii: fromAscii,
  toAscii: toAscii,
  fromString: fromString,
  toString: toString,
  fromNumber: fromNumber,
  toNumber: toNumber,
  fromNat: fromNat,
  toNat: toNat,
  fromArray: fromArray,
  toArray: toArray,
  fromUint8Array: fromUint8Array,
  toUint8Array: toUint8Array
};

/***/ }),

/***/ 735178:
/***/ ((module) => {

// This was ported from https://github.com/emn178/js-sha3, with some minor
// modifications and pruning. It is licensed under MIT:
//
// Copyright 2015-2016 Chen, Yi-Cyuan
//  
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

var HEX_CHARS = '0123456789abcdef'.split('');
var KECCAK_PADDING = [1, 256, 65536, 16777216];
var SHIFT = [0, 8, 16, 24];
var RC = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648];

var Keccak = function Keccak(bits) {
  return {
    blocks: [],
    reset: true,
    block: 0,
    start: 0,
    blockCount: 1600 - (bits << 1) >> 5,
    outputBlocks: bits >> 5,
    s: function (s) {
      return [].concat(s, s, s, s, s);
    }([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
  };
};

var update = function update(state, message) {
  var length = message.length,
      blocks = state.blocks,
      byteCount = state.blockCount << 2,
      blockCount = state.blockCount,
      outputBlocks = state.outputBlocks,
      s = state.s,
      index = 0,
      i,
      code;

  // update
  while (index < length) {
    if (state.reset) {
      state.reset = false;
      blocks[0] = state.block;
      for (i = 1; i < blockCount + 1; ++i) {
        blocks[i] = 0;
      }
    }
    if (typeof message !== "string") {
      for (i = state.start; index < length && i < byteCount; ++index) {
        blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];
      }
    } else {
      for (i = state.start; index < length && i < byteCount; ++index) {
        code = message.charCodeAt(index);
        if (code < 0x80) {
          blocks[i >> 2] |= code << SHIFT[i++ & 3];
        } else if (code < 0x800) {
          blocks[i >> 2] |= (0xc0 | code >> 6) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        } else if (code < 0xd800 || code >= 0xe000) {
          blocks[i >> 2] |= (0xe0 | code >> 12) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        } else {
          code = 0x10000 + ((code & 0x3ff) << 10 | message.charCodeAt(++index) & 0x3ff);
          blocks[i >> 2] |= (0xf0 | code >> 18) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 12 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code >> 6 & 0x3f) << SHIFT[i++ & 3];
          blocks[i >> 2] |= (0x80 | code & 0x3f) << SHIFT[i++ & 3];
        }
      }
    }
    state.lastByteIndex = i;
    if (i >= byteCount) {
      state.start = i - byteCount;
      state.block = blocks[blockCount];
      for (i = 0; i < blockCount; ++i) {
        s[i] ^= blocks[i];
      }
      f(s);
      state.reset = true;
    } else {
      state.start = i;
    }
  }

  // finalize
  i = state.lastByteIndex;
  blocks[i >> 2] |= KECCAK_PADDING[i & 3];
  if (state.lastByteIndex === byteCount) {
    blocks[0] = blocks[blockCount];
    for (i = 1; i < blockCount + 1; ++i) {
      blocks[i] = 0;
    }
  }
  blocks[blockCount - 1] |= 0x80000000;
  for (i = 0; i < blockCount; ++i) {
    s[i] ^= blocks[i];
  }
  f(s);

  // toString
  var hex = '',
      i = 0,
      j = 0,
      block;
  while (j < outputBlocks) {
    for (i = 0; i < blockCount && j < outputBlocks; ++i, ++j) {
      block = s[i];
      hex += HEX_CHARS[block >> 4 & 0x0F] + HEX_CHARS[block & 0x0F] + HEX_CHARS[block >> 12 & 0x0F] + HEX_CHARS[block >> 8 & 0x0F] + HEX_CHARS[block >> 20 & 0x0F] + HEX_CHARS[block >> 16 & 0x0F] + HEX_CHARS[block >> 28 & 0x0F] + HEX_CHARS[block >> 24 & 0x0F];
    }
    if (j % blockCount === 0) {
      f(s);
      i = 0;
    }
  }
  return "0x" + hex;
};

var f = function f(s) {
  var h, l, n, c0, c1, c2, c3, c4, c5, c6, c7, c8, c9, b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15, b16, b17, b18, b19, b20, b21, b22, b23, b24, b25, b26, b27, b28, b29, b30, b31, b32, b33, b34, b35, b36, b37, b38, b39, b40, b41, b42, b43, b44, b45, b46, b47, b48, b49;

  for (n = 0; n < 48; n += 2) {
    c0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40];
    c1 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41];
    c2 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42];
    c3 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43];
    c4 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44];
    c5 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45];
    c6 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46];
    c7 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47];
    c8 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48];
    c9 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49];

    h = c8 ^ (c2 << 1 | c3 >>> 31);
    l = c9 ^ (c3 << 1 | c2 >>> 31);
    s[0] ^= h;
    s[1] ^= l;
    s[10] ^= h;
    s[11] ^= l;
    s[20] ^= h;
    s[21] ^= l;
    s[30] ^= h;
    s[31] ^= l;
    s[40] ^= h;
    s[41] ^= l;
    h = c0 ^ (c4 << 1 | c5 >>> 31);
    l = c1 ^ (c5 << 1 | c4 >>> 31);
    s[2] ^= h;
    s[3] ^= l;
    s[12] ^= h;
    s[13] ^= l;
    s[22] ^= h;
    s[23] ^= l;
    s[32] ^= h;
    s[33] ^= l;
    s[42] ^= h;
    s[43] ^= l;
    h = c2 ^ (c6 << 1 | c7 >>> 31);
    l = c3 ^ (c7 << 1 | c6 >>> 31);
    s[4] ^= h;
    s[5] ^= l;
    s[14] ^= h;
    s[15] ^= l;
    s[24] ^= h;
    s[25] ^= l;
    s[34] ^= h;
    s[35] ^= l;
    s[44] ^= h;
    s[45] ^= l;
    h = c4 ^ (c8 << 1 | c9 >>> 31);
    l = c5 ^ (c9 << 1 | c8 >>> 31);
    s[6] ^= h;
    s[7] ^= l;
    s[16] ^= h;
    s[17] ^= l;
    s[26] ^= h;
    s[27] ^= l;
    s[36] ^= h;
    s[37] ^= l;
    s[46] ^= h;
    s[47] ^= l;
    h = c6 ^ (c0 << 1 | c1 >>> 31);
    l = c7 ^ (c1 << 1 | c0 >>> 31);
    s[8] ^= h;
    s[9] ^= l;
    s[18] ^= h;
    s[19] ^= l;
    s[28] ^= h;
    s[29] ^= l;
    s[38] ^= h;
    s[39] ^= l;
    s[48] ^= h;
    s[49] ^= l;

    b0 = s[0];
    b1 = s[1];
    b32 = s[11] << 4 | s[10] >>> 28;
    b33 = s[10] << 4 | s[11] >>> 28;
    b14 = s[20] << 3 | s[21] >>> 29;
    b15 = s[21] << 3 | s[20] >>> 29;
    b46 = s[31] << 9 | s[30] >>> 23;
    b47 = s[30] << 9 | s[31] >>> 23;
    b28 = s[40] << 18 | s[41] >>> 14;
    b29 = s[41] << 18 | s[40] >>> 14;
    b20 = s[2] << 1 | s[3] >>> 31;
    b21 = s[3] << 1 | s[2] >>> 31;
    b2 = s[13] << 12 | s[12] >>> 20;
    b3 = s[12] << 12 | s[13] >>> 20;
    b34 = s[22] << 10 | s[23] >>> 22;
    b35 = s[23] << 10 | s[22] >>> 22;
    b16 = s[33] << 13 | s[32] >>> 19;
    b17 = s[32] << 13 | s[33] >>> 19;
    b48 = s[42] << 2 | s[43] >>> 30;
    b49 = s[43] << 2 | s[42] >>> 30;
    b40 = s[5] << 30 | s[4] >>> 2;
    b41 = s[4] << 30 | s[5] >>> 2;
    b22 = s[14] << 6 | s[15] >>> 26;
    b23 = s[15] << 6 | s[14] >>> 26;
    b4 = s[25] << 11 | s[24] >>> 21;
    b5 = s[24] << 11 | s[25] >>> 21;
    b36 = s[34] << 15 | s[35] >>> 17;
    b37 = s[35] << 15 | s[34] >>> 17;
    b18 = s[45] << 29 | s[44] >>> 3;
    b19 = s[44] << 29 | s[45] >>> 3;
    b10 = s[6] << 28 | s[7] >>> 4;
    b11 = s[7] << 28 | s[6] >>> 4;
    b42 = s[17] << 23 | s[16] >>> 9;
    b43 = s[16] << 23 | s[17] >>> 9;
    b24 = s[26] << 25 | s[27] >>> 7;
    b25 = s[27] << 25 | s[26] >>> 7;
    b6 = s[36] << 21 | s[37] >>> 11;
    b7 = s[37] << 21 | s[36] >>> 11;
    b38 = s[47] << 24 | s[46] >>> 8;
    b39 = s[46] << 24 | s[47] >>> 8;
    b30 = s[8] << 27 | s[9] >>> 5;
    b31 = s[9] << 27 | s[8] >>> 5;
    b12 = s[18] << 20 | s[19] >>> 12;
    b13 = s[19] << 20 | s[18] >>> 12;
    b44 = s[29] << 7 | s[28] >>> 25;
    b45 = s[28] << 7 | s[29] >>> 25;
    b26 = s[38] << 8 | s[39] >>> 24;
    b27 = s[39] << 8 | s[38] >>> 24;
    b8 = s[48] << 14 | s[49] >>> 18;
    b9 = s[49] << 14 | s[48] >>> 18;

    s[0] = b0 ^ ~b2 & b4;
    s[1] = b1 ^ ~b3 & b5;
    s[10] = b10 ^ ~b12 & b14;
    s[11] = b11 ^ ~b13 & b15;
    s[20] = b20 ^ ~b22 & b24;
    s[21] = b21 ^ ~b23 & b25;
    s[30] = b30 ^ ~b32 & b34;
    s[31] = b31 ^ ~b33 & b35;
    s[40] = b40 ^ ~b42 & b44;
    s[41] = b41 ^ ~b43 & b45;
    s[2] = b2 ^ ~b4 & b6;
    s[3] = b3 ^ ~b5 & b7;
    s[12] = b12 ^ ~b14 & b16;
    s[13] = b13 ^ ~b15 & b17;
    s[22] = b22 ^ ~b24 & b26;
    s[23] = b23 ^ ~b25 & b27;
    s[32] = b32 ^ ~b34 & b36;
    s[33] = b33 ^ ~b35 & b37;
    s[42] = b42 ^ ~b44 & b46;
    s[43] = b43 ^ ~b45 & b47;
    s[4] = b4 ^ ~b6 & b8;
    s[5] = b5 ^ ~b7 & b9;
    s[14] = b14 ^ ~b16 & b18;
    s[15] = b15 ^ ~b17 & b19;
    s[24] = b24 ^ ~b26 & b28;
    s[25] = b25 ^ ~b27 & b29;
    s[34] = b34 ^ ~b36 & b38;
    s[35] = b35 ^ ~b37 & b39;
    s[44] = b44 ^ ~b46 & b48;
    s[45] = b45 ^ ~b47 & b49;
    s[6] = b6 ^ ~b8 & b0;
    s[7] = b7 ^ ~b9 & b1;
    s[16] = b16 ^ ~b18 & b10;
    s[17] = b17 ^ ~b19 & b11;
    s[26] = b26 ^ ~b28 & b20;
    s[27] = b27 ^ ~b29 & b21;
    s[36] = b36 ^ ~b38 & b30;
    s[37] = b37 ^ ~b39 & b31;
    s[46] = b46 ^ ~b48 & b40;
    s[47] = b47 ^ ~b49 & b41;
    s[8] = b8 ^ ~b0 & b2;
    s[9] = b9 ^ ~b1 & b3;
    s[18] = b18 ^ ~b10 & b12;
    s[19] = b19 ^ ~b11 & b13;
    s[28] = b28 ^ ~b20 & b22;
    s[29] = b29 ^ ~b21 & b23;
    s[38] = b38 ^ ~b30 & b32;
    s[39] = b39 ^ ~b31 & b33;
    s[48] = b48 ^ ~b40 & b42;
    s[49] = b49 ^ ~b41 & b43;

    s[0] ^= RC[n];
    s[1] ^= RC[n + 1];
  }
};

var keccak = function keccak(bits) {
  return function (str) {
    var msg;
    if (str.slice(0, 2) === "0x") {
      msg = [];
      for (var i = 2, l = str.length; i < l; i += 2) {
        msg.push(parseInt(str.slice(i, i + 2), 16));
      }
    } else {
      msg = str;
    }
    return update(Keccak(bits, bits), msg);
  };
};

module.exports = {
  keccak256: keccak(256),
  keccak512: keccak(512),
  keccak256s: keccak(256),
  keccak512s: keccak(512)
};

/***/ }),

/***/ 560120:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)

const BUF_LENGTH = 64 * 1024
const _buff = __webpack_require__(665130)(BUF_LENGTH)

function copyFileSync (srcFile, destFile, options) {
  const overwrite = options.overwrite
  const errorOnExist = options.errorOnExist
  const preserveTimestamps = options.preserveTimestamps

  if (fs.existsSync(destFile)) {
    if (overwrite) {
      fs.unlinkSync(destFile)
    } else if (errorOnExist) {
      throw new Error(`${destFile} already exists`)
    } else return
  }

  const fdr = fs.openSync(srcFile, 'r')
  const stat = fs.fstatSync(fdr)
  const fdw = fs.openSync(destFile, 'w', stat.mode)
  let bytesRead = 1
  let pos = 0

  while (bytesRead > 0) {
    bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  if (preserveTimestamps) {
    fs.futimesSync(fdw, stat.atime, stat.mtime)
  }

  fs.closeSync(fdr)
  fs.closeSync(fdw)
}

module.exports = copyFileSync


/***/ }),

/***/ 38147:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const copyFileSync = __webpack_require__(560120)
const mkdir = __webpack_require__(282958)

function copySync (src, dest, options) {
  if (typeof options === 'function' || options instanceof RegExp) {
    options = {filter: options}
  }

  options = options || {}
  options.recursive = !!options.recursive

  // default to true for now
  options.clobber = 'clobber' in options ? !!options.clobber : true
  // overwrite falls back to clobber
  options.overwrite = 'overwrite' in options ? !!options.overwrite : options.clobber
  options.dereference = 'dereference' in options ? !!options.dereference : false
  options.preserveTimestamps = 'preserveTimestamps' in options ? !!options.preserveTimestamps : false

  options.filter = options.filter || function () { return true }

  // Warn about using preserveTimestamps on 32-bit node:
  if (options.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  const stats = (options.recursive && !options.dereference) ? fs.lstatSync(src) : fs.statSync(src)
  const destFolder = path.dirname(dest)
  const destFolderExists = fs.existsSync(destFolder)
  let performCopy = false

  if (options.filter instanceof RegExp) {
    console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function')
    performCopy = options.filter.test(src)
  } else if (typeof options.filter === 'function') performCopy = options.filter(src, dest)

  if (stats.isFile() && performCopy) {
    if (!destFolderExists) mkdir.mkdirsSync(destFolder)
    copyFileSync(src, dest, {
      overwrite: options.overwrite,
      errorOnExist: options.errorOnExist,
      preserveTimestamps: options.preserveTimestamps
    })
  } else if (stats.isDirectory() && performCopy) {
    if (!fs.existsSync(dest)) mkdir.mkdirsSync(dest)
    const contents = fs.readdirSync(src)
    contents.forEach(content => {
      const opts = options
      opts.recursive = true
      copySync(path.join(src, content), path.join(dest, content), opts)
    })
  } else if (options.recursive && stats.isSymbolicLink() && performCopy) {
    const srcPath = fs.readlinkSync(src)
    fs.symlinkSync(srcPath, dest)
  }
}

module.exports = copySync


/***/ }),

/***/ 846192:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

module.exports = {
  copySync: __webpack_require__(38147)
}


/***/ }),

/***/ 452300:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const ncp = __webpack_require__(456925)
const mkdir = __webpack_require__(282958)
const pathExists = __webpack_require__(195352).pathExists

function copy (src, dest, options, callback) {
  if (typeof options === 'function' && !callback) {
    callback = options
    options = {}
  } else if (typeof options === 'function' || options instanceof RegExp) {
    options = {filter: options}
  }
  callback = callback || function () {}
  options = options || {}

  // Warn about using preserveTimestamps on 32-bit node:
  if (options.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  // don't allow src and dest to be the same
  const basePath = process.cwd()
  const currentPath = path.resolve(basePath, src)
  const targetPath = path.resolve(basePath, dest)
  if (currentPath === targetPath) return callback(new Error('Source and destination must not be the same.'))

  fs.lstat(src, (err, stats) => {
    if (err) return callback(err)

    let dir = null
    if (stats.isDirectory()) {
      const parts = dest.split(path.sep)
      parts.pop()
      dir = parts.join(path.sep)
    } else {
      dir = path.dirname(dest)
    }

    pathExists(dir, (err, dirExists) => {
      if (err) return callback(err)
      if (dirExists) return ncp(src, dest, options, callback)
      mkdir.mkdirs(dir, err => {
        if (err) return callback(err)
        ncp(src, dest, options, callback)
      })
    })
  })
}

module.exports = copy


/***/ }),

/***/ 518049:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

const u = __webpack_require__(238981)/* .fromCallback */ .E
module.exports = {
  copy: u(__webpack_require__(452300))
}


/***/ }),

/***/ 456925:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// imported from ncp (this is temporary, will rewrite)

var fs = __webpack_require__(220077)
var path = __webpack_require__(385622)
var utimes = __webpack_require__(716714)

function ncp (source, dest, options, callback) {
  if (!callback) {
    callback = options
    options = {}
  }

  var basePath = process.cwd()
  var currentPath = path.resolve(basePath, source)
  var targetPath = path.resolve(basePath, dest)

  var filter = options.filter
  var transform = options.transform
  var overwrite = options.overwrite
  // If overwrite is undefined, use clobber, otherwise default to true:
  if (overwrite === undefined) overwrite = options.clobber
  if (overwrite === undefined) overwrite = true
  var errorOnExist = options.errorOnExist
  var dereference = options.dereference
  var preserveTimestamps = options.preserveTimestamps === true

  var started = 0
  var finished = 0
  var running = 0

  var errored = false

  startCopy(currentPath)

  function startCopy (source) {
    started++
    if (filter) {
      if (filter instanceof RegExp) {
        console.warn('Warning: fs-extra: Passing a RegExp filter is deprecated, use a function')
        if (!filter.test(source)) {
          return doneOne(true)
        }
      } else if (typeof filter === 'function') {
        if (!filter(source, dest)) {
          return doneOne(true)
        }
      }
    }
    return getStats(source)
  }

  function getStats (source) {
    var stat = dereference ? fs.stat : fs.lstat
    running++
    stat(source, function (err, stats) {
      if (err) return onError(err)

      // We need to get the mode from the stats object and preserve it.
      var item = {
        name: source,
        mode: stats.mode,
        mtime: stats.mtime, // modified time
        atime: stats.atime, // access time
        stats: stats // temporary
      }

      if (stats.isDirectory()) {
        return onDir(item)
      } else if (stats.isFile() || stats.isCharacterDevice() || stats.isBlockDevice()) {
        return onFile(item)
      } else if (stats.isSymbolicLink()) {
        // Symlinks don't really need to know about the mode.
        return onLink(source)
      }
    })
  }

  function onFile (file) {
    var target = file.name.replace(currentPath, targetPath.replace('$', '$$$$')) // escapes '$' with '$$'
    isWritable(target, function (writable) {
      if (writable) {
        copyFile(file, target)
      } else {
        if (overwrite) {
          rmFile(target, function () {
            copyFile(file, target)
          })
        } else if (errorOnExist) {
          onError(new Error(target + ' already exists'))
        } else {
          doneOne()
        }
      }
    })
  }

  function copyFile (file, target) {
    var readStream = fs.createReadStream(file.name)
    var writeStream = fs.createWriteStream(target, { mode: file.mode })

    readStream.on('error', onError)
    writeStream.on('error', onError)

    if (transform) {
      transform(readStream, writeStream, file)
    } else {
      writeStream.on('open', function () {
        readStream.pipe(writeStream)
      })
    }

    writeStream.once('close', function () {
      fs.chmod(target, file.mode, function (err) {
        if (err) return onError(err)
        if (preserveTimestamps) {
          utimes.utimesMillis(target, file.atime, file.mtime, function (err) {
            if (err) return onError(err)
            return doneOne()
          })
        } else {
          doneOne()
        }
      })
    })
  }

  function rmFile (file, done) {
    fs.unlink(file, function (err) {
      if (err) return onError(err)
      return done()
    })
  }

  function onDir (dir) {
    var target = dir.name.replace(currentPath, targetPath.replace('$', '$$$$')) // escapes '$' with '$$'
    isWritable(target, function (writable) {
      if (writable) {
        return mkDir(dir, target)
      }
      copyDir(dir.name)
    })
  }

  function mkDir (dir, target) {
    fs.mkdir(target, dir.mode, function (err) {
      if (err) return onError(err)
      // despite setting mode in fs.mkdir, doesn't seem to work
      // so we set it here.
      fs.chmod(target, dir.mode, function (err) {
        if (err) return onError(err)
        copyDir(dir.name)
      })
    })
  }

  function copyDir (dir) {
    fs.readdir(dir, function (err, items) {
      if (err) return onError(err)
      items.forEach(function (item) {
        startCopy(path.join(dir, item))
      })
      return doneOne()
    })
  }

  function onLink (link) {
    var target = link.replace(currentPath, targetPath)
    fs.readlink(link, function (err, resolvedPath) {
      if (err) return onError(err)
      checkLink(resolvedPath, target)
    })
  }

  function checkLink (resolvedPath, target) {
    if (dereference) {
      resolvedPath = path.resolve(basePath, resolvedPath)
    }
    isWritable(target, function (writable) {
      if (writable) {
        return makeLink(resolvedPath, target)
      }
      fs.readlink(target, function (err, targetDest) {
        if (err) return onError(err)

        if (dereference) {
          targetDest = path.resolve(basePath, targetDest)
        }
        if (targetDest === resolvedPath) {
          return doneOne()
        }
        return rmFile(target, function () {
          makeLink(resolvedPath, target)
        })
      })
    })
  }

  function makeLink (linkPath, target) {
    fs.symlink(linkPath, target, function (err) {
      if (err) return onError(err)
      return doneOne()
    })
  }

  function isWritable (path, done) {
    fs.lstat(path, function (err) {
      if (err) {
        if (err.code === 'ENOENT') return done(true)
        return done(false)
      }
      return done(false)
    })
  }

  function onError (err) {
    // ensure callback is defined & called only once:
    if (!errored && callback !== undefined) {
      errored = true
      return callback(err)
    }
  }

  function doneOne (skipped) {
    if (!skipped) running--
    finished++
    if ((started === finished) && (running === 0)) {
      if (callback !== undefined) {
        return callback(null)
      }
    }
  }
}

module.exports = ncp


/***/ }),

/***/ 737495:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(935747)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(282958)
const remove = __webpack_require__(482010)

const emptyDir = u(function emptyDir (dir, callback) {
  callback = callback || function () {}
  fs.readdir(dir, (err, items) => {
    if (err) return mkdir.mkdirs(dir, callback)

    items = items.map(item => path.join(dir, item))

    deleteItem()

    function deleteItem () {
      const item = items.pop()
      if (!item) return callback()
      remove.remove(item, err => {
        if (err) return callback(err)
        deleteItem()
      })
    }
  })
})

function emptyDirSync (dir) {
  let items
  try {
    items = fs.readdirSync(dir)
  } catch (err) {
    return mkdir.mkdirsSync(dir)
  }

  items.forEach(item => {
    item = path.join(dir, item)
    remove.removeSync(item)
  })
}

module.exports = {
  emptyDirSync,
  emptydirSync: emptyDirSync,
  emptyDir,
  emptydir: emptyDir
}


/***/ }),

/***/ 41:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const mkdir = __webpack_require__(282958)
const pathExists = __webpack_require__(195352).pathExists

function createFile (file, callback) {
  function makeFile () {
    fs.writeFile(file, '', err => {
      if (err) return callback(err)
      callback()
    })
  }

  fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
    if (!err && stats.isFile()) return callback()
    const dir = path.dirname(file)
    pathExists(dir, (err, dirExists) => {
      if (err) return callback(err)
      if (dirExists) return makeFile()
      mkdir.mkdirs(dir, err => {
        if (err) return callback(err)
        makeFile()
      })
    })
  })
}

function createFileSync (file) {
  let stats
  try {
    stats = fs.statSync(file)
  } catch (e) {}
  if (stats && stats.isFile()) return

  const dir = path.dirname(file)
  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  fs.writeFileSync(file, '')
}

module.exports = {
  createFile: u(createFile),
  createFileSync
}


/***/ }),

/***/ 190874:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const file = __webpack_require__(41)
const link = __webpack_require__(354339)
const symlink = __webpack_require__(787317)

module.exports = {
  // file
  createFile: file.createFile,
  createFileSync: file.createFileSync,
  ensureFile: file.createFile,
  ensureFileSync: file.createFileSync,
  // link
  createLink: link.createLink,
  createLinkSync: link.createLinkSync,
  ensureLink: link.createLink,
  ensureLinkSync: link.createLinkSync,
  // symlink
  createSymlink: symlink.createSymlink,
  createSymlinkSync: symlink.createSymlinkSync,
  ensureSymlink: symlink.createSymlink,
  ensureSymlinkSync: symlink.createSymlinkSync
}


/***/ }),

/***/ 354339:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const mkdir = __webpack_require__(282958)
const pathExists = __webpack_require__(195352).pathExists

function createLink (srcpath, dstpath, callback) {
  function makeLink (srcpath, dstpath) {
    fs.link(srcpath, dstpath, err => {
      if (err) return callback(err)
      callback(null)
    })
  }

  pathExists(dstpath, (err, destinationExists) => {
    if (err) return callback(err)
    if (destinationExists) return callback(null)
    fs.lstat(srcpath, (err, stat) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureLink')
        return callback(err)
      }

      const dir = path.dirname(dstpath)
      pathExists(dir, (err, dirExists) => {
        if (err) return callback(err)
        if (dirExists) return makeLink(srcpath, dstpath)
        mkdir.mkdirs(dir, err => {
          if (err) return callback(err)
          makeLink(srcpath, dstpath)
        })
      })
    })
  })
}

function createLinkSync (srcpath, dstpath, callback) {
  const destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  try {
    fs.lstatSync(srcpath)
  } catch (err) {
    err.message = err.message.replace('lstat', 'ensureLink')
    throw err
  }

  const dir = path.dirname(dstpath)
  const dirExists = fs.existsSync(dir)
  if (dirExists) return fs.linkSync(srcpath, dstpath)
  mkdir.mkdirsSync(dir)

  return fs.linkSync(srcpath, dstpath)
}

module.exports = {
  createLink: u(createLink),
  createLinkSync
}


/***/ }),

/***/ 487303:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const pathExists = __webpack_require__(195352).pathExists

/**
 * Function that returns two types of paths, one relative to symlink, and one
 * relative to the current working directory. Checks if path is absolute or
 * relative. If the path is relative, this function checks if the path is
 * relative to symlink or relative to current working directory. This is an
 * initiative to find a smarter `srcpath` to supply when building symlinks.
 * This allows you to determine which path to use out of one of three possible
 * types of source paths. The first is an absolute path. This is detected by
 * `path.isAbsolute()`. When an absolute path is provided, it is checked to
 * see if it exists. If it does it's used, if not an error is returned
 * (callback)/ thrown (sync). The other two options for `srcpath` are a
 * relative url. By default Node's `fs.symlink` works by creating a symlink
 * using `dstpath` and expects the `srcpath` to be relative to the newly
 * created symlink. If you provide a `srcpath` that does not exist on the file
 * system it results in a broken symlink. To minimize this, the function
 * checks to see if the 'relative to symlink' source file exists, and if it
 * does it will use it. If it does not, it checks if there's a file that
 * exists that is relative to the current working directory, if does its used.
 * This preserves the expectations of the original fs.symlink spec and adds
 * the ability to pass in `relative to current working direcotry` paths.
 */

function symlinkPaths (srcpath, dstpath, callback) {
  if (path.isAbsolute(srcpath)) {
    return fs.lstat(srcpath, (err, stat) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureSymlink')
        return callback(err)
      }
      return callback(null, {
        'toCwd': srcpath,
        'toDst': srcpath
      })
    })
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    return pathExists(relativeToDst, (err, exists) => {
      if (err) return callback(err)
      if (exists) {
        return callback(null, {
          'toCwd': relativeToDst,
          'toDst': srcpath
        })
      } else {
        return fs.lstat(srcpath, (err, stat) => {
          if (err) {
            err.message = err.message.replace('lstat', 'ensureSymlink')
            return callback(err)
          }
          return callback(null, {
            'toCwd': srcpath,
            'toDst': path.relative(dstdir, srcpath)
          })
        })
      }
    })
  }
}

function symlinkPathsSync (srcpath, dstpath) {
  let exists
  if (path.isAbsolute(srcpath)) {
    exists = fs.existsSync(srcpath)
    if (!exists) throw new Error('absolute srcpath does not exist')
    return {
      'toCwd': srcpath,
      'toDst': srcpath
    }
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    exists = fs.existsSync(relativeToDst)
    if (exists) {
      return {
        'toCwd': relativeToDst,
        'toDst': srcpath
      }
    } else {
      exists = fs.existsSync(srcpath)
      if (!exists) throw new Error('relative srcpath does not exist')
      return {
        'toCwd': srcpath,
        'toDst': path.relative(dstdir, srcpath)
      }
    }
  }
}

module.exports = {
  symlinkPaths,
  symlinkPathsSync
}


/***/ }),

/***/ 144887:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)

function symlinkType (srcpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type
  if (type) return callback(null, type)
  fs.lstat(srcpath, (err, stats) => {
    if (err) return callback(null, 'file')
    type = (stats && stats.isDirectory()) ? 'dir' : 'file'
    callback(null, type)
  })
}

function symlinkTypeSync (srcpath, type) {
  let stats

  if (type) return type
  try {
    stats = fs.lstatSync(srcpath)
  } catch (e) {
    return 'file'
  }
  return (stats && stats.isDirectory()) ? 'dir' : 'file'
}

module.exports = {
  symlinkType,
  symlinkTypeSync
}


/***/ }),

/***/ 787317:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const _mkdirs = __webpack_require__(282958)
const mkdirs = _mkdirs.mkdirs
const mkdirsSync = _mkdirs.mkdirsSync

const _symlinkPaths = __webpack_require__(487303)
const symlinkPaths = _symlinkPaths.symlinkPaths
const symlinkPathsSync = _symlinkPaths.symlinkPathsSync

const _symlinkType = __webpack_require__(144887)
const symlinkType = _symlinkType.symlinkType
const symlinkTypeSync = _symlinkType.symlinkTypeSync

const pathExists = __webpack_require__(195352).pathExists

function createSymlink (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  pathExists(dstpath, (err, destinationExists) => {
    if (err) return callback(err)
    if (destinationExists) return callback(null)
    symlinkPaths(srcpath, dstpath, (err, relative) => {
      if (err) return callback(err)
      srcpath = relative.toDst
      symlinkType(relative.toCwd, type, (err, type) => {
        if (err) return callback(err)
        const dir = path.dirname(dstpath)
        pathExists(dir, (err, dirExists) => {
          if (err) return callback(err)
          if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
          mkdirs(dir, err => {
            if (err) return callback(err)
            fs.symlink(srcpath, dstpath, type, callback)
          })
        })
      })
    })
  })
}

function createSymlinkSync (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  const destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  const relative = symlinkPathsSync(srcpath, dstpath)
  srcpath = relative.toDst
  type = symlinkTypeSync(relative.toCwd, type)
  const dir = path.dirname(dstpath)
  const exists = fs.existsSync(dir)
  if (exists) return fs.symlinkSync(srcpath, dstpath, type)
  mkdirsSync(dir)
  return fs.symlinkSync(srcpath, dstpath, type)
}

module.exports = {
  createSymlink: u(createSymlink),
  createSymlinkSync
}


/***/ }),

/***/ 808338:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

// This is adapted from https://github.com/normalize/mz
// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)

const api = [
  'access',
  'appendFile',
  'chmod',
  'chown',
  'close',
  'copyFile',
  'fchmod',
  'fchown',
  'fdatasync',
  'fstat',
  'fsync',
  'ftruncate',
  'futimes',
  'lchown',
  'link',
  'lstat',
  'mkdir',
  'mkdtemp',
  'open',
  'readFile',
  'readdir',
  'readlink',
  'realpath',
  'rename',
  'rmdir',
  'stat',
  'symlink',
  'truncate',
  'unlink',
  'utimes',
  'writeFile'
].filter(key => {
  // Some commands are not available on some systems. Ex:
  // fs.copyFile was added in Node.js v8.5.0
  // fs.mkdtemp was added in Node.js v5.10.0
  // fs.lchown is not available on at least some Linux
  return typeof fs[key] === 'function'
})

// Export all keys:
Object.keys(fs).forEach(key => {
  exports[key] = fs[key]
})

// Universalify async methods:
api.forEach(method => {
  exports[method] = u(fs[method])
})

// We differ from mz/fs in that we still ship the old, broken, fs.exists()
// since we are a drop-in replacement for the native module
exports.exists = function (filename, callback) {
  if (typeof callback === 'function') {
    return fs.exists(filename, callback)
  }
  return new Promise(resolve => {
    return fs.exists(filename, resolve)
  })
}

// fs.read() & fs.write need special treatment due to multiple callback args

exports.read = function (fd, buffer, offset, length, position, callback) {
  if (typeof callback === 'function') {
    return fs.read(fd, buffer, offset, length, position, callback)
  }
  return new Promise((resolve, reject) => {
    fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
      if (err) return reject(err)
      resolve({ bytesRead, buffer })
    })
  })
}

// Function signature can be
// fs.write(fd, buffer[, offset[, length[, position]]], callback)
// OR
// fs.write(fd, string[, position[, encoding]], callback)
// so we need to handle both cases
exports.write = function (fd, buffer, a, b, c, callback) {
  if (typeof arguments[arguments.length - 1] === 'function') {
    return fs.write(fd, buffer, a, b, c, callback)
  }

  // Check for old, depricated fs.write(fd, string[, position[, encoding]], callback)
  if (typeof buffer === 'string') {
    return new Promise((resolve, reject) => {
      fs.write(fd, buffer, a, b, (err, bytesWritten, buffer) => {
        if (err) return reject(err)
        resolve({ bytesWritten, buffer })
      })
    })
  }

  return new Promise((resolve, reject) => {
    fs.write(fd, buffer, a, b, c, (err, bytesWritten, buffer) => {
      if (err) return reject(err)
      resolve({ bytesWritten, buffer })
    })
  })
}


/***/ }),

/***/ 202584:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const assign = __webpack_require__(785824)

const fs = {}

// Export graceful-fs:
assign(fs, __webpack_require__(808338))
// Export extra methods:
assign(fs, __webpack_require__(518049))
assign(fs, __webpack_require__(846192))
assign(fs, __webpack_require__(282958))
assign(fs, __webpack_require__(482010))
assign(fs, __webpack_require__(686009))
assign(fs, __webpack_require__(95536))
assign(fs, __webpack_require__(89403))
assign(fs, __webpack_require__(737495))
assign(fs, __webpack_require__(190874))
assign(fs, __webpack_require__(132554))
assign(fs, __webpack_require__(195352))

module.exports = fs


/***/ }),

/***/ 686009:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const jsonFile = __webpack_require__(407637)

jsonFile.outputJson = u(__webpack_require__(698850))
jsonFile.outputJsonSync = __webpack_require__(40077)
// aliases
jsonFile.outputJSON = jsonFile.outputJson
jsonFile.outputJSONSync = jsonFile.outputJsonSync
jsonFile.writeJSON = jsonFile.writeJson
jsonFile.writeJSONSync = jsonFile.writeJsonSync
jsonFile.readJSON = jsonFile.readJson
jsonFile.readJSONSync = jsonFile.readJsonSync

module.exports = jsonFile


/***/ }),

/***/ 407637:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const jsonFile = __webpack_require__(976627)

module.exports = {
  // jsonfile exports
  readJson: u(jsonFile.readFile),
  readJsonSync: jsonFile.readFileSync,
  writeJson: u(jsonFile.writeFile),
  writeJsonSync: jsonFile.writeFileSync
}


/***/ }),

/***/ 40077:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(282958)
const jsonFile = __webpack_require__(407637)

function outputJsonSync (file, data, options) {
  const dir = path.dirname(file)

  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  jsonFile.writeJsonSync(file, data, options)
}

module.exports = outputJsonSync


/***/ }),

/***/ 698850:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)
const mkdir = __webpack_require__(282958)
const pathExists = __webpack_require__(195352).pathExists
const jsonFile = __webpack_require__(407637)

function outputJson (file, data, options, callback) {
  if (typeof options === 'function') {
    callback = options
    options = {}
  }

  const dir = path.dirname(file)

  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return jsonFile.writeJson(file, data, options, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)
      jsonFile.writeJson(file, data, options, callback)
    })
  })
}

module.exports = outputJson


/***/ }),

/***/ 282958:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const u = __webpack_require__(238981)/* .fromCallback */ .E
const mkdirs = u(__webpack_require__(413194))
const mkdirsSync = __webpack_require__(335017)

module.exports = {
  mkdirs: mkdirs,
  mkdirsSync: mkdirsSync,
  // alias
  mkdirp: mkdirs,
  mkdirpSync: mkdirsSync,
  ensureDir: mkdirs,
  ensureDirSync: mkdirsSync
}


/***/ }),

/***/ 335017:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const invalidWin32Path = __webpack_require__(449602).invalidWin32Path

const o777 = parseInt('0777', 8)

function mkdirsSync (p, opts, made) {
  if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  let mode = opts.mode
  const xfs = opts.fs || fs

  if (process.platform === 'win32' && invalidWin32Path(p)) {
    const errInval = new Error(p + ' contains invalid WIN32 path characters.')
    errInval.code = 'EINVAL'
    throw errInval
  }

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  p = path.resolve(p)

  try {
    xfs.mkdirSync(p, mode)
    made = made || p
  } catch (err0) {
    switch (err0.code) {
      case 'ENOENT':
        if (path.dirname(p) === p) throw err0
        made = mkdirsSync(path.dirname(p), opts, made)
        mkdirsSync(p, opts, made)
        break

      // In the case of any other error, just see if there's a dir
      // there already.  If so, then hooray!  If not, then something
      // is borked.
      default:
        let stat
        try {
          stat = xfs.statSync(p)
        } catch (err1) {
          throw err0
        }
        if (!stat.isDirectory()) throw err0
        break
    }
  }

  return made
}

module.exports = mkdirsSync


/***/ }),

/***/ 413194:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const invalidWin32Path = __webpack_require__(449602).invalidWin32Path

const o777 = parseInt('0777', 8)

function mkdirs (p, opts, callback, made) {
  if (typeof opts === 'function') {
    callback = opts
    opts = {}
  } else if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  if (process.platform === 'win32' && invalidWin32Path(p)) {
    const errInval = new Error(p + ' contains invalid WIN32 path characters.')
    errInval.code = 'EINVAL'
    return callback(errInval)
  }

  let mode = opts.mode
  const xfs = opts.fs || fs

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  callback = callback || function () {}
  p = path.resolve(p)

  xfs.mkdir(p, mode, er => {
    if (!er) {
      made = made || p
      return callback(null, made)
    }
    switch (er.code) {
      case 'ENOENT':
        if (path.dirname(p) === p) return callback(er)
        mkdirs(path.dirname(p), opts, (er, made) => {
          if (er) callback(er, made)
          else mkdirs(p, opts, callback, made)
        })
        break

      // In the case of any other error, just see if there's a dir
      // there already.  If so, then hooray!  If not, then something
      // is borked.
      default:
        xfs.stat(p, (er2, stat) => {
          // if the stat fails, then that's super weird.
          // let the original error be the failure reason.
          if (er2 || !stat.isDirectory()) callback(er, made)
          else callback(null, made)
        })
        break
    }
  })
}

module.exports = mkdirs


/***/ }),

/***/ 449602:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)

// get drive on windows
function getRootPath (p) {
  p = path.normalize(path.resolve(p)).split(path.sep)
  if (p.length > 0) return p[0]
  return null
}

// http://stackoverflow.com/a/62888/10333 contains more accurate
// TODO: expand to include the rest
const INVALID_PATH_CHARS = /[<>:"|?*]/

function invalidWin32Path (p) {
  const rp = getRootPath(p)
  p = p.replace(rp, '')
  return INVALID_PATH_CHARS.test(p)
}

module.exports = {
  getRootPath,
  invalidWin32Path
}


/***/ }),

/***/ 89403:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const copySync = __webpack_require__(846192).copySync
const removeSync = __webpack_require__(482010).removeSync
const mkdirpSync = __webpack_require__(282958).mkdirsSync
const buffer = __webpack_require__(665130)

function moveSync (src, dest, options) {
  options = options || {}
  const overwrite = options.overwrite || options.clobber || false

  src = path.resolve(src)
  dest = path.resolve(dest)

  if (src === dest) return fs.accessSync(src)

  if (isSrcSubdir(src, dest)) throw new Error(`Cannot move '${src}' into itself '${dest}'.`)

  mkdirpSync(path.dirname(dest))
  tryRenameSync()

  function tryRenameSync () {
    if (overwrite) {
      try {
        return fs.renameSync(src, dest)
      } catch (err) {
        if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST' || err.code === 'EPERM') {
          removeSync(dest)
          options.overwrite = false // just overwriteed it, no need to do it again
          return moveSync(src, dest, options)
        }

        if (err.code !== 'EXDEV') throw err
        return moveSyncAcrossDevice(src, dest, overwrite)
      }
    } else {
      try {
        fs.linkSync(src, dest)
        return fs.unlinkSync(src)
      } catch (err) {
        if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') {
          return moveSyncAcrossDevice(src, dest, overwrite)
        }
        throw err
      }
    }
  }
}

function moveSyncAcrossDevice (src, dest, overwrite) {
  const stat = fs.statSync(src)

  if (stat.isDirectory()) {
    return moveDirSyncAcrossDevice(src, dest, overwrite)
  } else {
    return moveFileSyncAcrossDevice(src, dest, overwrite)
  }
}

function moveFileSyncAcrossDevice (src, dest, overwrite) {
  const BUF_LENGTH = 64 * 1024
  const _buff = buffer(BUF_LENGTH)

  const flags = overwrite ? 'w' : 'wx'

  const fdr = fs.openSync(src, 'r')
  const stat = fs.fstatSync(fdr)
  const fdw = fs.openSync(dest, flags, stat.mode)
  let bytesRead = 1
  let pos = 0

  while (bytesRead > 0) {
    bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  fs.closeSync(fdr)
  fs.closeSync(fdw)
  return fs.unlinkSync(src)
}

function moveDirSyncAcrossDevice (src, dest, overwrite) {
  const options = {
    overwrite: false
  }

  if (overwrite) {
    removeSync(dest)
    tryCopySync()
  } else {
    tryCopySync()
  }

  function tryCopySync () {
    copySync(src, dest, options)
    return removeSync(src)
  }
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename
function isSrcSubdir (src, dest) {
  try {
    return fs.statSync(src).isDirectory() &&
           src !== dest &&
           dest.indexOf(src) > -1 &&
           dest.split(path.dirname(src) + path.sep)[1].split(path.sep)[0] === path.basename(src)
  } catch (e) {
    return false
  }
}

module.exports = {
  moveSync
}


/***/ }),

/***/ 95536:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


// most of this code was written by Andrew Kelley
// licensed under the BSD license: see
// https://github.com/andrewrk/node-mv/blob/master/package.json

// this needs a cleanup

const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)
const ncp = __webpack_require__(456925)
const path = __webpack_require__(385622)
const remove = __webpack_require__(482010).remove
const mkdirp = __webpack_require__(282958).mkdirs

function move (src, dest, options, callback) {
  if (typeof options === 'function') {
    callback = options
    options = {}
  }

  const overwrite = options.overwrite || options.clobber || false

  isSrcSubdir(src, dest, (err, itIs) => {
    if (err) return callback(err)
    if (itIs) return callback(new Error(`Cannot move '${src}' to a subdirectory of itself, '${dest}'.`))
    mkdirp(path.dirname(dest), err => {
      if (err) return callback(err)
      doRename()
    })
  })

  function doRename () {
    if (path.resolve(src) === path.resolve(dest)) {
      fs.access(src, callback)
    } else if (overwrite) {
      fs.rename(src, dest, err => {
        if (!err) return callback()

        if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST') {
          remove(dest, err => {
            if (err) return callback(err)
            options.overwrite = false // just overwriteed it, no need to do it again
            move(src, dest, options, callback)
          })
          return
        }

        // weird Windows shit
        if (err.code === 'EPERM') {
          setTimeout(() => {
            remove(dest, err => {
              if (err) return callback(err)
              options.overwrite = false
              move(src, dest, options, callback)
            })
          }, 200)
          return
        }

        if (err.code !== 'EXDEV') return callback(err)
        moveAcrossDevice(src, dest, overwrite, callback)
      })
    } else {
      fs.link(src, dest, err => {
        if (err) {
          if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') {
            return moveAcrossDevice(src, dest, overwrite, callback)
          }
          return callback(err)
        }
        return fs.unlink(src, callback)
      })
    }
  }
}

function moveAcrossDevice (src, dest, overwrite, callback) {
  fs.stat(src, (err, stat) => {
    if (err) return callback(err)

    if (stat.isDirectory()) {
      moveDirAcrossDevice(src, dest, overwrite, callback)
    } else {
      moveFileAcrossDevice(src, dest, overwrite, callback)
    }
  })
}

function moveFileAcrossDevice (src, dest, overwrite, callback) {
  const flags = overwrite ? 'w' : 'wx'
  const ins = fs.createReadStream(src)
  const outs = fs.createWriteStream(dest, { flags })

  ins.on('error', err => {
    ins.destroy()
    outs.destroy()
    outs.removeListener('close', onClose)

    // may want to create a directory but `out` line above
    // creates an empty file for us: See #108
    // don't care about error here
    fs.unlink(dest, () => {
      // note: `err` here is from the input stream errror
      if (err.code === 'EISDIR' || err.code === 'EPERM') {
        moveDirAcrossDevice(src, dest, overwrite, callback)
      } else {
        callback(err)
      }
    })
  })

  outs.on('error', err => {
    ins.destroy()
    outs.destroy()
    outs.removeListener('close', onClose)
    callback(err)
  })

  outs.once('close', onClose)
  ins.pipe(outs)

  function onClose () {
    fs.unlink(src, callback)
  }
}

function moveDirAcrossDevice (src, dest, overwrite, callback) {
  const options = {
    overwrite: false
  }

  if (overwrite) {
    remove(dest, err => {
      if (err) return callback(err)
      startNcp()
    })
  } else {
    startNcp()
  }

  function startNcp () {
    ncp(src, dest, options, err => {
      if (err) return callback(err)
      remove(src, callback)
    })
  }
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename
function isSrcSubdir (src, dest, cb) {
  fs.stat(src, (err, st) => {
    if (err) return cb(err)
    if (st.isDirectory()) {
      const baseDir = dest.split(path.dirname(src) + path.sep)[1]
      if (baseDir) {
        const destBasename = baseDir.split(path.sep)[0]
        if (destBasename) return cb(null, src !== dest && dest.indexOf(src) > -1 && destBasename === path.basename(src))
        return cb(null, false)
      }
      return cb(null, false)
    }
    return cb(null, false)
  })
}

module.exports = {
  move: u(move)
}


/***/ }),

/***/ 132554:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(282958)
const pathExists = __webpack_require__(195352).pathExists

function outputFile (file, data, encoding, callback) {
  if (typeof encoding === 'function') {
    callback = encoding
    encoding = 'utf8'
  }

  const dir = path.dirname(file)
  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return fs.writeFile(file, data, encoding, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)

      fs.writeFile(file, data, encoding, callback)
    })
  })
}

function outputFileSync (file, data, encoding) {
  const dir = path.dirname(file)
  if (fs.existsSync(dir)) {
    return fs.writeFileSync.apply(fs, arguments)
  }
  mkdir.mkdirsSync(dir)
  fs.writeFileSync.apply(fs, arguments)
}

module.exports = {
  outputFile: u(outputFile),
  outputFileSync
}


/***/ }),

/***/ 195352:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const u = __webpack_require__(238981)/* .fromPromise */ .p
const fs = __webpack_require__(808338)

function pathExists (path) {
  return fs.access(path).then(() => true).catch(() => false)
}

module.exports = {
  pathExists: u(pathExists),
  pathExistsSync: fs.existsSync
}


/***/ }),

/***/ 482010:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const rimraf = __webpack_require__(96564)

module.exports = {
  remove: u(rimraf),
  removeSync: rimraf.sync
}


/***/ }),

/***/ 96564:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const assert = __webpack_require__(742357)

const isWindows = (process.platform === 'win32')

function defaults (options) {
  const methods = [
    'unlink',
    'chmod',
    'stat',
    'lstat',
    'rmdir',
    'readdir'
  ]
  methods.forEach(m => {
    options[m] = options[m] || fs[m]
    m = m + 'Sync'
    options[m] = options[m] || fs[m]
  })

  options.maxBusyTries = options.maxBusyTries || 3
}

function rimraf (p, options, cb) {
  let busyTries = 0

  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  assert(p, 'rimraf: missing path')
  assert.equal(typeof p, 'string', 'rimraf: path should be a string')
  assert.equal(typeof cb, 'function', 'rimraf: callback function required')
  assert(options, 'rimraf: invalid options argument provided')
  assert.equal(typeof options, 'object', 'rimraf: options should be object')

  defaults(options)

  rimraf_(p, options, function CB (er) {
    if (er) {
      if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
          busyTries < options.maxBusyTries) {
        busyTries++
        let time = busyTries * 100
        // try again, with the same exact callback as this one.
        return setTimeout(() => rimraf_(p, options, CB), time)
      }

      // already gone
      if (er.code === 'ENOENT') er = null
    }

    cb(er)
  })
}

// Two possible strategies.
// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong.  However, there
// are likely far more normal files in the world than directories.  This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow.  But until then, YAGNI.
function rimraf_ (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  // sunos lets the root user unlink directories, which is... weird.
  // so we have to lstat here and make sure it's not a dir.
  options.lstat(p, (er, st) => {
    if (er && er.code === 'ENOENT') {
      return cb(null)
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er && er.code === 'EPERM' && isWindows) {
      return fixWinEPERM(p, options, er, cb)
    }

    if (st && st.isDirectory()) {
      return rmdir(p, options, er, cb)
    }

    options.unlink(p, er => {
      if (er) {
        if (er.code === 'ENOENT') {
          return cb(null)
        }
        if (er.code === 'EPERM') {
          return (isWindows)
            ? fixWinEPERM(p, options, er, cb)
            : rmdir(p, options, er, cb)
        }
        if (er.code === 'EISDIR') {
          return rmdir(p, options, er, cb)
        }
      }
      return cb(er)
    })
  })
}

function fixWinEPERM (p, options, er, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')
  if (er) {
    assert(er instanceof Error)
  }

  options.chmod(p, 0o666, er2 => {
    if (er2) {
      cb(er2.code === 'ENOENT' ? null : er)
    } else {
      options.stat(p, (er3, stats) => {
        if (er3) {
          cb(er3.code === 'ENOENT' ? null : er)
        } else if (stats.isDirectory()) {
          rmdir(p, options, er, cb)
        } else {
          options.unlink(p, cb)
        }
      })
    }
  })
}

function fixWinEPERMSync (p, options, er) {
  let stats

  assert(p)
  assert(options)
  if (er) {
    assert(er instanceof Error)
  }

  try {
    options.chmodSync(p, 0o666)
  } catch (er2) {
    if (er2.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  try {
    stats = options.statSync(p)
  } catch (er3) {
    if (er3.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  if (stats.isDirectory()) {
    rmdirSync(p, options, er)
  } else {
    options.unlinkSync(p)
  }
}

function rmdir (p, options, originalEr, cb) {
  assert(p)
  assert(options)
  if (originalEr) {
    assert(originalEr instanceof Error)
  }
  assert(typeof cb === 'function')

  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
  // if we guessed wrong, and it's not a directory, then
  // raise the original error.
  options.rmdir(p, er => {
    if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
      rmkids(p, options, cb)
    } else if (er && er.code === 'ENOTDIR') {
      cb(originalEr)
    } else {
      cb(er)
    }
  })
}

function rmkids (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.readdir(p, (er, files) => {
    if (er) return cb(er)

    let n = files.length
    let errState

    if (n === 0) return options.rmdir(p, cb)

    files.forEach(f => {
      rimraf(path.join(p, f), options, er => {
        if (errState) {
          return
        }
        if (er) return cb(errState = er)
        if (--n === 0) {
          options.rmdir(p, cb)
        }
      })
    })
  })
}

// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
  let st

  options = options || {}
  defaults(options)

  assert(p, 'rimraf: missing path')
  assert.equal(typeof p, 'string', 'rimraf: path should be a string')
  assert(options, 'rimraf: missing options')
  assert.equal(typeof options, 'object', 'rimraf: options should be object')

  try {
    st = options.lstatSync(p)
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er.code === 'EPERM' && isWindows) {
      fixWinEPERMSync(p, options, er)
    }
  }

  try {
    // sunos lets the root user unlink directories, which is... weird.
    if (st && st.isDirectory()) {
      rmdirSync(p, options, null)
    } else {
      options.unlinkSync(p)
    }
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    } else if (er.code === 'EPERM') {
      return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
    } else if (er.code !== 'EISDIR') {
      throw er
    }
    rmdirSync(p, options, er)
  }
}

function rmdirSync (p, options, originalEr) {
  assert(p)
  assert(options)
  if (originalEr) {
    assert(originalEr instanceof Error)
  }

  try {
    options.rmdirSync(p)
  } catch (er) {
    if (er.code === 'ENOTDIR') {
      throw originalEr
    } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
      rmkidsSync(p, options)
    } else if (er.code !== 'ENOENT') {
      throw er
    }
  }
}

function rmkidsSync (p, options) {
  assert(p)
  assert(options)
  options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))

  // We only end up here once we got ENOTEMPTY at least once, and
  // at this point, we are guaranteed to have removed all the kids.
  // So, we know that it won't be ENOENT or ENOTDIR or anything else.
  // try really hard to delete stuff on windows, because it has a
  // PROFOUNDLY annoying habit of not closing handles promptly when
  // files are deleted, resulting in spurious ENOTEMPTY errors.
  const retries = isWindows ? 100 : 1
  let i = 0
  do {
    let threw = true
    try {
      const ret = options.rmdirSync(p, options)
      threw = false
      return ret
    } finally {
      if (++i < retries && threw) continue // eslint-disable-line
    }
  } while (true)
}

module.exports = rimraf
rimraf.sync = rimrafSync


/***/ }),

/***/ 785824:
/***/ ((module) => {

"use strict";


// simple mutable assign
function assign () {
  const args = [].slice.call(arguments).filter(i => i)
  const dest = args.shift()
  args.forEach(src => {
    Object.keys(src).forEach(key => {
      dest[key] = src[key]
    })
  })

  return dest
}

module.exports = assign


/***/ }),

/***/ 665130:
/***/ ((module) => {

/* eslint-disable node/no-deprecated-api */
module.exports = function (size) {
  if (typeof Buffer.allocUnsafe === 'function') {
    try {
      return Buffer.allocUnsafe(size)
    } catch (e) {
      return new Buffer(size)
    }
  }
  return new Buffer(size)
}


/***/ }),

/***/ 716714:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const os = __webpack_require__(712087)
const path = __webpack_require__(385622)

// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not
function hasMillisResSync () {
  let tmpfile = path.join('millis-test-sync' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  const d = new Date(1435410243862)
  fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141')
  const fd = fs.openSync(tmpfile, 'r+')
  fs.futimesSync(fd, d, d)
  fs.closeSync(fd)
  return fs.statSync(tmpfile).mtime > 1435410243000
}

function hasMillisRes (callback) {
  let tmpfile = path.join('millis-test' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  const d = new Date(1435410243862)
  fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', err => {
    if (err) return callback(err)
    fs.open(tmpfile, 'r+', (err, fd) => {
      if (err) return callback(err)
      fs.futimes(fd, d, d, err => {
        if (err) return callback(err)
        fs.close(fd, err => {
          if (err) return callback(err)
          fs.stat(tmpfile, (err, stats) => {
            if (err) return callback(err)
            callback(null, stats.mtime > 1435410243000)
          })
        })
      })
    })
  })
}

function timeRemoveMillis (timestamp) {
  if (typeof timestamp === 'number') {
    return Math.floor(timestamp / 1000) * 1000
  } else if (timestamp instanceof Date) {
    return new Date(Math.floor(timestamp.getTime() / 1000) * 1000)
  } else {
    throw new Error('fs-extra: timeRemoveMillis() unknown parameter type')
  }
}

function utimesMillis (path, atime, mtime, callback) {
  // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
  fs.open(path, 'r+', (err, fd) => {
    if (err) return callback(err)
    fs.futimes(fd, atime, mtime, futimesErr => {
      fs.close(fd, closeErr => {
        if (callback) callback(futimesErr || closeErr)
      })
    })
  })
}

module.exports = {
  hasMillisRes,
  hasMillisResSync,
  timeRemoveMillis,
  utimesMillis
}


/***/ }),

/***/ 37193:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const EventEmitter = __webpack_require__(128614);
const http = __webpack_require__(298605);
const https = __webpack_require__(957211);
const PassThrough = __webpack_require__(92413).PassThrough;
const urlLib = __webpack_require__(978835);
const querystring = __webpack_require__(571191);
const duplexer3 = __webpack_require__(408869);
const isStream = __webpack_require__(924970);
const getStream = __webpack_require__(590094);
const timedOut = __webpack_require__(631708);
const urlParseLax = __webpack_require__(539449);
const urlToOptions = __webpack_require__(884438);
const lowercaseKeys = __webpack_require__(825989);
const decompressResponse = __webpack_require__(610346);
const isRetryAllowed = __webpack_require__(829367);
const Buffer = __webpack_require__(289509).Buffer;
const isURL = __webpack_require__(643589);
const isPlainObj = __webpack_require__(733310);
const PCancelable = __webpack_require__(607777);
const pTimeout = __webpack_require__(368937);
const pkg = __webpack_require__(180372);

const getMethodRedirectCodes = new Set([300, 301, 302, 303, 304, 305, 307, 308]);
const allMethodRedirectCodes = new Set([300, 303, 307, 308]);

function requestAsEventEmitter(opts) {
	opts = opts || {};

	const ee = new EventEmitter();
	const requestUrl = opts.href || urlLib.resolve(urlLib.format(opts), opts.path);
	const redirects = [];
	let retryCount = 0;
	let redirectUrl;

	const get = opts => {
		if (opts.protocol !== 'http:' && opts.protocol !== 'https:') {
			ee.emit('error', new got.UnsupportedProtocolError(opts));
			return;
		}

		let fn = opts.protocol === 'https:' ? https : http;

		if (opts.useElectronNet && process.versions.electron) {
			const electron = __webpack_require__(Object(function webpackMissingModule() { var e = new Error("Cannot find module 'electron'"); e.code = 'MODULE_NOT_FOUND'; throw e; }()));
			fn = electron.net || electron.remote.net;
		}

		const req = fn.request(opts, res => {
			const statusCode = res.statusCode;

			res.url = redirectUrl || requestUrl;
			res.requestUrl = requestUrl;

			const followRedirect = opts.followRedirect && 'location' in res.headers;
			const redirectGet = followRedirect && getMethodRedirectCodes.has(statusCode);
			const redirectAll = followRedirect && allMethodRedirectCodes.has(statusCode);

			if (redirectAll || (redirectGet && (opts.method === 'GET' || opts.method === 'HEAD'))) {
				res.resume();

				if (statusCode === 303) {
					// Server responded with "see other", indicating that the resource exists at another location,
					// and the client should request it from that location via GET or HEAD.
					opts.method = 'GET';
				}

				if (redirects.length >= 10) {
					ee.emit('error', new got.MaxRedirectsError(statusCode, redirects, opts), null, res);
					return;
				}

				const bufferString = Buffer.from(res.headers.location, 'binary').toString();

				redirectUrl = urlLib.resolve(urlLib.format(opts), bufferString);

				redirects.push(redirectUrl);

				const redirectOpts = Object.assign({}, opts, urlLib.parse(redirectUrl));

				ee.emit('redirect', res, redirectOpts);

				get(redirectOpts);

				return;
			}

			setImmediate(() => {
				const response = opts.decompress === true &&
					typeof decompressResponse === 'function' &&
					req.method !== 'HEAD' ? decompressResponse(res) : res;

				if (!opts.decompress && ['gzip', 'deflate'].indexOf(res.headers['content-encoding']) !== -1) {
					opts.encoding = null;
				}

				response.redirectUrls = redirects;

				ee.emit('response', response);
			});
		});

		req.once('error', err => {
			const backoff = opts.retries(++retryCount, err);

			if (backoff) {
				setTimeout(get, backoff, opts);
				return;
			}

			ee.emit('error', new got.RequestError(err, opts));
		});

		if (opts.gotTimeout) {
			timedOut(req, opts.gotTimeout);
		}

		setImmediate(() => {
			ee.emit('request', req);
		});
	};

	setImmediate(() => {
		get(opts);
	});
	return ee;
}

function asPromise(opts) {
	const timeoutFn = requestPromise => opts.gotTimeout && opts.gotTimeout.request ?
		pTimeout(requestPromise, opts.gotTimeout.request, new got.RequestError({message: 'Request timed out', code: 'ETIMEDOUT'}, opts)) :
		requestPromise;

	return timeoutFn(new PCancelable((onCancel, resolve, reject) => {
		const ee = requestAsEventEmitter(opts);
		let cancelOnRequest = false;

		onCancel(() => {
			cancelOnRequest = true;
		});

		ee.on('request', req => {
			if (cancelOnRequest) {
				req.abort();
			}

			onCancel(() => {
				req.abort();
			});

			if (isStream(opts.body)) {
				opts.body.pipe(req);
				opts.body = undefined;
				return;
			}

			req.end(opts.body);
		});

		ee.on('response', res => {
			const stream = opts.encoding === null ? getStream.buffer(res) : getStream(res, opts);

			stream
				.catch(err => reject(new got.ReadError(err, opts)))
				.then(data => {
					const statusCode = res.statusCode;
					const limitStatusCode = opts.followRedirect ? 299 : 399;

					res.body = data;

					if (opts.json && res.body) {
						try {
							res.body = JSON.parse(res.body);
						} catch (e) {
							if (statusCode >= 200 && statusCode < 300) {
								throw new got.ParseError(e, statusCode, opts, data);
							}
						}
					}

					if (statusCode !== 304 && (statusCode < 200 || statusCode > limitStatusCode)) {
						throw new got.HTTPError(statusCode, res.headers, opts);
					}

					resolve(res);
				})
				.catch(err => {
					Object.defineProperty(err, 'response', {value: res});
					reject(err);
				});
		});

		ee.on('error', reject);
	}));
}

function asStream(opts) {
	const input = new PassThrough();
	const output = new PassThrough();
	const proxy = duplexer3(input, output);
	let timeout;

	if (opts.gotTimeout && opts.gotTimeout.request) {
		timeout = setTimeout(() => {
			proxy.emit('error', new got.RequestError({message: 'Request timed out', code: 'ETIMEDOUT'}, opts));
		}, opts.gotTimeout.request);
	}

	if (opts.json) {
		throw new Error('got can not be used as stream when options.json is used');
	}

	if (opts.body) {
		proxy.write = () => {
			throw new Error('got\'s stream is not writable when options.body is used');
		};
	}

	const ee = requestAsEventEmitter(opts);

	ee.on('request', req => {
		proxy.emit('request', req);

		if (isStream(opts.body)) {
			opts.body.pipe(req);
			return;
		}

		if (opts.body) {
			req.end(opts.body);
			return;
		}

		if (opts.method === 'POST' || opts.method === 'PUT' || opts.method === 'PATCH') {
			input.pipe(req);
			return;
		}

		req.end();
	});

	ee.on('response', res => {
		clearTimeout(timeout);

		const statusCode = res.statusCode;

		res.pipe(output);

		if (statusCode !== 304 && (statusCode < 200 || statusCode > 299)) {
			proxy.emit('error', new got.HTTPError(statusCode, res.headers, opts), null, res);
			return;
		}

		proxy.emit('response', res);
	});

	ee.on('redirect', proxy.emit.bind(proxy, 'redirect'));
	ee.on('error', proxy.emit.bind(proxy, 'error'));

	return proxy;
}

function normalizeArguments(url, opts) {
	if (typeof url !== 'string' && typeof url !== 'object') {
		throw new TypeError(`Parameter \`url\` must be a string or object, not ${typeof url}`);
	} else if (typeof url === 'string') {
		url = url.replace(/^unix:/, 'http://$&');
		url = urlParseLax(url);
	} else if (isURL.lenient(url)) {
		url = urlToOptions(url);
	}

	if (url.auth) {
		throw new Error('Basic authentication must be done with auth option');
	}

	opts = Object.assign(
		{
			path: '',
			retries: 2,
			decompress: true,
			useElectronNet: true
		},
		url,
		{
			protocol: url.protocol || 'http:' // Override both null/undefined with default protocol
		},
		opts
	);

	opts.headers = Object.assign({
		'user-agent': `${pkg.name}/${pkg.version} (https://github.com/sindresorhus/got)`,
		'accept-encoding': 'gzip,deflate'
	}, lowercaseKeys(opts.headers));

	const query = opts.query;

	if (query) {
		if (typeof query !== 'string') {
			opts.query = querystring.stringify(query);
		}

		opts.path = `${opts.path.split('?')[0]}?${opts.query}`;
		delete opts.query;
	}

	if (opts.json && opts.headers.accept === undefined) {
		opts.headers.accept = 'application/json';
	}

	const body = opts.body;
	if (body !== null && body !== undefined) {
		const headers = opts.headers;
		if (!isStream(body) && typeof body !== 'string' && !Buffer.isBuffer(body) && !(opts.form || opts.json)) {
			throw new TypeError('options.body must be a ReadableStream, string, Buffer or plain Object');
		}

		const canBodyBeStringified = isPlainObj(body) || Array.isArray(body);
		if ((opts.form || opts.json) && !canBodyBeStringified) {
			throw new TypeError('options.body must be a plain Object or Array when options.form or options.json is used');
		}

		if (isStream(body) && typeof body.getBoundary === 'function') {
			// Special case for https://github.com/form-data/form-data
			headers['content-type'] = headers['content-type'] || `multipart/form-data; boundary=${body.getBoundary()}`;
		} else if (opts.form && canBodyBeStringified) {
			headers['content-type'] = headers['content-type'] || 'application/x-www-form-urlencoded';
			opts.body = querystring.stringify(body);
		} else if (opts.json && canBodyBeStringified) {
			headers['content-type'] = headers['content-type'] || 'application/json';
			opts.body = JSON.stringify(body);
		}

		if (headers['content-length'] === undefined && headers['transfer-encoding'] === undefined && !isStream(body)) {
			const length = typeof opts.body === 'string' ? Buffer.byteLength(opts.body) : opts.body.length;
			headers['content-length'] = length;
		}

		opts.method = (opts.method || 'POST').toUpperCase();
	} else {
		opts.method = (opts.method || 'GET').toUpperCase();
	}

	if (opts.hostname === 'unix') {
		const matches = /(.+?):(.+)/.exec(opts.path);

		if (matches) {
			opts.socketPath = matches[1];
			opts.path = matches[2];
			opts.host = null;
		}
	}

	if (typeof opts.retries !== 'function') {
		const retries = opts.retries;

		opts.retries = (iter, err) => {
			if (iter > retries || !isRetryAllowed(err)) {
				return 0;
			}

			const noise = Math.random() * 100;

			return ((1 << iter) * 1000) + noise;
		};
	}

	if (opts.followRedirect === undefined) {
		opts.followRedirect = true;
	}

	if (opts.timeout) {
		if (typeof opts.timeout === 'number') {
			opts.gotTimeout = {request: opts.timeout};
		} else {
			opts.gotTimeout = opts.timeout;
		}
		delete opts.timeout;
	}

	return opts;
}

function got(url, opts) {
	try {
		return asPromise(normalizeArguments(url, opts));
	} catch (err) {
		return Promise.reject(err);
	}
}

got.stream = (url, opts) => asStream(normalizeArguments(url, opts));

const methods = [
	'get',
	'post',
	'put',
	'patch',
	'head',
	'delete'
];

for (const method of methods) {
	got[method] = (url, opts) => got(url, Object.assign({}, opts, {method}));
	got.stream[method] = (url, opts) => got.stream(url, Object.assign({}, opts, {method}));
}

class StdError extends Error {
	constructor(message, error, opts) {
		super(message);
		this.name = 'StdError';

		if (error.code !== undefined) {
			this.code = error.code;
		}

		Object.assign(this, {
			host: opts.host,
			hostname: opts.hostname,
			method: opts.method,
			path: opts.path,
			protocol: opts.protocol,
			url: opts.href
		});
	}
}

got.RequestError = class extends StdError {
	constructor(error, opts) {
		super(error.message, error, opts);
		this.name = 'RequestError';
	}
};

got.ReadError = class extends StdError {
	constructor(error, opts) {
		super(error.message, error, opts);
		this.name = 'ReadError';
	}
};

got.ParseError = class extends StdError {
	constructor(error, statusCode, opts, data) {
		super(`${error.message} in "${urlLib.format(opts)}": \n${data.slice(0, 77)}...`, error, opts);
		this.name = 'ParseError';
		this.statusCode = statusCode;
		this.statusMessage = http.STATUS_CODES[this.statusCode];
	}
};

got.HTTPError = class extends StdError {
	constructor(statusCode, headers, opts) {
		const statusMessage = http.STATUS_CODES[statusCode];
		super(`Response code ${statusCode} (${statusMessage})`, {}, opts);
		this.name = 'HTTPError';
		this.statusCode = statusCode;
		this.statusMessage = statusMessage;
		this.headers = headers;
	}
};

got.MaxRedirectsError = class extends StdError {
	constructor(statusCode, redirectUrls, opts) {
		super('Redirected 10 times. Aborting.', {}, opts);
		this.name = 'MaxRedirectsError';
		this.statusCode = statusCode;
		this.statusMessage = http.STATUS_CODES[this.statusCode];
		this.redirectUrls = redirectUrls;
	}
};

got.UnsupportedProtocolError = class extends StdError {
	constructor(opts) {
		super(`Unsupported protocol "${opts.protocol}"`, {}, opts);
		this.name = 'UnsupportedProtocolError';
	}
};

module.exports = got;


/***/ }),

/***/ 180372:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"name\":\"got\",\"version\":\"7.1.0\",\"description\":\"Simplified HTTP requests\",\"license\":\"MIT\",\"repository\":\"sindresorhus/got\",\"maintainers\":[{\"name\":\"Sindre Sorhus\",\"email\":\"sindresorhus@gmail.com\",\"url\":\"sindresorhus.com\"},{\"name\":\"Vsevolod Strukchinsky\",\"email\":\"floatdrop@gmail.com\",\"url\":\"github.com/floatdrop\"},{\"name\":\"Alexander Tesfamichael\",\"email\":\"alex.tesfamichael@gmail.com\",\"url\":\"alextes.me\"}],\"engines\":{\"node\":\">=4\"},\"scripts\":{\"test\":\"xo && nyc ava\",\"coveralls\":\"nyc report --reporter=text-lcov | coveralls\"},\"files\":[\"index.js\"],\"keywords\":[\"http\",\"https\",\"get\",\"got\",\"url\",\"uri\",\"request\",\"util\",\"utility\",\"simple\",\"curl\",\"wget\",\"fetch\",\"net\",\"network\",\"electron\"],\"dependencies\":{\"decompress-response\":\"^3.2.0\",\"duplexer3\":\"^0.1.4\",\"get-stream\":\"^3.0.0\",\"is-plain-obj\":\"^1.1.0\",\"is-retry-allowed\":\"^1.0.0\",\"is-stream\":\"^1.0.0\",\"isurl\":\"^1.0.0-alpha5\",\"lowercase-keys\":\"^1.0.0\",\"p-cancelable\":\"^0.3.0\",\"p-timeout\":\"^1.1.1\",\"safe-buffer\":\"^5.0.1\",\"timed-out\":\"^4.0.0\",\"url-parse-lax\":\"^1.0.0\",\"url-to-options\":\"^1.0.1\"},\"devDependencies\":{\"ava\":\"^0.20.0\",\"coveralls\":\"^2.11.4\",\"form-data\":\"^2.1.1\",\"get-port\":\"^3.0.0\",\"into-stream\":\"^3.0.0\",\"nyc\":\"^11.0.2\",\"pem\":\"^1.4.4\",\"pify\":\"^3.0.0\",\"tempfile\":\"^2.0.0\",\"tempy\":\"^0.1.0\",\"universal-url\":\"^1.0.0-alpha\",\"xo\":\"^0.18.0\"},\"ava\":{\"concurrency\":4},\"browser\":{\"decompress-response\":false}}");

/***/ }),

/***/ 976627:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var _fs
try {
  _fs = __webpack_require__(220077)
} catch (_) {
  _fs = __webpack_require__(935747)
}

function readFile (file, options, callback) {
  if (callback == null) {
    callback = options
    options = {}
  }

  if (typeof options === 'string') {
    options = {encoding: options}
  }

  options = options || {}
  var fs = options.fs || _fs

  var shouldThrow = true
  if ('throws' in options) {
    shouldThrow = options.throws
  }

  fs.readFile(file, options, function (err, data) {
    if (err) return callback(err)

    data = stripBom(data)

    var obj
    try {
      obj = JSON.parse(data, options ? options.reviver : null)
    } catch (err2) {
      if (shouldThrow) {
        err2.message = file + ': ' + err2.message
        return callback(err2)
      } else {
        return callback(null, null)
      }
    }

    callback(null, obj)
  })
}

function readFileSync (file, options) {
  options = options || {}
  if (typeof options === 'string') {
    options = {encoding: options}
  }

  var fs = options.fs || _fs

  var shouldThrow = true
  if ('throws' in options) {
    shouldThrow = options.throws
  }

  try {
    var content = fs.readFileSync(file, options)
    content = stripBom(content)
    return JSON.parse(content, options.reviver)
  } catch (err) {
    if (shouldThrow) {
      err.message = file + ': ' + err.message
      throw err
    } else {
      return null
    }
  }
}

function stringify (obj, options) {
  var spaces
  var EOL = '\n'
  if (typeof options === 'object' && options !== null) {
    if (options.spaces) {
      spaces = options.spaces
    }
    if (options.EOL) {
      EOL = options.EOL
    }
  }

  var str = JSON.stringify(obj, options ? options.replacer : null, spaces)

  return str.replace(/\n/g, EOL) + EOL
}

function writeFile (file, obj, options, callback) {
  if (callback == null) {
    callback = options
    options = {}
  }
  options = options || {}
  var fs = options.fs || _fs

  var str = ''
  try {
    str = stringify(obj, options)
  } catch (err) {
    // Need to return whether a callback was passed or not
    if (callback) callback(err, null)
    return
  }

  fs.writeFile(file, str, options, callback)
}

function writeFileSync (file, obj, options) {
  options = options || {}
  var fs = options.fs || _fs

  var str = stringify(obj, options)
  // not sure if fs.writeFileSync returns anything, but just in case
  return fs.writeFileSync(file, str, options)
}

function stripBom (content) {
  // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
  if (Buffer.isBuffer(content)) content = content.toString('utf8')
  content = content.replace(/^\uFEFF/, '')
  return content
}

var jsonfile = {
  readFile: readFile,
  readFileSync: readFileSync,
  writeFile: writeFile,
  writeFileSync: writeFileSync
}

module.exports = jsonfile


/***/ }),

/***/ 539449:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

var url = __webpack_require__(978835);
var prependHttp = __webpack_require__(967237);

module.exports = function (x) {
	var withProtocol = prependHttp(x);
	var parsed = url.parse(withProtocol);

	if (withProtocol !== x) {
		parsed.protocol = null;
	}

	return parsed;
};


/***/ }),

/***/ 583757:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var v1 = __webpack_require__(615043);
var v4 = __webpack_require__(425480);

var uuid = v4;
uuid.v1 = v1;
uuid.v4 = v4;

module.exports = uuid;


/***/ }),

/***/ 958212:
/***/ ((module) => {

/**
 * Convert array of 16 byte values to UUID string format of the form:
 * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
 */
var byteToHex = [];
for (var i = 0; i < 256; ++i) {
  byteToHex[i] = (i + 0x100).toString(16).substr(1);
}

function bytesToUuid(buf, offset) {
  var i = offset || 0;
  var bth = byteToHex;
  // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4
  return ([bth[buf[i++]], bth[buf[i++]], 
	bth[buf[i++]], bth[buf[i++]], '-',
	bth[buf[i++]], bth[buf[i++]], '-',
	bth[buf[i++]], bth[buf[i++]], '-',
	bth[buf[i++]], bth[buf[i++]], '-',
	bth[buf[i++]], bth[buf[i++]],
	bth[buf[i++]], bth[buf[i++]],
	bth[buf[i++]], bth[buf[i++]]]).join('');
}

module.exports = bytesToUuid;


/***/ }),

/***/ 324015:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// Unique ID creation requires a high quality random # generator.  In node.js
// this is pretty straight-forward - we use the crypto API.

var crypto = __webpack_require__(676417);

module.exports = function nodeRNG() {
  return crypto.randomBytes(16);
};


/***/ }),

/***/ 615043:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var rng = __webpack_require__(324015);
var bytesToUuid = __webpack_require__(958212);

// **`v1()` - Generate time-based UUID**
//
// Inspired by https://github.com/LiosK/UUID.js
// and http://docs.python.org/library/uuid.html

var _nodeId;
var _clockseq;

// Previous uuid creation time
var _lastMSecs = 0;
var _lastNSecs = 0;

// See https://github.com/broofa/node-uuid for API details
function v1(options, buf, offset) {
  var i = buf && offset || 0;
  var b = buf || [];

  options = options || {};
  var node = options.node || _nodeId;
  var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq;

  // node and clockseq need to be initialized to random values if they're not
  // specified.  We do this lazily to minimize issues related to insufficient
  // system entropy.  See #189
  if (node == null || clockseq == null) {
    var seedBytes = rng();
    if (node == null) {
      // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)
      node = _nodeId = [
        seedBytes[0] | 0x01,
        seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]
      ];
    }
    if (clockseq == null) {
      // Per 4.2.2, randomize (14 bit) clockseq
      clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;
    }
  }

  // UUID timestamps are 100 nano-second units since the Gregorian epoch,
  // (1582-10-15 00:00).  JSNumbers aren't precise enough for this, so
  // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'
  // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.
  var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime();

  // Per 4.2.1.2, use count of uuid's generated during the current clock
  // cycle to simulate higher resolution clock
  var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1;

  // Time since last uuid creation (in msecs)
  var dt = (msecs - _lastMSecs) + (nsecs - _lastNSecs)/10000;

  // Per 4.2.1.2, Bump clockseq on clock regression
  if (dt < 0 && options.clockseq === undefined) {
    clockseq = clockseq + 1 & 0x3fff;
  }

  // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new
  // time interval
  if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {
    nsecs = 0;
  }

  // Per 4.2.1.2 Throw error if too many uuids are requested
  if (nsecs >= 10000) {
    throw new Error('uuid.v1(): Can\'t create more than 10M uuids/sec');
  }

  _lastMSecs = msecs;
  _lastNSecs = nsecs;
  _clockseq = clockseq;

  // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
  msecs += 12219292800000;

  // `time_low`
  var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
  b[i++] = tl >>> 24 & 0xff;
  b[i++] = tl >>> 16 & 0xff;
  b[i++] = tl >>> 8 & 0xff;
  b[i++] = tl & 0xff;

  // `time_mid`
  var tmh = (msecs / 0x100000000 * 10000) & 0xfffffff;
  b[i++] = tmh >>> 8 & 0xff;
  b[i++] = tmh & 0xff;

  // `time_high_and_version`
  b[i++] = tmh >>> 24 & 0xf | 0x10; // include version
  b[i++] = tmh >>> 16 & 0xff;

  // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
  b[i++] = clockseq >>> 8 | 0x80;

  // `clock_seq_low`
  b[i++] = clockseq & 0xff;

  // `node`
  for (var n = 0; n < 6; ++n) {
    b[i + n] = node[n];
  }

  return buf ? buf : bytesToUuid(b);
}

module.exports = v1;


/***/ }),

/***/ 425480:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var rng = __webpack_require__(324015);
var bytesToUuid = __webpack_require__(958212);

function v4(options, buf, offset) {
  var i = buf && offset || 0;

  if (typeof(options) == 'string') {
    buf = options === 'binary' ? new Array(16) : null;
    options = null;
  }
  options = options || {};

  var rnds = options.random || (options.rng || rng)();

  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
  rnds[6] = (rnds[6] & 0x0f) | 0x40;
  rnds[8] = (rnds[8] & 0x3f) | 0x80;

  // Copy bytes to buffer, if provided
  if (buf) {
    for (var ii = 0; ii < 16; ++ii) {
      buf[i + ii] = rnds[ii];
    }
  }

  return buf || bytesToUuid(rnds);
}

module.exports = v4;


/***/ }),

/***/ 684926:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var swarm = __webpack_require__(248006);


var Bzz = function Bzz(provider) {

    this.givenProvider = Bzz.givenProvider;

    if (provider && provider._requestManager) {
        provider = provider.currentProvider;
    }

    // only allow file picker when in browser
    if(typeof document !== 'undefined') {
        this.pick = swarm.pick;
    }

    this.setProvider(provider);
};

// set default ethereum provider
/* jshint ignore:start */
Bzz.givenProvider = null;
if(typeof ethereumProvider !== 'undefined' && ethereumProvider.bzz) {
    Bzz.givenProvider = ethereumProvider.bzz;
}
/* jshint ignore:end */

Bzz.prototype.setProvider = function(provider) {
    // is ethereum provider
    if(_.isObject(provider) && _.isString(provider.bzz)) {
        provider = provider.bzz;
    // is no string, set default
    }
    // else if(!_.isString(provider)) {
    //      provider = 'http://swarm-gateways.net'; // default to gateway
    // }


    if(_.isString(provider)) {
        this.currentProvider = provider;
    } else {
        this.currentProvider = null;

        var noProviderError = new Error('No provider set, please set one using bzz.setProvider().');

        this.download = this.upload = this.isAvailable = function(){
            throw noProviderError;
        };

        return false;
    }

    // add functions
    this.download = swarm.at(provider).download;
    this.upload = swarm.at(provider).upload;
    this.isAvailable = swarm.at(provider).isAvailable;

    return true;
};


module.exports = Bzz;



/***/ }),

/***/ 502304:
/***/ ((module) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file errors.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @author Marek Kotewicz <marek@parity.io>
 * @date 2017
 */



module.exports = {
    ErrorResponse: function (result) {
        var message = !!result && !!result.error && !!result.error.message ? result.error.message : JSON.stringify(result);
        return new Error('Returned error: ' + message);
    },
    InvalidNumberOfParams: function (got, expected, method) {
        return new Error('Invalid number of parameters for "'+ method +'". Got '+ got +' expected '+ expected +'!');
    },
    InvalidConnection: function (host){
        return new Error('CONNECTION ERROR: Couldn\'t connect to node '+ host +'.');
    },
    InvalidProvider: function () {
        return new Error('Provider not set or invalid');
    },
    InvalidResponse: function (result){
        var message = !!result && !!result.error && !!result.error.message ? result.error.message : 'Invalid JSON RPC response: ' + JSON.stringify(result);
        return new Error(message);
    },
    ConnectionTimeout: function (ms){
        return new Error('CONNECTION TIMEOUT: timeout of ' + ms + ' ms achived');
    }
};


/***/ }),

/***/ 671469:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file formatters.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @author Marek Kotewicz <marek@parity.io>
 * @date 2017
 */




var _ = __webpack_require__(513469);
var utils = __webpack_require__(716915);
var Iban = __webpack_require__(808804);

/**
 * Should the format output to a big number
 *
 * @method outputBigNumberFormatter
 * @param {String|Number|BigNumber} number
 * @returns {BigNumber} object
 */
var outputBigNumberFormatter = function (number) {
    return utils.toBN(number).toString(10);
};

var isPredefinedBlockNumber = function (blockNumber) {
    return blockNumber === 'latest' || blockNumber === 'pending' || blockNumber === 'earliest';
};

var inputDefaultBlockNumberFormatter = function (blockNumber) {
    if (this && (blockNumber === undefined || blockNumber === null)) {
        return this.defaultBlock;
    }
    if (blockNumber === 'genesis' || blockNumber === 'earliest') {
        return '0x0';
    }
    return inputBlockNumberFormatter(blockNumber);
};

var inputBlockNumberFormatter = function (blockNumber) {
    if (blockNumber === undefined) {
        return undefined;
    } else if (isPredefinedBlockNumber(blockNumber)) {
        return blockNumber;
    }
    return (utils.isHexStrict(blockNumber)) ? ((_.isString(blockNumber)) ? blockNumber.toLowerCase() : blockNumber) : utils.numberToHex(blockNumber);
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method _txInputFormatter
 * @param {Object} transaction options
 * @returns object
 */
var _txInputFormatter = function (options){

    if (options.to) { // it might be contract creation
        options.to = inputAddressFormatter(options.to);
    }

    if (options.data && options.input) {
        throw new Error('You can\'t have "data" and "input" as properties of transactions at the same time, please use either "data" or "input" instead.');
    }

    if (!options.data && options.input) {
        options.data = options.input;
        delete options.input;
    }

    if(options.data && !utils.isHex(options.data)) {
        throw new Error('The data field must be HEX encoded data.');
    }

    // allow both
    if (options.gas || options.gasLimit) {
        options.gas = options.gas || options.gasLimit;
    }

    ['gasPrice', 'gas', 'value', 'nonce'].filter(function (key) {
        return options[key] !== undefined;
    }).forEach(function(key){
        options[key] = utils.numberToHex(options[key]);
    });

    return options;
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputCallFormatter
 * @param {Object} transaction options
 * @returns object
*/
var inputCallFormatter = function (options){

    options = _txInputFormatter(options);

    var from = options.from || (this ? this.defaultAccount : null);

    if (from) {
        options.from = inputAddressFormatter(from);
    }


    return options;
};

/**
 * Formats the input of a transaction and converts all values to HEX
 *
 * @method inputTransactionFormatter
 * @param {Object} options
 * @returns object
*/
var inputTransactionFormatter = function (options) {

    options = _txInputFormatter(options);

    // check from, only if not number, or object
    if (!_.isNumber(options.from) && !_.isObject(options.from)) {
        options.from = options.from || (this ? this.defaultAccount : null);

        if (!options.from && !_.isNumber(options.from)) {
            throw new Error('The send transactions "from" field must be defined!');
        }

        options.from = inputAddressFormatter(options.from);
    }

    return options;
};

/**
 * Hex encodes the data passed to eth_sign and personal_sign
 *
 * @method inputSignFormatter
 * @param {String} data
 * @returns {String}
 */
var inputSignFormatter = function (data) {
    return (utils.isHexStrict(data)) ? data : utils.utf8ToHex(data);
};

/**
 * Formats the output of a transaction to its proper values
 *
 * @method outputTransactionFormatter
 * @param {Object} tx
 * @returns {Object}
*/
var outputTransactionFormatter = function (tx){
    if(tx.blockNumber !== null)
        tx.blockNumber = utils.hexToNumber(tx.blockNumber);
    if(tx.transactionIndex !== null)
        tx.transactionIndex = utils.hexToNumber(tx.transactionIndex);
    tx.nonce = utils.hexToNumber(tx.nonce);
    tx.gas = utils.hexToNumber(tx.gas);
    tx.gasPrice = outputBigNumberFormatter(tx.gasPrice);
    tx.value = outputBigNumberFormatter(tx.value);

    if(tx.to && utils.isAddress(tx.to)) { // tx.to could be `0x0` or `null` while contract creation
        tx.to = utils.toChecksumAddress(tx.to);
    } else {
        tx.to = null; // set to `null` if invalid address
    }

    if(tx.from) {
        tx.from = utils.toChecksumAddress(tx.from);
    }

    return tx;
};

/**
 * Formats the output of a transaction receipt to its proper values
 *
 * @method outputTransactionReceiptFormatter
 * @param {Object} receipt
 * @returns {Object}
*/
var outputTransactionReceiptFormatter = function (receipt){
    if(typeof receipt !== 'object') {
        throw new Error('Received receipt is invalid: '+ receipt);
    }

    if(receipt.blockNumber !== null)
        receipt.blockNumber = utils.hexToNumber(receipt.blockNumber);
    if(receipt.transactionIndex !== null)
        receipt.transactionIndex = utils.hexToNumber(receipt.transactionIndex);
    receipt.cumulativeGasUsed = utils.hexToNumber(receipt.cumulativeGasUsed);
    receipt.gasUsed = utils.hexToNumber(receipt.gasUsed);

    if(_.isArray(receipt.logs)) {
        receipt.logs = receipt.logs.map(outputLogFormatter);
    }

    if(receipt.contractAddress) {
        receipt.contractAddress = utils.toChecksumAddress(receipt.contractAddress);
    }

    if(typeof receipt.status !== 'undefined') {
        receipt.status = Boolean(parseInt(receipt.status));
    }

    return receipt;
};

/**
 * Formats the output of a block to its proper values
 *
 * @method outputBlockFormatter
 * @param {Object} block
 * @returns {Object}
*/
var outputBlockFormatter = function(block) {

    // transform to number
    block.gasLimit = utils.hexToNumber(block.gasLimit);
    block.gasUsed = utils.hexToNumber(block.gasUsed);
    block.size = utils.hexToNumber(block.size);
    block.timestamp = utils.hexToNumber(block.timestamp);
    if (block.number !== null)
        block.number = utils.hexToNumber(block.number);

    if(block.difficulty)
        block.difficulty = outputBigNumberFormatter(block.difficulty);
    if(block.totalDifficulty)
        block.totalDifficulty = outputBigNumberFormatter(block.totalDifficulty);

    if (_.isArray(block.transactions)) {
        block.transactions.forEach(function(item){
            if(!_.isString(item))
                return outputTransactionFormatter(item);
        });
    }

    if (block.miner)
        block.miner = utils.toChecksumAddress(block.miner);

    return block;
};

/**
 * Formats the input of a log
 *
 * @method inputLogFormatter
 * @param {Object} log object
 * @returns {Object} log
*/
var inputLogFormatter = function(options) {
    var toTopic = function(value){

        if(value === null || typeof value === 'undefined')
            return null;

        value = String(value);

        if(value.indexOf('0x') === 0)
            return value;
        else
            return utils.fromUtf8(value);
    };

    if (options.fromBlock)
        options.fromBlock = inputBlockNumberFormatter(options.fromBlock);

    if (options.toBlock)
        options.toBlock = inputBlockNumberFormatter(options.toBlock);


    // make sure topics, get converted to hex
    options.topics = options.topics || [];
    options.topics = options.topics.map(function(topic){
        return (_.isArray(topic)) ? topic.map(toTopic) : toTopic(topic);
    });

    toTopic = null;

    if (options.address) {
        options.address = (_.isArray(options.address)) ? options.address.map(function (addr) {
            return inputAddressFormatter(addr);
        }) : inputAddressFormatter(options.address);
    }

    return options;
};

/**
 * Formats the output of a log
 *
 * @method outputLogFormatter
 * @param {Object} log object
 * @returns {Object} log
*/
var outputLogFormatter = function(log) {

    // generate a custom log id
    if(typeof log.blockHash === 'string' &&
       typeof log.transactionHash === 'string' &&
       typeof log.logIndex === 'string') {
        var shaId = utils.sha3(log.blockHash.replace('0x','') + log.transactionHash.replace('0x','') + log.logIndex.replace('0x',''));
        log.id = 'log_'+ shaId.replace('0x','').substr(0,8);
    } else if(!log.id) {
        log.id = null;
    }

    if (log.blockNumber !== null)
        log.blockNumber = utils.hexToNumber(log.blockNumber);
    if (log.transactionIndex !== null)
        log.transactionIndex = utils.hexToNumber(log.transactionIndex);
    if (log.logIndex !== null)
        log.logIndex = utils.hexToNumber(log.logIndex);

    if (log.address) {
        log.address = utils.toChecksumAddress(log.address);
    }

    return log;
};

/**
 * Formats the input of a whisper post and converts all values to HEX
 *
 * @method inputPostFormatter
 * @param {Object} transaction object
 * @returns {Object}
*/
var inputPostFormatter = function(post) {

    // post.payload = utils.toHex(post.payload);

    if (post.ttl)
        post.ttl = utils.numberToHex(post.ttl);
    if (post.workToProve)
        post.workToProve = utils.numberToHex(post.workToProve);
    if (post.priority)
        post.priority = utils.numberToHex(post.priority);

    // fallback
    if (!_.isArray(post.topics)) {
        post.topics = post.topics ? [post.topics] : [];
    }

    // format the following options
    post.topics = post.topics.map(function(topic){
        // convert only if not hex
        return (topic.indexOf('0x') === 0) ? topic : utils.fromUtf8(topic);
    });

    return post;
};

/**
 * Formats the output of a received post message
 *
 * @method outputPostFormatter
 * @param {Object}
 * @returns {Object}
 */
var outputPostFormatter = function(post){

    post.expiry = utils.hexToNumber(post.expiry);
    post.sent = utils.hexToNumber(post.sent);
    post.ttl = utils.hexToNumber(post.ttl);
    post.workProved = utils.hexToNumber(post.workProved);
    // post.payloadRaw = post.payload;
    // post.payload = utils.hexToAscii(post.payload);

    // if (utils.isJson(post.payload)) {
    //     post.payload = JSON.parse(post.payload);
    // }

    // format the following options
    if (!post.topics) {
        post.topics = [];
    }
    post.topics = post.topics.map(function(topic){
        return utils.toUtf8(topic);
    });

    return post;
};

var inputAddressFormatter = function (address) {
    var iban = new Iban(address);
    if (iban.isValid() && iban.isDirect()) {
        return iban.toAddress().toLowerCase();
    } else if (utils.isAddress(address)) {
        return '0x' + address.toLowerCase().replace('0x','');
    }
    throw new Error('Provided address "'+ address +'" is invalid, the capitalization checksum test failed, or its an indrect IBAN address which can\'t be converted.');
};


var outputSyncingFormatter = function(result) {

    result.startingBlock = utils.hexToNumber(result.startingBlock);
    result.currentBlock = utils.hexToNumber(result.currentBlock);
    result.highestBlock = utils.hexToNumber(result.highestBlock);
    if (result.knownStates) {
        result.knownStates = utils.hexToNumber(result.knownStates);
        result.pulledStates = utils.hexToNumber(result.pulledStates);
    }

    return result;
};

module.exports = {
    inputDefaultBlockNumberFormatter: inputDefaultBlockNumberFormatter,
    inputBlockNumberFormatter: inputBlockNumberFormatter,
    inputCallFormatter: inputCallFormatter,
    inputTransactionFormatter: inputTransactionFormatter,
    inputAddressFormatter: inputAddressFormatter,
    inputPostFormatter: inputPostFormatter,
    inputLogFormatter: inputLogFormatter,
    inputSignFormatter: inputSignFormatter,
    outputBigNumberFormatter: outputBigNumberFormatter,
    outputTransactionFormatter: outputTransactionFormatter,
    outputTransactionReceiptFormatter: outputTransactionReceiptFormatter,
    outputBlockFormatter: outputBlockFormatter,
    outputLogFormatter: outputLogFormatter,
    outputPostFormatter: outputPostFormatter,
    outputSyncingFormatter: outputSyncingFormatter
};



/***/ }),

/***/ 927354:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var errors = __webpack_require__(502304);
var formatters = __webpack_require__(671469);

module.exports = {
    errors: errors,
    formatters: formatters
};



/***/ }),

/***/ 937233:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2016
 */



var EventEmitter = __webpack_require__(872188);
var Promise = __webpack_require__(315845);

/**
 * This function generates a defer promise and adds eventEmitter functionality to it
 *
 * @method eventifiedPromise
 */
var PromiEvent = function PromiEvent(justPromise) {
    var resolve, reject,
        eventEmitter = new Promise(function() {
            resolve = arguments[0];
            reject = arguments[1];
        });

    if(justPromise) {
        return {
            resolve: resolve,
            reject: reject,
            eventEmitter: eventEmitter
        };
    }

    // get eventEmitter
    var emitter = new EventEmitter();

    // add eventEmitter to the promise
    eventEmitter._events = emitter._events;
    eventEmitter.emit = emitter.emit;
    eventEmitter.on = emitter.on;
    eventEmitter.once = emitter.once;
    eventEmitter.off = emitter.off;
    eventEmitter.listeners = emitter.listeners;
    eventEmitter.addListener = emitter.addListener;
    eventEmitter.removeListener = emitter.removeListener;
    eventEmitter.removeAllListeners = emitter.removeAllListeners;

    return {
        resolve: resolve,
        reject: reject,
        eventEmitter: eventEmitter
    };
};

PromiEvent.resolve = function(value) {
    var promise = PromiEvent(true);
    promise.resolve(value);
    return promise.eventEmitter;
};

module.exports = PromiEvent;


/***/ }),

/***/ 823150:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file index.js
 * @author Marek Kotewicz <marek@parity.io>
 * @author Fabian Vogelsteller <fabian@frozeman.de>
 * @date 2018
 */

var _ = __webpack_require__(513469);
var utils = __webpack_require__(716915);

var EthersAbi = __webpack_require__(789002).AbiCoder;
var ethersAbiCoder = new EthersAbi(function (type, value) {
    if (type.match(/^u?int/) && !_.isArray(value) && (!_.isObject(value) || value.constructor.name !== 'BN')) {
        return value.toString();
    }
    return value;
});

// result method
function Result() {
}

/**
 * ABICoder prototype should be used to encode/decode solidity params of any type
 */
var ABICoder = function () {
};

/**
 * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including  types.
 *
 * @method encodeFunctionSignature
 * @param {String|Object} functionName
 * @return {String} encoded function name
 */
ABICoder.prototype.encodeFunctionSignature = function (functionName) {
    if (_.isObject(functionName)) {
        functionName = utils._jsonInterfaceMethodToString(functionName);
    }

    return utils.sha3(functionName).slice(0, 10);
};

/**
 * Encodes the function name to its ABI representation, which are the first 4 bytes of the sha3 of the function name including  types.
 *
 * @method encodeEventSignature
 * @param {String|Object} functionName
 * @return {String} encoded function name
 */
ABICoder.prototype.encodeEventSignature = function (functionName) {
    if (_.isObject(functionName)) {
        functionName = utils._jsonInterfaceMethodToString(functionName);
    }

    return utils.sha3(functionName);
};

/**
 * Should be used to encode plain param
 *
 * @method encodeParameter
 * @param {String} type
 * @param {Object} param
 * @return {String} encoded plain param
 */
ABICoder.prototype.encodeParameter = function (type, param) {
    return this.encodeParameters([type], [param]);
};

/**
 * Should be used to encode list of params
 *
 * @method encodeParameters
 * @param {Array} types
 * @param {Array} params
 * @return {String} encoded list of params
 */
ABICoder.prototype.encodeParameters = function (types, params) {
    return ethersAbiCoder.encode(this.mapTypes(types), params);
};

/**
 * Map types if simplified format is used
 *
 * @method mapTypes
 * @param {Array} types
 * @return {Array}
 */
ABICoder.prototype.mapTypes = function (types) {
    var self = this;
    var mappedTypes = [];
    types.forEach(function (type) {
        if (self.isSimplifiedStructFormat(type)) {
            var structName = Object.keys(type)[0];
            mappedTypes.push(
                Object.assign(
                    self.mapStructNameAndType(structName),
                    {
                        components: self.mapStructToCoderFormat(type[structName])
                    }
                )
            );

            return;
        }

        mappedTypes.push(type);
    });

    return mappedTypes;
};

/**
 * Check if type is simplified struct format
 *
 * @method isSimplifiedStructFormat
 * @param {string | Object} type
 * @returns {boolean}
 */
ABICoder.prototype.isSimplifiedStructFormat = function (type) {
    return typeof type === 'object' && typeof type.components === 'undefined' && typeof type.name === 'undefined';
};

/**
 * Maps the correct tuple type and name when the simplified format in encode/decodeParameter is used
 *
 * @method mapStructNameAndType
 * @param {string} structName
 * @return {{type: string, name: *}}
 */
ABICoder.prototype.mapStructNameAndType = function (structName) {
    var type = 'tuple';

    if (structName.indexOf('[]') > -1) {
        type = 'tuple[]';
        structName = structName.slice(0, -2);
    }

    return {type: type, name: structName};
};

/**
 * Maps the simplified format in to the expected format of the ABICoder
 *
 * @method mapStructToCoderFormat
 * @param {Object} struct
 * @return {Array}
 */
ABICoder.prototype.mapStructToCoderFormat = function (struct) {
    var self = this;
    var components = [];
    Object.keys(struct).forEach(function (key) {
        if (typeof struct[key] === 'object') {
            components.push(
                Object.assign(
                    self.mapStructNameAndType(key),
                    {
                        components: self.mapStructToCoderFormat(struct[key])
                    }
                )
            );

            return;
        }

        components.push({
            name: key,
            type: struct[key]
        });
    });

    return components;
};

/**
 * Encodes a function call from its json interface and parameters.
 *
 * @method encodeFunctionCall
 * @param {Array} jsonInterface
 * @param {Array} params
 * @return {String} The encoded ABI for this function call
 */
ABICoder.prototype.encodeFunctionCall = function (jsonInterface, params) {
    return this.encodeFunctionSignature(jsonInterface) + this.encodeParameters(jsonInterface.inputs, params).replace('0x', '');
};

/**
 * Should be used to decode bytes to plain param
 *
 * @method decodeParameter
 * @param {String} type
 * @param {String} bytes
 * @return {Object} plain param
 */
ABICoder.prototype.decodeParameter = function (type, bytes) {
    return this.decodeParameters([type], bytes)[0];
};

/**
 * Should be used to decode list of params
 *
 * @method decodeParameter
 * @param {Array} outputs
 * @param {String} bytes
 * @return {Array} array of plain params
 */
ABICoder.prototype.decodeParameters = function (outputs, bytes) {
    if (outputs.length > 0 && (!bytes || bytes === '0x' || bytes === '0X')) {
        throw new Error('Returned values aren\'t valid, did it run Out of Gas?');
    }

    var res = ethersAbiCoder.decode(this.mapTypes(outputs), '0x' + bytes.replace(/0x/i, ''));
    var returnValue = new Result();
    returnValue.__length__ = 0;

    outputs.forEach(function (output, i) {
        var decodedValue = res[returnValue.__length__];
        decodedValue = (decodedValue === '0x') ? null : decodedValue;

        returnValue[i] = decodedValue;

        if (_.isObject(output) && output.name) {
            returnValue[output.name] = decodedValue;
        }

        returnValue.__length__++;
    });

    return returnValue;
};

/**
 * Decodes events non- and indexed parameters.
 *
 * @method decodeLog
 * @param {Object} inputs
 * @param {String} data
 * @param {Array} topics
 * @return {Array} array of plain params
 */
ABICoder.prototype.decodeLog = function (inputs, data, topics) {
    var _this = this;
    topics = _.isArray(topics) ? topics : [topics];

    data = data || '';

    var notIndexedInputs = [];
    var indexedParams = [];
    var topicCount = 0;

    // TODO check for anonymous logs?

    inputs.forEach(function (input, i) {
        if (input.indexed) {
            indexedParams[i] = (['bool', 'int', 'uint', 'address', 'fixed', 'ufixed'].find(function (staticType) {
                return input.type.indexOf(staticType) !== -1;
            })) ? _this.decodeParameter(input.type, topics[topicCount]) : topics[topicCount];
            topicCount++;
        } else {
            notIndexedInputs[i] = input;
        }
    });


    var nonIndexedData = data;
    var notIndexedParams = (nonIndexedData) ? this.decodeParameters(notIndexedInputs, nonIndexedData) : [];

    var returnValue = new Result();
    returnValue.__length__ = 0;


    inputs.forEach(function (res, i) {
        returnValue[i] = (res.type === 'string') ? '' : null;

        if (typeof notIndexedParams[i] !== 'undefined') {
            returnValue[i] = notIndexedParams[i];
        }
        if (typeof indexedParams[i] !== 'undefined') {
            returnValue[i] = indexedParams[i];
        }

        if (res.name) {
            returnValue[res.name] = returnValue[i];
        }

        returnValue.__length__++;
    });

    return returnValue;
};

var coder = new ABICoder();

module.exports = coder;


/***/ }),

/***/ 154469:
/***/ ((module, exports) => {

exports = module.exports = SemVer

var debug
/* istanbul ignore next */
if (typeof process === 'object' &&
    process.env &&
    process.env.NODE_DEBUG &&
    /\bsemver\b/i.test(process.env.NODE_DEBUG)) {
  debug = function () {
    var args = Array.prototype.slice.call(arguments, 0)
    args.unshift('SEMVER')
    console.log.apply(console, args)
  }
} else {
  debug = function () {}
}

// Note: this is the semver.org version of the spec that it implements
// Not necessarily the package version of this code.
exports.SEMVER_SPEC_VERSION = '2.0.0'

var MAX_LENGTH = 256
var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||
  /* istanbul ignore next */ 9007199254740991

// Max safe segment length for coercion.
var MAX_SAFE_COMPONENT_LENGTH = 16

// The actual regexps go on exports.re
var re = exports.re = []
var src = exports.src = []
var R = 0

// The following Regular Expressions can be used for tokenizing,
// validating, and parsing SemVer version strings.

// ## Numeric Identifier
// A single `0`, or a non-zero digit followed by zero or more digits.

var NUMERICIDENTIFIER = R++
src[NUMERICIDENTIFIER] = '0|[1-9]\\d*'
var NUMERICIDENTIFIERLOOSE = R++
src[NUMERICIDENTIFIERLOOSE] = '[0-9]+'

// ## Non-numeric Identifier
// Zero or more digits, followed by a letter or hyphen, and then zero or
// more letters, digits, or hyphens.

var NONNUMERICIDENTIFIER = R++
src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*'

// ## Main Version
// Three dot-separated numeric identifiers.

var MAINVERSION = R++
src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' +
                   '(' + src[NUMERICIDENTIFIER] + ')\\.' +
                   '(' + src[NUMERICIDENTIFIER] + ')'

var MAINVERSIONLOOSE = R++
src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' +
                        '(' + src[NUMERICIDENTIFIERLOOSE] + ')'

// ## Pre-release Version Identifier
// A numeric identifier, or a non-numeric identifier.

var PRERELEASEIDENTIFIER = R++
src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] +
                            '|' + src[NONNUMERICIDENTIFIER] + ')'

var PRERELEASEIDENTIFIERLOOSE = R++
src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] +
                                 '|' + src[NONNUMERICIDENTIFIER] + ')'

// ## Pre-release Version
// Hyphen, followed by one or more dot-separated pre-release version
// identifiers.

var PRERELEASE = R++
src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] +
                  '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))'

var PRERELEASELOOSE = R++
src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] +
                       '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))'

// ## Build Metadata Identifier
// Any combination of digits, letters, or hyphens.

var BUILDIDENTIFIER = R++
src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+'

// ## Build Metadata
// Plus sign, followed by one or more period-separated build metadata
// identifiers.

var BUILD = R++
src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] +
             '(?:\\.' + src[BUILDIDENTIFIER] + ')*))'

// ## Full Version String
// A main version, followed optionally by a pre-release version and
// build metadata.

// Note that the only major, minor, patch, and pre-release sections of
// the version string are capturing groups.  The build metadata is not a
// capturing group, because it should not ever be used in version
// comparison.

var FULL = R++
var FULLPLAIN = 'v?' + src[MAINVERSION] +
                src[PRERELEASE] + '?' +
                src[BUILD] + '?'

src[FULL] = '^' + FULLPLAIN + '$'

// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.
// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty
// common in the npm registry.
var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] +
                 src[PRERELEASELOOSE] + '?' +
                 src[BUILD] + '?'

var LOOSE = R++
src[LOOSE] = '^' + LOOSEPLAIN + '$'

var GTLT = R++
src[GTLT] = '((?:<|>)?=?)'

// Something like "2.*" or "1.2.x".
// Note that "x.x" is a valid xRange identifer, meaning "any version"
// Only the first item is strictly required.
var XRANGEIDENTIFIERLOOSE = R++
src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*'
var XRANGEIDENTIFIER = R++
src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*'

var XRANGEPLAIN = R++
src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' +
                   '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
                   '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' +
                   '(?:' + src[PRERELEASE] + ')?' +
                   src[BUILD] + '?' +
                   ')?)?'

var XRANGEPLAINLOOSE = R++
src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
                        '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
                        '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' +
                        '(?:' + src[PRERELEASELOOSE] + ')?' +
                        src[BUILD] + '?' +
                        ')?)?'

var XRANGE = R++
src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$'
var XRANGELOOSE = R++
src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$'

// Coercion.
// Extract anything that could conceivably be a part of a valid semver
var COERCE = R++
src[COERCE] = '(^|[^\\d])' +
              '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' +
              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
              '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' +
              '(?:$|[^\\d])'
var COERCERTL = R++
re[COERCERTL] = new RegExp(src[COERCE], 'g')

// Tilde ranges.
// Meaning is "reasonably at or greater than"
var LONETILDE = R++
src[LONETILDE] = '(?:~>?)'

var TILDETRIM = R++
src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+'
re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g')
var tildeTrimReplace = '$1~'

var TILDE = R++
src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$'
var TILDELOOSE = R++
src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$'

// Caret ranges.
// Meaning is "at least and backwards compatible with"
var LONECARET = R++
src[LONECARET] = '(?:\\^)'

var CARETTRIM = R++
src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+'
re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g')
var caretTrimReplace = '$1^'

var CARET = R++
src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$'
var CARETLOOSE = R++
src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$'

// A simple gt/lt/eq thing, or just "" to indicate "any version"
var COMPARATORLOOSE = R++
src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$'
var COMPARATOR = R++
src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$'

// An expression to strip any whitespace between the gtlt and the thing
// it modifies, so that `> 1.2.3` ==> `>1.2.3`
var COMPARATORTRIM = R++
src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] +
                      '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')'

// this one has to use the /g flag
re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g')
var comparatorTrimReplace = '$1$2$3'

// Something like `1.2.3 - 1.2.4`
// Note that these all use the loose form, because they'll be
// checked against either the strict or loose comparator form
// later.
var HYPHENRANGE = R++
src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' +
                   '\\s+-\\s+' +
                   '(' + src[XRANGEPLAIN] + ')' +
                   '\\s*$'

var HYPHENRANGELOOSE = R++
src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' +
                        '\\s+-\\s+' +
                        '(' + src[XRANGEPLAINLOOSE] + ')' +
                        '\\s*$'

// Star ranges basically just allow anything at all.
var STAR = R++
src[STAR] = '(<|>)?=?\\s*\\*'

// Compile to actual regexp objects.
// All are flag-free, unless they were created above with a flag.
for (var i = 0; i < R; i++) {
  debug(i, src[i])
  if (!re[i]) {
    re[i] = new RegExp(src[i])
  }
}

exports.parse = parse
function parse (version, options) {
  if (!options || typeof options !== 'object') {
    options = {
      loose: !!options,
      includePrerelease: false
    }
  }

  if (version instanceof SemVer) {
    return version
  }

  if (typeof version !== 'string') {
    return null
  }

  if (version.length > MAX_LENGTH) {
    return null
  }

  var r = options.loose ? re[LOOSE] : re[FULL]
  if (!r.test(version)) {
    return null
  }

  try {
    return new SemVer(version, options)
  } catch (er) {
    return null
  }
}

exports.valid = valid
function valid (version, options) {
  var v = parse(version, options)
  return v ? v.version : null
}

exports.clean = clean
function clean (version, options) {
  var s = parse(version.trim().replace(/^[=v]+/, ''), options)
  return s ? s.version : null
}

exports.SemVer = SemVer

function SemVer (version, options) {
  if (!options || typeof options !== 'object') {
    options = {
      loose: !!options,
      includePrerelease: false
    }
  }
  if (version instanceof SemVer) {
    if (version.loose === options.loose) {
      return version
    } else {
      version = version.version
    }
  } else if (typeof version !== 'string') {
    throw new TypeError('Invalid Version: ' + version)
  }

  if (version.length > MAX_LENGTH) {
    throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters')
  }

  if (!(this instanceof SemVer)) {
    return new SemVer(version, options)
  }

  debug('SemVer', version, options)
  this.options = options
  this.loose = !!options.loose

  var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL])

  if (!m) {
    throw new TypeError('Invalid Version: ' + version)
  }

  this.raw = version

  // these are actually numbers
  this.major = +m[1]
  this.minor = +m[2]
  this.patch = +m[3]

  if (this.major > MAX_SAFE_INTEGER || this.major < 0) {
    throw new TypeError('Invalid major version')
  }

  if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {
    throw new TypeError('Invalid minor version')
  }

  if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {
    throw new TypeError('Invalid patch version')
  }

  // numberify any prerelease numeric ids
  if (!m[4]) {
    this.prerelease = []
  } else {
    this.prerelease = m[4].split('.').map(function (id) {
      if (/^[0-9]+$/.test(id)) {
        var num = +id
        if (num >= 0 && num < MAX_SAFE_INTEGER) {
          return num
        }
      }
      return id
    })
  }

  this.build = m[5] ? m[5].split('.') : []
  this.format()
}

SemVer.prototype.format = function () {
  this.version = this.major + '.' + this.minor + '.' + this.patch
  if (this.prerelease.length) {
    this.version += '-' + this.prerelease.join('.')
  }
  return this.version
}

SemVer.prototype.toString = function () {
  return this.version
}

SemVer.prototype.compare = function (other) {
  debug('SemVer.compare', this.version, this.options, other)
  if (!(other instanceof SemVer)) {
    other = new SemVer(other, this.options)
  }

  return this.compareMain(other) || this.comparePre(other)
}

SemVer.prototype.compareMain = function (other) {
  if (!(other instanceof SemVer)) {
    other = new SemVer(other, this.options)
  }

  return compareIdentifiers(this.major, other.major) ||
         compareIdentifiers(this.minor, other.minor) ||
         compareIdentifiers(this.patch, other.patch)
}

SemVer.prototype.comparePre = function (other) {
  if (!(other instanceof SemVer)) {
    other = new SemVer(other, this.options)
  }

  // NOT having a prerelease is > having one
  if (this.prerelease.length && !other.prerelease.length) {
    return -1
  } else if (!this.prerelease.length && other.prerelease.length) {
    return 1
  } else if (!this.prerelease.length && !other.prerelease.length) {
    return 0
  }

  var i = 0
  do {
    var a = this.prerelease[i]
    var b = other.prerelease[i]
    debug('prerelease compare', i, a, b)
    if (a === undefined && b === undefined) {
      return 0
    } else if (b === undefined) {
      return 1
    } else if (a === undefined) {
      return -1
    } else if (a === b) {
      continue
    } else {
      return compareIdentifiers(a, b)
    }
  } while (++i)
}

SemVer.prototype.compareBuild = function (other) {
  if (!(other instanceof SemVer)) {
    other = new SemVer(other, this.options)
  }

  var i = 0
  do {
    var a = this.build[i]
    var b = other.build[i]
    debug('prerelease compare', i, a, b)
    if (a === undefined && b === undefined) {
      return 0
    } else if (b === undefined) {
      return 1
    } else if (a === undefined) {
      return -1
    } else if (a === b) {
      continue
    } else {
      return compareIdentifiers(a, b)
    }
  } while (++i)
}

// preminor will bump the version up to the next minor release, and immediately
// down to pre-release. premajor and prepatch work the same way.
SemVer.prototype.inc = function (release, identifier) {
  switch (release) {
    case 'premajor':
      this.prerelease.length = 0
      this.patch = 0
      this.minor = 0
      this.major++
      this.inc('pre', identifier)
      break
    case 'preminor':
      this.prerelease.length = 0
      this.patch = 0
      this.minor++
      this.inc('pre', identifier)
      break
    case 'prepatch':
      // If this is already a prerelease, it will bump to the next version
      // drop any prereleases that might already exist, since they are not
      // relevant at this point.
      this.prerelease.length = 0
      this.inc('patch', identifier)
      this.inc('pre', identifier)
      break
    // If the input is a non-prerelease version, this acts the same as
    // prepatch.
    case 'prerelease':
      if (this.prerelease.length === 0) {
        this.inc('patch', identifier)
      }
      this.inc('pre', identifier)
      break

    case 'major':
      // If this is a pre-major version, bump up to the same major version.
      // Otherwise increment major.
      // 1.0.0-5 bumps to 1.0.0
      // 1.1.0 bumps to 2.0.0
      if (this.minor !== 0 ||
          this.patch !== 0 ||
          this.prerelease.length === 0) {
        this.major++
      }
      this.minor = 0
      this.patch = 0
      this.prerelease = []
      break
    case 'minor':
      // If this is a pre-minor version, bump up to the same minor version.
      // Otherwise increment minor.
      // 1.2.0-5 bumps to 1.2.0
      // 1.2.1 bumps to 1.3.0
      if (this.patch !== 0 || this.prerelease.length === 0) {
        this.minor++
      }
      this.patch = 0
      this.prerelease = []
      break
    case 'patch':
      // If this is not a pre-release version, it will increment the patch.
      // If it is a pre-release it will bump up to the same patch version.
      // 1.2.0-5 patches to 1.2.0
      // 1.2.0 patches to 1.2.1
      if (this.prerelease.length === 0) {
        this.patch++
      }
      this.prerelease = []
      break
    // This probably shouldn't be used publicly.
    // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction.
    case 'pre':
      if (this.prerelease.length === 0) {
        this.prerelease = [0]
      } else {
        var i = this.prerelease.length
        while (--i >= 0) {
          if (typeof this.prerelease[i] === 'number') {
            this.prerelease[i]++
            i = -2
          }
        }
        if (i === -1) {
          // didn't increment anything
          this.prerelease.push(0)
        }
      }
      if (identifier) {
        // 1.2.0-beta.1 bumps to 1.2.0-beta.2,
        // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0
        if (this.prerelease[0] === identifier) {
          if (isNaN(this.prerelease[1])) {
            this.prerelease = [identifier, 0]
          }
        } else {
          this.prerelease = [identifier, 0]
        }
      }
      break

    default:
      throw new Error('invalid increment argument: ' + release)
  }
  this.format()
  this.raw = this.version
  return this
}

exports.inc = inc
function inc (version, release, loose, identifier) {
  if (typeof (loose) === 'string') {
    identifier = loose
    loose = undefined
  }

  try {
    return new SemVer(version, loose).inc(release, identifier).version
  } catch (er) {
    return null
  }
}

exports.diff = diff
function diff (version1, version2) {
  if (eq(version1, version2)) {
    return null
  } else {
    var v1 = parse(version1)
    var v2 = parse(version2)
    var prefix = ''
    if (v1.prerelease.length || v2.prerelease.length) {
      prefix = 'pre'
      var defaultResult = 'prerelease'
    }
    for (var key in v1) {
      if (key === 'major' || key === 'minor' || key === 'patch') {
        if (v1[key] !== v2[key]) {
          return prefix + key
        }
      }
    }
    return defaultResult // may be undefined
  }
}

exports.compareIdentifiers = compareIdentifiers

var numeric = /^[0-9]+$/
function compareIdentifiers (a, b) {
  var anum = numeric.test(a)
  var bnum = numeric.test(b)

  if (anum && bnum) {
    a = +a
    b = +b
  }

  return a === b ? 0
    : (anum && !bnum) ? -1
    : (bnum && !anum) ? 1
    : a < b ? -1
    : 1
}

exports.rcompareIdentifiers = rcompareIdentifiers
function rcompareIdentifiers (a, b) {
  return compareIdentifiers(b, a)
}

exports.major = major
function major (a, loose) {
  return new SemVer(a, loose).major
}

exports.minor = minor
function minor (a, loose) {
  return new SemVer(a, loose).minor
}

exports.patch = patch
function patch (a, loose) {
  return new SemVer(a, loose).patch
}

exports.compare = compare
function compare (a, b, loose) {
  return new SemVer(a, loose).compare(new SemVer(b, loose))
}

exports.compareLoose = compareLoose
function compareLoose (a, b) {
  return compare(a, b, true)
}

exports.compareBuild = compareBuild
function compareBuild (a, b, loose) {
  var versionA = new SemVer(a, loose)
  var versionB = new SemVer(b, loose)
  return versionA.compare(versionB) || versionA.compareBuild(versionB)
}

exports.rcompare = rcompare
function rcompare (a, b, loose) {
  return compare(b, a, loose)
}

exports.sort = sort
function sort (list, loose) {
  return list.sort(function (a, b) {
    return exports.compareBuild(a, b, loose)
  })
}

exports.rsort = rsort
function rsort (list, loose) {
  return list.sort(function (a, b) {
    return exports.compareBuild(b, a, loose)
  })
}

exports.gt = gt
function gt (a, b, loose) {
  return compare(a, b, loose) > 0
}

exports.lt = lt
function lt (a, b, loose) {
  return compare(a, b, loose) < 0
}

exports.eq = eq
function eq (a, b, loose) {
  return compare(a, b, loose) === 0
}

exports.neq = neq
function neq (a, b, loose) {
  return compare(a, b, loose) !== 0
}

exports.gte = gte
function gte (a, b, loose) {
  return compare(a, b, loose) >= 0
}

exports.lte = lte
function lte (a, b, loose) {
  return compare(a, b, loose) <= 0
}

exports.cmp = cmp
function cmp (a, op, b, loose) {
  switch (op) {
    case '===':
      if (typeof a === 'object')
        a = a.version
      if (typeof b === 'object')
        b = b.version
      return a === b

    case '!==':
      if (typeof a === 'object')
        a = a.version
      if (typeof b === 'object')
        b = b.version
      return a !== b

    case '':
    case '=':
    case '==':
      return eq(a, b, loose)

    case '!=':
      return neq(a, b, loose)

    case '>':
      return gt(a, b, loose)

    case '>=':
      return gte(a, b, loose)

    case '<':
      return lt(a, b, loose)

    case '<=':
      return lte(a, b, loose)

    default:
      throw new TypeError('Invalid operator: ' + op)
  }
}

exports.Comparator = Comparator
function Comparator (comp, options) {
  if (!options || typeof options !== 'object') {
    options = {
      loose: !!options,
      includePrerelease: false
    }
  }

  if (comp instanceof Comparator) {
    if (comp.loose === !!options.loose) {
      return comp
    } else {
      comp = comp.value
    }
  }

  if (!(this instanceof Comparator)) {
    return new Comparator(comp, options)
  }

  debug('comparator', comp, options)
  this.options = options
  this.loose = !!options.loose
  this.parse(comp)

  if (this.semver === ANY) {
    this.value = ''
  } else {
    this.value = this.operator + this.semver.version
  }

  debug('comp', this)
}

var ANY = {}
Comparator.prototype.parse = function (comp) {
  var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
  var m = comp.match(r)

  if (!m) {
    throw new TypeError('Invalid comparator: ' + comp)
  }

  this.operator = m[1] !== undefined ? m[1] : ''
  if (this.operator === '=') {
    this.operator = ''
  }

  // if it literally is just '>' or '' then allow anything.
  if (!m[2]) {
    this.semver = ANY
  } else {
    this.semver = new SemVer(m[2], this.options.loose)
  }
}

Comparator.prototype.toString = function () {
  return this.value
}

Comparator.prototype.test = function (version) {
  debug('Comparator.test', version, this.options.loose)

  if (this.semver === ANY || version === ANY) {
    return true
  }

  if (typeof version === 'string') {
    try {
      version = new SemVer(version, this.options)
    } catch (er) {
      return false
    }
  }

  return cmp(version, this.operator, this.semver, this.options)
}

Comparator.prototype.intersects = function (comp, options) {
  if (!(comp instanceof Comparator)) {
    throw new TypeError('a Comparator is required')
  }

  if (!options || typeof options !== 'object') {
    options = {
      loose: !!options,
      includePrerelease: false
    }
  }

  var rangeTmp

  if (this.operator === '') {
    if (this.value === '') {
      return true
    }
    rangeTmp = new Range(comp.value, options)
    return satisfies(this.value, rangeTmp, options)
  } else if (comp.operator === '') {
    if (comp.value === '') {
      return true
    }
    rangeTmp = new Range(this.value, options)
    return satisfies(comp.semver, rangeTmp, options)
  }

  var sameDirectionIncreasing =
    (this.operator === '>=' || this.operator === '>') &&
    (comp.operator === '>=' || comp.operator === '>')
  var sameDirectionDecreasing =
    (this.operator === '<=' || this.operator === '<') &&
    (comp.operator === '<=' || comp.operator === '<')
  var sameSemVer = this.semver.version === comp.semver.version
  var differentDirectionsInclusive =
    (this.operator === '>=' || this.operator === '<=') &&
    (comp.operator === '>=' || comp.operator === '<=')
  var oppositeDirectionsLessThan =
    cmp(this.semver, '<', comp.semver, options) &&
    ((this.operator === '>=' || this.operator === '>') &&
    (comp.operator === '<=' || comp.operator === '<'))
  var oppositeDirectionsGreaterThan =
    cmp(this.semver, '>', comp.semver, options) &&
    ((this.operator === '<=' || this.operator === '<') &&
    (comp.operator === '>=' || comp.operator === '>'))

  return sameDirectionIncreasing || sameDirectionDecreasing ||
    (sameSemVer && differentDirectionsInclusive) ||
    oppositeDirectionsLessThan || oppositeDirectionsGreaterThan
}

exports.Range = Range
function Range (range, options) {
  if (!options || typeof options !== 'object') {
    options = {
      loose: !!options,
      includePrerelease: false
    }
  }

  if (range instanceof Range) {
    if (range.loose === !!options.loose &&
        range.includePrerelease === !!options.includePrerelease) {
      return range
    } else {
      return new Range(range.raw, options)
    }
  }

  if (range instanceof Comparator) {
    return new Range(range.value, options)
  }

  if (!(this instanceof Range)) {
    return new Range(range, options)
  }

  this.options = options
  this.loose = !!options.loose
  this.includePrerelease = !!options.includePrerelease

  // First, split based on boolean or ||
  this.raw = range
  this.set = range.split(/\s*\|\|\s*/).map(function (range) {
    return this.parseRange(range.trim())
  }, this).filter(function (c) {
    // throw out any that are not relevant for whatever reason
    return c.length
  })

  if (!this.set.length) {
    throw new TypeError('Invalid SemVer Range: ' + range)
  }

  this.format()
}

Range.prototype.format = function () {
  this.range = this.set.map(function (comps) {
    return comps.join(' ').trim()
  }).join('||').trim()
  return this.range
}

Range.prototype.toString = function () {
  return this.range
}

Range.prototype.parseRange = function (range) {
  var loose = this.options.loose
  range = range.trim()
  // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`
  var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE]
  range = range.replace(hr, hyphenReplace)
  debug('hyphen replace', range)
  // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`
  range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace)
  debug('comparator trim', range, re[COMPARATORTRIM])

  // `~ 1.2.3` => `~1.2.3`
  range = range.replace(re[TILDETRIM], tildeTrimReplace)

  // `^ 1.2.3` => `^1.2.3`
  range = range.replace(re[CARETTRIM], caretTrimReplace)

  // normalize spaces
  range = range.split(/\s+/).join(' ')

  // At this point, the range is completely trimmed and
  // ready to be split into comparators.

  var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR]
  var set = range.split(' ').map(function (comp) {
    return parseComparator(comp, this.options)
  }, this).join(' ').split(/\s+/)
  if (this.options.loose) {
    // in loose mode, throw out any that are not valid comparators
    set = set.filter(function (comp) {
      return !!comp.match(compRe)
    })
  }
  set = set.map(function (comp) {
    return new Comparator(comp, this.options)
  }, this)

  return set
}

Range.prototype.intersects = function (range, options) {
  if (!(range instanceof Range)) {
    throw new TypeError('a Range is required')
  }

  return this.set.some(function (thisComparators) {
    return (
      isSatisfiable(thisComparators, options) &&
      range.set.some(function (rangeComparators) {
        return (
          isSatisfiable(rangeComparators, options) &&
          thisComparators.every(function (thisComparator) {
            return rangeComparators.every(function (rangeComparator) {
              return thisComparator.intersects(rangeComparator, options)
            })
          })
        )
      })
    )
  })
}

// take a set of comparators and determine whether there
// exists a version which can satisfy it
function isSatisfiable (comparators, options) {
  var result = true
  var remainingComparators = comparators.slice()
  var testComparator = remainingComparators.pop()

  while (result && remainingComparators.length) {
    result = remainingComparators.every(function (otherComparator) {
      return testComparator.intersects(otherComparator, options)
    })

    testComparator = remainingComparators.pop()
  }

  return result
}

// Mostly just for testing and legacy API reasons
exports.toComparators = toComparators
function toComparators (range, options) {
  return new Range(range, options).set.map(function (comp) {
    return comp.map(function (c) {
      return c.value
    }).join(' ').trim().split(' ')
  })
}

// comprised of xranges, tildes, stars, and gtlt's at this point.
// already replaced the hyphen ranges
// turn into a set of JUST comparators.
function parseComparator (comp, options) {
  debug('comp', comp, options)
  comp = replaceCarets(comp, options)
  debug('caret', comp)
  comp = replaceTildes(comp, options)
  debug('tildes', comp)
  comp = replaceXRanges(comp, options)
  debug('xrange', comp)
  comp = replaceStars(comp, options)
  debug('stars', comp)
  return comp
}

function isX (id) {
  return !id || id.toLowerCase() === 'x' || id === '*'
}

// ~, ~> --> * (any, kinda silly)
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
function replaceTildes (comp, options) {
  return comp.trim().split(/\s+/).map(function (comp) {
    return replaceTilde(comp, options)
  }).join(' ')
}

function replaceTilde (comp, options) {
  var r = options.loose ? re[TILDELOOSE] : re[TILDE]
  return comp.replace(r, function (_, M, m, p, pr) {
    debug('tilde', comp, _, M, m, p, pr)
    var ret

    if (isX(M)) {
      ret = ''
    } else if (isX(m)) {
      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
    } else if (isX(p)) {
      // ~1.2 == >=1.2.0 <1.3.0
      ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
    } else if (pr) {
      debug('replaceTilde pr', pr)
      ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
            ' <' + M + '.' + (+m + 1) + '.0'
    } else {
      // ~1.2.3 == >=1.2.3 <1.3.0
      ret = '>=' + M + '.' + m + '.' + p +
            ' <' + M + '.' + (+m + 1) + '.0'
    }

    debug('tilde return', ret)
    return ret
  })
}

// ^ --> * (any, kinda silly)
// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0
// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0
// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0
// ^1.2.3 --> >=1.2.3 <2.0.0
// ^1.2.0 --> >=1.2.0 <2.0.0
function replaceCarets (comp, options) {
  return comp.trim().split(/\s+/).map(function (comp) {
    return replaceCaret(comp, options)
  }).join(' ')
}

function replaceCaret (comp, options) {
  debug('caret', comp, options)
  var r = options.loose ? re[CARETLOOSE] : re[CARET]
  return comp.replace(r, function (_, M, m, p, pr) {
    debug('caret', comp, _, M, m, p, pr)
    var ret

    if (isX(M)) {
      ret = ''
    } else if (isX(m)) {
      ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0'
    } else if (isX(p)) {
      if (M === '0') {
        ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0'
      } else {
        ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0'
      }
    } else if (pr) {
      debug('replaceCaret pr', pr)
      if (M === '0') {
        if (m === '0') {
          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
                ' <' + M + '.' + m + '.' + (+p + 1)
        } else {
          ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
                ' <' + M + '.' + (+m + 1) + '.0'
        }
      } else {
        ret = '>=' + M + '.' + m + '.' + p + '-' + pr +
              ' <' + (+M + 1) + '.0.0'
      }
    } else {
      debug('no pr')
      if (M === '0') {
        if (m === '0') {
          ret = '>=' + M + '.' + m + '.' + p +
                ' <' + M + '.' + m + '.' + (+p + 1)
        } else {
          ret = '>=' + M + '.' + m + '.' + p +
                ' <' + M + '.' + (+m + 1) + '.0'
        }
      } else {
        ret = '>=' + M + '.' + m + '.' + p +
              ' <' + (+M + 1) + '.0.0'
      }
    }

    debug('caret return', ret)
    return ret
  })
}

function replaceXRanges (comp, options) {
  debug('replaceXRanges', comp, options)
  return comp.split(/\s+/).map(function (comp) {
    return replaceXRange(comp, options)
  }).join(' ')
}

function replaceXRange (comp, options) {
  comp = comp.trim()
  var r = options.loose ? re[XRANGELOOSE] : re[XRANGE]
  return comp.replace(r, function (ret, gtlt, M, m, p, pr) {
    debug('xRange', comp, ret, gtlt, M, m, p, pr)
    var xM = isX(M)
    var xm = xM || isX(m)
    var xp = xm || isX(p)
    var anyX = xp

    if (gtlt === '=' && anyX) {
      gtlt = ''
    }

    // if we're including prereleases in the match, then we need
    // to fix this to -0, the lowest possible prerelease value
    pr = options.includePrerelease ? '-0' : ''

    if (xM) {
      if (gtlt === '>' || gtlt === '<') {
        // nothing is allowed
        ret = '<0.0.0-0'
      } else {
        // nothing is forbidden
        ret = '*'
      }
    } else if (gtlt && anyX) {
      // we know patch is an x, because we have any x at all.
      // replace X with 0
      if (xm) {
        m = 0
      }
      p = 0

      if (gtlt === '>') {
        // >1 => >=2.0.0
        // >1.2 => >=1.3.0
        // >1.2.3 => >= 1.2.4
        gtlt = '>='
        if (xm) {
          M = +M + 1
          m = 0
          p = 0
        } else {
          m = +m + 1
          p = 0
        }
      } else if (gtlt === '<=') {
        // <=0.7.x is actually <0.8.0, since any 0.7.x should
        // pass.  Similarly, <=7.x is actually <8.0.0, etc.
        gtlt = '<'
        if (xm) {
          M = +M + 1
        } else {
          m = +m + 1
        }
      }

      ret = gtlt + M + '.' + m + '.' + p + pr
    } else if (xm) {
      ret = '>=' + M + '.0.0' + pr + ' <' + (+M + 1) + '.0.0' + pr
    } else if (xp) {
      ret = '>=' + M + '.' + m + '.0' + pr +
        ' <' + M + '.' + (+m + 1) + '.0' + pr
    }

    debug('xRange return', ret)

    return ret
  })
}

// Because * is AND-ed with everything else in the comparator,
// and '' means "any version", just remove the *s entirely.
function replaceStars (comp, options) {
  debug('replaceStars', comp, options)
  // Looseness is ignored here.  star is always as loose as it gets!
  return comp.trim().replace(re[STAR], '')
}

// This function is passed to string.replace(re[HYPHENRANGE])
// M, m, patch, prerelease, build
// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5
// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do
// 1.2 - 3.4 => >=1.2.0 <3.5.0
function hyphenReplace ($0,
  from, fM, fm, fp, fpr, fb,
  to, tM, tm, tp, tpr, tb) {
  if (isX(fM)) {
    from = ''
  } else if (isX(fm)) {
    from = '>=' + fM + '.0.0'
  } else if (isX(fp)) {
    from = '>=' + fM + '.' + fm + '.0'
  } else {
    from = '>=' + from
  }

  if (isX(tM)) {
    to = ''
  } else if (isX(tm)) {
    to = '<' + (+tM + 1) + '.0.0'
  } else if (isX(tp)) {
    to = '<' + tM + '.' + (+tm + 1) + '.0'
  } else if (tpr) {
    to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr
  } else {
    to = '<=' + to
  }

  return (from + ' ' + to).trim()
}

// if ANY of the sets match ALL of its comparators, then pass
Range.prototype.test = function (version) {
  if (!version) {
    return false
  }

  if (typeof version === 'string') {
    try {
      version = new SemVer(version, this.options)
    } catch (er) {
      return false
    }
  }

  for (var i = 0; i < this.set.length; i++) {
    if (testSet(this.set[i], version, this.options)) {
      return true
    }
  }
  return false
}

function testSet (set, version, options) {
  for (var i = 0; i < set.length; i++) {
    if (!set[i].test(version)) {
      return false
    }
  }

  if (version.prerelease.length && !options.includePrerelease) {
    // Find the set of versions that are allowed to have prereleases
    // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0
    // That should allow `1.2.3-pr.2` to pass.
    // However, `1.2.4-alpha.notready` should NOT be allowed,
    // even though it's within the range set by the comparators.
    for (i = 0; i < set.length; i++) {
      debug(set[i].semver)
      if (set[i].semver === ANY) {
        continue
      }

      if (set[i].semver.prerelease.length > 0) {
        var allowed = set[i].semver
        if (allowed.major === version.major &&
            allowed.minor === version.minor &&
            allowed.patch === version.patch) {
          return true
        }
      }
    }

    // Version has a -pre, but it's not one of the ones we like.
    return false
  }

  return true
}

exports.satisfies = satisfies
function satisfies (version, range, options) {
  try {
    range = new Range(range, options)
  } catch (er) {
    return false
  }
  return range.test(version)
}

exports.maxSatisfying = maxSatisfying
function maxSatisfying (versions, range, options) {
  var max = null
  var maxSV = null
  try {
    var rangeObj = new Range(range, options)
  } catch (er) {
    return null
  }
  versions.forEach(function (v) {
    if (rangeObj.test(v)) {
      // satisfies(v, range, options)
      if (!max || maxSV.compare(v) === -1) {
        // compare(max, v, true)
        max = v
        maxSV = new SemVer(max, options)
      }
    }
  })
  return max
}

exports.minSatisfying = minSatisfying
function minSatisfying (versions, range, options) {
  var min = null
  var minSV = null
  try {
    var rangeObj = new Range(range, options)
  } catch (er) {
    return null
  }
  versions.forEach(function (v) {
    if (rangeObj.test(v)) {
      // satisfies(v, range, options)
      if (!min || minSV.compare(v) === 1) {
        // compare(min, v, true)
        min = v
        minSV = new SemVer(min, options)
      }
    }
  })
  return min
}

exports.minVersion = minVersion
function minVersion (range, loose) {
  range = new Range(range, loose)

  var minver = new SemVer('0.0.0')
  if (range.test(minver)) {
    return minver
  }

  minver = new SemVer('0.0.0-0')
  if (range.test(minver)) {
    return minver
  }

  minver = null
  for (var i = 0; i < range.set.length; ++i) {
    var comparators = range.set[i]

    comparators.forEach(function (comparator) {
      // Clone to avoid manipulating the comparator's semver object.
      var compver = new SemVer(comparator.semver.version)
      switch (comparator.operator) {
        case '>':
          if (compver.prerelease.length === 0) {
            compver.patch++
          } else {
            compver.prerelease.push(0)
          }
          compver.raw = compver.format()
          /* fallthrough */
        case '':
        case '>=':
          if (!minver || gt(minver, compver)) {
            minver = compver
          }
          break
        case '<':
        case '<=':
          /* Ignore maximum versions */
          break
        /* istanbul ignore next */
        default:
          throw new Error('Unexpected operation: ' + comparator.operator)
      }
    })
  }

  if (minver && range.test(minver)) {
    return minver
  }

  return null
}

exports.validRange = validRange
function validRange (range, options) {
  try {
    // Return '*' instead of '' so that truthiness works.
    // This will throw if it's invalid anyway
    return new Range(range, options).range || '*'
  } catch (er) {
    return null
  }
}

// Determine if version is less than all the versions possible in the range
exports.ltr = ltr
function ltr (version, range, options) {
  return outside(version, range, '<', options)
}

// Determine if version is greater than all the versions possible in the range.
exports.gtr = gtr
function gtr (version, range, options) {
  return outside(version, range, '>', options)
}

exports.outside = outside
function outside (version, range, hilo, options) {
  version = new SemVer(version, options)
  range = new Range(range, options)

  var gtfn, ltefn, ltfn, comp, ecomp
  switch (hilo) {
    case '>':
      gtfn = gt
      ltefn = lte
      ltfn = lt
      comp = '>'
      ecomp = '>='
      break
    case '<':
      gtfn = lt
      ltefn = gte
      ltfn = gt
      comp = '<'
      ecomp = '<='
      break
    default:
      throw new TypeError('Must provide a hilo val of "<" or ">"')
  }

  // If it satisifes the range it is not outside
  if (satisfies(version, range, options)) {
    return false
  }

  // From now on, variable terms are as if we're in "gtr" mode.
  // but note that everything is flipped for the "ltr" function.

  for (var i = 0; i < range.set.length; ++i) {
    var comparators = range.set[i]

    var high = null
    var low = null

    comparators.forEach(function (comparator) {
      if (comparator.semver === ANY) {
        comparator = new Comparator('>=0.0.0')
      }
      high = high || comparator
      low = low || comparator
      if (gtfn(comparator.semver, high.semver, options)) {
        high = comparator
      } else if (ltfn(comparator.semver, low.semver, options)) {
        low = comparator
      }
    })

    // If the edge version comparator has a operator then our version
    // isn't outside it
    if (high.operator === comp || high.operator === ecomp) {
      return false
    }

    // If the lowest version comparator has an operator and our version
    // is less than it then it isn't higher than the range
    if ((!low.operator || low.operator === comp) &&
        ltefn(version, low.semver)) {
      return false
    } else if (low.operator === ecomp && ltfn(version, low.semver)) {
      return false
    }
  }
  return true
}

exports.prerelease = prerelease
function prerelease (version, options) {
  var parsed = parse(version, options)
  return (parsed && parsed.prerelease.length) ? parsed.prerelease : null
}

exports.intersects = intersects
function intersects (r1, r2, options) {
  r1 = new Range(r1, options)
  r2 = new Range(r2, options)
  return r1.intersects(r2)
}

exports.coerce = coerce
function coerce (version, options) {
  if (version instanceof SemVer) {
    return version
  }

  if (typeof version === 'number') {
    version = String(version)
  }

  if (typeof version !== 'string') {
    return null
  }

  options = options || {}

  var match = null
  if (!options.rtl) {
    match = version.match(re[COERCE])
  } else {
    // Find the right-most coercible string that does not share
    // a terminus with a more left-ward coercible string.
    // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'
    //
    // Walk through the string checking with a /g regexp
    // Manually set the index so as to pick up overlapping matches.
    // Stop when we get a match that ends at the string end, since no
    // coercible string can be more right-ward without the same terminus.
    var next
    while ((next = re[COERCERTL].exec(version)) &&
      (!match || match.index + match[0].length !== version.length)
    ) {
      if (!match ||
          next.index + next[0].length !== match.index + match[0].length) {
        match = next
      }
      re[COERCERTL].lastIndex = next.index + next[1].length + next[2].length
    }
    // leave it in a clean state
    re[COERCERTL].lastIndex = -1
  }

  if (match === null) {
    return null
  }

  return parse(match[2] +
    '.' + (match[3] || '0') +
    '.' + (match[4] || '0'), options)
}


/***/ }),

/***/ 78495:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file accounts.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var core = __webpack_require__(829949);
var Method = __webpack_require__(946132);
var Promise = __webpack_require__(315845);
var Account = __webpack_require__(652662);
var Hash = __webpack_require__(421952);
var RLP = __webpack_require__(810412);
var Nat = __webpack_require__(347174);
var Bytes = __webpack_require__(450921);
var cryp = (typeof global === 'undefined') ? __webpack_require__(855835) : __webpack_require__(676417);
var scrypt = __webpack_require__(426193);
var uuid = __webpack_require__(583757);
var utils = __webpack_require__(716915);
var helpers = __webpack_require__(927354);

var isNot = function(value) {
    return (_.isUndefined(value) || _.isNull(value));
};

var trimLeadingZero = function (hex) {
    while (hex && hex.startsWith('0x0')) {
        hex = '0x' + hex.slice(3);
    }
    return hex;
};

var makeEven = function (hex) {
    if(hex.length % 2 === 1) {
        hex = hex.replace('0x', '0x0');
    }
    return hex;
};


var Accounts = function Accounts() {
    var _this = this;

    // sets _requestmanager
    core.packageInit(this, arguments);

    // remove unecessary core functions
    delete this.BatchRequest;
    delete this.extend;

    var _ethereumCall = [
        new Method({
            name: 'getId',
            call: 'net_version',
            params: 0,
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'getGasPrice',
            call: 'eth_gasPrice',
            params: 0
        }),
        new Method({
            name: 'getTransactionCount',
            call: 'eth_getTransactionCount',
            params: 2,
            inputFormatter: [function (address) {
                if (utils.isAddress(address)) {
                    return address;
                } else {
                    throw new Error('Address '+ address +' is not a valid address to get the "transactionCount".');
                }
            }, function () { return 'latest'; }]
        })
    ];
    // attach methods to this._ethereumCall
    this._ethereumCall = {};
    _.each(_ethereumCall, function (method) {
        method.attachToObject(_this._ethereumCall);
        method.setRequestManager(_this._requestManager);
    });


    this.wallet = new Wallet(this);
};

Accounts.prototype._addAccountFunctions = function (account) {
    var _this = this;

    // add sign functions
    account.signTransaction = function signTransaction(tx, callback) {
        return _this.signTransaction(tx, account.privateKey, callback);
    };
    account.sign = function sign(data) {
        return _this.sign(data, account.privateKey);
    };

    account.encrypt = function encrypt(password, options) {
        return _this.encrypt(account.privateKey, password, options);
    };


    return account;
};

Accounts.prototype.create = function create(entropy) {
    return this._addAccountFunctions(Account.create(entropy || utils.randomHex(32)));
};

Accounts.prototype.privateKeyToAccount = function privateKeyToAccount(privateKey) {
    return this._addAccountFunctions(Account.fromPrivate(privateKey));
};

Accounts.prototype.signTransaction = function signTransaction(tx, privateKey, callback) {
    var _this = this,
        error = false,
        result;

    callback = callback || function () {};

    if (!tx) {
        error = new Error('No transaction object given!');

        callback(error);
        return Promise.reject(error);
    }

    function signed (tx) {

        if (!tx.gas && !tx.gasLimit) {
            error = new Error('"gas" is missing');
        }

        if (tx.nonce  < 0 ||
            tx.gas  < 0 ||
            tx.gasPrice  < 0 ||
            tx.chainId  < 0) {
            error = new Error('Gas, gasPrice, nonce or chainId is lower than 0');
        }

        if (error) {
            callback(error);
            return Promise.reject(error);
        }

        try {
            tx = helpers.formatters.inputCallFormatter(tx);

            var transaction = tx;
            transaction.to = tx.to || '0x';
            transaction.data = tx.data || '0x';
            transaction.value = tx.value || '0x';
            transaction.chainId = utils.numberToHex(tx.chainId);

            var rlpEncoded = RLP.encode([
                Bytes.fromNat(transaction.nonce),
                Bytes.fromNat(transaction.gasPrice),
                Bytes.fromNat(transaction.gas),
                transaction.to.toLowerCase(),
                Bytes.fromNat(transaction.value),
                transaction.data,
                Bytes.fromNat(transaction.chainId || "0x1"),
                "0x",
                "0x"]);


            var hash = Hash.keccak256(rlpEncoded);

            var signature = Account.makeSigner(Nat.toNumber(transaction.chainId || "0x1") * 2 + 35)(Hash.keccak256(rlpEncoded), privateKey);

            var rawTx = RLP.decode(rlpEncoded).slice(0, 6).concat(Account.decodeSignature(signature));

            rawTx[6] = makeEven(trimLeadingZero(rawTx[6]));
            rawTx[7] = makeEven(trimLeadingZero(rawTx[7]));
            rawTx[8] = makeEven(trimLeadingZero(rawTx[8]));

            var rawTransaction = RLP.encode(rawTx);

            var values = RLP.decode(rawTransaction);
            result = {
                messageHash: hash,
                v: trimLeadingZero(values[6]),
                r: trimLeadingZero(values[7]),
                s: trimLeadingZero(values[8]),
                rawTransaction: rawTransaction
            };

        } catch(e) {
            callback(e);
            return Promise.reject(e);
        }

        callback(null, result);
        return result;
    }

    // Resolve immediately if nonce, chainId and price are provided
    if (tx.nonce !== undefined && tx.chainId !== undefined && tx.gasPrice !== undefined) {
        return Promise.resolve(signed(tx));
    }


    // Otherwise, get the missing info from the Ethereum Node
    return Promise.all([
        isNot(tx.chainId) ? _this._ethereumCall.getId() : tx.chainId,
        isNot(tx.gasPrice) ? _this._ethereumCall.getGasPrice() : tx.gasPrice,
        isNot(tx.nonce) ? _this._ethereumCall.getTransactionCount(_this.privateKeyToAccount(privateKey).address) : tx.nonce
    ]).then(function (args) {
        if (isNot(args[0]) || isNot(args[1]) || isNot(args[2])) {
            throw new Error('One of the values "chainId", "gasPrice", or "nonce" couldn\'t be fetched: '+ JSON.stringify(args));
        }
        return signed(_.extend(tx, {chainId: args[0], gasPrice: args[1], nonce: args[2]}));
    });
};

/* jshint ignore:start */
Accounts.prototype.recoverTransaction = function recoverTransaction(rawTx) {
    var values = RLP.decode(rawTx);
    var signature = Account.encodeSignature(values.slice(6,9));
    var recovery = Bytes.toNumber(values[6]);
    var extraData = recovery < 35 ? [] : [Bytes.fromNumber((recovery - 35) >> 1), "0x", "0x"];
    var signingData = values.slice(0,6).concat(extraData);
    var signingDataHex = RLP.encode(signingData);
    return Account.recover(Hash.keccak256(signingDataHex), signature);
};
/* jshint ignore:end */

Accounts.prototype.hashMessage = function hashMessage(data) {
    var message = utils.isHexStrict(data) ? utils.hexToBytes(data) : data;
    var messageBuffer = Buffer.from(message);
    var preamble = "\x19Ethereum Signed Message:\n" + message.length;
    var preambleBuffer = Buffer.from(preamble);
    var ethMessage = Buffer.concat([preambleBuffer, messageBuffer]);
    return Hash.keccak256s(ethMessage);
};

Accounts.prototype.sign = function sign(data, privateKey) {
    var hash = this.hashMessage(data);
    var signature = Account.sign(hash, privateKey);
    var vrs = Account.decodeSignature(signature);
    return {
        message: data,
        messageHash: hash,
        v: vrs[0],
        r: vrs[1],
        s: vrs[2],
        signature: signature
    };
};

Accounts.prototype.recover = function recover(message, signature, preFixed) {
    var args = [].slice.apply(arguments);


    if (_.isObject(message)) {
        return this.recover(message.messageHash, Account.encodeSignature([message.v, message.r, message.s]), true);
    }

    if (!preFixed) {
        message = this.hashMessage(message);
    }

    if (args.length >= 4) {
        preFixed = args.slice(-1)[0];
        preFixed = _.isBoolean(preFixed) ? !!preFixed : false;

        return this.recover(message, Account.encodeSignature(args.slice(1, 4)), preFixed); // v, r, s
    }
    return Account.recover(message, signature);
};

// Taken from https://github.com/ethereumjs/ethereumjs-wallet
Accounts.prototype.decrypt = function (v3Keystore, password, nonStrict) {
    /* jshint maxcomplexity: 10 */

    if(!_.isString(password)) {
        throw new Error('No password given.');
    }

    var json = (_.isObject(v3Keystore)) ? v3Keystore : JSON.parse(nonStrict ? v3Keystore.toLowerCase() : v3Keystore);

    if (json.version !== 3) {
        throw new Error('Not a valid V3 wallet');
    }

    var derivedKey;
    var kdfparams;
    if (json.crypto.kdf === 'scrypt') {
        kdfparams = json.crypto.kdfparams;

        // FIXME: support progress reporting callback
        derivedKey = scrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen);
    } else if (json.crypto.kdf === 'pbkdf2') {
        kdfparams = json.crypto.kdfparams;

        if (kdfparams.prf !== 'hmac-sha256') {
            throw new Error('Unsupported parameters to PBKDF2');
        }

        derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256');
    } else {
        throw new Error('Unsupported key derivation scheme');
    }

    var ciphertext = Buffer.from(json.crypto.ciphertext, 'hex');

    var mac = utils.sha3(Buffer.concat([ derivedKey.slice(16, 32), ciphertext ])).replace('0x','');
    if (mac !== json.crypto.mac) {
        throw new Error('Key derivation failed - possibly wrong password');
    }

    var decipher = cryp.createDecipheriv(json.crypto.cipher, derivedKey.slice(0, 16), Buffer.from(json.crypto.cipherparams.iv, 'hex'));
    var seed = '0x'+ Buffer.concat([ decipher.update(ciphertext), decipher.final() ]).toString('hex');

    return this.privateKeyToAccount(seed);
};

Accounts.prototype.encrypt = function (privateKey, password, options) {
    /* jshint maxcomplexity: 20 */
    var account = this.privateKeyToAccount(privateKey);

    options = options || {};
    var salt = options.salt || cryp.randomBytes(32);
    var iv = options.iv || cryp.randomBytes(16);

    var derivedKey;
    var kdf = options.kdf || 'scrypt';
    var kdfparams = {
        dklen: options.dklen || 32,
        salt: salt.toString('hex')
    };

    if (kdf === 'pbkdf2') {
        kdfparams.c = options.c || 262144;
        kdfparams.prf = 'hmac-sha256';
        derivedKey = cryp.pbkdf2Sync(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.c, kdfparams.dklen, 'sha256');
    } else if (kdf === 'scrypt') {
        // FIXME: support progress reporting callback
        kdfparams.n = options.n || 8192; // 2048 4096 8192 16384
        kdfparams.r = options.r || 8;
        kdfparams.p = options.p || 1;
        derivedKey = scrypt(Buffer.from(password), Buffer.from(kdfparams.salt, 'hex'), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen);
    } else {
        throw new Error('Unsupported kdf');
    }

    var cipher = cryp.createCipheriv(options.cipher || 'aes-128-ctr', derivedKey.slice(0, 16), iv);
    if (!cipher) {
        throw new Error('Unsupported cipher');
    }

    var ciphertext = Buffer.concat([ cipher.update(Buffer.from(account.privateKey.replace('0x',''), 'hex')), cipher.final() ]);

    var mac = utils.sha3(Buffer.concat([ derivedKey.slice(16, 32), Buffer.from(ciphertext, 'hex') ])).replace('0x','');

    return {
        version: 3,
        id: uuid.v4({ random: options.uuid || cryp.randomBytes(16) }),
        address: account.address.toLowerCase().replace('0x',''),
        crypto: {
            ciphertext: ciphertext.toString('hex'),
            cipherparams: {
                iv: iv.toString('hex')
            },
            cipher: options.cipher || 'aes-128-ctr',
            kdf: kdf,
            kdfparams: kdfparams,
            mac: mac.toString('hex')
        }
    };
};


// Note: this is trying to follow closely the specs on
// http://web3js.readthedocs.io/en/1.0/web3-eth-accounts.html

function Wallet(accounts) {
    this._accounts = accounts;
    this.length = 0;
    this.defaultKeyName = "web3js_wallet";
}

Wallet.prototype._findSafeIndex = function (pointer) {
    pointer = pointer || 0;
    if (_.has(this, pointer)) {
        return this._findSafeIndex(pointer + 1);
    } else {
        return pointer;
    }
};

Wallet.prototype._currentIndexes = function () {
    var keys = Object.keys(this);
    var indexes = keys
        .map(function(key) { return parseInt(key); })
        .filter(function(n) { return (n < 9e20); });

    return indexes;
};

Wallet.prototype.create = function (numberOfAccounts, entropy) {
    for (var i = 0; i < numberOfAccounts; ++i) {
        this.add(this._accounts.create(entropy).privateKey);
    }
    return this;
};

Wallet.prototype.add = function (account) {

    if (_.isString(account)) {
        account = this._accounts.privateKeyToAccount(account);
    }
    if (!this[account.address]) {
        account = this._accounts.privateKeyToAccount(account.privateKey);
        account.index = this._findSafeIndex();

        this[account.index] = account;
        this[account.address] = account;
        this[account.address.toLowerCase()] = account;

        this.length++;

        return account;
    } else {
        return this[account.address];
    }
};

Wallet.prototype.remove = function (addressOrIndex) {
    var account = this[addressOrIndex];

    if (account && account.address) {
        // address
        this[account.address].privateKey = null;
        delete this[account.address];
        // address lowercase
        this[account.address.toLowerCase()].privateKey = null;
        delete this[account.address.toLowerCase()];
        // index
        this[account.index].privateKey = null;
        delete this[account.index];

        this.length--;

        return true;
    } else {
        return false;
    }
};

Wallet.prototype.clear = function () {
    var _this = this;
    var indexes = this._currentIndexes();

    indexes.forEach(function(index) {
        _this.remove(index);
    });

    return this;
};

Wallet.prototype.encrypt = function (password, options) {
    var _this = this;
    var indexes = this._currentIndexes();

    var accounts = indexes.map(function(index) {
        return _this[index].encrypt(password, options);
    });

    return accounts;
};


Wallet.prototype.decrypt = function (encryptedWallet, password) {
    var _this = this;

    encryptedWallet.forEach(function (keystore) {
        var account = _this._accounts.decrypt(keystore, password);

        if (account) {
            _this.add(account);
        } else {
            throw new Error('Couldn\'t decrypt accounts. Password wrong?');
        }
    });

    return this;
};

Wallet.prototype.save = function (password, keyName) {
    localStorage.setItem(keyName || this.defaultKeyName, JSON.stringify(this.encrypt(password)));

    return true;
};

Wallet.prototype.load = function (password, keyName) {
    var keystore = localStorage.getItem(keyName || this.defaultKeyName);

    if (keystore) {
        try {
            keystore = JSON.parse(keystore);
        } catch(e) {

        }
    }

    return this.decrypt(keystore || [], password);
};

if (typeof localStorage === 'undefined') {
    delete Wallet.prototype.save;
    delete Wallet.prototype.load;
}


module.exports = Accounts;


/***/ }),

/***/ 426193:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var scryptsy = __webpack_require__(373151);

var scrypt;

var isNode = Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';
if (isNode) {
    var NODE_MIN_VER_WITH_BUILTIN_SCRYPT = '10.5.0';
    var NODE_MIN_VER_INCOMPAT_SCRYPT_PKG = '12.0.0';
    var semver = __webpack_require__(154469);
    var useNodeBuiltin = isNode && semver.Range('>=' + NODE_MIN_VER_WITH_BUILTIN_SCRYPT).test(process.version);

    var tryScryptPkg = (function() {
        var scryptPkg;
        return function() {
            if (scryptPkg !== undefined) { return scryptPkg; }
            try {
                scryptPkg = (function(m) { return __webpack_require__(507745)(m); })('scrypt');
            } catch (e) {
                if (/was compiled against a different/.test(e.message)) {
                    throw e;
                }
                scryptPkg = null;
            }
            return scryptPkg;
        };
    })();

    var canImprove = function(nodeVer) {
        return 'can improve web3\'s peformance when running Node.js versions older than ' + nodeVer + ' by installing the (deprecated) scrypt package in your project';
    };

    if (useNodeBuiltin) {
        var crypto = __webpack_require__(676417);
        var fallbackCount = 0;
        scrypt = function(key, salt, N, r, p, dkLen) {
            try {
                return crypto.scryptSync(key, salt, dkLen, {N: N, r: r, p: p});
            } catch (e) {
                if (/scrypt:memory limit exceeded/.test(e.message)) {
                    var scryptPkg = tryScryptPkg();
                    if (scryptPkg) {
                        return scryptPkg.hashSync(key, {N: N, r: r, p: p}, dkLen, salt);
                    }
                    fallbackCount += 1;
                    console.warn(
                        '\x1b[33m%s\x1b[0m',
                        'Memory limit exceeded for Node\'s built-in crypto.scrypt, falling back to scryptsy (times: ' + fallbackCount + '), if this happens frequently you ' + canImprove(NODE_MIN_VER_INCOMPAT_SCRYPT_PKG)
                    );
                    return scryptsy(key, salt, N, r, p, dkLen);
                }
                throw e;
            }
        };
    } else {
        var scryptPkg = tryScryptPkg();
        if (scryptPkg) {
            scrypt = function(key, salt, N, r, p, dkLen) {
                return scryptPkg.hashSync(key, {N: N, r: r, p: p}, dkLen, salt);
            };
        } else {
            console.warn(
                '\x1b[33m%s\x1b[0m',
                'You ' + canImprove(NODE_MIN_VER_WITH_BUILTIN_SCRYPT)
            );
        }
    }
}

scrypt = scrypt || scryptsy;

module.exports = scrypt;


/***/ }),

/***/ 234303:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.
    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file ENS.js
 *
 * @author Samuel Furter <samuel@ethereum.org>
 * @date 2018
 */



var config = __webpack_require__(187534);
var Registry = __webpack_require__(207201);
var ResolverMethodHandler = __webpack_require__(758036);

/**
 * Constructs a new instance of ENS
 *
 * @method ENS
 * @param {Object} eth
 * @constructor
 */
function ENS(eth) {
    this.eth = eth;
}

Object.defineProperty(ENS.prototype, 'registry', {
    get: function () {
        return new Registry(this);
    },
    enumerable: true
});

Object.defineProperty(ENS.prototype, 'resolverMethodHandler', {
    get: function () {
        return new ResolverMethodHandler(this.registry);
    },
    enumerable: true
});

/**
 * @param {string} name
 * @returns {Promise<Contract>}
 */
ENS.prototype.resolver = function (name) {
    return this.registry.resolver(name);
};

/**
 * Returns the address record associated with a name.
 *
 * @method getAddress
 * @param {string} name
 * @param {function} callback
 * @return {eventifiedPromise}
 */
ENS.prototype.getAddress = function (name, callback) {
    return this.resolverMethodHandler.method(name, 'addr', []).call(callback);
};

/**
 * Sets a new address
 *
 * @method setAddress
 * @param {string} name
 * @param {string} address
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.setAddress = function (name, address, sendOptions, callback) {
    return this.resolverMethodHandler.method(name, 'setAddr', [address]).send(sendOptions, callback);
};

/**
 * Returns the public key
 *
 * @method getPubkey
 * @param {string} name
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.getPubkey = function (name, callback) {
    return this.resolverMethodHandler.method(name, 'pubkey', [], callback).call(callback);
};

/**
 * Set the new public key
 *
 * @method setPubkey
 * @param {string} name
 * @param {string} x
 * @param {string} y
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.setPubkey = function (name, x, y, sendOptions, callback) {
    return this.resolverMethodHandler.method(name, 'setPubkey', [x, y]).send(sendOptions, callback);
};

/**
 * Returns the content
 *
 * @method getContent
 * @param {string} name
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.getContent = function (name, callback) {
    return this.resolverMethodHandler.method(name, 'content', []).call(callback);
};

/**
 * Set the content
 *
 * @method setContent
 * @param {string} name
 * @param {string} hash
 * @param {function} callback
 * @param {Object} sendOptions
 * @returns {eventifiedPromise}
 */
ENS.prototype.setContent = function (name, hash, sendOptions, callback) {
    return this.resolverMethodHandler.method(name, 'setContent', [hash]).send(sendOptions, callback);
};

/**
 * Get the multihash
 *
 * @method getMultihash
 * @param {string} name
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.getMultihash = function (name, callback) {
    return this.resolverMethodHandler.method(name, 'multihash', []).call(callback);
};

/**
 * Set the multihash
 *
 * @method setMultihash
 * @param {string} name
 * @param {string} hash
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ENS.prototype.setMultihash = function (name, hash, sendOptions, callback) {
    return this.resolverMethodHandler.method(name, 'multihash', [hash]).send(sendOptions, callback);
};

/**
 * Checks if the current used network is synced and looks for ENS support there.
 * Throws an error if not.
 *
 * @returns {Promise<Block>}
 */
ENS.prototype.checkNetwork = function () {
    var self = this;
    return self.eth.getBlock('latest').then(function (block) {
        var headAge = new Date() / 1000 - block.timestamp;
        if (headAge > 3600) {
            throw new Error("Network not synced; last block was " + headAge + " seconds ago");
        }
        return self.eth.net.getNetworkType();
    }).then(function (networkType) {
        var addr = config.addresses[networkType];
        if (typeof addr === 'undefined') {
            throw new Error("ENS is not supported on network " + networkType);
        }

        return addr;
    });
};

module.exports = ENS;


/***/ }),

/***/ 187534:
/***/ ((module) => {

"use strict";


var config = {
    addresses: {
        main: "0x314159265dD8dbb310642f98f50C066173C1259b",
        ropsten: "0x112234455c3a32fd11230c42e7bccd4a84e02010",
        rinkeby: "0xe7410170f87102df0055eb195163a03b7f2bff4a"
    },
};

module.exports = config;


/***/ }),

/***/ 207201:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.
    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file Registry.js
 *
 * @author Samuel Furter <samuel@ethereum.org>
 * @date 2018
 */



var _ = __webpack_require__(513469);
var Contract = __webpack_require__(647787);
var namehash = __webpack_require__(159873);
var PromiEvent = __webpack_require__(937233);
var REGISTRY_ABI = __webpack_require__(704906);
var RESOLVER_ABI = __webpack_require__(741885);


/**
 * A wrapper around the ENS registry contract.
 *
 * @method Registry
 * @param {Ens} ens
 * @constructor
 */
function Registry(ens) {
    var self = this;
    this.ens = ens;
    this.contract = ens.checkNetwork().then(function (address) {
        var contract = new Contract(REGISTRY_ABI, address);
        contract.setProvider(self.ens.eth.currentProvider);

        return contract;
    });
}

/**
 * Returns the address of the owner of an ENS name.
 *
 * @method owner
 * @param {string} name
 * @param {function} callback
 * @return {Promise<any>}
 */
Registry.prototype.owner = function (name, callback) {
    var promiEvent = new PromiEvent(true);

    this.contract.then(function (contract) {
        contract.methods.owner(namehash.hash(name)).call()
            .then(function (receipt) {
                promiEvent.resolve(receipt);

                if (_.isFunction(callback)) {
                    callback(receipt);
                }
            })
            .catch(function (error) {
                promiEvent.reject(error);

                if (_.isFunction(callback)) {
                    callback(error);
                }
            });
    });

    return promiEvent.eventEmitter;
};

/**
 * Returns the resolver contract associated with a name.
 *
 * @method resolver
 * @param {string} name
 * @return {Promise<Contract>}
 */
Registry.prototype.resolver = function (name) {
    var self = this;

    return this.contract.then(function (contract) {
        return contract.methods.resolver(namehash.hash(name)).call();
    }).then(function (address) {
        var contract = new Contract(RESOLVER_ABI, address);
        contract.setProvider(self.ens.eth.currentProvider);
        return contract;
    });
};

module.exports = Registry;


/***/ }),

/***/ 546671:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.
    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 *
 * @author Samuel Furter <samuel@ethereum.org>
 * @date 2018
 */



var ENS = __webpack_require__(234303);

module.exports = ENS;


/***/ }),

/***/ 758036:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.
    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.
    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file ResolverMethodHandler.js
 *
 * @author Samuel Furter <samuel@ethereum.org>
 * @date 2018
 */



var PromiEvent = __webpack_require__(937233);
var namehash = __webpack_require__(159873);
var _ = __webpack_require__(513469);

/**
 * @param {Registry} registry
 * @constructor
 */
function ResolverMethodHandler(registry) {
    this.registry = registry;
}

/**
 * Executes an resolver method and returns an eventifiedPromise
 *
 * @param {string} ensName
 * @param {string} methodName
 * @param {array} methodArguments
 * @param {function} callback
 * @returns {Object}
 */
ResolverMethodHandler.prototype.method = function (ensName, methodName, methodArguments, callback) {
    return {
        call: this.call.bind({
            ensName: ensName,
            methodName: methodName,
            methodArguments: methodArguments,
            callback: callback,
            parent: this
        }),
        send: this.send.bind({
            ensName: ensName,
            methodName: methodName,
            methodArguments: methodArguments,
            callback: callback,
            parent: this
        })
    };
};

/**
 * Executes call
 *
 * @returns {eventifiedPromise}
 */
ResolverMethodHandler.prototype.call = function (callback) {
    var self = this;
    var promiEvent = new PromiEvent();
    var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments);

    this.parent.registry.resolver(this.ensName).then(function (resolver) {
        self.parent.handleCall(promiEvent, resolver.methods[self.methodName], preparedArguments, callback);
    }).catch(function (error) {
        promiEvent.reject(error);
    });

    return promiEvent.eventEmitter;
};


/**
 * Executes send
 *
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ResolverMethodHandler.prototype.send = function (sendOptions, callback) {
    var self = this;
    var promiEvent = new PromiEvent();
    var preparedArguments = this.parent.prepareArguments(this.ensName, this.methodArguments);

    this.parent.registry.resolver(this.ensName).then(function (resolver) {
        self.parent.handleSend(promiEvent, resolver.methods[self.methodName], preparedArguments, sendOptions, callback);
    }).catch(function (error) {
        promiEvent.reject(error);
    });

    return promiEvent.eventEmitter;
};

/**
 * Handles a call method
 *
 * @param {eventifiedPromise} promiEvent
 * @param {function} method
 * @param {array} preparedArguments
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ResolverMethodHandler.prototype.handleCall = function (promiEvent, method, preparedArguments, callback) {
    method.apply(this, preparedArguments).call()
        .then(function (receipt) {
            promiEvent.resolve(receipt);

            if (_.isFunction(callback)) {
                callback(receipt);
            }
        }).catch(function (error) {
            promiEvent.reject(error);

            if (_.isFunction(callback)) {
                callback(error);
            }
        });

    return promiEvent;
};

/**
 * Handles a send method
 *
 * @param {eventifiedPromise} promiEvent
 * @param {function} method
 * @param {array} preparedArguments
 * @param {Object} sendOptions
 * @param {function} callback
 * @returns {eventifiedPromise}
 */
ResolverMethodHandler.prototype.handleSend = function (promiEvent, method, preparedArguments, sendOptions, callback) {
    method.apply(this, preparedArguments).send(sendOptions)
        .on('transactionHash', function (hash) {
            promiEvent.eventEmitter.emit('transactionHash', hash);
        })
        .on('confirmation', function (confirmationNumber, receipt) {
            promiEvent.eventEmitter.emit('confirmation', confirmationNumber, receipt);
        })
        .on('receipt', function (receipt) {
            promiEvent.eventEmitter.emit('receipt', receipt);
            promiEvent.resolve(receipt);

            if (_.isFunction(callback)) {
                callback(receipt);
            }
        })
        .on('error', function (error) {
            promiEvent.eventEmitter.emit('error', error);
            promiEvent.reject(error);

            if (_.isFunction(callback)) {
                callback(error);
            }
        });

    return promiEvent;
};

/**
 * Adds the ENS node to the arguments
 *
 * @param {string} name
 * @param {array} methodArguments
 * @returns {array}
 */
ResolverMethodHandler.prototype.prepareArguments = function (name, methodArguments) {
    var node = namehash.hash(name);

    if (methodArguments.length > 0) {
        methodArguments.unshift(node);

        return methodArguments;
    }

    return [node];
};

module.exports = ResolverMethodHandler;


/***/ }),

/***/ 704906:
/***/ ((module) => {

"use strict";


var REGISTRY = [
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "resolver",
        "outputs": [
            {
                "name": "",
                "type": "address"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "owner",
        "outputs": [
            {
                "name": "",
                "type": "address"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "label",
                "type": "bytes32"
            },
            {
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "setSubnodeOwner",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "ttl",
                "type": "uint64"
            }
        ],
        "name": "setTTL",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "ttl",
        "outputs": [
            {
                "name": "",
                "type": "uint64"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "resolver",
                "type": "address"
            }
        ],
        "name": "setResolver",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "setOwner",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "Transfer",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": true,
                "name": "label",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "owner",
                "type": "address"
            }
        ],
        "name": "NewOwner",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "resolver",
                "type": "address"
            }
        ],
        "name": "NewResolver",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "ttl",
                "type": "uint64"
            }
        ],
        "name": "NewTTL",
        "type": "event"
    }
];

module.exports = REGISTRY;


/***/ }),

/***/ 741885:
/***/ ((module) => {

"use strict";


var RESOLVER = [
    {
        "constant": true,
        "inputs": [
            {
                "name": "interfaceID",
                "type": "bytes4"
            }
        ],
        "name": "supportsInterface",
        "outputs": [
            {
                "name": "",
                "type": "bool"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "contentTypes",
                "type": "uint256"
            }
        ],
        "name": "ABI",
        "outputs": [
            {
                "name": "contentType",
                "type": "uint256"
            },
            {
                "name": "data",
                "type": "bytes"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "hash",
                "type": "bytes"
            }
        ],
        "name": "setMultihash",
        "outputs": [],
        "payable": false,
        "stateMutability": "nonpayable",
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "multihash",
        "outputs": [
            {
                "name": "",
                "type": "bytes"
            }
        ],
        "payable": false,
        "stateMutability": "view",
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "x",
                "type": "bytes32"
            },
            {
                "name": "y",
                "type": "bytes32"
            }
        ],
        "name": "setPubkey",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "content",
        "outputs": [
            {
                "name": "ret",
                "type": "bytes32"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "addr",
        "outputs": [
            {
                "name": "ret",
                "type": "address"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "contentType",
                "type": "uint256"
            },
            {
                "name": "data",
                "type": "bytes"
            }
        ],
        "name": "setABI",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "name",
        "outputs": [
            {
                "name": "ret",
                "type": "string"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "name",
                "type": "string"
            }
        ],
        "name": "setName",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "hash",
                "type": "bytes32"
            }
        ],
        "name": "setContent",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "constant": true,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            }
        ],
        "name": "pubkey",
        "outputs": [
            {
                "name": "x",
                "type": "bytes32"
            },
            {
                "name": "y",
                "type": "bytes32"
            }
        ],
        "payable": false,
        "type": "function"
    },
    {
        "constant": false,
        "inputs": [
            {
                "name": "node",
                "type": "bytes32"
            },
            {
                "name": "addr",
                "type": "address"
            }
        ],
        "name": "setAddr",
        "outputs": [],
        "payable": false,
        "type": "function"
    },
    {
        "inputs": [
            {
                "name": "ensAddr",
                "type": "address"
            }
        ],
        "payable": false,
        "type": "constructor"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "a",
                "type": "address"
            }
        ],
        "name": "AddrChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "hash",
                "type": "bytes32"
            }
        ],
        "name": "ContentChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "name",
                "type": "string"
            }
        ],
        "name": "NameChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": true,
                "name": "contentType",
                "type": "uint256"
            }
        ],
        "name": "ABIChanged",
        "type": "event"
    },
    {
        "anonymous": false,
        "inputs": [
            {
                "indexed": true,
                "name": "node",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "x",
                "type": "bytes32"
            },
            {
                "indexed": false,
                "name": "y",
                "type": "bytes32"
            }
        ],
        "name": "PubkeyChanged",
        "type": "event"
    }
];

module.exports = RESOLVER;


/***/ }),

/***/ 140036:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file getNetworkType.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);

var getNetworkType = function (callback) {
    var _this = this,
        id;


    return this.net.getId()
        .then(function (givenId) {

            id = givenId;

            return _this.getBlock(0);
        })
        .then(function (genesis) {
            var returnValue = 'private';

            if (genesis.hash === '0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3' &&
                id === 1) {
                returnValue = 'main';
            }
            if (genesis.hash === '0cd786a2425d16f152c658316c423e6ce1181e15c3295826d7c9904cba9ce303' &&
                id === 2) {
                returnValue = 'morden';
            }
            if (genesis.hash === '0x41941023680923e0fe4d74a34bdac8141f2540e3ae90623718e47d66d1ca4a2d' &&
                id === 3) {
                returnValue = 'ropsten';
            }
            if (genesis.hash === '0x6341fd3daf94b748c72ced5a5b26028f2474f5f00d824504e4fa37a75767e177' &&
                id === 4) {
                returnValue = 'rinkeby';
            }
            if (genesis.hash === '0xa3c565fc15c7478862d50ccd6561e3c06b24cc509bf388941c25ea985ce32cb9' &&
                id === 42) {
                returnValue = 'kovan';
            }

            if (_.isFunction(callback)) {
                callback(null, returnValue);
            }

            return returnValue;
        })
        .catch(function (err) {
            if (_.isFunction(callback)) {
                callback(err);
            } else {
                throw err;
            }
        });
};

module.exports = getNetworkType;


/***/ }),

/***/ 626629:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var _ = __webpack_require__(513469);
var core = __webpack_require__(829949);
var helpers = __webpack_require__(927354);
var Subscriptions = __webpack_require__(131141).subscriptions;
var Method = __webpack_require__(946132);
var utils = __webpack_require__(716915);
var Net = __webpack_require__(787714);

var ENS = __webpack_require__(546671);
var Personal = __webpack_require__(532269);
var BaseContract = __webpack_require__(647787);
var Iban = __webpack_require__(808804);
var Accounts = __webpack_require__(78495);
var abi = __webpack_require__(823150);

var getNetworkType = __webpack_require__(140036);
var formatter = helpers.formatters;


var blockCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? "eth_getBlockByHash" : "eth_getBlockByNumber";
};

var transactionFromBlockCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getTransactionByBlockHashAndIndex' : 'eth_getTransactionByBlockNumberAndIndex';
};

var uncleCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleByBlockHashAndIndex' : 'eth_getUncleByBlockNumberAndIndex';
};

var getBlockTransactionCountCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getBlockTransactionCountByHash' : 'eth_getBlockTransactionCountByNumber';
};

var uncleCountCall = function (args) {
    return (_.isString(args[0]) && args[0].indexOf('0x') === 0) ? 'eth_getUncleCountByBlockHash' : 'eth_getUncleCountByBlockNumber';
};


var Eth = function Eth() {
    var _this = this;

    // sets _requestmanager
    core.packageInit(this, arguments);

    // overwrite setProvider
    var setProvider = this.setProvider;
    this.setProvider = function () {
        setProvider.apply(_this, arguments);
        _this.net.setProvider.apply(_this, arguments);
        _this.personal.setProvider.apply(_this, arguments);
        _this.accounts.setProvider.apply(_this, arguments);
        _this.Contract.setProvider(_this.currentProvider, _this.accounts);
    };


    var defaultAccount = null;
    var defaultBlock = 'latest';

    Object.defineProperty(this, 'defaultAccount', {
        get: function () {
            return defaultAccount;
        },
        set: function (val) {
            if(val) {
                defaultAccount = utils.toChecksumAddress(formatter.inputAddressFormatter(val));
            }

            // also set on the Contract object
            _this.Contract.defaultAccount = defaultAccount;
            _this.personal.defaultAccount = defaultAccount;

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultAccount = defaultAccount;
            });

            return val;
        },
        enumerable: true
    });
    Object.defineProperty(this, 'defaultBlock', {
        get: function () {
            return defaultBlock;
        },
        set: function (val) {
            defaultBlock = val;
            // also set on the Contract object
            _this.Contract.defaultBlock = defaultBlock;
            _this.personal.defaultBlock = defaultBlock;

            // update defaultBlock
            methods.forEach(function(method) {
                method.defaultBlock = defaultBlock;
            });

            return val;
        },
        enumerable: true
    });


    this.clearSubscriptions = _this._requestManager.clearSubscriptions;

    // add net
    this.net = new Net(this.currentProvider);
    // add chain detection
    this.net.getNetworkType = getNetworkType.bind(this);

    // add accounts
    this.accounts = new Accounts(this.currentProvider);

    // add personal
    this.personal = new Personal(this.currentProvider);
    this.personal.defaultAccount = this.defaultAccount;

    // create a proxy Contract type for this instance, as a Contract's provider
    // is stored as a class member rather than an instance variable. If we do
    // not create this proxy type, changing the provider in one instance of
    // web3-eth would subsequently change the provider for _all_ contract
    // instances!
    var self = this;
    var Contract = function Contract() {
        BaseContract.apply(this, arguments);

        // when Eth.setProvider is called, call packageInit
        // on all contract instances instantiated via this Eth
        // instances. This will update the currentProvider for
        // the contract instances
        var _this = this;
        var setProvider = self.setProvider;
        self.setProvider = function() {
          setProvider.apply(self, arguments);
          core.packageInit(_this, [self.currentProvider]);
        };
    };

    Contract.setProvider = function() {
        BaseContract.setProvider.apply(this, arguments);
    };

    // make our proxy Contract inherit from web3-eth-contract so that it has all
    // the right functionality and so that instanceof and friends work properly
    Contract.prototype = Object.create(BaseContract.prototype);
    Contract.prototype.constructor = Contract;

    // add contract
    this.Contract = Contract;
    this.Contract.defaultAccount = this.defaultAccount;
    this.Contract.defaultBlock = this.defaultBlock;
    this.Contract.setProvider(this.currentProvider, this.accounts);

    // add IBAN
    this.Iban = Iban;

    // add ABI
    this.abi = abi;

    // add ENS
    this.ens = new ENS(this);

    var methods = [
        new Method({
            name: 'getNodeInfo',
            call: 'web3_clientVersion'
        }),
        new Method({
            name: 'getProtocolVersion',
            call: 'eth_protocolVersion',
            params: 0
        }),
        new Method({
            name: 'getCoinbase',
            call: 'eth_coinbase',
            params: 0
        }),
        new Method({
            name: 'isMining',
            call: 'eth_mining',
            params: 0
        }),
        new Method({
            name: 'getHashrate',
            call: 'eth_hashrate',
            params: 0,
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'isSyncing',
            call: 'eth_syncing',
            params: 0,
            outputFormatter: formatter.outputSyncingFormatter
        }),
        new Method({
            name: 'getGasPrice',
            call: 'eth_gasPrice',
            params: 0,
            outputFormatter: formatter.outputBigNumberFormatter
        }),
        new Method({
            name: 'getAccounts',
            call: 'eth_accounts',
            params: 0,
            outputFormatter: utils.toChecksumAddress
        }),
        new Method({
            name: 'getBlockNumber',
            call: 'eth_blockNumber',
            params: 0,
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'getBalance',
            call: 'eth_getBalance',
            params: 2,
            inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter],
            outputFormatter: formatter.outputBigNumberFormatter
        }),
        new Method({
            name: 'getStorageAt',
            call: 'eth_getStorageAt',
            params: 3,
            inputFormatter: [formatter.inputAddressFormatter, utils.numberToHex, formatter.inputDefaultBlockNumberFormatter]
        }),
        new Method({
            name: 'getCode',
            call: 'eth_getCode',
            params: 2,
            inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter]
        }),
        new Method({
            name: 'getBlock',
            call: blockCall,
            params: 2,
            inputFormatter: [formatter.inputBlockNumberFormatter, function (val) { return !!val; }],
            outputFormatter: formatter.outputBlockFormatter
        }),
        new Method({
            name: 'getUncle',
            call: uncleCall,
            params: 2,
            inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex],
            outputFormatter: formatter.outputBlockFormatter,

        }),
        new Method({
            name: 'getBlockTransactionCount',
            call: getBlockTransactionCountCall,
            params: 1,
            inputFormatter: [formatter.inputBlockNumberFormatter],
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'getBlockUncleCount',
            call: uncleCountCall,
            params: 1,
            inputFormatter: [formatter.inputBlockNumberFormatter],
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'getTransaction',
            call: 'eth_getTransactionByHash',
            params: 1,
            inputFormatter: [null],
            outputFormatter: formatter.outputTransactionFormatter
        }),
        new Method({
            name: 'getTransactionFromBlock',
            call: transactionFromBlockCall,
            params: 2,
            inputFormatter: [formatter.inputBlockNumberFormatter, utils.numberToHex],
            outputFormatter: formatter.outputTransactionFormatter
        }),
        new Method({
            name: 'getTransactionReceipt',
            call: 'eth_getTransactionReceipt',
            params: 1,
            inputFormatter: [null],
            outputFormatter: formatter.outputTransactionReceiptFormatter
        }),
        new Method({
            name: 'getTransactionCount',
            call: 'eth_getTransactionCount',
            params: 2,
            inputFormatter: [formatter.inputAddressFormatter, formatter.inputDefaultBlockNumberFormatter],
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'sendSignedTransaction',
            call: 'eth_sendRawTransaction',
            params: 1,
            inputFormatter: [null]
        }),
        new Method({
            name: 'signTransaction',
            call: 'eth_signTransaction',
            params: 1,
            inputFormatter: [formatter.inputTransactionFormatter]
        }),
        new Method({
            name: 'sendTransaction',
            call: 'eth_sendTransaction',
            params: 1,
            inputFormatter: [formatter.inputTransactionFormatter]
        }),
        new Method({
            name: 'sign',
            call: 'eth_sign',
            params: 2,
            inputFormatter: [formatter.inputSignFormatter, formatter.inputAddressFormatter],
            transformPayload: function (payload) {
                payload.params.reverse();
                return payload;
            }
        }),
        new Method({
            name: 'call',
            call: 'eth_call',
            params: 2,
            inputFormatter: [formatter.inputCallFormatter, formatter.inputDefaultBlockNumberFormatter]
        }),
        new Method({
            name: 'estimateGas',
            call: 'eth_estimateGas',
            params: 1,
            inputFormatter: [formatter.inputCallFormatter],
            outputFormatter: utils.hexToNumber
        }),
        new Method({
            name: 'submitWork',
            call: 'eth_submitWork',
            params: 3
        }),
        new Method({
            name: 'getWork',
            call: 'eth_getWork',
            params: 0
        }),
        new Method({
            name: 'getPastLogs',
            call: 'eth_getLogs',
            params: 1,
            inputFormatter: [formatter.inputLogFormatter],
            outputFormatter: formatter.outputLogFormatter
        }),

        // subscriptions
        new Subscriptions({
            name: 'subscribe',
            type: 'eth',
            subscriptions: {
                'newBlockHeaders': {
                    // TODO rename on RPC side?
                    subscriptionName: 'newHeads', // replace subscription with this name
                    params: 0,
                    outputFormatter: formatter.outputBlockFormatter
                },
                'pendingTransactions': {
                    subscriptionName: 'newPendingTransactions', // replace subscription with this name
                    params: 0
                },
                'logs': {
                    params: 1,
                    inputFormatter: [formatter.inputLogFormatter],
                    outputFormatter: formatter.outputLogFormatter,
                    // DUBLICATE, also in web3-eth-contract
                    subscriptionHandler: function (output) {
                        if(output.removed) {
                            this.emit('changed', output);
                        } else {
                            this.emit('data', output);
                        }

                        if (_.isFunction(this.callback)) {
                            this.callback(null, output, this);
                        }
                    }
                },
                'syncing': {
                    params: 0,
                    outputFormatter: formatter.outputSyncingFormatter,
                    subscriptionHandler: function (output) {
                        var _this = this;

                        // fire TRUE at start
                        if(this._isSyncing !== true) {
                            this._isSyncing = true;
                            this.emit('changed', _this._isSyncing);

                            if (_.isFunction(this.callback)) {
                                this.callback(null, _this._isSyncing, this);
                            }

                            setTimeout(function () {
                                _this.emit('data', output);

                                if (_.isFunction(_this.callback)) {
                                    _this.callback(null, output, _this);
                                }
                            }, 0);

                            // fire sync status
                        } else {
                            this.emit('data', output);
                            if (_.isFunction(_this.callback)) {
                                this.callback(null, output, this);
                            }

                            // wait for some time before fireing the FALSE
                            clearTimeout(this._isSyncingTimeout);
                            this._isSyncingTimeout = setTimeout(function () {
                                if(output.currentBlock > output.highestBlock - 200) {
                                    _this._isSyncing = false;
                                    _this.emit('changed', _this._isSyncing);

                                    if (_.isFunction(_this.callback)) {
                                        _this.callback(null, _this._isSyncing, _this);
                                    }
                                }
                            }, 500);
                        }
                    }
                }
            }
        })
    ];

    methods.forEach(function(method) {
        method.attachToObject(_this);
        method.setRequestManager(_this._requestManager, _this.accounts); // second param means is eth.accounts (necessary for wallet signing)
        method.defaultBlock = _this.defaultBlock;
        method.defaultAccount = _this.defaultAccount;
    });

};

core.addProviders(Eth);


module.exports = Eth;



/***/ }),

/***/ 434513:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */



var core = __webpack_require__(829949);
var Subscriptions = __webpack_require__(131141).subscriptions;
var Method = __webpack_require__(946132);
// var formatters = require('web3-core-helpers').formatters;
var Net = __webpack_require__(787714);


var Shh = function Shh() {
    var _this = this;

    // sets _requestmanager
    core.packageInit(this, arguments);

    // overwrite setProvider
    var setProvider = this.setProvider;
    this.setProvider = function () {
        setProvider.apply(_this, arguments);
        _this.net.setProvider.apply(_this, arguments);
    };

    this.net = new Net(this.currentProvider);

    [
        new Subscriptions({
            name: 'subscribe',
            type: 'shh',
            subscriptions: {
                'messages': {
                    params: 1
                    // inputFormatter: [formatters.inputPostFormatter],
                    // outputFormatter: formatters.outputPostFormatter
                }
            }
        }),

        new Method({
            name: 'getVersion',
            call: 'shh_version',
            params: 0
        }),
        new Method({
            name: 'getInfo',
            call: 'shh_info',
            params: 0
        }),
        new Method({
            name: 'setMaxMessageSize',
            call: 'shh_setMaxMessageSize',
            params: 1
        }),
        new Method({
            name: 'setMinPoW',
            call: 'shh_setMinPoW',
            params: 1
        }),
        new Method({
            name: 'markTrustedPeer',
            call: 'shh_markTrustedPeer',
            params: 1
        }),
        new Method({
            name: 'newKeyPair',
            call: 'shh_newKeyPair',
            params: 0
        }),
        new Method({
            name: 'addPrivateKey',
            call: 'shh_addPrivateKey',
            params: 1
        }),
        new Method({
            name: 'deleteKeyPair',
            call: 'shh_deleteKeyPair',
            params: 1
        }),
        new Method({
            name: 'hasKeyPair',
            call: 'shh_hasKeyPair',
            params: 1
        }),
        new Method({
            name: 'getPublicKey',
            call: 'shh_getPublicKey',
            params: 1
        }),
        new Method({
            name: 'getPrivateKey',
            call: 'shh_getPrivateKey',
            params: 1
        }),
        new Method({
            name: 'newSymKey',
            call: 'shh_newSymKey',
            params: 0
        }),
        new Method({
            name: 'addSymKey',
            call: 'shh_addSymKey',
            params: 1
        }),
        new Method({
            name: 'generateSymKeyFromPassword',
            call: 'shh_generateSymKeyFromPassword',
            params: 1
        }),
        new Method({
            name: 'hasSymKey',
            call: 'shh_hasSymKey',
            params: 1
        }),
        new Method({
            name: 'getSymKey',
            call: 'shh_getSymKey',
            params: 1
        }),
        new Method({
            name: 'deleteSymKey',
            call: 'shh_deleteSymKey',
            params: 1
        }),

        new Method({
            name: 'newMessageFilter',
            call: 'shh_newMessageFilter',
            params: 1
        }),
        new Method({
            name: 'getFilterMessages',
            call: 'shh_getFilterMessages',
            params: 1
        }),
        new Method({
            name: 'deleteMessageFilter',
            call: 'shh_deleteMessageFilter',
            params: 1
        }),

        new Method({
            name: 'post',
            call: 'shh_post',
            params: 1,
            inputFormatter: [null]
        }),

        new Method({
            name: 'unsubscribe',
            call: 'shh_unsubscribe',
            params: 1
        })
    ].forEach(function(method) {
        method.attachToObject(_this);
        method.setRequestManager(_this._requestManager);
    });
};

Shh.prototype.clearSubscriptions = function () {
     this._requestManager.clearSubscriptions();
};

core.addProviders(Shh);



module.exports = Shh;




/***/ }),

/***/ 716915:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file utils.js
 * @author Marek Kotewicz <marek@parity.io>
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */


var _ = __webpack_require__(513469);
var ethjsUnit = __webpack_require__(694278);
var utils = __webpack_require__(218102);
var soliditySha3 = __webpack_require__(412409);
var randomHex = __webpack_require__(222638);



/**
 * Fires an error in an event emitter and callback and returns the eventemitter
 *
 * @method _fireError
 * @param {Object} error a string, a error, or an object with {message, data}
 * @param {Object} emitter
 * @param {Function} reject
 * @param {Function} callback
 * @return {Object} the emitter
 */
var _fireError = function (error, emitter, reject, callback) {
    /*jshint maxcomplexity: 10 */

    // add data if given
    if(_.isObject(error) && !(error instanceof Error) &&  error.data) {
        if(_.isObject(error.data) || _.isArray(error.data)) {
            error.data = JSON.stringify(error.data, null, 2);
        }

        error = error.message +"\n"+ error.data;
    }

    if(_.isString(error)) {
        error = new Error(error);
    }

    if (_.isFunction(callback)) {
        callback(error);
    }
    if (_.isFunction(reject)) {
        // suppress uncatched error if an error listener is present
        // OR suppress uncatched error if an callback listener is present
        if (emitter &&
            (_.isFunction(emitter.listeners) &&
            emitter.listeners('error').length) || _.isFunction(callback)) {
            emitter.catch(function(){});
        }
        // reject later, to be able to return emitter
        setTimeout(function () {
            reject(error);
        }, 1);
    }

    if(emitter && _.isFunction(emitter.emit)) {
        // emit later, to be able to return emitter
        setTimeout(function () {
            emitter.emit('error', error);
            emitter.removeAllListeners();
        }, 1);
    }

    return emitter;
};

/**
 * Should be used to create full function/event name from json abi
 *
 * @method _jsonInterfaceMethodToString
 * @param {Object} json
 * @return {String} full function/event name
 */
var _jsonInterfaceMethodToString = function (json) {
    if (_.isObject(json) && json.name && json.name.indexOf('(') !== -1) {
        return json.name;
    }

    return json.name + '(' + _flattenTypes(false, json.inputs).join(',') + ')';
};


/**
 * Should be used to flatten json abi inputs/outputs into an array of type-representing-strings
 *
 * @method _flattenTypes
 * @param {bool} includeTuple
 * @param {Object} puts
 * @return {Array} parameters as strings
 */
var _flattenTypes = function(includeTuple, puts)
{
    // console.log("entered _flattenTypes. inputs/outputs: " + puts)
    var types = [];

    puts.forEach(function(param) {
        if (typeof param.components === 'object') {
            if (param.type.substring(0, 5) !== 'tuple') {
                throw new Error('components found but type is not tuple; report on GitHub');
            }
            var suffix = '';
            var arrayBracket = param.type.indexOf('[');
            if (arrayBracket >= 0) { suffix = param.type.substring(arrayBracket); }
            var result = _flattenTypes(includeTuple, param.components);
            // console.log("result should have things: " + result)
            if(_.isArray(result) && includeTuple) {
                // console.log("include tuple word, and its an array. joining...: " + result.types)
                types.push('tuple(' + result.join(',') + ')' + suffix);
            }
            else if(!includeTuple) {
                // console.log("don't include tuple, but its an array. joining...: " + result)
                types.push('(' + result.join(',') + ')' + suffix);
            }
            else {
                // console.log("its a single type within a tuple: " + result.types)
                types.push('(' + result + ')');
            }
        } else {
            // console.log("its a type and not directly in a tuple: " + param.type)
            types.push(param.type);
        }
    });

    return types;
};


/**
 * Should be called to get ascii from it's hex representation
 *
 * @method hexToAscii
 * @param {String} hex
 * @returns {String} ascii string representation of hex value
 */
var hexToAscii = function(hex) {
    if (!utils.isHexStrict(hex))
        throw new Error('The parameter must be a valid HEX string.');

    var str = "";
    var i = 0, l = hex.length;
    if (hex.substring(0, 2) === '0x') {
        i = 2;
    }
    for (; i < l; i+=2) {
        var code = parseInt(hex.substr(i, 2), 16);
        str += String.fromCharCode(code);
    }

    return str;
};

/**
 * Should be called to get hex representation (prefixed by 0x) of ascii string
 *
 * @method asciiToHex
 * @param {String} str
 * @returns {String} hex representation of input string
 */
var asciiToHex = function(str) {
    if(!str)
        return "0x00";
    var hex = "";
    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
    }

    return "0x" + hex;
};



/**
 * Returns value of unit in Wei
 *
 * @method getUnitValue
 * @param {String} unit the unit to convert to, default ether
 * @returns {BN} value of the unit (in Wei)
 * @throws error if the unit is not correct:w
 */
var getUnitValue = function (unit) {
    unit = unit ? unit.toLowerCase() : 'ether';
    if (!ethjsUnit.unitMap[unit]) {
        throw new Error('This unit "'+ unit +'" doesn\'t exist, please use the one of the following units' + JSON.stringify(ethjsUnit.unitMap, null, 2));
    }
    return unit;
};

/**
 * Takes a number of wei and converts it to any other ether unit.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method fromWei
 * @param {Number|String} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert to, default ether
 * @return {String|Object} When given a BN object it returns one as well, otherwise a number
 */
var fromWei = function(number, unit) {
    unit = getUnitValue(unit);

    if(!utils.isBN(number) && !_.isString(number)) {
        throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.');
    }

    return utils.isBN(number) ? ethjsUnit.fromWei(number, unit) : ethjsUnit.fromWei(number, unit).toString(10);
};

/**
 * Takes a number of a unit and converts it to wei.
 *
 * Possible units are:
 *   SI Short   SI Full        Effigy       Other
 * - kwei       femtoether     babbage
 * - mwei       picoether      lovelace
 * - gwei       nanoether      shannon      nano
 * - --         microether     szabo        micro
 * - --         microether     szabo        micro
 * - --         milliether     finney       milli
 * - ether      --             --
 * - kether                    --           grand
 * - mether
 * - gether
 * - tether
 *
 * @method toWei
 * @param {Number|String|BN} number can be a number, number string or a HEX of a decimal
 * @param {String} unit the unit to convert from, default ether
 * @return {String|Object} When given a BN object it returns one as well, otherwise a number
 */
var toWei = function(number, unit) {
    unit = getUnitValue(unit);

    if(!utils.isBN(number) && !_.isString(number)) {
        throw new Error('Please pass numbers as strings or BigNumber objects to avoid precision errors.');
    }

    return utils.isBN(number) ? ethjsUnit.toWei(number, unit) : ethjsUnit.toWei(number, unit).toString(10);
};




/**
 * Converts to a checksum address
 *
 * @method toChecksumAddress
 * @param {String} address the given HEX address
 * @return {String}
 */
var toChecksumAddress = function (address) {
    if (typeof address === 'undefined') return '';

    if(!/^(0x)?[0-9a-f]{40}$/i.test(address))
        throw new Error('Given address "'+ address +'" is not a valid Ethereum address.');



    address = address.toLowerCase().replace(/^0x/i,'');
    var addressHash = utils.sha3(address).replace(/^0x/i,'');
    var checksumAddress = '0x';

    for (var i = 0; i < address.length; i++ ) {
        // If ith character is 9 to f then make it uppercase
        if (parseInt(addressHash[i], 16) > 7) {
            checksumAddress += address[i].toUpperCase();
        } else {
            checksumAddress += address[i];
        }
    }
    return checksumAddress;
};



module.exports = {
    _fireError: _fireError,
    _jsonInterfaceMethodToString: _jsonInterfaceMethodToString,
    _flattenTypes: _flattenTypes,
    // extractDisplayName: extractDisplayName,
    // extractTypeName: extractTypeName,
    randomHex: randomHex,
    _: _,
    BN: utils.BN,
    isBN: utils.isBN,
    isBigNumber: utils.isBigNumber,
    isHex: utils.isHex,
    isHexStrict: utils.isHexStrict,
    sha3: utils.sha3,
    keccak256: utils.sha3,
    soliditySha3: soliditySha3,
    isAddress: utils.isAddress,
    checkAddressChecksum: utils.checkAddressChecksum,
    toChecksumAddress: toChecksumAddress,
    toHex: utils.toHex,
    toBN: utils.toBN,

    bytesToHex: utils.bytesToHex,
    hexToBytes: utils.hexToBytes,

    hexToNumberString: utils.hexToNumberString,

    hexToNumber: utils.hexToNumber,
    toDecimal: utils.hexToNumber, // alias

    numberToHex: utils.numberToHex,
    fromDecimal: utils.numberToHex, // alias

    hexToUtf8: utils.hexToUtf8,
    hexToString: utils.hexToUtf8,
    toUtf8: utils.hexToUtf8,

    utf8ToHex: utils.utf8ToHex,
    stringToHex: utils.utf8ToHex,
    fromUtf8: utils.utf8ToHex,

    hexToAscii: hexToAscii,
    toAscii: hexToAscii,
    asciiToHex: asciiToHex,
    fromAscii: asciiToHex,

    unitMap: ethjsUnit.unitMap,
    toWei: toWei,
    fromWei: fromWei,

    padLeft: utils.leftPad,
    leftPad: utils.leftPad,
    padRight: utils.rightPad,
    rightPad: utils.rightPad,
    toTwosComplement: utils.toTwosComplement
};



/***/ }),

/***/ 412409:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file soliditySha3.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */

var _ = __webpack_require__(513469);
var BN = __webpack_require__(213550);
var utils = __webpack_require__(218102);


var _elementaryName = function (name) {
    /*jshint maxcomplexity:false */

    if (name.startsWith('int[')) {
        return 'int256' + name.slice(3);
    } else if (name === 'int') {
        return 'int256';
    } else if (name.startsWith('uint[')) {
        return 'uint256' + name.slice(4);
    } else if (name === 'uint') {
        return 'uint256';
    } else if (name.startsWith('fixed[')) {
        return 'fixed128x128' + name.slice(5);
    } else if (name === 'fixed') {
        return 'fixed128x128';
    } else if (name.startsWith('ufixed[')) {
        return 'ufixed128x128' + name.slice(6);
    } else if (name === 'ufixed') {
        return 'ufixed128x128';
    }
    return name;
};

// Parse N from type<N>
var _parseTypeN = function (type) {
    var typesize = /^\D+(\d+).*$/.exec(type);
    return typesize ? parseInt(typesize[1], 10) : null;
};

// Parse N from type[<N>]
var _parseTypeNArray = function (type) {
    var arraySize = /^\D+\d*\[(\d+)\]$/.exec(type);
    return arraySize ? parseInt(arraySize[1], 10) : null;
};

var _parseNumber = function (arg) {
    var type = typeof arg;
    if (type === 'string') {
        if (utils.isHexStrict(arg)) {
            return new BN(arg.replace(/0x/i,''), 16);
        } else {
            return new BN(arg, 10);
        }
    } else if (type === 'number') {
        return new BN(arg);
    } else if (utils.isBigNumber(arg)) {
        return new BN(arg.toString(10));
    } else if (utils.isBN(arg)) {
        return arg;
    } else {
        throw new Error(arg +' is not a number');
    }
};

var _solidityPack = function (type, value, arraySize) {
    /*jshint maxcomplexity:false */

    var size, num;
    type = _elementaryName(type);


    if (type === 'bytes') {

        if (value.replace(/^0x/i,'').length % 2 !== 0) {
            throw new Error('Invalid bytes characters '+ value.length);
        }

        return value;
    } else if (type === 'string') {
        return utils.utf8ToHex(value);
    } else if (type === 'bool') {
        return value ? '01' : '00';
    } else if (type.startsWith('address')) {
        if(arraySize) {
            size = 64;
        } else {
            size = 40;
        }

        if(!utils.isAddress(value)) {
            throw new Error(value +' is not a valid address, or the checksum is invalid.');
        }

        return utils.leftPad(value.toLowerCase(), size);
    }

    size = _parseTypeN(type);

    if (type.startsWith('bytes')) {

        if(!size) {
            throw new Error('bytes[] not yet supported in solidity');
        }

        // must be 32 byte slices when in an array
        if(arraySize) {
            size = 32;
        }

        if (size < 1 || size > 32 || size < value.replace(/^0x/i,'').length / 2 ) {
            throw new Error('Invalid bytes' + size +' for '+ value);
        }

        return utils.rightPad(value, size * 2);
    } else if (type.startsWith('uint')) {

        if ((size % 8) || (size < 8) || (size > 256)) {
            throw new Error('Invalid uint'+size+' size');
        }

        num = _parseNumber(value);
        if (num.bitLength() > size) {
            throw new Error('Supplied uint exceeds width: ' + size + ' vs ' + num.bitLength());
        }

        if(num.lt(new BN(0))) {
            throw new Error('Supplied uint '+ num.toString() +' is negative');
        }

        return size ? utils.leftPad(num.toString('hex'), size/8 * 2) : num;
    } else if (type.startsWith('int')) {

        if ((size % 8) || (size < 8) || (size > 256)) {
            throw new Error('Invalid int'+size+' size');
        }

        num = _parseNumber(value);
        if (num.bitLength() > size) {
            throw new Error('Supplied int exceeds width: ' + size + ' vs ' + num.bitLength());
        }

        if(num.lt(new BN(0))) {
            return num.toTwos(size).toString('hex');
        } else {
            return size ? utils.leftPad(num.toString('hex'), size/8 * 2) : num;
        }

    } else {
        // FIXME: support all other types
        throw new Error('Unsupported or invalid type: ' + type);
    }
};


var _processSoliditySha3Args = function (arg) {
    /*jshint maxcomplexity:false */

    if(_.isArray(arg)) {
        throw new Error('Autodetection of array types is not supported.');
    }

    var type, value = '';
    var hexArg, arraySize;

    // if type is given
    if (_.isObject(arg) && (arg.hasOwnProperty('v') || arg.hasOwnProperty('t') || arg.hasOwnProperty('value') || arg.hasOwnProperty('type'))) {
        type = arg.hasOwnProperty('t') ? arg.t : arg.type;
        value = arg.hasOwnProperty('v') ? arg.v : arg.value;

    // otherwise try to guess the type
    } else {

        type = utils.toHex(arg, true);
        value = utils.toHex(arg);

        if (!type.startsWith('int') && !type.startsWith('uint')) {
            type = 'bytes';
        }
    }

    if ((type.startsWith('int') || type.startsWith('uint')) &&  typeof value === 'string' && !/^(-)?0x/i.test(value)) {
        value = new BN(value);
    }

    // get the array size
    if(_.isArray(value)) {
        arraySize = _parseTypeNArray(type);
        if(arraySize && value.length !== arraySize) {
            throw new Error(type +' is not matching the given array '+ JSON.stringify(value));
        } else {
            arraySize = value.length;
        }
    }


    if (_.isArray(value)) {
        hexArg = value.map(function (val) {
            return _solidityPack(type, val, arraySize).toString('hex').replace('0x','');
        });
        return hexArg.join('');
    } else {
        hexArg = _solidityPack(type, value, arraySize);
        return hexArg.toString('hex').replace('0x','');
    }

};

/**
 * Hashes solidity values to a sha3 hash using keccak 256
 *
 * @method soliditySha3
 * @return {Object} the sha3
 */
var soliditySha3 = function () {
    /*jshint maxcomplexity:false */

    var args = Array.prototype.slice.call(arguments);

    var hexArgs = _.map(args, _processSoliditySha3Args);

    // console.log(args, hexArgs);
    // console.log('0x'+ hexArgs.join(''));

    return utils.sha3('0x'+ hexArgs.join(''));
};


module.exports = soliditySha3;


/***/ }),

/***/ 218102:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*
 This file is part of web3.js.

 web3.js is free software: you can redistribute it and/or modify
 it under the terms of the GNU Lesser General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 web3.js is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Lesser General Public License for more details.

 You should have received a copy of the GNU Lesser General Public License
 along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
 */
/**
 * @file utils.js
 * @author Fabian Vogelsteller <fabian@ethereum.org>
 * @date 2017
 */

var _ = __webpack_require__(513469);
var BN = __webpack_require__(213550);
var numberToBN = __webpack_require__(383206);
var utf8 = __webpack_require__(957458);
var Hash = __webpack_require__(421952);


/**
 * Returns true if object is BN, otherwise false
 *
 * @method isBN
 * @param {Object} object
 * @return {Boolean}
 */
var isBN = function (object) {
    return object instanceof BN ||
        (object && object.constructor && object.constructor.name === 'BN');
};

/**
 * Returns true if object is BigNumber, otherwise false
 *
 * @method isBigNumber
 * @param {Object} object
 * @return {Boolean}
 */
var isBigNumber = function (object) {
    return object && object.constructor && object.constructor.name === 'BigNumber';
};

/**
 * Takes an input and transforms it into an BN
 *
 * @method toBN
 * @param {Number|String|BN} number, string, HEX string or BN
 * @return {BN} BN
 */
var toBN = function(number){
    try {
        return numberToBN.apply(null, arguments);
    } catch(e) {
        throw new Error(e + ' Given value: "'+ number +'"');
    }
};


/**
 * Takes and input transforms it into BN and if it is negative value, into two's complement
 *
 * @method toTwosComplement
 * @param {Number|String|BN} number
 * @return {String}
 */
var toTwosComplement = function (number) {
    return '0x'+ toBN(number).toTwos(256).toString(16, 64);
};

/**
 * Checks if the given string is an address
 *
 * @method isAddress
 * @param {String} address the given HEX address
 * @return {Boolean}
 */
var isAddress = function (address) {
    // check if it has the basic requirements of an address
    if (!/^(0x)?[0-9a-f]{40}$/i.test(address)) {
        return false;
        // If it's ALL lowercase or ALL upppercase
    } else if (/^(0x|0X)?[0-9a-f]{40}$/.test(address) || /^(0x|0X)?[0-9A-F]{40}$/.test(address)) {
        return true;
        // Otherwise check each case
    } else {
        return checkAddressChecksum(address);
    }
};



/**
 * Checks if the given string is a checksummed address
 *
 * @method checkAddressChecksum
 * @param {String} address the given HEX address
 * @return {Boolean}
 */
var checkAddressChecksum = function (address) {
    // Check each case
    address = address.replace(/^0x/i,'');
    var addressHash = sha3(address.toLowerCase()).replace(/^0x/i,'');

    for (var i = 0; i < 40; i++ ) {
        // the nth letter should be uppercase if the nth digit of casemap is 1
        if ((parseInt(addressHash[i], 16) > 7 && address[i].toUpperCase() !== address[i]) || (parseInt(addressHash[i], 16) <= 7 && address[i].toLowerCase() !== address[i])) {
            return false;
        }
    }
    return true;
};

/**
 * Should be called to pad string to expected length
 *
 * @method leftPad
 * @param {String} string to be padded
 * @param {Number} chars that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var leftPad = function (string, chars, sign) {
    var hasPrefix = /^0x/i.test(string) || typeof string === 'number';
    string = string.toString(16).replace(/^0x/i,'');

    var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0;

    return (hasPrefix ? '0x' : '') + new Array(padding).join(sign ? sign : "0") + string;
};

/**
 * Should be called to pad string to expected length
 *
 * @method rightPad
 * @param {String} string to be padded
 * @param {Number} chars that result string should have
 * @param {String} sign, by default 0
 * @returns {String} right aligned string
 */
var rightPad = function (string, chars, sign) {
    var hasPrefix = /^0x/i.test(string) || typeof string === 'number';
    string = string.toString(16).replace(/^0x/i,'');

    var padding = (chars - string.length + 1 >= 0) ? chars - string.length + 1 : 0;

    return (hasPrefix ? '0x' : '') + string + (new Array(padding).join(sign ? sign : "0"));
};


/**
 * Should be called to get hex representation (prefixed by 0x) of utf8 string
 *
 * @method utf8ToHex
 * @param {String} str
 * @returns {String} hex representation of input string
 */
var utf8ToHex = function(str) {
    str = utf8.encode(str);
    var hex = "";

    // remove \u0000 padding from either side
    str = str.replace(/^(?:\u0000)*/,'');
    str = str.split("").reverse().join("");
    str = str.replace(/^(?:\u0000)*/,'');
    str = str.split("").reverse().join("");

    for(var i = 0; i < str.length; i++) {
        var code = str.charCodeAt(i);
        // if (code !== 0) {
        var n = code.toString(16);
        hex += n.length < 2 ? '0' + n : n;
        // }
    }

    return "0x" + hex;
};

/**
 * Should be called to get utf8 from it's hex representation
 *
 * @method hexToUtf8
 * @param {String} hex
 * @returns {String} ascii string representation of hex value
 */
var hexToUtf8 = function(hex) {
    if (!isHexStrict(hex))
        throw new Error('The parameter "'+ hex +'" must be a valid HEX string.');

    var str = "";
    var code = 0;
    hex = hex.replace(/^0x/i,'');

    // remove 00 padding from either side
    hex = hex.replace(/^(?:00)*/,'');
    hex = hex.split("").reverse().join("");
    hex = hex.replace(/^(?:00)*/,'');
    hex = hex.split("").reverse().join("");

    var l = hex.length;

    for (var i=0; i < l; i+=2) {
        code = parseInt(hex.substr(i, 2), 16);
        // if (code !== 0) {
        str += String.fromCharCode(code);
        // }
    }

    return utf8.decode(str);
};


/**
 * Converts value to it's number representation
 *
 * @method hexToNumber
 * @param {String|Number|BN} value
 * @return {String}
 */
var hexToNumber = function (value) {
    if (!value) {
        return value;
    }

    return toBN(value).toNumber();
};

/**
 * Converts value to it's decimal representation in string
 *
 * @method hexToNumberString
 * @param {String|Number|BN} value
 * @return {String}
 */
var hexToNumberString = function (value) {
    if (!value) return value;

    return toBN(value).toString(10);
};


/**
 * Converts value to it's hex representation
 *
 * @method numberToHex
 * @param {String|Number|BN} value
 * @return {String}
 */
var numberToHex = function (value) {
    if (_.isNull(value) || _.isUndefined(value)) {
        return value;
    }

    if (!isFinite(value) && !isHexStrict(value)) {
        throw new Error('Given input "'+value+'" is not a number.');
    }

    var number = toBN(value);
    var result = number.toString(16);

    return number.lt(new BN(0)) ? '-0x' + result.substr(1) : '0x' + result;
};


/**
 * Convert a byte array to a hex string
 *
 * Note: Implementation from crypto-js
 *
 * @method bytesToHex
 * @param {Array} bytes
 * @return {String} the hex string
 */
var bytesToHex = function(bytes) {
    for (var hex = [], i = 0; i < bytes.length; i++) {
        /* jshint ignore:start */
        hex.push((bytes[i] >>> 4).toString(16));
        hex.push((bytes[i] & 0xF).toString(16));
        /* jshint ignore:end */
    }
    return '0x'+ hex.join("");
};

/**
 * Convert a hex string to a byte array
 *
 * Note: Implementation from crypto-js
 *
 * @method hexToBytes
 * @param {string} hex
 * @return {Array} the byte array
 */
var hexToBytes = function(hex) {
    hex = hex.toString(16);

    if (!isHexStrict(hex)) {
        throw new Error('Given value "'+ hex +'" is not a valid hex string.');
    }

    hex = hex.replace(/^0x/i,'');

    for (var bytes = [], c = 0; c < hex.length; c += 2)
        bytes.push(parseInt(hex.substr(c, 2), 16));
    return bytes;
};

/**
 * Auto converts any given value into it's hex representation.
 *
 * And even stringifys objects before.
 *
 * @method toHex
 * @param {String|Number|BN|Object} value
 * @param {Boolean} returnType
 * @return {String}
 */
var toHex = function (value, returnType) {
    /*jshint maxcomplexity: false */

    if (isAddress(value)) {
        return returnType ? 'address' : '0x'+ value.toLowerCase().replace(/^0x/i,'');
    }

    if (_.isBoolean(value)) {
        return returnType ? 'bool' : value ? '0x01' : '0x00';
    }


    if (_.isObject(value) && !isBigNumber(value) && !isBN(value)) {
        return returnType ? 'string' : utf8ToHex(JSON.stringify(value));
    }

    // if its a negative number, pass it through numberToHex
    if (_.isString(value)) {
        if (value.indexOf('-0x') === 0 || value.indexOf('-0X') === 0) {
            return returnType ? 'int256' : numberToHex(value);
        } else if(value.indexOf('0x') === 0 || value.indexOf('0X') === 0) {
            return returnType ? 'bytes' : value;
        } else if (!isFinite(value)) {
            return returnType ? 'string' : utf8ToHex(value);
        }
    }

    return returnType ? (value < 0 ? 'int256' : 'uint256') : numberToHex(value);
};


/**
 * Check if string is HEX, requires a 0x in front
 *
 * @method isHexStrict
 * @param {String} hex to be checked
 * @returns {Boolean}
 */
var isHexStrict = function (hex) {
    return ((_.isString(hex) || _.isNumber(hex)) && /^(-)?0x[0-9a-f]*$/i.test(hex));
};

/**
 * Check if string is HEX
 *
 * @method isHex
 * @param {String} hex to be checked
 * @returns {Boolean}
 */
var isHex = function (hex) {
    return ((_.isString(hex) || _.isNumber(hex)) && /^(-0x|0x)?[0-9a-f]*$/i.test(hex));
};


/**
 * Returns true if given string is a valid Ethereum block header bloom.
 *
 * TODO UNDOCUMENTED
 *
 * @method isBloom
 * @param {String} hex encoded bloom filter
 * @return {Boolean}
 */
var isBloom = function (bloom) {
    if (!/^(0x)?[0-9a-f]{512}$/i.test(bloom)) {
        return false;
    } else if (/^(0x)?[0-9a-f]{512}$/.test(bloom) || /^(0x)?[0-9A-F]{512}$/.test(bloom)) {
        return true;
    }
    return false;
};

/**
 * Returns true if given string is a valid log topic.
 *
 * TODO UNDOCUMENTED
 *
 * @method isTopic
 * @param {String} hex encoded topic
 * @return {Boolean}
 */
var isTopic = function (topic) {
    if (!/^(0x)?[0-9a-f]{64}$/i.test(topic)) {
        return false;
    } else if (/^(0x)?[0-9a-f]{64}$/.test(topic) || /^(0x)?[0-9A-F]{64}$/.test(topic)) {
        return true;
    }
    return false;
};


/**
 * Hashes values to a sha3 hash using keccak 256
 *
 * To hash a HEX string the hex must have 0x in front.
 *
 * @method sha3
 * @return {String} the sha3 string
 */
var SHA3_NULL_S = '0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470';

var sha3 = function (value) {
    if (isBN(value)) {
        value = value.toString();
    }

    if (isHexStrict(value) && /^0x/i.test((value).toString())) {
        value = hexToBytes(value);
    }

    var returnValue = Hash.keccak256(value); // jshint ignore:line

    if(returnValue === SHA3_NULL_S) {
        return null;
    } else {
        return returnValue;
    }
};
// expose the under the hood keccak256
sha3._Hash = Hash;


module.exports = {
    BN: BN,
    isBN: isBN,
    isBigNumber: isBigNumber,
    toBN: toBN,
    isAddress: isAddress,
    isBloom: isBloom, // TODO UNDOCUMENTED
    isTopic: isTopic, // TODO UNDOCUMENTED
    checkAddressChecksum: checkAddressChecksum,
    utf8ToHex: utf8ToHex,
    hexToUtf8: hexToUtf8,
    hexToNumber: hexToNumber,
    hexToNumberString: hexToNumberString,
    numberToHex: numberToHex,
    toHex: toHex,
    hexToBytes: hexToBytes,
    bytesToHex: bytesToHex,
    isHex: isHex,
    isHexStrict: isHexStrict,
    leftPad: leftPad,
    rightPad: rightPad,
    toTwosComplement: toTwosComplement,
    sha3: sha3
};


/***/ }),

/***/ 745535:
/***/ ((module) => {

"use strict";
module.exports = {"i8":"1.2.1"};

/***/ }),

/***/ 250787:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
/*
    This file is part of web3.js.

    web3.js is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    web3.js is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with web3.js.  If not, see <http://www.gnu.org/licenses/>.
*/
/**
 * @file index.js
 * @authors:
 *   Fabian Vogelsteller <fabian@ethereum.org>
 *   Gav Wood <gav@parity.io>
 *   Jeffrey Wilcke <jeffrey.wilcke@ethereum.org>
 *   Marek Kotewicz <marek@parity.io>
 *   Marian Oancea <marian@ethereum.org>
 * @date 2017
 */




var version = __webpack_require__(745535)/* .version */ .i8;
var core = __webpack_require__(829949);
var Eth = __webpack_require__(626629);
var Net = __webpack_require__(787714);
var Personal = __webpack_require__(532269);
var Shh = __webpack_require__(434513);
var Bzz = __webpack_require__(684926);
var utils = __webpack_require__(716915);

var Web3 = function Web3() {
    var _this = this;

    // sets _requestmanager etc
    core.packageInit(this, arguments);

    this.version = version;
    this.utils = utils;

    this.eth = new Eth(this);
    this.shh = new Shh(this);
    this.bzz = new Bzz(this);

    // overwrite package setProvider
    var setProvider = this.setProvider;
    this.setProvider = function (provider, net) {
        setProvider.apply(_this, arguments);

        this.eth.setProvider(provider, net);
        this.shh.setProvider(provider, net);
        this.bzz.setProvider(provider);

        return true;
    };
};

Web3.version = version;
Web3.utils = utils;
Web3.modules = {
    Eth: Eth,
    Net: Net,
    Personal: Personal,
    Shh: Shh,
    Bzz: Bzz
};

core.addProviders(Web3);

module.exports = Web3;



/***/ }),

/***/ 409674:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"title\":\"Release Lock File Specification\",\"type\":\"object\",\"required\":[\"lockfile_version\",\"package_name\",\"version\"],\"version\":\"1\",\"properties\":{\"lockfile_version\":{\"type\":\"string\",\"title\":\"Lock File Version\",\"default\":\"1\",\"enum\":[\"1\"]},\"package_name\":{\"title\":\"The name of the package that this release is for\",\"type\":\"string\",\"pattern\":\"^[a-z][-a-z0-9]{0,213}$\"},\"meta\":{\"$ref\":\"#/definitions/PackageMeta\"},\"version\":{\"title\":\"Version\",\"type\":\"string\"},\"sources\":{\"title\":\"Sources\",\"type\":\"object\",\"patternProperties\":{\"\\\\.\\\\/.*\":{\"anyOf\":[{\"title\":\"Source code\",\"type\":\"string\"},{\"$ref\":\"IPFS-URI\"}]}}},\"contract_types\":{\"title\":\"The contract types included in this release\",\"type\":\"object\",\"patternProperties\":{\"[a-zA-Z][-a-zA-Z0-9_]*(?:\\\\[[-a-zA-Z0-9]{1,256}\\\\])$\":{\"$ref\":\"#/definitions/ContractType\"}}},\"deployments\":{\"title\":\"The deployed contract instances in this release\",\"type\":\"object\",\"patternProperties\":{\"^blockchain\\\\://[0-9a-zA-Z]{64}/block/[0-9a-zA-Z]{64}$\":{\"type\":\"object\",\"patternProperties\":{\"^[a-zA-Z][a-zA-Z0-9_]*$\":{\"$ref\":\"#/definitions/ContractInstance\"}}}}},\"build_dependencies\":{\"title\":\"Build Dependencies\",\"type\":\"object\",\"patternProperties\":{\"^[a-z][-a-z0-9]{0,213}$\":{\"$ref\":\"#/definitions/IPFS-URI\"}}}},\"definitions\":{\"PackageMeta\":{\"title\":\"Metadata about the package\",\"type\":\"object\",\"properties\":{\"authors\":{\"title\":\"Package authors\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"license\":{\"title\":\"The license that this package and it's source are released under\",\"type\":\"string\"},\"description\":{\"title\":\"Description of this package\",\"type\":\"string\"},\"keywords\":{\"title\":\"Keywords that apply to this package\",\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"links\":{\"title\":\"URIs for resources related to this package\",\"type\":\"object\",\"additionalProperties\":{\"type\":\"string\",\"format\":\"URI\"}}}},\"ContractType\":{\"title\":\"Data for a contract type included in this package\",\"type\":\"object\",\"properties\":{\"contract_name\":{\"title\":\"The name for this contract type as found in the project source code.\",\"type\":\"string\",\"pattern\":\"[a-zA-Z][a-zA-Z0-9_]*\"},\"bytecode\":{\"title\":\"The unlinked '0x' prefixed bytecode for this contract type\",\"type\":\"string\"},\"runtime_bytecode\":{\"title\":\"The unlinked '0x' prefixed runtime portion of the bytecode for this contract type\",\"type\":\"string\"},\"abi\":{\"title\":\"The ABI for this contract type\",\"type\":\"array\"},\"natspec\":{\"title\":\"The combined user-doc and dev-doc for this contract\",\"type\":\"object\"},\"compiler\":{\"$ref\":\"#/definitions/CompilerInformation\"}}},\"ContractInstance\":{\"title\":\"Data for a deployed instance of a contract\",\"type\":\"object\",\"required\":[\"contract_type\"],\"properties\":{\"contract_type\":{\"title\":\"The contract type of this contract instance\",\"type\":\"string\",\"pattern\":\"^(?:[a-z][-a-z0-9]{0,213}\\\\:)?[a-zA-Z][-a-zA-Z0-9_]*(?:\\\\[[-a-zA-Z0-9]{1,256}\\\\])?$\"},\"address\":{\"$ref\":\"#/definitions/Address\"},\"transaction\":{\"$ref\":\"#/definitions/TransactionHash\"},\"block\":{\"$ref\":\"#/definitions/BlockHash\"},\"runtime_bytecode\":{\"title\":\"The on-chain bytecode for this contract instance.\",\"type\":\"string\"},\"compiler\":{\"$ref\":\"#/definitions/CompilerInformation\"},\"link_dependencies\":{\"title\":\"The values for the link references found within this contract instances runtime bytecode\",\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/LinkValue\"}}}},\"LinkValue\":{\"title\":\"A value for an individual link reference in a contract's bytecode\",\"type\":\"object\",\"required\":[\"offset\",\"value\"],\"properties\":{\"offset\":{\"type\":\"integer\",\"minimum\":0},\"value\":{\"title\":\"The value for the link reference\",\"type\":\"string\",\"anyOf\":[{\"$ref\":\"#/definitions/Address\"},{\"$ref\":\"#/definitions/ContractInstanceName\"},{\"$ref\":\"#/definitions/PackageContractInstanceName\"}]}}},\"ContractInstanceName\":{\"title\":\"The name of the deployed contract instance\",\"type\":\"string\",\"pattern\":\"^[a-zA-Z][a-zA-Z0-9_]*$\"},\"PackageContractInstanceName\":{\"title\":\"The name of the deployed contract instance in a package\",\"type\":\"string\",\"pattern\":\"^[a-z][-a-z0-9]{0,213}\\\\:[a-zA-Z][a-zA-Z0-9_]*$\"},\"CompilerInformation\":{\"title\":\"Information about the software that was used to compile a contract type or instance\",\"type\":\"object\",\"required\":[\"type\",\"version\"],\"properties\":{\"type\":{\"title\":\"The name of the compiler\",\"enum\":[\"solc\",\"solcjs\"]},\"version\":{\"title\":\"The version string for the compiler\",\"type\":\"string\"},\"settings\":{\"title\":\"The settings used for compilation\",\"anyOf\":[{\"$ref\":\"solc_Settings\"}]}}},\"solc_Settings\":{\"title\":\"Settings for use with the solc or solcjs compiler\",\"type\":\"object\",\"properties\":{\"optimize\":{\"type\":\"boolean\"},\"optimize_runs\":{\"type\":\"integer\",\"minimum\":1}}},\"Address\":{\"title\":\"An Ethereum address\",\"type\":\"string\",\"pattern\":\"^0x[0-9a-fA-F]{40}$\"},\"TransactionHash\":{\"title\":\"An Ethereum transaction hash\",\"type\":\"string\",\"pattern\":\"^0x[0-9a-zA-Z]{64}$\"},\"BlockHash\":{\"title\":\"An Ethereum block hash\",\"type\":\"string\",\"pattern\":\"^0x[0-9a-zA-Z]{64}$\"},\"IPFS-URI\":{\"title\":\"An IPFS URI\",\"type\":\"string\",\"format\":\"uri\",\"pattern\":\"^ipfs:/?/?.*$\"}}}");

/***/ }),

/***/ 954733:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var Preflight = __webpack_require__(949969);
var Installer = __webpack_require__(514031);
var Publisher = __webpack_require__(637653);
var IPFSHost = __webpack_require__(203599);
var IPFSHostWithLocalReader = __webpack_require__(229039);
var MemoryRegistry = __webpack_require__(597591);
var Config = __webpack_require__(678051);

var fs = __webpack_require__(444798);
var path = __webpack_require__(385622);
var _ = __webpack_require__(708594);

function EthPM(directory, host, registry) {
  this.host = host || new IPFSHost();
  this.registry = registry || new MemoryRegistry();

  this.config = Config.default().with({
    working_directory: directory,
    base_dir: directory,
    host: host,
    registry: registry
  });
};

_.extend(EthPM.prototype, {
  install: function(manifest) {
    var installer = new Installer(this.config, this.config.installed_packages_directory);
    return installer.installDependencies(manifest);
  },

  installDependency: function(package_name, version_range) {
    var installer = new Installer(this.config, this.config.installed_packages_directory);
    return installer.installPackage(package_name, version_range);
  },

  // Publish the current package to the host and registry.
  // Contract metadata is also required for all contracts listed in the `contracts` portion of the manifest.
  // Returns a Promise.
  publish: function(contract_types, deployments, manifest) {
    var publisher = new Publisher(this.config.registry, this.config.host);
    return publisher.publish(this.config, contract_types, deployments, manifest);
  },

  installed_artifacts: function() {
    var manifest = {};

    try {
      manifest = Manifest.read(this.config.manifest_file);
    } catch (e) {
      // Do nothing with the error.
    }

    return Preflight.find_artifacts(this.config.installed_packages_directory, manifest.dependencies);
  }
});

_.extend(EthPM, {

  // deprecated
  configure: function(directory, host, registry) {
    return new EthPM(directory, host, registry);
  },

  init: function(directory, host, registry, options) {
    options = options || {};

    var json = __webpack_require__(645982)(path.resolve(path.join(__dirname, "templates", "epm.json")));

    json = _.cloneDeep(json);
    json = _.merge(json, options);

    return fs.writeFile(path.join(directory, "epm.json"), "utf8").then(function() {
      return new EthPM(directory, host, registry);
    });
  },

  hosts: {
    IPFS: IPFSHost,
    IPFSWithLocalReader: IPFSHostWithLocalReader
  }
});

module.exports = EthPM;


/***/ }),

/***/ 678051:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var fs = __webpack_require__(935747);
var _ = __webpack_require__(708594);
var path = __webpack_require__(385622);

function Config(working_directory, manifest_file) {
  var self = this;

  this._values = {};

  var props = {
    working_directory: function() {
      return working_directory || process.cwd();
    },

    source_directory: function() {
      return path.join(self.working_directory, "contracts");
    },

    contracts_directory: function() {
      return path.resolve(path.join(self.working_directory, "contracts"));
    },

    manifest_file: function() {
      return manifest_file || path.resolve(path.join(self.working_directory, self.default_manifest_filename))
    },

    base_path: function() {
      return path.dirname(self.manifest_file);
    },

    // Configuration options that rely on other options.
    installed_packages_directory: function() {
      return path.join(self.working_directory, "installed_contracts");
    },

    default_manifest_filename: function() {
      return "ethpm.json";
    },

    default_lockfile_filename: function() {
      return "lock.json";
    },

    default_lockfile_uri_filename: function() {
      return "lock.uri";
    }
  };

  Object.keys(props).forEach(function(prop) {
    self.addProp(prop, props[prop]);
  });
};

Config.prototype.addProp = function(key, obj) {
  Object.defineProperty(this, key, {
    get: obj.get || function() {
      return this._values[key] || obj();
    },
    set: obj.set || function(val) {
      this._values[key] = val;
    },
    configurable: true,
    enumerable: true
  });
};

Config.prototype.with = function(obj) {
  return _.extend(Config.default(), this, obj);
};

Config.prototype.merge = function(obj) {
  return _.extend(this, obj);
};

Config.default = function() {
  return new Config();
};

module.exports = Config;


/***/ }),

/***/ 203599:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var IPFS = __webpack_require__(792262);
var request = __webpack_require__(938503);
var Readable = __webpack_require__(92413).Readable;
var URL = __webpack_require__(978835);
var fs = __webpack_require__(935747);

function IPFSHost(host, port, protocol) {
  this.host = host || "localhost";
  this.port = port || 5001;
  this.protocol = protocol || "http";

  this.ipfs = new IPFS({
    host: this.host,
    port: this.port,
    protocol: this.protocol
  });
}

IPFSHost.prototype.putContents = function(contents) {
  var self = this;

  return new Promise(function(accept, reject) {
    self.ipfs.add(contents, (err, result) => {
      if (err) return reject(err);
      accept("ipfs://" + result);
    });
  });
}

IPFSHost.prototype.putFile = function(file) {
  var self = this;

  return new Promise(function(accept, reject) {
    fs.readFile(file, "utf8", function(err, data) {
      if (err) return reject(err);

      self.putContents(data).then(accept).catch(reject);
    });
  });
};

IPFSHost.prototype.get = function(uri) {
  var self = this;
  return new Promise(function(accept, reject) {
    if (uri.indexOf("ipfs://") != 0) {
      return reject(new Error("Don't know how to resolve URI " + uri));
    }

    var hash = uri.replace("ipfs://", "");

    var path = 'api/v0/cat/' + hash;
    var processedUrl = `${self.protocol}://${self.host}:${self.port}/${path}`;

    request(processedUrl, function(error, response, body) {
      if(error) {
        reject(error);
      } else if (response.statusCode !== 200) {
        reject(new Error(`Unknown server response ${response.statusCode} when downloading hash ${hash}`));
      } else {
        accept(body);
      };
    });
  });
};

module.exports = IPFSHost;


/***/ }),

/***/ 229039:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var request = __webpack_require__(938503);
var inherits = __webpack_require__(431669).inherits;
var IPFSHost = __webpack_require__(203599);

inherits(IPFSHostWithLocalReader, IPFSHost);

function IPFSHostWithLocalReader(host, port, protocol) {
  IPFSHost.call(this, host, port, protocol);
}

IPFSHostWithLocalReader.prototype.get = function(uri) {
  var self = this;
  return new Promise(function(accept, reject) {
    if (uri.indexOf("ipfs://") != 0) {
      return reject(new Error("Don't know how to resolve URI " + uri));
    }

    var hash = uri.replace("ipfs://", "");

    var path = 'api/v0/cat/' + hash;
    var processedUrl = `${self.protocol}://${self.host}:${self.port}/${path}`;

    request(processedUrl, function(error, response, body) {
      if(error) {
        reject(error);
      } else if (response.statusCode !== 200) {
        reject(new Error(`Unknown server response ${response.statusCode} when downloading hash ${hash}`));
      } else {
        accept(body);
      };
    });
  });
};

module.exports = IPFSHostWithLocalReader;


/***/ }),

/***/ 514031:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var fs = __webpack_require__(444798);
var path = __webpack_require__(385622);
var Manifest = __webpack_require__(157967);
var Lockfile = __webpack_require__(247870);
var Preflight = __webpack_require__(949969);
var Sources = __webpack_require__(866326);
var Config = __webpack_require__(678051);
var Util = __webpack_require__(520170);

function Installer(config, destination) {
  this.config = config;
  this.registry = config.registry;
  this.host = config.host;
  this.destination = destination;
};

Installer.prototype.installDependencies = function(manifest) {
  var self = this;

  // Start a promise chain to ensure errors are caught.
  return new Promise(function(accept, reject) {
    accept();
  }).then(function() {

    if (manifest == null) {
      manifest = Manifest.read(self.config.manifest_file);
    }

    return Preflight.resolve_dependencies(manifest.dependencies, self.registry, self.host);
  }).then(function(preflight) {
    var promises = [];

    Object.keys(preflight).forEach(function(package_name) {
      var versions = Object.keys(preflight[package_name]);

      if (versions.length > 1) {
        throw new Error("Your package and its dependencies require conflicting versions of the '" + package_name + "' package: " + versions.join(", ") + ". This dependency structure is currently unallowed at this time but will be allowed upon updates to the Solidity compiler. Please remove conflicting dependencies in the meantime.");
      }
    });

    Object.keys(manifest.dependencies).forEach(function(package_name) {
      var version_range = manifest.dependencies[package_name];
      promises.push(self.installPackage(package_name, version_range));
    });

    return Promise.all(promises);
  });
};

Installer.prototype.installPackage = function(package_name, version_range) {
  var self = this;
  var lockfileURI;
  var lockfile;
  var version;
  var manifest;
  var package_location;

  return Promise.resolve().then(function() {
    // If we have a URI, don't go to the registry.
    if (Util.isURI(version_range)) {
      return version_range;
    }

    return self.registry.getLockfileURI(package_name, version_range);
  }).then(function(uri) {
    lockfileURI = uri;
    return self.host.get(lockfileURI);
  }).then(function(data) {
    lockfile = JSON.parse(data);

    // Validate the lockfile before moving further.
    var results = Lockfile.validate(lockfile);

    if (results.errors.length > 0) {
      throw new Error("Could not install package `" + package_name + "`: Invalid package specification (" + results.errors[0].stack.replace("instance.", "") + ")");
    }

    // Create a manifest from the lockfile
    manifest = Manifest.fromLockfile(lockfile);

    package_location = path.resolve(path.join(self.destination, package_name));
    var manifest_location = path.resolve(path.join(package_location, self.config.default_manifest_filename));
    var lockfile_location = path.resolve(path.join(package_location, self.config.default_lockfile_filename));
    var lockfile_uri_location = path.resolve(path.join(package_location, self.config.default_lockfile_uri_filename));

    var file_promises = [];

    // Add the sources
    Object.keys(lockfile.sources).forEach(function(relative_source_path) {
      var source_path = path.resolve(path.join(package_location, relative_source_path));
      var uri = lockfile.sources[relative_source_path];

      file_promises.push(self.saveURI(uri, source_path));
    });

    // Add the lockfile itself
    // This requests the lockfile again, but it's easy.
    file_promises.push(self.saveURI(lockfileURI, lockfile_location));

    // Save the URI of the lockfile for this version
    file_promises.push(fs.outputFile(lockfile_uri_location, lockfileURI));

    // Create and save the manifest
    file_promises.push(fs.outputFile(manifest_location, JSON.stringify(manifest, null, 2)));

    return Promise.all(file_promises);
  }).then(function() {
    // After this package is installed, use the manfest to install any dependencies.
    var dependency_config = Config.default().with({
      working_directory: package_location,
      base_dir: package_location,
      host: self.host,
      registry: self.registry
    });
    var dependency_installer = new Installer(dependency_config, self.destination);

    return dependency_installer.installDependencies();
  });
};

Installer.prototype.saveURI = function(uri, destination_path) {
  return this.host.get(uri).then(function(contents) {
    return fs.outputFile(destination_path, contents);
  });
};

module.exports = Installer;


/***/ }),

/***/ 247870:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var V1 = __webpack_require__(389408);
var fs = __webpack_require__(935747);

var Lockfile = {
  getInterpreter: function(lockfile_version) {
    var interpreter = V1;

    if (lockfile_version == null) return interpreter;

    // This could be slightly more clever by tacking on a "V" onto the version and
    // requiring that file (and catching the error if the require fails). Will do that
    // if this gets too unruly.
    switch (parseInt(lockfile_version)) {
      case 1:
        interpreter = V1;
        break;
      default:
        if (lockfile_version == null) {
          // do nothing; use default
        } else {
          throw new Error("Unknown lockfile version " + lockfile_version);
        }
        break;
    }

    return interpreter;
  },
  read: function(file) {
    var json = fs.readFileSync(file);
    json = JSON.parse(json);

    var interpreter = this.getInterpreter(json.lockfile_version);

    interpreter.validate(json);

    return interpreter.normalize(json);
  },
  validate: function(json) {
    var interpreter = this.getInterpreter(json.lockfile_version);
    return interpreter.validate(json);
  }
};

module.exports = Lockfile;


/***/ }),

/***/ 389408:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var _ = __webpack_require__(708594);
var validate = __webpack_require__(840660)/* .validate */ .G;
var lockfile_spec = __webpack_require__(409674);

var V1 = {
  version: 1,
  validate: function(json) {
    return validate(json, lockfile_spec);
  },
  normalize: function(json) {
    // Add keys with default values if non-existent
    // (don't use this function for validation)
    var defaults = {
      authors: {},
      license: "",
      description: "",
      keywords: [],
      links: {},
      sources: null,
      dependencies: {}
    };

    json = _.merge(defaults, json);

    return json;
  },
  // fromLockfile: function(lockfile) {
  //   var meta = lockfile.meta || {};
  //   var sources = lockfile.sources || {};
  //
  //   var manifest = {
  //     manifest_version: this.version,
  //     package_name: lockfile.package_name,
  //     authors: meta.authors,
  //     version: lockfile.version,
  //     license: meta.license,
  //     description: meta.description,
  //     keywords: meta.keywords,
  //     links: meta.links,
  //     sources: Object.keys(sources),
  //     dependencies: lockfile.build_dependencies
  //   };
  //
  //   return manifest;
  // }
};

module.exports = V1;


/***/ }),

/***/ 157967:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var fs = __webpack_require__(935747);
var V1 = __webpack_require__(719703);

var Manifest = {
  getInterpreter: function(manifest_version) {
    var interpreter = V1;

    if (manifest_version == null) return interpreter;

    // This could be slightly more clever by tacking on a "V" onto the version and
    // requiring that file (and catching the error if the require fails). Will do that
    // if this gets too unruly.
    switch (manifest_version) {
      case 1:
        interpreter = V1;
        break;
      default:
        if (manifest_version == null) {
          // do nothing; use default
        } else {
          throw new Error("Unknown manifest version " + manifest_version);
        }
        break;
    }

    return interpreter;
  },
  read: function(file) {
    var json = fs.readFileSync(file);
    json = JSON.parse(json);

    var interpreter = this.getInterpreter(json.manifest_version);

    interpreter.validate(json);

    return interpreter.normalize(json);
  },
  fromLockfile: function(lockfile) {
    // TODO: Match up lockfile versions with manifest versions somehow.
    var interpreter = this.getInterpreter();
    var manifest = interpreter.fromLockfile(lockfile);

    interpreter.validate(manifest);

    manifest = interpreter.normalize(manifest);

    return manifest;
  }
};

module.exports = Manifest;


/***/ }),

/***/ 719703:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var _ = __webpack_require__(708594);

var V1 = {
  version: 1,
  validate: function(json) {
    // TODO: throw errors for data that *must* be there, and validate correct
    // format of data that is there. Perhaps use json spec.
  },
  normalize: function(json) {
    // Add keys with default values if non-existent
    // (don't use this function for validation)
    var defaults = {
      authors: {},
      license: "",
      description: "",
      keywords: [],
      links: {},
      sources: null,
      dependencies: {}
    };

    json = _.merge(defaults, json);

    return json;
  },
  fromLockfile: function(lockfile) {
    var meta = lockfile.meta || {};
    var sources = lockfile.sources || {};

    var manifest = {
      manifest_version: this.version,
      package_name: lockfile.package_name,
      authors: meta.authors,
      version: lockfile.version,
      license: meta.license,
      description: meta.description,
      keywords: meta.keywords,
      links: meta.links,
      sources: Object.keys(sources),
      dependencies: lockfile.build_dependencies
    };

    return manifest;
  }
};

module.exports = V1;


/***/ }),

/***/ 949969:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var Util = __webpack_require__(520170);
var whilst = __webpack_require__(687714);
var fs = __webpack_require__(444798);
var path = __webpack_require__(385622);

var Preflight = {
  // Given a list of manifest dependencies, find all dependencies (even
  // dependencies of dependencies) and list their lockfiles here.
  resolve_dependencies: function(dependencies, registry, host) {
    // Turn object into a stack
    var stack = [];
    var promises = [];

    var promises = Object.keys(dependencies).map(function(package_name) {
      var version_range = dependencies[package_name];

      // Support dependencies that are URIs.
      if (Util.isURI(version_range)) {
        // Make a promise out of the URI.
        return Promise.resolve(version_range);
      }

      return registry.getLockfileURI(package_name, version_range);
    });

    return Promise.all(promises).then(function(uris) {

      stack = uris.map(function(uri) {
        return [uri, [""]];
      });

      return new Promise(function(accept, reject) {
        var resolved = {};

        whilst(function() {
          return stack.length > 0;
        }, function(finished) {
          var current = stack.shift();
          var lockfileURI = current[0];
          var dependency_chain = current[1];
          var version;

          return host.get(lockfileURI).then(function(data) {
            var lockfile = JSON.parse(data);

            var package_name = lockfile.package_name;
            var version = lockfile.version;

            if (resolved[package_name] == null) {
              resolved[package_name] = {};
            }

            if (resolved[package_name][version] == null) {
              resolved[package_name][version] = {
                lockfile: lockfile,
                used_by: []
              };
            }

            resolved[package_name][version].used_by.push(dependency_chain);

            Object.keys(lockfile.build_dependencies || {}).forEach(function(key) {
              var uri = lockfile.build_dependencies[key];
              stack.push([uri, dependency_chain.concat([package_name])]);
            });

            finished();

          }).catch(finished);

        }, function(err) {
          if (err) return reject(err);
          accept(resolved);
        });
      });
    });
  },

  // Go through installed packages looking for all artifacts (contract_types and deployments).
  // Note that at this point, we don't allow multiple versions to be installed, which means that
  // we don't need to filter the results based on the semver version ranges within the containing
  // package's ethpm.json. We will when we do allower multiple versions later on.
  find_artifacts: function(installed_packages_directory, filter) {
    return new Promise(function(accept, reject) {
      fs.readdir(installed_packages_directory, function(err, directories) {
        if (err) {
          return accept([]);
        }

        accept(directories);
      });
    }).then(function(directories) {
      var lockfile_paths = directories.map(function(directory) {
        var expected_lockfile_path = path.resolve(path.join(installed_packages_directory, directory, "lock.json")); // Use constant somewhere (config?)

        return new Promise(function(accept, reject) {
          fs.readFile(expected_lockfile_path, "utf8", function(err, body) {
            if (err) return reject(err);
            accept(body);
          });
        });
      });

      return Promise.all(lockfile_paths);
    }).then(function(raw_lockfiles) {
      return raw_lockfiles.map(function(data) {
        return JSON.parse(data);
      });
    }).then(function(lockfiles) {
      var results = {};

      // Filter out lockfiles that aren't direct dependencies of this package.
      if (filter != null) {
        lockfiles = lockfiles.filter(function(lockfile) {
          return filter[lockfile.package_name] != null;
        });
      }

      // Return artifacts for direct dependencies.
      lockfiles.forEach(function(lockfile) {
        var package_name = lockfile.package_name;
        var version = lockfile.version;

        var deployments = lockfile.deployments || {};
        var contract_types = lockfile.deployments || {};

        var has_deployments = Object.keys(deployments).length > 0;
        var has_contract_types = Object.keys(contract_types).length > 0;

        if (!has_deployments && !has_contract_types) {
          return;
        }

        if (results[package_name] == null) {
          results[package_name] = {
            version: version
          };
        }

        if (has_deployments) {
          results[package_name].deployments = lockfile.deployments;
        }

        if (has_contract_types) {
          results[package_name].contract_types = lockfile.contract_types;
        }
      });

      return results;
    });
  }
};

module.exports = Preflight;


/***/ }),

/***/ 637653:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var fs = __webpack_require__(444798);
var Manifest = __webpack_require__(157967);
var Lockfile = __webpack_require__(247870);
var Sources = __webpack_require__(866326);
var path = __webpack_require__(385622);

function Publisher(registry, host, contract_types, deployments) {
  this.registry = registry;
  this.host = host;
};

Publisher.prototype.publish = function(config, contract_types, deployments, manifest) {
  var self = this;

  var lockfile = {};
  var lockfileURI;

  return new Promise(function(accept, reject) {
    // Place this in a promise so errors will be sent down the promise chain.
    if (!manifest) {
      manifest = Manifest.read(config.manifest_file);
    }

    lockfile.lockfile_version = Lockfile.getInterpreter().version + ""; // ensure string
    lockfile.package_name = manifest.package_name;
    lockfile.meta = {
      authors: manifest.authors,
      license: manifest.license,
      description: manifest.description,
      keywords: manifest.keywords,
      links: manifest.links
    };
    lockfile.version = manifest.version;
    lockfile.contract_types = contract_types || {};
    lockfile.deployments = deployments || {};

    Object.keys(manifest).filter(function (option) {
      return option.indexOf('x-') == 0;
    }).forEach(function (option) {
      lockfile[option] = manifest[option];
    });

    accept();
  }).then(function() {
    // If no sources and no empty array, assume all solidity files in the source directory (configurable).
    if (!manifest.sources) {
      manifest.sources = [
        path.relative(config.working_directory, path.join(config.source_directory, "*.sol")),
        path.relative(config.working_directory, path.join(config.source_directory, "**", "*.sol"))
      ];
    }

    return Sources.expand(manifest.sources, config.base_path);
  }).then(function(source_paths) {
    var promises = [];

    source_paths.forEach(function(source_path) {
      var promise = new Promise(function(accept, reject) {
        self.host.putFile(source_path).then(function(sourceURI) {
          var relative = "." + path.sep + path.relative(config.base_path, source_path);
          var obj = {};
          obj[relative] = sourceURI;
          accept(obj);
        }).catch(reject);
      });

      promises.push(promise);
    });

    return Promise.all(promises);
  }).then(function(source_objects) {

    lockfile.sources = source_objects.reduce(function(merged_obj, source_obj) {
      Object.keys(source_obj).forEach(function(key) {
        merged_obj[key] = source_obj[key];
      });
      return merged_obj;
    }, {});

    var promises = [];

    Object.keys(manifest.dependencies || {}).forEach(function(dependency_name) {
      var lockfile_uri_location = path.join(config.installed_packages_directory, dependency_name, config.default_lockfile_uri_filename);
      promises.push(fs.readFile(lockfile_uri_location, "utf8").then(function(uri) {
        return [dependency_name, uri];
      }));
    });

    return Promise.all(promises);
  }).then(function(lockfile_uris) {

    lockfile.build_dependencies = {};

    lockfile_uris.forEach(function(tuple) {
      var dependency_name = tuple[0];
      var lockfile_uri = tuple[1];

      lockfile.build_dependencies[dependency_name] = lockfile_uri;
    });

    // TODO: Validating here kinda sucks because we've already pushed a bunch of stuff
    // to IPFS.
    var results = Lockfile.validate(lockfile);

    if (results.errors.length > 0) {
      var message = results.errors[0].stack;

      // Remove prefixes so error context is within the manifest
      message = message.replace("instance.", "");
      message = message.replace("meta.", "");

      throw new Error("Invalid package configuration: " + message);
    }

    return self.host.putContents(JSON.stringify(lockfile));
  }).then(function(lockfileURI) {
    return self.registry.register(manifest.package_name, manifest.version, lockfileURI);
  }).then(function() {
    return lockfile;
  });
}

module.exports = Publisher;


/***/ }),

/***/ 597591:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var semver = __webpack_require__(236625);

function MemoryRegistry() {
  this.packages = {};
};

MemoryRegistry.prototype.getAllVersions = function(package_name, callback) {
  var self = this;
  return new Promise(function(accept, reject) {
    if (!self.packages[package_name]) {
      return accept([]);
    }
    accept(Object.keys(self.packages[package_name]).sort());
  });
}

MemoryRegistry.prototype.resolveVersion = function(package_name, version_range) {
  return this.getAllVersions(package_name).then(function(versions) {
    // This can be optimized.
    var max = null;

    versions.forEach(function(version) {
      if (semver.satisfies(version, version_range)) {
        if (max == null || semver.gte(version, max)) {
          max = version;
        }
      }
    });

    return max;
  });
};

MemoryRegistry.prototype.getLockfileURI = function(package_name, version_range) {
  var self = this;
  return this.resolveVersion(package_name, version_range).then(function(version) {
    if (version == null) {
      throw new Error("Cannot find package '" + package_name + "' that satisfies the version range: " + version_range);
    }

    return self.packages[package_name][version];
  });
};

MemoryRegistry.prototype.register = function(package_name, version, lockfileURI) {
  var self = this;
  return new Promise(function(accept, reject) {
    if (self.packages[package_name] && self.packages[package_name][version]) {
      return reject(new Error("Version " + version + " already exists for package " + package_name));
    }

    if (!self.packages[package_name]) {
      self.packages[package_name] = [];
    }

    self.packages[package_name][version] = lockfileURI;
    accept();
  });
};

module.exports = MemoryRegistry;


/***/ }),

/***/ 866326:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var dir = __webpack_require__(362430);
var glob = __webpack_require__(312884);
var fs = __webpack_require__(935747);
var each = __webpack_require__(297636);
var path = __webpack_require__(385622);

var Sources = {

  expand: function(list, basePath) {
    var self = this;
    var paths = [];

    return new Promise(function(accept, reject) {
      each(list, function(source_path, finished) {
        var matches = [];

        // If we have a glob...
        if (glob.hasMagic(source_path)) {
          self.expandGlob(source_path, basePath).then(function(result) {
            paths = paths.concat(result);
          }).then(finished).catch(finished);
          return;
        }

        fs.stat(source_path, function(err, stats) {
          if (err) return finished(err);

          // If it's a directory, recursively get all children and grandchildren
          // and add them to the list.
          if (stats.isDirectory()) {
            self.expandDirectory(source_path, basePath).then(function(result) {
              paths = paths.concat(result);
            }).then(finished).catch(finished);
            return;
          }

          if (stats.isFile()) {
            // If it's a file, just add it to the list.
            paths.push(source_path);
            return finished();
          }

          // In the rare case it's neither a file nor directory, error.
          return finished(new Error("Unknown file type at path " + source_path));
        });
      }, function(err) {
        if (err) return reject(err);
        accept(paths);
      });
    });
  },

  expandGlob: function(source_path, basePath) {
    var self = this;
    return new Promise(function(accept, reject) {
      glob(source_path, {
        cwd: basePath
      }, function(err, matches) {
        if (err) return reject(err);
        accept(matches);
      });
    }).then(function(matches) {
      return matches.map(function(match) {
        return path.resolve(path.join(basePath, match));
      });
    }).then(function(matches) {
      return self.expand(matches, basePath);
    });
  },

  expandDirectory: function(source_path, basePath) {
    source_path = path.resolve(path.join(basePath, source_path));
    return new Promise(function(accept, reject) {
      dir.files(source_path, function(err, files) {
        if (err) return reject(err);
        accept(files);
      });
    });
  },

  findDirectories: function(basePath) {
    return new Promise(function(accept, reject) {
      glob("./*", {
        cwd: basePath
      }, function(err, matches) {
        if (err) return reject(err);
        matches = matches.map(function(match) {
          return path.join(basePath, match);
        });
        accept(matches);
      });
    });
  }

};

module.exports = Sources;


/***/ }),

/***/ 520170:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var URL = __webpack_require__(978835);

var Util = {
  isURI: function(url) {
    return URL.parse(url).protocol != null;
  }
};

module.exports = Util;


/***/ }),

/***/ 443360:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var compileSchema = __webpack_require__(631716)
  , resolve = __webpack_require__(958864)
  , Cache = __webpack_require__(356512)
  , SchemaObject = __webpack_require__(294533)
  , stableStringify = __webpack_require__(835035)
  , formats = __webpack_require__(586563)
  , rules = __webpack_require__(322239)
  , $dataMetaSchema = __webpack_require__(264662)
  , util = __webpack_require__(139485);

module.exports = Ajv;

Ajv.prototype.validate = validate;
Ajv.prototype.compile = compile;
Ajv.prototype.addSchema = addSchema;
Ajv.prototype.addMetaSchema = addMetaSchema;
Ajv.prototype.validateSchema = validateSchema;
Ajv.prototype.getSchema = getSchema;
Ajv.prototype.removeSchema = removeSchema;
Ajv.prototype.addFormat = addFormat;
Ajv.prototype.errorsText = errorsText;

Ajv.prototype._addSchema = _addSchema;
Ajv.prototype._compile = _compile;

Ajv.prototype.compileAsync = __webpack_require__(999599);
var customKeyword = __webpack_require__(444205);
Ajv.prototype.addKeyword = customKeyword.add;
Ajv.prototype.getKeyword = customKeyword.get;
Ajv.prototype.removeKeyword = customKeyword.remove;
Ajv.prototype.validateKeyword = customKeyword.validate;

var errorClasses = __webpack_require__(782741);
Ajv.ValidationError = errorClasses.Validation;
Ajv.MissingRefError = errorClasses.MissingRef;
Ajv.$dataMetaSchema = $dataMetaSchema;

var META_SCHEMA_ID = 'http://json-schema.org/draft-07/schema';

var META_IGNORE_OPTIONS = [ 'removeAdditional', 'useDefaults', 'coerceTypes', 'strictDefaults' ];
var META_SUPPORT_DATA = ['/properties'];

/**
 * Creates validator instance.
 * Usage: `Ajv(opts)`
 * @param {Object} opts optional options
 * @return {Object} ajv instance
 */
function Ajv(opts) {
  if (!(this instanceof Ajv)) return new Ajv(opts);
  opts = this._opts = util.copy(opts) || {};
  setLogger(this);
  this._schemas = {};
  this._refs = {};
  this._fragments = {};
  this._formats = formats(opts.format);

  this._cache = opts.cache || new Cache;
  this._loadingSchemas = {};
  this._compilations = [];
  this.RULES = rules();
  this._getId = chooseGetId(opts);

  opts.loopRequired = opts.loopRequired || Infinity;
  if (opts.errorDataPath == 'property') opts._errorDataPathProperty = true;
  if (opts.serialize === undefined) opts.serialize = stableStringify;
  this._metaOpts = getMetaSchemaOptions(this);

  if (opts.formats) addInitialFormats(this);
  if (opts.keywords) addInitialKeywords(this);
  addDefaultMetaSchema(this);
  if (typeof opts.meta == 'object') this.addMetaSchema(opts.meta);
  if (opts.nullable) this.addKeyword('nullable', {metaSchema: {type: 'boolean'}});
  addInitialSchemas(this);
}



/**
 * Validate data using schema
 * Schema will be compiled and cached (using serialized JSON as key. [fast-json-stable-stringify](https://github.com/epoberezkin/fast-json-stable-stringify) is used to serialize.
 * @this   Ajv
 * @param  {String|Object} schemaKeyRef key, ref or schema object
 * @param  {Any} data to be validated
 * @return {Boolean} validation result. Errors from the last validation will be available in `ajv.errors` (and also in compiled schema: `schema.errors`).
 */
function validate(schemaKeyRef, data) {
  var v;
  if (typeof schemaKeyRef == 'string') {
    v = this.getSchema(schemaKeyRef);
    if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"');
  } else {
    var schemaObj = this._addSchema(schemaKeyRef);
    v = schemaObj.validate || this._compile(schemaObj);
  }

  var valid = v(data);
  if (v.$async !== true) this.errors = v.errors;
  return valid;
}


/**
 * Create validating function for passed schema.
 * @this   Ajv
 * @param  {Object} schema schema object
 * @param  {Boolean} _meta true if schema is a meta-schema. Used internally to compile meta schemas of custom keywords.
 * @return {Function} validating function
 */
function compile(schema, _meta) {
  var schemaObj = this._addSchema(schema, undefined, _meta);
  return schemaObj.validate || this._compile(schemaObj);
}


/**
 * Adds schema to the instance.
 * @this   Ajv
 * @param {Object|Array} schema schema or array of schemas. If array is passed, `key` and other parameters will be ignored.
 * @param {String} key Optional schema key. Can be passed to `validate` method instead of schema object or id/ref. One schema per instance can have empty `id` and `key`.
 * @param {Boolean} _skipValidation true to skip schema validation. Used internally, option validateSchema should be used instead.
 * @param {Boolean} _meta true if schema is a meta-schema. Used internally, addMetaSchema should be used instead.
 * @return {Ajv} this for method chaining
 */
function addSchema(schema, key, _skipValidation, _meta) {
  if (Array.isArray(schema)){
    for (var i=0; i<schema.length; i++) this.addSchema(schema[i], undefined, _skipValidation, _meta);
    return this;
  }
  var id = this._getId(schema);
  if (id !== undefined && typeof id != 'string')
    throw new Error('schema id must be string');
  key = resolve.normalizeId(key || id);
  checkUnique(this, key);
  this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);
  return this;
}


/**
 * Add schema that will be used to validate other schemas
 * options in META_IGNORE_OPTIONS are alway set to false
 * @this   Ajv
 * @param {Object} schema schema object
 * @param {String} key optional schema key
 * @param {Boolean} skipValidation true to skip schema validation, can be used to override validateSchema option for meta-schema
 * @return {Ajv} this for method chaining
 */
function addMetaSchema(schema, key, skipValidation) {
  this.addSchema(schema, key, skipValidation, true);
  return this;
}


/**
 * Validate schema
 * @this   Ajv
 * @param {Object} schema schema to validate
 * @param {Boolean} throwOrLogError pass true to throw (or log) an error if invalid
 * @return {Boolean} true if schema is valid
 */
function validateSchema(schema, throwOrLogError) {
  var $schema = schema.$schema;
  if ($schema !== undefined && typeof $schema != 'string')
    throw new Error('$schema must be a string');
  $schema = $schema || this._opts.defaultMeta || defaultMeta(this);
  if (!$schema) {
    this.logger.warn('meta-schema not available');
    this.errors = null;
    return true;
  }
  var valid = this.validate($schema, schema);
  if (!valid && throwOrLogError) {
    var message = 'schema is invalid: ' + this.errorsText();
    if (this._opts.validateSchema == 'log') this.logger.error(message);
    else throw new Error(message);
  }
  return valid;
}


function defaultMeta(self) {
  var meta = self._opts.meta;
  self._opts.defaultMeta = typeof meta == 'object'
                            ? self._getId(meta) || meta
                            : self.getSchema(META_SCHEMA_ID)
                              ? META_SCHEMA_ID
                              : undefined;
  return self._opts.defaultMeta;
}


/**
 * Get compiled schema from the instance by `key` or `ref`.
 * @this   Ajv
 * @param  {String} keyRef `key` that was passed to `addSchema` or full schema reference (`schema.id` or resolved id).
 * @return {Function} schema validating function (with property `schema`).
 */
function getSchema(keyRef) {
  var schemaObj = _getSchemaObj(this, keyRef);
  switch (typeof schemaObj) {
    case 'object': return schemaObj.validate || this._compile(schemaObj);
    case 'string': return this.getSchema(schemaObj);
    case 'undefined': return _getSchemaFragment(this, keyRef);
  }
}


function _getSchemaFragment(self, ref) {
  var res = resolve.schema.call(self, { schema: {} }, ref);
  if (res) {
    var schema = res.schema
      , root = res.root
      , baseId = res.baseId;
    var v = compileSchema.call(self, schema, root, undefined, baseId);
    self._fragments[ref] = new SchemaObject({
      ref: ref,
      fragment: true,
      schema: schema,
      root: root,
      baseId: baseId,
      validate: v
    });
    return v;
  }
}


function _getSchemaObj(self, keyRef) {
  keyRef = resolve.normalizeId(keyRef);
  return self._schemas[keyRef] || self._refs[keyRef] || self._fragments[keyRef];
}


/**
 * Remove cached schema(s).
 * If no parameter is passed all schemas but meta-schemas are removed.
 * If RegExp is passed all schemas with key/id matching pattern but meta-schemas are removed.
 * Even if schema is referenced by other schemas it still can be removed as other schemas have local references.
 * @this   Ajv
 * @param  {String|Object|RegExp} schemaKeyRef key, ref, pattern to match key/ref or schema object
 * @return {Ajv} this for method chaining
 */
function removeSchema(schemaKeyRef) {
  if (schemaKeyRef instanceof RegExp) {
    _removeAllSchemas(this, this._schemas, schemaKeyRef);
    _removeAllSchemas(this, this._refs, schemaKeyRef);
    return this;
  }
  switch (typeof schemaKeyRef) {
    case 'undefined':
      _removeAllSchemas(this, this._schemas);
      _removeAllSchemas(this, this._refs);
      this._cache.clear();
      return this;
    case 'string':
      var schemaObj = _getSchemaObj(this, schemaKeyRef);
      if (schemaObj) this._cache.del(schemaObj.cacheKey);
      delete this._schemas[schemaKeyRef];
      delete this._refs[schemaKeyRef];
      return this;
    case 'object':
      var serialize = this._opts.serialize;
      var cacheKey = serialize ? serialize(schemaKeyRef) : schemaKeyRef;
      this._cache.del(cacheKey);
      var id = this._getId(schemaKeyRef);
      if (id) {
        id = resolve.normalizeId(id);
        delete this._schemas[id];
        delete this._refs[id];
      }
  }
  return this;
}


function _removeAllSchemas(self, schemas, regex) {
  for (var keyRef in schemas) {
    var schemaObj = schemas[keyRef];
    if (!schemaObj.meta && (!regex || regex.test(keyRef))) {
      self._cache.del(schemaObj.cacheKey);
      delete schemas[keyRef];
    }
  }
}


/* @this   Ajv */
function _addSchema(schema, skipValidation, meta, shouldAddSchema) {
  if (typeof schema != 'object' && typeof schema != 'boolean')
    throw new Error('schema should be object or boolean');
  var serialize = this._opts.serialize;
  var cacheKey = serialize ? serialize(schema) : schema;
  var cached = this._cache.get(cacheKey);
  if (cached) return cached;

  shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;

  var id = resolve.normalizeId(this._getId(schema));
  if (id && shouldAddSchema) checkUnique(this, id);

  var willValidate = this._opts.validateSchema !== false && !skipValidation;
  var recursiveMeta;
  if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))
    this.validateSchema(schema, true);

  var localRefs = resolve.ids.call(this, schema);

  var schemaObj = new SchemaObject({
    id: id,
    schema: schema,
    localRefs: localRefs,
    cacheKey: cacheKey,
    meta: meta
  });

  if (id[0] != '#' && shouldAddSchema) this._refs[id] = schemaObj;
  this._cache.put(cacheKey, schemaObj);

  if (willValidate && recursiveMeta) this.validateSchema(schema, true);

  return schemaObj;
}


/* @this   Ajv */
function _compile(schemaObj, root) {
  if (schemaObj.compiling) {
    schemaObj.validate = callValidate;
    callValidate.schema = schemaObj.schema;
    callValidate.errors = null;
    callValidate.root = root ? root : callValidate;
    if (schemaObj.schema.$async === true)
      callValidate.$async = true;
    return callValidate;
  }
  schemaObj.compiling = true;

  var currentOpts;
  if (schemaObj.meta) {
    currentOpts = this._opts;
    this._opts = this._metaOpts;
  }

  var v;
  try { v = compileSchema.call(this, schemaObj.schema, root, schemaObj.localRefs); }
  catch(e) {
    delete schemaObj.validate;
    throw e;
  }
  finally {
    schemaObj.compiling = false;
    if (schemaObj.meta) this._opts = currentOpts;
  }

  schemaObj.validate = v;
  schemaObj.refs = v.refs;
  schemaObj.refVal = v.refVal;
  schemaObj.root = v.root;
  return v;


  /* @this   {*} - custom context, see passContext option */
  function callValidate() {
    /* jshint validthis: true */
    var _validate = schemaObj.validate;
    var result = _validate.apply(this, arguments);
    callValidate.errors = _validate.errors;
    return result;
  }
}


function chooseGetId(opts) {
  switch (opts.schemaId) {
    case 'auto': return _get$IdOrId;
    case 'id': return _getId;
    default: return _get$Id;
  }
}

/* @this   Ajv */
function _getId(schema) {
  if (schema.$id) this.logger.warn('schema $id ignored', schema.$id);
  return schema.id;
}

/* @this   Ajv */
function _get$Id(schema) {
  if (schema.id) this.logger.warn('schema id ignored', schema.id);
  return schema.$id;
}


function _get$IdOrId(schema) {
  if (schema.$id && schema.id && schema.$id != schema.id)
    throw new Error('schema $id is different from id');
  return schema.$id || schema.id;
}


/**
 * Convert array of error message objects to string
 * @this   Ajv
 * @param  {Array<Object>} errors optional array of validation errors, if not passed errors from the instance are used.
 * @param  {Object} options optional options with properties `separator` and `dataVar`.
 * @return {String} human readable string with all errors descriptions
 */
function errorsText(errors, options) {
  errors = errors || this.errors;
  if (!errors) return 'No errors';
  options = options || {};
  var separator = options.separator === undefined ? ', ' : options.separator;
  var dataVar = options.dataVar === undefined ? 'data' : options.dataVar;

  var text = '';
  for (var i=0; i<errors.length; i++) {
    var e = errors[i];
    if (e) text += dataVar + e.dataPath + ' ' + e.message + separator;
  }
  return text.slice(0, -separator.length);
}


/**
 * Add custom format
 * @this   Ajv
 * @param {String} name format name
 * @param {String|RegExp|Function} format string is converted to RegExp; function should return boolean (true when valid)
 * @return {Ajv} this for method chaining
 */
function addFormat(name, format) {
  if (typeof format == 'string') format = new RegExp(format);
  this._formats[name] = format;
  return this;
}


function addDefaultMetaSchema(self) {
  var $dataSchema;
  if (self._opts.$data) {
    $dataSchema = __webpack_require__(445152);
    self.addMetaSchema($dataSchema, $dataSchema.$id, true);
  }
  if (self._opts.meta === false) return;
  var metaSchema = __webpack_require__(474612);
  if (self._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);
  self.addMetaSchema(metaSchema, META_SCHEMA_ID, true);
  self._refs['http://json-schema.org/schema'] = META_SCHEMA_ID;
}


function addInitialSchemas(self) {
  var optsSchemas = self._opts.schemas;
  if (!optsSchemas) return;
  if (Array.isArray(optsSchemas)) self.addSchema(optsSchemas);
  else for (var key in optsSchemas) self.addSchema(optsSchemas[key], key);
}


function addInitialFormats(self) {
  for (var name in self._opts.formats) {
    var format = self._opts.formats[name];
    self.addFormat(name, format);
  }
}


function addInitialKeywords(self) {
  for (var name in self._opts.keywords) {
    var keyword = self._opts.keywords[name];
    self.addKeyword(name, keyword);
  }
}


function checkUnique(self, id) {
  if (self._schemas[id] || self._refs[id])
    throw new Error('schema with key or id "' + id + '" already exists');
}


function getMetaSchemaOptions(self) {
  var metaOpts = util.copy(self._opts);
  for (var i=0; i<META_IGNORE_OPTIONS.length; i++)
    delete metaOpts[META_IGNORE_OPTIONS[i]];
  return metaOpts;
}


function setLogger(self) {
  var logger = self._opts.logger;
  if (logger === false) {
    self.logger = {log: noop, warn: noop, error: noop};
  } else {
    if (logger === undefined) logger = console;
    if (!(typeof logger == 'object' && logger.log && logger.warn && logger.error))
      throw new Error('logger must implement log, warn and error methods');
    self.logger = logger;
  }
}


function noop() {}


/***/ }),

/***/ 356512:
/***/ ((module) => {

"use strict";



var Cache = module.exports = function Cache() {
  this._cache = {};
};


Cache.prototype.put = function Cache_put(key, value) {
  this._cache[key] = value;
};


Cache.prototype.get = function Cache_get(key) {
  return this._cache[key];
};


Cache.prototype.del = function Cache_del(key) {
  delete this._cache[key];
};


Cache.prototype.clear = function Cache_clear() {
  this._cache = {};
};


/***/ }),

/***/ 999599:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var MissingRefError = __webpack_require__(782741).MissingRef;

module.exports = compileAsync;


/**
 * Creates validating function for passed schema with asynchronous loading of missing schemas.
 * `loadSchema` option should be a function that accepts schema uri and returns promise that resolves with the schema.
 * @this  Ajv
 * @param {Object}   schema schema object
 * @param {Boolean}  meta optional true to compile meta-schema; this parameter can be skipped
 * @param {Function} callback an optional node-style callback, it is called with 2 parameters: error (or null) and validating function.
 * @return {Promise} promise that resolves with a validating function.
 */
function compileAsync(schema, meta, callback) {
  /* eslint no-shadow: 0 */
  /* global Promise */
  /* jshint validthis: true */
  var self = this;
  if (typeof this._opts.loadSchema != 'function')
    throw new Error('options.loadSchema should be a function');

  if (typeof meta == 'function') {
    callback = meta;
    meta = undefined;
  }

  var p = loadMetaSchemaOf(schema).then(function () {
    var schemaObj = self._addSchema(schema, undefined, meta);
    return schemaObj.validate || _compileAsync(schemaObj);
  });

  if (callback) {
    p.then(
      function(v) { callback(null, v); },
      callback
    );
  }

  return p;


  function loadMetaSchemaOf(sch) {
    var $schema = sch.$schema;
    return $schema && !self.getSchema($schema)
            ? compileAsync.call(self, { $ref: $schema }, true)
            : Promise.resolve();
  }


  function _compileAsync(schemaObj) {
    try { return self._compile(schemaObj); }
    catch(e) {
      if (e instanceof MissingRefError) return loadMissingSchema(e);
      throw e;
    }


    function loadMissingSchema(e) {
      var ref = e.missingSchema;
      if (added(ref)) throw new Error('Schema ' + ref + ' is loaded but ' + e.missingRef + ' cannot be resolved');

      var schemaPromise = self._loadingSchemas[ref];
      if (!schemaPromise) {
        schemaPromise = self._loadingSchemas[ref] = self._opts.loadSchema(ref);
        schemaPromise.then(removePromise, removePromise);
      }

      return schemaPromise.then(function (sch) {
        if (!added(ref)) {
          return loadMetaSchemaOf(sch).then(function () {
            if (!added(ref)) self.addSchema(sch, ref, undefined, meta);
          });
        }
      }).then(function() {
        return _compileAsync(schemaObj);
      });

      function removePromise() {
        delete self._loadingSchemas[ref];
      }

      function added(ref) {
        return self._refs[ref] || self._schemas[ref];
      }
    }
  }
}


/***/ }),

/***/ 782741:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var resolve = __webpack_require__(958864);

module.exports = {
  Validation: errorSubclass(ValidationError),
  MissingRef: errorSubclass(MissingRefError)
};


function ValidationError(errors) {
  this.message = 'validation failed';
  this.errors = errors;
  this.ajv = this.validation = true;
}


MissingRefError.message = function (baseId, ref) {
  return 'can\'t resolve reference ' + ref + ' from id ' + baseId;
};


function MissingRefError(baseId, ref, message) {
  this.message = message || MissingRefError.message(baseId, ref);
  this.missingRef = resolve.url(baseId, ref);
  this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));
}


function errorSubclass(Subclass) {
  Subclass.prototype = Object.create(Error.prototype);
  Subclass.prototype.constructor = Subclass;
  return Subclass;
}


/***/ }),

/***/ 586563:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var util = __webpack_require__(139485);

var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
var DAYS = [0,31,28,31,30,31,30,31,31,30,31,30,31];
var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;
var HOSTNAME = /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;
var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
var URIREF = /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
// uri-template: https://tools.ietf.org/html/rfc6570
var URITEMPLATE = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;
// For the source: https://gist.github.com/dperini/729294
// For test cases: https://mathiasbynens.be/demo/url-regex
// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.
// var URL = /^(?:(?:https?|ftp):\/\/)(?:\S+(?::\S*)?@)?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(?:\.(?:[a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(?:\.(?:[a-z\u{00a1}-\u{ffff}]{2,})))(?::\d{2,5})?(?:\/[^\s]*)?$/iu;
var URL = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i;
var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;
var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/;
var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;
var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;


module.exports = formats;

function formats(mode) {
  mode = mode == 'full' ? 'full' : 'fast';
  return util.copy(formats[mode]);
}


formats.fast = {
  // date: http://tools.ietf.org/html/rfc3339#section-5.6
  date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/,
  // date-time: http://tools.ietf.org/html/rfc3339#section-5.6
  time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,
  'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,
  // uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js
  uri: /^(?:[a-z][a-z0-9+-.]*:)(?:\/?\/)?[^\s]*$/i,
  'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,
  'uri-template': URITEMPLATE,
  url: URL,
  // email (sources from jsen validator):
  // http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363
  // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')
  email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,
  hostname: HOSTNAME,
  // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
  // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
  ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
  regex: regex,
  // uuid: http://tools.ietf.org/html/rfc4122
  uuid: UUID,
  // JSON-pointer: https://tools.ietf.org/html/rfc6901
  // uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A
  'json-pointer': JSON_POINTER,
  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,
  // relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00
  'relative-json-pointer': RELATIVE_JSON_POINTER
};


formats.full = {
  date: date,
  time: time,
  'date-time': date_time,
  uri: uri,
  'uri-reference': URIREF,
  'uri-template': URITEMPLATE,
  url: URL,
  email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,
  hostname: HOSTNAME,
  ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
  ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
  regex: regex,
  uuid: UUID,
  'json-pointer': JSON_POINTER,
  'json-pointer-uri-fragment': JSON_POINTER_URI_FRAGMENT,
  'relative-json-pointer': RELATIVE_JSON_POINTER
};


function isLeapYear(year) {
  // https://tools.ietf.org/html/rfc3339#appendix-C
  return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
}


function date(str) {
  // full-date from http://tools.ietf.org/html/rfc3339#section-5.6
  var matches = str.match(DATE);
  if (!matches) return false;

  var year = +matches[1];
  var month = +matches[2];
  var day = +matches[3];

  return month >= 1 && month <= 12 && day >= 1 &&
          day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);
}


function time(str, full) {
  var matches = str.match(TIME);
  if (!matches) return false;

  var hour = matches[1];
  var minute = matches[2];
  var second = matches[3];
  var timeZone = matches[5];
  return ((hour <= 23 && minute <= 59 && second <= 59) ||
          (hour == 23 && minute == 59 && second == 60)) &&
         (!full || timeZone);
}


var DATE_TIME_SEPARATOR = /t|\s/i;
function date_time(str) {
  // http://tools.ietf.org/html/rfc3339#section-5.6
  var dateTime = str.split(DATE_TIME_SEPARATOR);
  return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);
}


var NOT_URI_FRAGMENT = /\/|:/;
function uri(str) {
  // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required "."
  return NOT_URI_FRAGMENT.test(str) && URI.test(str);
}


var Z_ANCHOR = /[^\\]\\Z/;
function regex(str) {
  if (Z_ANCHOR.test(str)) return false;
  try {
    new RegExp(str);
    return true;
  } catch(e) {
    return false;
  }
}


/***/ }),

/***/ 631716:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var resolve = __webpack_require__(958864)
  , util = __webpack_require__(139485)
  , errorClasses = __webpack_require__(782741)
  , stableStringify = __webpack_require__(835035);

var validateGenerator = __webpack_require__(915992);

/**
 * Functions below are used inside compiled validations function
 */

var ucs2length = util.ucs2length;
var equal = __webpack_require__(764063);

// this error is thrown by async schemas to return validation errors via exception
var ValidationError = errorClasses.Validation;

module.exports = compile;


/**
 * Compiles schema to validation function
 * @this   Ajv
 * @param  {Object} schema schema object
 * @param  {Object} root object with information about the root schema for this schema
 * @param  {Object} localRefs the hash of local references inside the schema (created by resolve.id), used for inline resolution
 * @param  {String} baseId base ID for IDs in the schema
 * @return {Function} validation function
 */
function compile(schema, root, localRefs, baseId) {
  /* jshint validthis: true, evil: true */
  /* eslint no-shadow: 0 */
  var self = this
    , opts = this._opts
    , refVal = [ undefined ]
    , refs = {}
    , patterns = []
    , patternsHash = {}
    , defaults = []
    , defaultsHash = {}
    , customRules = [];

  root = root || { schema: schema, refVal: refVal, refs: refs };

  var c = checkCompiling.call(this, schema, root, baseId);
  var compilation = this._compilations[c.index];
  if (c.compiling) return (compilation.callValidate = callValidate);

  var formats = this._formats;
  var RULES = this.RULES;

  try {
    var v = localCompile(schema, root, localRefs, baseId);
    compilation.validate = v;
    var cv = compilation.callValidate;
    if (cv) {
      cv.schema = v.schema;
      cv.errors = null;
      cv.refs = v.refs;
      cv.refVal = v.refVal;
      cv.root = v.root;
      cv.$async = v.$async;
      if (opts.sourceCode) cv.source = v.source;
    }
    return v;
  } finally {
    endCompiling.call(this, schema, root, baseId);
  }

  /* @this   {*} - custom context, see passContext option */
  function callValidate() {
    /* jshint validthis: true */
    var validate = compilation.validate;
    var result = validate.apply(this, arguments);
    callValidate.errors = validate.errors;
    return result;
  }

  function localCompile(_schema, _root, localRefs, baseId) {
    var isRoot = !_root || (_root && _root.schema == _schema);
    if (_root.schema != root.schema)
      return compile.call(self, _schema, _root, localRefs, baseId);

    var $async = _schema.$async === true;

    var sourceCode = validateGenerator({
      isTop: true,
      schema: _schema,
      isRoot: isRoot,
      baseId: baseId,
      root: _root,
      schemaPath: '',
      errSchemaPath: '#',
      errorPath: '""',
      MissingRefError: errorClasses.MissingRef,
      RULES: RULES,
      validate: validateGenerator,
      util: util,
      resolve: resolve,
      resolveRef: resolveRef,
      usePattern: usePattern,
      useDefault: useDefault,
      useCustomRule: useCustomRule,
      opts: opts,
      formats: formats,
      logger: self.logger,
      self: self
    });

    sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode)
                   + vars(defaults, defaultCode) + vars(customRules, customRuleCode)
                   + sourceCode;

    if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);
    // console.log('\n\n\n *** \n', JSON.stringify(sourceCode));
    var validate;
    try {
      var makeValidate = new Function(
        'self',
        'RULES',
        'formats',
        'root',
        'refVal',
        'defaults',
        'customRules',
        'equal',
        'ucs2length',
        'ValidationError',
        sourceCode
      );

      validate = makeValidate(
        self,
        RULES,
        formats,
        root,
        refVal,
        defaults,
        customRules,
        equal,
        ucs2length,
        ValidationError
      );

      refVal[0] = validate;
    } catch(e) {
      self.logger.error('Error compiling schema, function code:', sourceCode);
      throw e;
    }

    validate.schema = _schema;
    validate.errors = null;
    validate.refs = refs;
    validate.refVal = refVal;
    validate.root = isRoot ? validate : _root;
    if ($async) validate.$async = true;
    if (opts.sourceCode === true) {
      validate.source = {
        code: sourceCode,
        patterns: patterns,
        defaults: defaults
      };
    }

    return validate;
  }

  function resolveRef(baseId, ref, isRoot) {
    ref = resolve.url(baseId, ref);
    var refIndex = refs[ref];
    var _refVal, refCode;
    if (refIndex !== undefined) {
      _refVal = refVal[refIndex];
      refCode = 'refVal[' + refIndex + ']';
      return resolvedRef(_refVal, refCode);
    }
    if (!isRoot && root.refs) {
      var rootRefId = root.refs[ref];
      if (rootRefId !== undefined) {
        _refVal = root.refVal[rootRefId];
        refCode = addLocalRef(ref, _refVal);
        return resolvedRef(_refVal, refCode);
      }
    }

    refCode = addLocalRef(ref);
    var v = resolve.call(self, localCompile, root, ref);
    if (v === undefined) {
      var localSchema = localRefs && localRefs[ref];
      if (localSchema) {
        v = resolve.inlineRef(localSchema, opts.inlineRefs)
            ? localSchema
            : compile.call(self, localSchema, root, localRefs, baseId);
      }
    }

    if (v === undefined) {
      removeLocalRef(ref);
    } else {
      replaceLocalRef(ref, v);
      return resolvedRef(v, refCode);
    }
  }

  function addLocalRef(ref, v) {
    var refId = refVal.length;
    refVal[refId] = v;
    refs[ref] = refId;
    return 'refVal' + refId;
  }

  function removeLocalRef(ref) {
    delete refs[ref];
  }

  function replaceLocalRef(ref, v) {
    var refId = refs[ref];
    refVal[refId] = v;
  }

  function resolvedRef(refVal, code) {
    return typeof refVal == 'object' || typeof refVal == 'boolean'
            ? { code: code, schema: refVal, inline: true }
            : { code: code, $async: refVal && !!refVal.$async };
  }

  function usePattern(regexStr) {
    var index = patternsHash[regexStr];
    if (index === undefined) {
      index = patternsHash[regexStr] = patterns.length;
      patterns[index] = regexStr;
    }
    return 'pattern' + index;
  }

  function useDefault(value) {
    switch (typeof value) {
      case 'boolean':
      case 'number':
        return '' + value;
      case 'string':
        return util.toQuotedString(value);
      case 'object':
        if (value === null) return 'null';
        var valueStr = stableStringify(value);
        var index = defaultsHash[valueStr];
        if (index === undefined) {
          index = defaultsHash[valueStr] = defaults.length;
          defaults[index] = value;
        }
        return 'default' + index;
    }
  }

  function useCustomRule(rule, schema, parentSchema, it) {
    if (self._opts.validateSchema !== false) {
      var deps = rule.definition.dependencies;
      if (deps && !deps.every(function(keyword) {
        return Object.prototype.hasOwnProperty.call(parentSchema, keyword);
      }))
        throw new Error('parent schema must have all required keywords: ' + deps.join(','));

      var validateSchema = rule.definition.validateSchema;
      if (validateSchema) {
        var valid = validateSchema(schema);
        if (!valid) {
          var message = 'keyword schema is invalid: ' + self.errorsText(validateSchema.errors);
          if (self._opts.validateSchema == 'log') self.logger.error(message);
          else throw new Error(message);
        }
      }
    }

    var compile = rule.definition.compile
      , inline = rule.definition.inline
      , macro = rule.definition.macro;

    var validate;
    if (compile) {
      validate = compile.call(self, schema, parentSchema, it);
    } else if (macro) {
      validate = macro.call(self, schema, parentSchema, it);
      if (opts.validateSchema !== false) self.validateSchema(validate, true);
    } else if (inline) {
      validate = inline.call(self, it, rule.keyword, schema, parentSchema);
    } else {
      validate = rule.definition.validate;
      if (!validate) return;
    }

    if (validate === undefined)
      throw new Error('custom keyword "' + rule.keyword + '"failed to compile');

    var index = customRules.length;
    customRules[index] = validate;

    return {
      code: 'customRule' + index,
      validate: validate
    };
  }
}


/**
 * Checks if the schema is currently compiled
 * @this   Ajv
 * @param  {Object} schema schema to compile
 * @param  {Object} root root object
 * @param  {String} baseId base schema ID
 * @return {Object} object with properties "index" (compilation index) and "compiling" (boolean)
 */
function checkCompiling(schema, root, baseId) {
  /* jshint validthis: true */
  var index = compIndex.call(this, schema, root, baseId);
  if (index >= 0) return { index: index, compiling: true };
  index = this._compilations.length;
  this._compilations[index] = {
    schema: schema,
    root: root,
    baseId: baseId
  };
  return { index: index, compiling: false };
}


/**
 * Removes the schema from the currently compiled list
 * @this   Ajv
 * @param  {Object} schema schema to compile
 * @param  {Object} root root object
 * @param  {String} baseId base schema ID
 */
function endCompiling(schema, root, baseId) {
  /* jshint validthis: true */
  var i = compIndex.call(this, schema, root, baseId);
  if (i >= 0) this._compilations.splice(i, 1);
}


/**
 * Index of schema compilation in the currently compiled list
 * @this   Ajv
 * @param  {Object} schema schema to compile
 * @param  {Object} root root object
 * @param  {String} baseId base schema ID
 * @return {Integer} compilation index
 */
function compIndex(schema, root, baseId) {
  /* jshint validthis: true */
  for (var i=0; i<this._compilations.length; i++) {
    var c = this._compilations[i];
    if (c.schema == schema && c.root == root && c.baseId == baseId) return i;
  }
  return -1;
}


function patternCode(i, patterns) {
  return 'var pattern' + i + ' = new RegExp(' + util.toQuotedString(patterns[i]) + ');';
}


function defaultCode(i) {
  return 'var default' + i + ' = defaults[' + i + '];';
}


function refValCode(i, refVal) {
  return refVal[i] === undefined ? '' : 'var refVal' + i + ' = refVal[' + i + '];';
}


function customRuleCode(i) {
  return 'var customRule' + i + ' = customRules[' + i + '];';
}


function vars(arr, statement) {
  if (!arr.length) return '';
  var code = '';
  for (var i=0; i<arr.length; i++)
    code += statement(i, arr);
  return code;
}


/***/ }),

/***/ 958864:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var URI = __webpack_require__(560540)
  , equal = __webpack_require__(764063)
  , util = __webpack_require__(139485)
  , SchemaObject = __webpack_require__(294533)
  , traverse = __webpack_require__(249461);

module.exports = resolve;

resolve.normalizeId = normalizeId;
resolve.fullPath = getFullPath;
resolve.url = resolveUrl;
resolve.ids = resolveIds;
resolve.inlineRef = inlineRef;
resolve.schema = resolveSchema;

/**
 * [resolve and compile the references ($ref)]
 * @this   Ajv
 * @param  {Function} compile reference to schema compilation funciton (localCompile)
 * @param  {Object} root object with information about the root schema for the current schema
 * @param  {String} ref reference to resolve
 * @return {Object|Function} schema object (if the schema can be inlined) or validation function
 */
function resolve(compile, root, ref) {
  /* jshint validthis: true */
  var refVal = this._refs[ref];
  if (typeof refVal == 'string') {
    if (this._refs[refVal]) refVal = this._refs[refVal];
    else return resolve.call(this, compile, root, refVal);
  }

  refVal = refVal || this._schemas[ref];
  if (refVal instanceof SchemaObject) {
    return inlineRef(refVal.schema, this._opts.inlineRefs)
            ? refVal.schema
            : refVal.validate || this._compile(refVal);
  }

  var res = resolveSchema.call(this, root, ref);
  var schema, v, baseId;
  if (res) {
    schema = res.schema;
    root = res.root;
    baseId = res.baseId;
  }

  if (schema instanceof SchemaObject) {
    v = schema.validate || compile.call(this, schema.schema, root, undefined, baseId);
  } else if (schema !== undefined) {
    v = inlineRef(schema, this._opts.inlineRefs)
        ? schema
        : compile.call(this, schema, root, undefined, baseId);
  }

  return v;
}


/**
 * Resolve schema, its root and baseId
 * @this Ajv
 * @param  {Object} root root object with properties schema, refVal, refs
 * @param  {String} ref  reference to resolve
 * @return {Object} object with properties schema, root, baseId
 */
function resolveSchema(root, ref) {
  /* jshint validthis: true */
  var p = URI.parse(ref)
    , refPath = _getFullPath(p)
    , baseId = getFullPath(this._getId(root.schema));
  if (Object.keys(root.schema).length === 0 || refPath !== baseId) {
    var id = normalizeId(refPath);
    var refVal = this._refs[id];
    if (typeof refVal == 'string') {
      return resolveRecursive.call(this, root, refVal, p);
    } else if (refVal instanceof SchemaObject) {
      if (!refVal.validate) this._compile(refVal);
      root = refVal;
    } else {
      refVal = this._schemas[id];
      if (refVal instanceof SchemaObject) {
        if (!refVal.validate) this._compile(refVal);
        if (id == normalizeId(ref))
          return { schema: refVal, root: root, baseId: baseId };
        root = refVal;
      } else {
        return;
      }
    }
    if (!root.schema) return;
    baseId = getFullPath(this._getId(root.schema));
  }
  return getJsonPointer.call(this, p, baseId, root.schema, root);
}


/* @this Ajv */
function resolveRecursive(root, ref, parsedRef) {
  /* jshint validthis: true */
  var res = resolveSchema.call(this, root, ref);
  if (res) {
    var schema = res.schema;
    var baseId = res.baseId;
    root = res.root;
    var id = this._getId(schema);
    if (id) baseId = resolveUrl(baseId, id);
    return getJsonPointer.call(this, parsedRef, baseId, schema, root);
  }
}


var PREVENT_SCOPE_CHANGE = util.toHash(['properties', 'patternProperties', 'enum', 'dependencies', 'definitions']);
/* @this Ajv */
function getJsonPointer(parsedRef, baseId, schema, root) {
  /* jshint validthis: true */
  parsedRef.fragment = parsedRef.fragment || '';
  if (parsedRef.fragment.slice(0,1) != '/') return;
  var parts = parsedRef.fragment.split('/');

  for (var i = 1; i < parts.length; i++) {
    var part = parts[i];
    if (part) {
      part = util.unescapeFragment(part);
      schema = schema[part];
      if (schema === undefined) break;
      var id;
      if (!PREVENT_SCOPE_CHANGE[part]) {
        id = this._getId(schema);
        if (id) baseId = resolveUrl(baseId, id);
        if (schema.$ref) {
          var $ref = resolveUrl(baseId, schema.$ref);
          var res = resolveSchema.call(this, root, $ref);
          if (res) {
            schema = res.schema;
            root = res.root;
            baseId = res.baseId;
          }
        }
      }
    }
  }
  if (schema !== undefined && schema !== root.schema)
    return { schema: schema, root: root, baseId: baseId };
}


var SIMPLE_INLINED = util.toHash([
  'type', 'format', 'pattern',
  'maxLength', 'minLength',
  'maxProperties', 'minProperties',
  'maxItems', 'minItems',
  'maximum', 'minimum',
  'uniqueItems', 'multipleOf',
  'required', 'enum'
]);
function inlineRef(schema, limit) {
  if (limit === false) return false;
  if (limit === undefined || limit === true) return checkNoRef(schema);
  else if (limit) return countKeys(schema) <= limit;
}


function checkNoRef(schema) {
  var item;
  if (Array.isArray(schema)) {
    for (var i=0; i<schema.length; i++) {
      item = schema[i];
      if (typeof item == 'object' && !checkNoRef(item)) return false;
    }
  } else {
    for (var key in schema) {
      if (key == '$ref') return false;
      item = schema[key];
      if (typeof item == 'object' && !checkNoRef(item)) return false;
    }
  }
  return true;
}


function countKeys(schema) {
  var count = 0, item;
  if (Array.isArray(schema)) {
    for (var i=0; i<schema.length; i++) {
      item = schema[i];
      if (typeof item == 'object') count += countKeys(item);
      if (count == Infinity) return Infinity;
    }
  } else {
    for (var key in schema) {
      if (key == '$ref') return Infinity;
      if (SIMPLE_INLINED[key]) {
        count++;
      } else {
        item = schema[key];
        if (typeof item == 'object') count += countKeys(item) + 1;
        if (count == Infinity) return Infinity;
      }
    }
  }
  return count;
}


function getFullPath(id, normalize) {
  if (normalize !== false) id = normalizeId(id);
  var p = URI.parse(id);
  return _getFullPath(p);
}


function _getFullPath(p) {
  return URI.serialize(p).split('#')[0] + '#';
}


var TRAILING_SLASH_HASH = /#\/?$/;
function normalizeId(id) {
  return id ? id.replace(TRAILING_SLASH_HASH, '') : '';
}


function resolveUrl(baseId, id) {
  id = normalizeId(id);
  return URI.resolve(baseId, id);
}


/* @this Ajv */
function resolveIds(schema) {
  var schemaId = normalizeId(this._getId(schema));
  var baseIds = {'': schemaId};
  var fullPaths = {'': getFullPath(schemaId, false)};
  var localRefs = {};
  var self = this;

  traverse(schema, {allKeys: true}, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
    if (jsonPtr === '') return;
    var id = self._getId(sch);
    var baseId = baseIds[parentJsonPtr];
    var fullPath = fullPaths[parentJsonPtr] + '/' + parentKeyword;
    if (keyIndex !== undefined)
      fullPath += '/' + (typeof keyIndex == 'number' ? keyIndex : util.escapeFragment(keyIndex));

    if (typeof id == 'string') {
      id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);

      var refVal = self._refs[id];
      if (typeof refVal == 'string') refVal = self._refs[refVal];
      if (refVal && refVal.schema) {
        if (!equal(sch, refVal.schema))
          throw new Error('id "' + id + '" resolves to more than one schema');
      } else if (id != normalizeId(fullPath)) {
        if (id[0] == '#') {
          if (localRefs[id] && !equal(sch, localRefs[id]))
            throw new Error('id "' + id + '" resolves to more than one schema');
          localRefs[id] = sch;
        } else {
          self._refs[id] = fullPath;
        }
      }
    }
    baseIds[jsonPtr] = baseId;
    fullPaths[jsonPtr] = fullPath;
  });

  return localRefs;
}


/***/ }),

/***/ 322239:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var ruleModules = __webpack_require__(782622)
  , toHash = __webpack_require__(139485).toHash;

module.exports = function rules() {
  var RULES = [
    { type: 'number',
      rules: [ { 'maximum': ['exclusiveMaximum'] },
               { 'minimum': ['exclusiveMinimum'] }, 'multipleOf', 'format'] },
    { type: 'string',
      rules: [ 'maxLength', 'minLength', 'pattern', 'format' ] },
    { type: 'array',
      rules: [ 'maxItems', 'minItems', 'items', 'contains', 'uniqueItems' ] },
    { type: 'object',
      rules: [ 'maxProperties', 'minProperties', 'required', 'dependencies', 'propertyNames',
               { 'properties': ['additionalProperties', 'patternProperties'] } ] },
    { rules: [ '$ref', 'const', 'enum', 'not', 'anyOf', 'oneOf', 'allOf', 'if' ] }
  ];

  var ALL = [ 'type', '$comment' ];
  var KEYWORDS = [
    '$schema', '$id', 'id', '$data', '$async', 'title',
    'description', 'default', 'definitions',
    'examples', 'readOnly', 'writeOnly',
    'contentMediaType', 'contentEncoding',
    'additionalItems', 'then', 'else'
  ];
  var TYPES = [ 'number', 'integer', 'string', 'array', 'object', 'boolean', 'null' ];
  RULES.all = toHash(ALL);
  RULES.types = toHash(TYPES);

  RULES.forEach(function (group) {
    group.rules = group.rules.map(function (keyword) {
      var implKeywords;
      if (typeof keyword == 'object') {
        var key = Object.keys(keyword)[0];
        implKeywords = keyword[key];
        keyword = key;
        implKeywords.forEach(function (k) {
          ALL.push(k);
          RULES.all[k] = true;
        });
      }
      ALL.push(keyword);
      var rule = RULES.all[keyword] = {
        keyword: keyword,
        code: ruleModules[keyword],
        implements: implKeywords
      };
      return rule;
    });

    RULES.all.$comment = {
      keyword: '$comment',
      code: ruleModules.$comment
    };

    if (group.type) RULES.types[group.type] = group;
  });

  RULES.keywords = toHash(ALL.concat(KEYWORDS));
  RULES.custom = {};

  return RULES;
};


/***/ }),

/***/ 294533:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var util = __webpack_require__(139485);

module.exports = SchemaObject;

function SchemaObject(obj) {
  util.copy(obj, this);
}


/***/ }),

/***/ 431442:
/***/ ((module) => {

"use strict";


// https://mathiasbynens.be/notes/javascript-encoding
// https://github.com/bestiejs/punycode.js - punycode.ucs2.decode
module.exports = function ucs2length(str) {
  var length = 0
    , len = str.length
    , pos = 0
    , value;
  while (pos < len) {
    length++;
    value = str.charCodeAt(pos++);
    if (value >= 0xD800 && value <= 0xDBFF && pos < len) {
      // high surrogate, and there is a next character
      value = str.charCodeAt(pos);
      if ((value & 0xFC00) == 0xDC00) pos++; // low surrogate
    }
  }
  return length;
};


/***/ }),

/***/ 139485:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";



module.exports = {
  copy: copy,
  checkDataType: checkDataType,
  checkDataTypes: checkDataTypes,
  coerceToTypes: coerceToTypes,
  toHash: toHash,
  getProperty: getProperty,
  escapeQuotes: escapeQuotes,
  equal: __webpack_require__(764063),
  ucs2length: __webpack_require__(431442),
  varOccurences: varOccurences,
  varReplace: varReplace,
  schemaHasRules: schemaHasRules,
  schemaHasRulesExcept: schemaHasRulesExcept,
  schemaUnknownRules: schemaUnknownRules,
  toQuotedString: toQuotedString,
  getPathExpr: getPathExpr,
  getPath: getPath,
  getData: getData,
  unescapeFragment: unescapeFragment,
  unescapeJsonPointer: unescapeJsonPointer,
  escapeFragment: escapeFragment,
  escapeJsonPointer: escapeJsonPointer
};


function copy(o, to) {
  to = to || {};
  for (var key in o) to[key] = o[key];
  return to;
}


function checkDataType(dataType, data, strictNumbers, negate) {
  var EQUAL = negate ? ' !== ' : ' === '
    , AND = negate ? ' || ' : ' && '
    , OK = negate ? '!' : ''
    , NOT = negate ? '' : '!';
  switch (dataType) {
    case 'null': return data + EQUAL + 'null';
    case 'array': return OK + 'Array.isArray(' + data + ')';
    case 'object': return '(' + OK + data + AND +
                          'typeof ' + data + EQUAL + '"object"' + AND +
                          NOT + 'Array.isArray(' + data + '))';
    case 'integer': return '(typeof ' + data + EQUAL + '"number"' + AND +
                           NOT + '(' + data + ' % 1)' +
                           AND + data + EQUAL + data +
                           (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';
    case 'number': return '(typeof ' + data + EQUAL + '"' + dataType + '"' +
                          (strictNumbers ? (AND + OK + 'isFinite(' + data + ')') : '') + ')';
    default: return 'typeof ' + data + EQUAL + '"' + dataType + '"';
  }
}


function checkDataTypes(dataTypes, data, strictNumbers) {
  switch (dataTypes.length) {
    case 1: return checkDataType(dataTypes[0], data, strictNumbers, true);
    default:
      var code = '';
      var types = toHash(dataTypes);
      if (types.array && types.object) {
        code = types.null ? '(': '(!' + data + ' || ';
        code += 'typeof ' + data + ' !== "object")';
        delete types.null;
        delete types.array;
        delete types.object;
      }
      if (types.number) delete types.integer;
      for (var t in types)
        code += (code ? ' && ' : '' ) + checkDataType(t, data, strictNumbers, true);

      return code;
  }
}


var COERCE_TO_TYPES = toHash([ 'string', 'number', 'integer', 'boolean', 'null' ]);
function coerceToTypes(optionCoerceTypes, dataTypes) {
  if (Array.isArray(dataTypes)) {
    var types = [];
    for (var i=0; i<dataTypes.length; i++) {
      var t = dataTypes[i];
      if (COERCE_TO_TYPES[t]) types[types.length] = t;
      else if (optionCoerceTypes === 'array' && t === 'array') types[types.length] = t;
    }
    if (types.length) return types;
  } else if (COERCE_TO_TYPES[dataTypes]) {
    return [dataTypes];
  } else if (optionCoerceTypes === 'array' && dataTypes === 'array') {
    return ['array'];
  }
}


function toHash(arr) {
  var hash = {};
  for (var i=0; i<arr.length; i++) hash[arr[i]] = true;
  return hash;
}


var IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;
var SINGLE_QUOTE = /'|\\/g;
function getProperty(key) {
  return typeof key == 'number'
          ? '[' + key + ']'
          : IDENTIFIER.test(key)
            ? '.' + key
            : "['" + escapeQuotes(key) + "']";
}


function escapeQuotes(str) {
  return str.replace(SINGLE_QUOTE, '\\$&')
            .replace(/\n/g, '\\n')
            .replace(/\r/g, '\\r')
            .replace(/\f/g, '\\f')
            .replace(/\t/g, '\\t');
}


function varOccurences(str, dataVar) {
  dataVar += '[^0-9]';
  var matches = str.match(new RegExp(dataVar, 'g'));
  return matches ? matches.length : 0;
}


function varReplace(str, dataVar, expr) {
  dataVar += '([^0-9])';
  expr = expr.replace(/\$/g, '$$$$');
  return str.replace(new RegExp(dataVar, 'g'), expr + '$1');
}


function schemaHasRules(schema, rules) {
  if (typeof schema == 'boolean') return !schema;
  for (var key in schema) if (rules[key]) return true;
}


function schemaHasRulesExcept(schema, rules, exceptKeyword) {
  if (typeof schema == 'boolean') return !schema && exceptKeyword != 'not';
  for (var key in schema) if (key != exceptKeyword && rules[key]) return true;
}


function schemaUnknownRules(schema, rules) {
  if (typeof schema == 'boolean') return;
  for (var key in schema) if (!rules[key]) return key;
}


function toQuotedString(str) {
  return '\'' + escapeQuotes(str) + '\'';
}


function getPathExpr(currentPath, expr, jsonPointers, isNumber) {
  var path = jsonPointers // false by default
              ? '\'/\' + ' + expr + (isNumber ? '' : '.replace(/~/g, \'~0\').replace(/\\//g, \'~1\')')
              : (isNumber ? '\'[\' + ' + expr + ' + \']\'' : '\'[\\\'\' + ' + expr + ' + \'\\\']\'');
  return joinPaths(currentPath, path);
}


function getPath(currentPath, prop, jsonPointers) {
  var path = jsonPointers // false by default
              ? toQuotedString('/' + escapeJsonPointer(prop))
              : toQuotedString(getProperty(prop));
  return joinPaths(currentPath, path);
}


var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/;
var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;
function getData($data, lvl, paths) {
  var up, jsonPointer, data, matches;
  if ($data === '') return 'rootData';
  if ($data[0] == '/') {
    if (!JSON_POINTER.test($data)) throw new Error('Invalid JSON-pointer: ' + $data);
    jsonPointer = $data;
    data = 'rootData';
  } else {
    matches = $data.match(RELATIVE_JSON_POINTER);
    if (!matches) throw new Error('Invalid JSON-pointer: ' + $data);
    up = +matches[1];
    jsonPointer = matches[2];
    if (jsonPointer == '#') {
      if (up >= lvl) throw new Error('Cannot access property/index ' + up + ' levels up, current level is ' + lvl);
      return paths[lvl - up];
    }

    if (up > lvl) throw new Error('Cannot access data ' + up + ' levels up, current level is ' + lvl);
    data = 'data' + ((lvl - up) || '');
    if (!jsonPointer) return data;
  }

  var expr = data;
  var segments = jsonPointer.split('/');
  for (var i=0; i<segments.length; i++) {
    var segment = segments[i];
    if (segment) {
      data += getProperty(unescapeJsonPointer(segment));
      expr += ' && ' + data;
    }
  }
  return expr;
}


function joinPaths (a, b) {
  if (a == '""') return b;
  return (a + ' + ' + b).replace(/([^\\])' \+ '/g, '$1');
}


function unescapeFragment(str) {
  return unescapeJsonPointer(decodeURIComponent(str));
}


function escapeFragment(str) {
  return encodeURIComponent(escapeJsonPointer(str));
}


function escapeJsonPointer(str) {
  return str.replace(/~/g, '~0').replace(/\//g, '~1');
}


function unescapeJsonPointer(str) {
  return str.replace(/~1/g, '/').replace(/~0/g, '~');
}


/***/ }),

/***/ 264662:
/***/ ((module) => {

"use strict";


var KEYWORDS = [
  'multipleOf',
  'maximum',
  'exclusiveMaximum',
  'minimum',
  'exclusiveMinimum',
  'maxLength',
  'minLength',
  'pattern',
  'additionalItems',
  'maxItems',
  'minItems',
  'uniqueItems',
  'maxProperties',
  'minProperties',
  'required',
  'additionalProperties',
  'enum',
  'format',
  'const'
];

module.exports = function (metaSchema, keywordsJsonPointers) {
  for (var i=0; i<keywordsJsonPointers.length; i++) {
    metaSchema = JSON.parse(JSON.stringify(metaSchema));
    var segments = keywordsJsonPointers[i].split('/');
    var keywords = metaSchema;
    var j;
    for (j=1; j<segments.length; j++)
      keywords = keywords[segments[j]];

    for (j=0; j<KEYWORDS.length; j++) {
      var key = KEYWORDS[j];
      var schema = keywords[key];
      if (schema) {
        keywords[key] = {
          anyOf: [
            schema,
            { $ref: 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }
          ]
        };
      }
    }
  }

  return metaSchema;
};


/***/ }),

/***/ 711348:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var metaSchema = __webpack_require__(474612);

module.exports = {
  $id: 'https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js',
  definitions: {
    simpleTypes: metaSchema.definitions.simpleTypes
  },
  type: 'object',
  dependencies: {
    schema: ['validate'],
    $data: ['validate'],
    statements: ['inline'],
    valid: {not: {required: ['macro']}}
  },
  properties: {
    type: metaSchema.properties.type,
    schema: {type: 'boolean'},
    statements: {type: 'boolean'},
    dependencies: {
      type: 'array',
      items: {type: 'string'}
    },
    metaSchema: {type: 'object'},
    modifying: {type: 'boolean'},
    valid: {type: 'boolean'},
    $data: {type: 'boolean'},
    async: {type: 'boolean'},
    errors: {
      anyOf: [
        {type: 'boolean'},
        {const: 'full'}
      ]
    }
  }
};


/***/ }),

/***/ 37264:
/***/ ((module) => {

"use strict";

module.exports = function generate__limit(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $isMax = $keyword == 'maximum',
    $exclusiveKeyword = $isMax ? 'exclusiveMaximum' : 'exclusiveMinimum',
    $schemaExcl = it.schema[$exclusiveKeyword],
    $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data,
    $op = $isMax ? '<' : '>',
    $notOp = $isMax ? '>' : '<',
    $errorKeyword = undefined;
  if (!($isData || typeof $schema == 'number' || $schema === undefined)) {
    throw new Error($keyword + ' must be number');
  }
  if (!($isDataExcl || $schemaExcl === undefined || typeof $schemaExcl == 'number' || typeof $schemaExcl == 'boolean')) {
    throw new Error($exclusiveKeyword + ' must be number or boolean');
  }
  if ($isDataExcl) {
    var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr),
      $exclusive = 'exclusive' + $lvl,
      $exclType = 'exclType' + $lvl,
      $exclIsNumber = 'exclIsNumber' + $lvl,
      $opExpr = 'op' + $lvl,
      $opStr = '\' + ' + $opExpr + ' + \'';
    out += ' var schemaExcl' + ($lvl) + ' = ' + ($schemaValueExcl) + '; ';
    $schemaValueExcl = 'schemaExcl' + $lvl;
    out += ' var ' + ($exclusive) + '; var ' + ($exclType) + ' = typeof ' + ($schemaValueExcl) + '; if (' + ($exclType) + ' != \'boolean\' && ' + ($exclType) + ' != \'undefined\' && ' + ($exclType) + ' != \'number\') { ';
    var $errorKeyword = $exclusiveKeyword;
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = ''; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ($errorKeyword || '_exclusiveLimit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
      if (it.opts.messages !== false) {
        out += ' , message: \'' + ($exclusiveKeyword) + ' should be boolean\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    var __err = out;
    out = $$outStack.pop();
    if (!it.compositeRule && $breakOnError) {
      /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError([' + (__err) + ']); ';
      } else {
        out += ' validate.errors = [' + (__err) + ']; return false; ';
      }
    } else {
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    }
    out += ' } else if ( ';
    if ($isData) {
      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
    }
    out += ' ' + ($exclType) + ' == \'number\' ? ( (' + ($exclusive) + ' = ' + ($schemaValue) + ' === undefined || ' + ($schemaValueExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ') ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValueExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) : ( (' + ($exclusive) + ' = ' + ($schemaValueExcl) + ' === true) ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaValue) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { var op' + ($lvl) + ' = ' + ($exclusive) + ' ? \'' + ($op) + '\' : \'' + ($op) + '=\'; ';
    if ($schema === undefined) {
      $errorKeyword = $exclusiveKeyword;
      $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
      $schemaValue = $schemaValueExcl;
      $isData = $isDataExcl;
    }
  } else {
    var $exclIsNumber = typeof $schemaExcl == 'number',
      $opStr = $op;
    if ($exclIsNumber && $isData) {
      var $opExpr = '\'' + $opStr + '\'';
      out += ' if ( ';
      if ($isData) {
        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
      }
      out += ' ( ' + ($schemaValue) + ' === undefined || ' + ($schemaExcl) + ' ' + ($op) + '= ' + ($schemaValue) + ' ? ' + ($data) + ' ' + ($notOp) + '= ' + ($schemaExcl) + ' : ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' ) || ' + ($data) + ' !== ' + ($data) + ') { ';
    } else {
      if ($exclIsNumber && $schema === undefined) {
        $exclusive = true;
        $errorKeyword = $exclusiveKeyword;
        $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
        $schemaValue = $schemaExcl;
        $notOp += '=';
      } else {
        if ($exclIsNumber) $schemaValue = Math[$isMax ? 'min' : 'max']($schemaExcl, $schema);
        if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {
          $exclusive = true;
          $errorKeyword = $exclusiveKeyword;
          $errSchemaPath = it.errSchemaPath + '/' + $exclusiveKeyword;
          $notOp += '=';
        } else {
          $exclusive = false;
          $opStr += '=';
        }
      }
      var $opExpr = '\'' + $opStr + '\'';
      out += ' if ( ';
      if ($isData) {
        out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
      }
      out += ' ' + ($data) + ' ' + ($notOp) + ' ' + ($schemaValue) + ' || ' + ($data) + ' !== ' + ($data) + ') { ';
    }
  }
  $errorKeyword = $errorKeyword || $keyword;
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ($errorKeyword || '_limit') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { comparison: ' + ($opExpr) + ', limit: ' + ($schemaValue) + ', exclusive: ' + ($exclusive) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should be ' + ($opStr) + ' ';
      if ($isData) {
        out += '\' + ' + ($schemaValue);
      } else {
        out += '' + ($schemaValue) + '\'';
      }
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' } ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 757070:
/***/ ((module) => {

"use strict";

module.exports = function generate__limitItems(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  if (!($isData || typeof $schema == 'number')) {
    throw new Error($keyword + ' must be number');
  }
  var $op = $keyword == 'maxItems' ? '>' : '<';
  out += 'if ( ';
  if ($isData) {
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
  }
  out += ' ' + ($data) + '.length ' + ($op) + ' ' + ($schemaValue) + ') { ';
  var $errorKeyword = $keyword;
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ($errorKeyword || '_limitItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should NOT have ';
      if ($keyword == 'maxItems') {
        out += 'more';
      } else {
        out += 'fewer';
      }
      out += ' than ';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + ($schema);
      }
      out += ' items\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 489703:
/***/ ((module) => {

"use strict";

module.exports = function generate__limitLength(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  if (!($isData || typeof $schema == 'number')) {
    throw new Error($keyword + ' must be number');
  }
  var $op = $keyword == 'maxLength' ? '>' : '<';
  out += 'if ( ';
  if ($isData) {
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
  }
  if (it.opts.unicode === false) {
    out += ' ' + ($data) + '.length ';
  } else {
    out += ' ucs2length(' + ($data) + ') ';
  }
  out += ' ' + ($op) + ' ' + ($schemaValue) + ') { ';
  var $errorKeyword = $keyword;
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ($errorKeyword || '_limitLength') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should NOT be ';
      if ($keyword == 'maxLength') {
        out += 'longer';
      } else {
        out += 'shorter';
      }
      out += ' than ';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + ($schema);
      }
      out += ' characters\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 791334:
/***/ ((module) => {

"use strict";

module.exports = function generate__limitProperties(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  if (!($isData || typeof $schema == 'number')) {
    throw new Error($keyword + ' must be number');
  }
  var $op = $keyword == 'maxProperties' ? '>' : '<';
  out += 'if ( ';
  if ($isData) {
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'number\') || ';
  }
  out += ' Object.keys(' + ($data) + ').length ' + ($op) + ' ' + ($schemaValue) + ') { ';
  var $errorKeyword = $keyword;
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ($errorKeyword || '_limitProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schemaValue) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should NOT have ';
      if ($keyword == 'maxProperties') {
        out += 'more';
      } else {
        out += 'fewer';
      }
      out += ' than ';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + ($schema);
      }
      out += ' properties\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 704517:
/***/ ((module) => {

"use strict";

module.exports = function generate_allOf(it, $keyword, $ruleType) {
  var out = ' ';
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $currentBaseId = $it.baseId,
    $allSchemasEmpty = true;
  var arr1 = $schema;
  if (arr1) {
    var $sch, $i = -1,
      l1 = arr1.length - 1;
    while ($i < l1) {
      $sch = arr1[$i += 1];
      if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
        $allSchemasEmpty = false;
        $it.schema = $sch;
        $it.schemaPath = $schemaPath + '[' + $i + ']';
        $it.errSchemaPath = $errSchemaPath + '/' + $i;
        out += '  ' + (it.validate($it)) + ' ';
        $it.baseId = $currentBaseId;
        if ($breakOnError) {
          out += ' if (' + ($nextValid) + ') { ';
          $closingBraces += '}';
        }
      }
    }
  }
  if ($breakOnError) {
    if ($allSchemasEmpty) {
      out += ' if (true) { ';
    } else {
      out += ' ' + ($closingBraces.slice(0, -1)) + ' ';
    }
  }
  return out;
}


/***/ }),

/***/ 845015:
/***/ ((module) => {

"use strict";

module.exports = function generate_anyOf(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $noEmptySchema = $schema.every(function($sch) {
    return (it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all));
  });
  if ($noEmptySchema) {
    var $currentBaseId = $it.baseId;
    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = false;  ';
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    var arr1 = $schema;
    if (arr1) {
      var $sch, $i = -1,
        l1 = arr1.length - 1;
      while ($i < l1) {
        $sch = arr1[$i += 1];
        $it.schema = $sch;
        $it.schemaPath = $schemaPath + '[' + $i + ']';
        $it.errSchemaPath = $errSchemaPath + '/' + $i;
        out += '  ' + (it.validate($it)) + ' ';
        $it.baseId = $currentBaseId;
        out += ' ' + ($valid) + ' = ' + ($valid) + ' || ' + ($nextValid) + '; if (!' + ($valid) + ') { ';
        $closingBraces += '}';
      }
    }
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' ' + ($closingBraces) + ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('anyOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should match some schema in anyOf\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    if (!it.compositeRule && $breakOnError) {
      /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError(vErrors); ';
      } else {
        out += ' validate.errors = vErrors; return false; ';
      }
    }
    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
    if (it.opts.allErrors) {
      out += ' } ';
    }
  } else {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
  }
  return out;
}


/***/ }),

/***/ 703034:
/***/ ((module) => {

"use strict";

module.exports = function generate_comment(it, $keyword, $ruleType) {
  var out = ' ';
  var $schema = it.schema[$keyword];
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $comment = it.util.toQuotedString($schema);
  if (it.opts.$comment === true) {
    out += ' console.log(' + ($comment) + ');';
  } else if (typeof it.opts.$comment == 'function') {
    out += ' self._opts.$comment(' + ($comment) + ', ' + (it.util.toQuotedString($errSchemaPath)) + ', validate.root.schema);';
  }
  return out;
}


/***/ }),

/***/ 281989:
/***/ ((module) => {

"use strict";

module.exports = function generate_const(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  if (!$isData) {
    out += ' var schema' + ($lvl) + ' = validate.schema' + ($schemaPath) + ';';
  }
  out += 'var ' + ($valid) + ' = equal(' + ($data) + ', schema' + ($lvl) + '); if (!' + ($valid) + ') {   ';
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('const') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValue: schema' + ($lvl) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should be equal to constant\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' }';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 673289:
/***/ ((module) => {

"use strict";

module.exports = function generate_contains(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $idx = 'i' + $lvl,
    $dataNxt = $it.dataLevel = it.dataLevel + 1,
    $nextData = 'data' + $dataNxt,
    $currentBaseId = it.baseId,
    $nonEmptySchema = (it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all));
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
  if ($nonEmptySchema) {
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    out += ' var ' + ($nextValid) + ' = false; for (var ' + ($idx) + ' = 0; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
    var $passData = $data + '[' + $idx + ']';
    $it.dataPathArr[$dataNxt] = $idx;
    var $code = it.validate($it);
    $it.baseId = $currentBaseId;
    if (it.util.varOccurences($code, $nextData) < 2) {
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
    } else {
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
    }
    out += ' if (' + ($nextValid) + ') break; }  ';
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' ' + ($closingBraces) + ' if (!' + ($nextValid) + ') {';
  } else {
    out += ' if (' + ($data) + '.length == 0) {';
  }
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('contains') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should contain a valid item\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' } else { ';
  if ($nonEmptySchema) {
    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
  }
  if (it.opts.allErrors) {
    out += ' } ';
  }
  return out;
}


/***/ }),

/***/ 375685:
/***/ ((module) => {

"use strict";

module.exports = function generate_custom(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $errorKeyword;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $rule = this,
    $definition = 'definition' + $lvl,
    $rDef = $rule.definition,
    $closingBraces = '';
  var $compile, $inline, $macro, $ruleValidate, $validateCode;
  if ($isData && $rDef.$data) {
    $validateCode = 'keywordValidate' + $lvl;
    var $validateSchema = $rDef.validateSchema;
    out += ' var ' + ($definition) + ' = RULES.custom[\'' + ($keyword) + '\'].definition; var ' + ($validateCode) + ' = ' + ($definition) + '.validate;';
  } else {
    $ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);
    if (!$ruleValidate) return;
    $schemaValue = 'validate.schema' + $schemaPath;
    $validateCode = $ruleValidate.code;
    $compile = $rDef.compile;
    $inline = $rDef.inline;
    $macro = $rDef.macro;
  }
  var $ruleErrs = $validateCode + '.errors',
    $i = 'i' + $lvl,
    $ruleErr = 'ruleErr' + $lvl,
    $asyncKeyword = $rDef.async;
  if ($asyncKeyword && !it.async) throw new Error('async keyword in sync schema');
  if (!($inline || $macro)) {
    out += '' + ($ruleErrs) + ' = null;';
  }
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
  if ($isData && $rDef.$data) {
    $closingBraces += '}';
    out += ' if (' + ($schemaValue) + ' === undefined) { ' + ($valid) + ' = true; } else { ';
    if ($validateSchema) {
      $closingBraces += '}';
      out += ' ' + ($valid) + ' = ' + ($definition) + '.validateSchema(' + ($schemaValue) + '); if (' + ($valid) + ') { ';
    }
  }
  if ($inline) {
    if ($rDef.statements) {
      out += ' ' + ($ruleValidate.validate) + ' ';
    } else {
      out += ' ' + ($valid) + ' = ' + ($ruleValidate.validate) + '; ';
    }
  } else if ($macro) {
    var $it = it.util.copy(it);
    var $closingBraces = '';
    $it.level++;
    var $nextValid = 'valid' + $it.level;
    $it.schema = $ruleValidate.validate;
    $it.schemaPath = '';
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    var $code = it.validate($it).replace(/validate\.schema/g, $validateCode);
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' ' + ($code);
  } else {
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = '';
    out += '  ' + ($validateCode) + '.call( ';
    if (it.opts.passContext) {
      out += 'this';
    } else {
      out += 'self';
    }
    if ($compile || $rDef.schema === false) {
      out += ' , ' + ($data) + ' ';
    } else {
      out += ' , ' + ($schemaValue) + ' , ' + ($data) + ' , validate.schema' + (it.schemaPath) + ' ';
    }
    out += ' , (dataPath || \'\')';
    if (it.errorPath != '""') {
      out += ' + ' + (it.errorPath);
    }
    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ' , rootData )  ';
    var def_callRuleValidate = out;
    out = $$outStack.pop();
    if ($rDef.errors === false) {
      out += ' ' + ($valid) + ' = ';
      if ($asyncKeyword) {
        out += 'await ';
      }
      out += '' + (def_callRuleValidate) + '; ';
    } else {
      if ($asyncKeyword) {
        $ruleErrs = 'customErrors' + $lvl;
        out += ' var ' + ($ruleErrs) + ' = null; try { ' + ($valid) + ' = await ' + (def_callRuleValidate) + '; } catch (e) { ' + ($valid) + ' = false; if (e instanceof ValidationError) ' + ($ruleErrs) + ' = e.errors; else throw e; } ';
      } else {
        out += ' ' + ($ruleErrs) + ' = null; ' + ($valid) + ' = ' + (def_callRuleValidate) + '; ';
      }
    }
  }
  if ($rDef.modifying) {
    out += ' if (' + ($parentData) + ') ' + ($data) + ' = ' + ($parentData) + '[' + ($parentDataProperty) + '];';
  }
  out += '' + ($closingBraces);
  if ($rDef.valid) {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
  } else {
    out += ' if ( ';
    if ($rDef.valid === undefined) {
      out += ' !';
      if ($macro) {
        out += '' + ($nextValid);
      } else {
        out += '' + ($valid);
      }
    } else {
      out += ' ' + (!$rDef.valid) + ' ';
    }
    out += ') { ';
    $errorKeyword = $rule.keyword;
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = '';
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = ''; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    var __err = out;
    out = $$outStack.pop();
    if (!it.compositeRule && $breakOnError) {
      /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError([' + (__err) + ']); ';
      } else {
        out += ' validate.errors = [' + (__err) + ']; return false; ';
      }
    } else {
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    }
    var def_customError = out;
    out = $$outStack.pop();
    if ($inline) {
      if ($rDef.errors) {
        if ($rDef.errors != 'full') {
          out += '  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } ';
          if (it.opts.verbose) {
            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
          }
          out += ' } ';
        }
      } else {
        if ($rDef.errors === false) {
          out += ' ' + (def_customError) + ' ';
        } else {
          out += ' if (' + ($errs) + ' == errors) { ' + (def_customError) + ' } else {  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + '; if (' + ($ruleErr) + '.schemaPath === undefined) { ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '"; } ';
          if (it.opts.verbose) {
            out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
          }
          out += ' } } ';
        }
      }
    } else if ($macro) {
      out += '   var err =   '; /* istanbul ignore else */
      if (it.createErrors !== false) {
        out += ' { keyword: \'' + ($errorKeyword || 'custom') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { keyword: \'' + ($rule.keyword) + '\' } ';
        if (it.opts.messages !== false) {
          out += ' , message: \'should pass "' + ($rule.keyword) + '" keyword validation\' ';
        }
        if (it.opts.verbose) {
          out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
        }
        out += ' } ';
      } else {
        out += ' {} ';
      }
      out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
      if (!it.compositeRule && $breakOnError) {
        /* istanbul ignore if */
        if (it.async) {
          out += ' throw new ValidationError(vErrors); ';
        } else {
          out += ' validate.errors = vErrors; return false; ';
        }
      }
    } else {
      if ($rDef.errors === false) {
        out += ' ' + (def_customError) + ' ';
      } else {
        out += ' if (Array.isArray(' + ($ruleErrs) + ')) { if (vErrors === null) vErrors = ' + ($ruleErrs) + '; else vErrors = vErrors.concat(' + ($ruleErrs) + '); errors = vErrors.length;  for (var ' + ($i) + '=' + ($errs) + '; ' + ($i) + '<errors; ' + ($i) + '++) { var ' + ($ruleErr) + ' = vErrors[' + ($i) + ']; if (' + ($ruleErr) + '.dataPath === undefined) ' + ($ruleErr) + '.dataPath = (dataPath || \'\') + ' + (it.errorPath) + ';  ' + ($ruleErr) + '.schemaPath = "' + ($errSchemaPath) + '";  ';
        if (it.opts.verbose) {
          out += ' ' + ($ruleErr) + '.schema = ' + ($schemaValue) + '; ' + ($ruleErr) + '.data = ' + ($data) + '; ';
        }
        out += ' } } else { ' + (def_customError) + ' } ';
      }
    }
    out += ' } ';
    if ($breakOnError) {
      out += ' else { ';
    }
  }
  return out;
}


/***/ }),

/***/ 76289:
/***/ ((module) => {

"use strict";

module.exports = function generate_dependencies(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $schemaDeps = {},
    $propertyDeps = {},
    $ownProperties = it.opts.ownProperties;
  for ($property in $schema) {
    if ($property == '__proto__') continue;
    var $sch = $schema[$property];
    var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;
    $deps[$property] = $sch;
  }
  out += 'var ' + ($errs) + ' = errors;';
  var $currentErrorPath = it.errorPath;
  out += 'var missing' + ($lvl) + ';';
  for (var $property in $propertyDeps) {
    $deps = $propertyDeps[$property];
    if ($deps.length) {
      out += ' if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';
      if ($ownProperties) {
        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') ';
      }
      if ($breakOnError) {
        out += ' && ( ';
        var arr1 = $deps;
        if (arr1) {
          var $propertyKey, $i = -1,
            l1 = arr1.length - 1;
          while ($i < l1) {
            $propertyKey = arr1[$i += 1];
            if ($i) {
              out += ' || ';
            }
            var $prop = it.util.getProperty($propertyKey),
              $useData = $data + $prop;
            out += ' ( ( ' + ($useData) + ' === undefined ';
            if ($ownProperties) {
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
            }
            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';
          }
        }
        out += ')) {  ';
        var $propertyPath = 'missing' + $lvl,
          $missingProperty = '\' + ' + $propertyPath + ' + \'';
        if (it.opts._errorDataPathProperty) {
          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;
        }
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'should have ';
            if ($deps.length == 1) {
              out += 'property ' + (it.util.escapeQuotes($deps[0]));
            } else {
              out += 'properties ' + (it.util.escapeQuotes($deps.join(", ")));
            }
            out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) {
          /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
      } else {
        out += ' ) { ';
        var arr2 = $deps;
        if (arr2) {
          var $propertyKey, i2 = -1,
            l2 = arr2.length - 1;
          while (i2 < l2) {
            $propertyKey = arr2[i2 += 1];
            var $prop = it.util.getProperty($propertyKey),
              $missingProperty = it.util.escapeQuotes($propertyKey),
              $useData = $data + $prop;
            if (it.opts._errorDataPathProperty) {
              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
            }
            out += ' if ( ' + ($useData) + ' === undefined ';
            if ($ownProperties) {
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
            }
            out += ') {  var err =   '; /* istanbul ignore else */
            if (it.createErrors !== false) {
              out += ' { keyword: \'' + ('dependencies') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { property: \'' + (it.util.escapeQuotes($property)) + '\', missingProperty: \'' + ($missingProperty) + '\', depsCount: ' + ($deps.length) + ', deps: \'' + (it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", "))) + '\' } ';
              if (it.opts.messages !== false) {
                out += ' , message: \'should have ';
                if ($deps.length == 1) {
                  out += 'property ' + (it.util.escapeQuotes($deps[0]));
                } else {
                  out += 'properties ' + (it.util.escapeQuotes($deps.join(", ")));
                }
                out += ' when property ' + (it.util.escapeQuotes($property)) + ' is present\' ';
              }
              if (it.opts.verbose) {
                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
              }
              out += ' } ';
            } else {
              out += ' {} ';
            }
            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';
          }
        }
      }
      out += ' }   ';
      if ($breakOnError) {
        $closingBraces += '}';
        out += ' else { ';
      }
    }
  }
  it.errorPath = $currentErrorPath;
  var $currentBaseId = $it.baseId;
  for (var $property in $schemaDeps) {
    var $sch = $schemaDeps[$property];
    if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
      out += ' ' + ($nextValid) + ' = true; if ( ' + ($data) + (it.util.getProperty($property)) + ' !== undefined ';
      if ($ownProperties) {
        out += ' && Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($property)) + '\') ';
      }
      out += ') { ';
      $it.schema = $sch;
      $it.schemaPath = $schemaPath + it.util.getProperty($property);
      $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($property);
      out += '  ' + (it.validate($it)) + ' ';
      $it.baseId = $currentBaseId;
      out += ' }  ';
      if ($breakOnError) {
        out += ' if (' + ($nextValid) + ') { ';
        $closingBraces += '}';
      }
    }
  }
  if ($breakOnError) {
    out += '   ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
  }
  return out;
}


/***/ }),

/***/ 447489:
/***/ ((module) => {

"use strict";

module.exports = function generate_enum(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $i = 'i' + $lvl,
    $vSchema = 'schema' + $lvl;
  if (!$isData) {
    out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + ';';
  }
  out += 'var ' + ($valid) + ';';
  if ($isData) {
    out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';
  }
  out += '' + ($valid) + ' = false;for (var ' + ($i) + '=0; ' + ($i) + '<' + ($vSchema) + '.length; ' + ($i) + '++) if (equal(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + '])) { ' + ($valid) + ' = true; break; }';
  if ($isData) {
    out += '  }  ';
  }
  out += ' if (!' + ($valid) + ') {   ';
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('enum') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { allowedValues: schema' + ($lvl) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should be equal to one of the allowed values\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' }';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 811394:
/***/ ((module) => {

"use strict";

module.exports = function generate_format(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  if (it.opts.format === false) {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
    return out;
  }
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $unknownFormats = it.opts.unknownFormats,
    $allowUnknown = Array.isArray($unknownFormats);
  if ($isData) {
    var $format = 'format' + $lvl,
      $isObject = 'isObject' + $lvl,
      $formatType = 'formatType' + $lvl;
    out += ' var ' + ($format) + ' = formats[' + ($schemaValue) + ']; var ' + ($isObject) + ' = typeof ' + ($format) + ' == \'object\' && !(' + ($format) + ' instanceof RegExp) && ' + ($format) + '.validate; var ' + ($formatType) + ' = ' + ($isObject) + ' && ' + ($format) + '.type || \'string\'; if (' + ($isObject) + ') { ';
    if (it.async) {
      out += ' var async' + ($lvl) + ' = ' + ($format) + '.async; ';
    }
    out += ' ' + ($format) + ' = ' + ($format) + '.validate; } if (  ';
    if ($isData) {
      out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || ';
    }
    out += ' (';
    if ($unknownFormats != 'ignore') {
      out += ' (' + ($schemaValue) + ' && !' + ($format) + ' ';
      if ($allowUnknown) {
        out += ' && self._opts.unknownFormats.indexOf(' + ($schemaValue) + ') == -1 ';
      }
      out += ') || ';
    }
    out += ' (' + ($format) + ' && ' + ($formatType) + ' == \'' + ($ruleType) + '\' && !(typeof ' + ($format) + ' == \'function\' ? ';
    if (it.async) {
      out += ' (async' + ($lvl) + ' ? await ' + ($format) + '(' + ($data) + ') : ' + ($format) + '(' + ($data) + ')) ';
    } else {
      out += ' ' + ($format) + '(' + ($data) + ') ';
    }
    out += ' : ' + ($format) + '.test(' + ($data) + '))))) {';
  } else {
    var $format = it.formats[$schema];
    if (!$format) {
      if ($unknownFormats == 'ignore') {
        it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"');
        if ($breakOnError) {
          out += ' if (true) { ';
        }
        return out;
      } else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {
        if ($breakOnError) {
          out += ' if (true) { ';
        }
        return out;
      } else {
        throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"');
      }
    }
    var $isObject = typeof $format == 'object' && !($format instanceof RegExp) && $format.validate;
    var $formatType = $isObject && $format.type || 'string';
    if ($isObject) {
      var $async = $format.async === true;
      $format = $format.validate;
    }
    if ($formatType != $ruleType) {
      if ($breakOnError) {
        out += ' if (true) { ';
      }
      return out;
    }
    if ($async) {
      if (!it.async) throw new Error('async format in sync schema');
      var $formatRef = 'formats' + it.util.getProperty($schema) + '.validate';
      out += ' if (!(await ' + ($formatRef) + '(' + ($data) + '))) { ';
    } else {
      out += ' if (! ';
      var $formatRef = 'formats' + it.util.getProperty($schema);
      if ($isObject) $formatRef += '.validate';
      if (typeof $format == 'function') {
        out += ' ' + ($formatRef) + '(' + ($data) + ') ';
      } else {
        out += ' ' + ($formatRef) + '.test(' + ($data) + ') ';
      }
      out += ') { ';
    }
  }
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('format') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { format:  ';
    if ($isData) {
      out += '' + ($schemaValue);
    } else {
      out += '' + (it.util.toQuotedString($schema));
    }
    out += '  } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should match format "';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + (it.util.escapeQuotes($schema));
      }
      out += '"\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + (it.util.toQuotedString($schema));
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += ' } ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 742206:
/***/ ((module) => {

"use strict";

module.exports = function generate_if(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $thenSch = it.schema['then'],
    $elseSch = it.schema['else'],
    $thenPresent = $thenSch !== undefined && (it.opts.strictKeywords ? typeof $thenSch == 'object' && Object.keys($thenSch).length > 0 : it.util.schemaHasRules($thenSch, it.RULES.all)),
    $elsePresent = $elseSch !== undefined && (it.opts.strictKeywords ? typeof $elseSch == 'object' && Object.keys($elseSch).length > 0 : it.util.schemaHasRules($elseSch, it.RULES.all)),
    $currentBaseId = $it.baseId;
  if ($thenPresent || $elsePresent) {
    var $ifClause;
    $it.createErrors = false;
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    out += ' var ' + ($errs) + ' = errors; var ' + ($valid) + ' = true;  ';
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    out += '  ' + (it.validate($it)) + ' ';
    $it.baseId = $currentBaseId;
    $it.createErrors = true;
    out += '  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }  ';
    it.compositeRule = $it.compositeRule = $wasComposite;
    if ($thenPresent) {
      out += ' if (' + ($nextValid) + ') {  ';
      $it.schema = it.schema['then'];
      $it.schemaPath = it.schemaPath + '.then';
      $it.errSchemaPath = it.errSchemaPath + '/then';
      out += '  ' + (it.validate($it)) + ' ';
      $it.baseId = $currentBaseId;
      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';
      if ($thenPresent && $elsePresent) {
        $ifClause = 'ifClause' + $lvl;
        out += ' var ' + ($ifClause) + ' = \'then\'; ';
      } else {
        $ifClause = '\'then\'';
      }
      out += ' } ';
      if ($elsePresent) {
        out += ' else { ';
      }
    } else {
      out += ' if (!' + ($nextValid) + ') { ';
    }
    if ($elsePresent) {
      $it.schema = it.schema['else'];
      $it.schemaPath = it.schemaPath + '.else';
      $it.errSchemaPath = it.errSchemaPath + '/else';
      out += '  ' + (it.validate($it)) + ' ';
      $it.baseId = $currentBaseId;
      out += ' ' + ($valid) + ' = ' + ($nextValid) + '; ';
      if ($thenPresent && $elsePresent) {
        $ifClause = 'ifClause' + $lvl;
        out += ' var ' + ($ifClause) + ' = \'else\'; ';
      } else {
        $ifClause = '\'else\'';
      }
      out += ' } ';
    }
    out += ' if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('if') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { failingKeyword: ' + ($ifClause) + ' } ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should match "\' + ' + ($ifClause) + ' + \'" schema\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    if (!it.compositeRule && $breakOnError) {
      /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError(vErrors); ';
      } else {
        out += ' validate.errors = vErrors; return false; ';
      }
    }
    out += ' }   ';
    if ($breakOnError) {
      out += ' else { ';
    }
  } else {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
  }
  return out;
}


/***/ }),

/***/ 782622:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


//all requires must be explicit because browserify won't work with dynamic requires
module.exports = {
  '$ref': __webpack_require__(104143),
  allOf: __webpack_require__(704517),
  anyOf: __webpack_require__(845015),
  '$comment': __webpack_require__(703034),
  const: __webpack_require__(281989),
  contains: __webpack_require__(673289),
  dependencies: __webpack_require__(76289),
  'enum': __webpack_require__(447489),
  format: __webpack_require__(811394),
  'if': __webpack_require__(742206),
  items: __webpack_require__(761356),
  maximum: __webpack_require__(37264),
  minimum: __webpack_require__(37264),
  maxItems: __webpack_require__(757070),
  minItems: __webpack_require__(757070),
  maxLength: __webpack_require__(489703),
  minLength: __webpack_require__(489703),
  maxProperties: __webpack_require__(791334),
  minProperties: __webpack_require__(791334),
  multipleOf: __webpack_require__(326438),
  not: __webpack_require__(137144),
  oneOf: __webpack_require__(845090),
  pattern: __webpack_require__(974187),
  properties: __webpack_require__(864977),
  propertyNames: __webpack_require__(282895),
  required: __webpack_require__(665333),
  uniqueItems: __webpack_require__(910140),
  validate: __webpack_require__(915992)
};


/***/ }),

/***/ 761356:
/***/ ((module) => {

"use strict";

module.exports = function generate_items(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $idx = 'i' + $lvl,
    $dataNxt = $it.dataLevel = it.dataLevel + 1,
    $nextData = 'data' + $dataNxt,
    $currentBaseId = it.baseId;
  out += 'var ' + ($errs) + ' = errors;var ' + ($valid) + ';';
  if (Array.isArray($schema)) {
    var $additionalItems = it.schema.additionalItems;
    if ($additionalItems === false) {
      out += ' ' + ($valid) + ' = ' + ($data) + '.length <= ' + ($schema.length) + '; ';
      var $currErrSchemaPath = $errSchemaPath;
      $errSchemaPath = it.errSchemaPath + '/additionalItems';
      out += '  if (!' + ($valid) + ') {   ';
      var $$outStack = $$outStack || [];
      $$outStack.push(out);
      out = ''; /* istanbul ignore else */
      if (it.createErrors !== false) {
        out += ' { keyword: \'' + ('additionalItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { limit: ' + ($schema.length) + ' } ';
        if (it.opts.messages !== false) {
          out += ' , message: \'should NOT have more than ' + ($schema.length) + ' items\' ';
        }
        if (it.opts.verbose) {
          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
        }
        out += ' } ';
      } else {
        out += ' {} ';
      }
      var __err = out;
      out = $$outStack.pop();
      if (!it.compositeRule && $breakOnError) {
        /* istanbul ignore if */
        if (it.async) {
          out += ' throw new ValidationError([' + (__err) + ']); ';
        } else {
          out += ' validate.errors = [' + (__err) + ']; return false; ';
        }
      } else {
        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
      }
      out += ' } ';
      $errSchemaPath = $currErrSchemaPath;
      if ($breakOnError) {
        $closingBraces += '}';
        out += ' else { ';
      }
    }
    var arr1 = $schema;
    if (arr1) {
      var $sch, $i = -1,
        l1 = arr1.length - 1;
      while ($i < l1) {
        $sch = arr1[$i += 1];
        if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
          out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($i) + ') { ';
          var $passData = $data + '[' + $i + ']';
          $it.schema = $sch;
          $it.schemaPath = $schemaPath + '[' + $i + ']';
          $it.errSchemaPath = $errSchemaPath + '/' + $i;
          $it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);
          $it.dataPathArr[$dataNxt] = $i;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          out += ' }  ';
          if ($breakOnError) {
            out += ' if (' + ($nextValid) + ') { ';
            $closingBraces += '}';
          }
        }
      }
    }
    if (typeof $additionalItems == 'object' && (it.opts.strictKeywords ? typeof $additionalItems == 'object' && Object.keys($additionalItems).length > 0 : it.util.schemaHasRules($additionalItems, it.RULES.all))) {
      $it.schema = $additionalItems;
      $it.schemaPath = it.schemaPath + '.additionalItems';
      $it.errSchemaPath = it.errSchemaPath + '/additionalItems';
      out += ' ' + ($nextValid) + ' = true; if (' + ($data) + '.length > ' + ($schema.length) + ') {  for (var ' + ($idx) + ' = ' + ($schema.length) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
      $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
      var $passData = $data + '[' + $idx + ']';
      $it.dataPathArr[$dataNxt] = $idx;
      var $code = it.validate($it);
      $it.baseId = $currentBaseId;
      if (it.util.varOccurences($code, $nextData) < 2) {
        out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
      } else {
        out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
      }
      if ($breakOnError) {
        out += ' if (!' + ($nextValid) + ') break; ';
      }
      out += ' } }  ';
      if ($breakOnError) {
        out += ' if (' + ($nextValid) + ') { ';
        $closingBraces += '}';
      }
    }
  } else if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    out += '  for (var ' + ($idx) + ' = ' + (0) + '; ' + ($idx) + ' < ' + ($data) + '.length; ' + ($idx) + '++) { ';
    $it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
    var $passData = $data + '[' + $idx + ']';
    $it.dataPathArr[$dataNxt] = $idx;
    var $code = it.validate($it);
    $it.baseId = $currentBaseId;
    if (it.util.varOccurences($code, $nextData) < 2) {
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
    } else {
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
    }
    if ($breakOnError) {
      out += ' if (!' + ($nextValid) + ') break; ';
    }
    out += ' }';
  }
  if ($breakOnError) {
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
  }
  return out;
}


/***/ }),

/***/ 326438:
/***/ ((module) => {

"use strict";

module.exports = function generate_multipleOf(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  if (!($isData || typeof $schema == 'number')) {
    throw new Error($keyword + ' must be number');
  }
  out += 'var division' + ($lvl) + ';if (';
  if ($isData) {
    out += ' ' + ($schemaValue) + ' !== undefined && ( typeof ' + ($schemaValue) + ' != \'number\' || ';
  }
  out += ' (division' + ($lvl) + ' = ' + ($data) + ' / ' + ($schemaValue) + ', ';
  if (it.opts.multipleOfPrecision) {
    out += ' Math.abs(Math.round(division' + ($lvl) + ') - division' + ($lvl) + ') > 1e-' + (it.opts.multipleOfPrecision) + ' ';
  } else {
    out += ' division' + ($lvl) + ' !== parseInt(division' + ($lvl) + ') ';
  }
  out += ' ) ';
  if ($isData) {
    out += '  )  ';
  }
  out += ' ) {   ';
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('multipleOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { multipleOf: ' + ($schemaValue) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should be multiple of ';
      if ($isData) {
        out += '\' + ' + ($schemaValue);
      } else {
        out += '' + ($schemaValue) + '\'';
      }
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + ($schema);
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 137144:
/***/ ((module) => {

"use strict";

module.exports = function generate_not(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    out += ' var ' + ($errs) + ' = errors;  ';
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    $it.createErrors = false;
    var $allErrorsOption;
    if ($it.opts.allErrors) {
      $allErrorsOption = $it.opts.allErrors;
      $it.opts.allErrors = false;
    }
    out += ' ' + (it.validate($it)) + ' ';
    $it.createErrors = true;
    if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' if (' + ($nextValid) + ') {   ';
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = ''; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should NOT be valid\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    var __err = out;
    out = $$outStack.pop();
    if (!it.compositeRule && $breakOnError) {
      /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError([' + (__err) + ']); ';
      } else {
        out += ' validate.errors = [' + (__err) + ']; return false; ';
      }
    } else {
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    }
    out += ' } else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; } ';
    if (it.opts.allErrors) {
      out += ' } ';
    }
  } else {
    out += '  var err =   '; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('not') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should NOT be valid\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    if ($breakOnError) {
      out += ' if (false) { ';
    }
  }
  return out;
}


/***/ }),

/***/ 845090:
/***/ ((module) => {

"use strict";

module.exports = function generate_oneOf(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $currentBaseId = $it.baseId,
    $prevValid = 'prevValid' + $lvl,
    $passingSchemas = 'passingSchemas' + $lvl;
  out += 'var ' + ($errs) + ' = errors , ' + ($prevValid) + ' = false , ' + ($valid) + ' = false , ' + ($passingSchemas) + ' = null; ';
  var $wasComposite = it.compositeRule;
  it.compositeRule = $it.compositeRule = true;
  var arr1 = $schema;
  if (arr1) {
    var $sch, $i = -1,
      l1 = arr1.length - 1;
    while ($i < l1) {
      $sch = arr1[$i += 1];
      if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
        $it.schema = $sch;
        $it.schemaPath = $schemaPath + '[' + $i + ']';
        $it.errSchemaPath = $errSchemaPath + '/' + $i;
        out += '  ' + (it.validate($it)) + ' ';
        $it.baseId = $currentBaseId;
      } else {
        out += ' var ' + ($nextValid) + ' = true; ';
      }
      if ($i) {
        out += ' if (' + ($nextValid) + ' && ' + ($prevValid) + ') { ' + ($valid) + ' = false; ' + ($passingSchemas) + ' = [' + ($passingSchemas) + ', ' + ($i) + ']; } else { ';
        $closingBraces += '}';
      }
      out += ' if (' + ($nextValid) + ') { ' + ($valid) + ' = ' + ($prevValid) + ' = true; ' + ($passingSchemas) + ' = ' + ($i) + '; }';
    }
  }
  it.compositeRule = $it.compositeRule = $wasComposite;
  out += '' + ($closingBraces) + 'if (!' + ($valid) + ') {   var err =   '; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('oneOf') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { passingSchemas: ' + ($passingSchemas) + ' } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should match exactly one schema in oneOf\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError(vErrors); ';
    } else {
      out += ' validate.errors = vErrors; return false; ';
    }
  }
  out += '} else {  errors = ' + ($errs) + '; if (vErrors !== null) { if (' + ($errs) + ') vErrors.length = ' + ($errs) + '; else vErrors = null; }';
  if (it.opts.allErrors) {
    out += ' } ';
  }
  return out;
}


/***/ }),

/***/ 974187:
/***/ ((module) => {

"use strict";

module.exports = function generate_pattern(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $regexp = $isData ? '(new RegExp(' + $schemaValue + '))' : it.usePattern($schema);
  out += 'if ( ';
  if ($isData) {
    out += ' (' + ($schemaValue) + ' !== undefined && typeof ' + ($schemaValue) + ' != \'string\') || ';
  }
  out += ' !' + ($regexp) + '.test(' + ($data) + ') ) {   ';
  var $$outStack = $$outStack || [];
  $$outStack.push(out);
  out = ''; /* istanbul ignore else */
  if (it.createErrors !== false) {
    out += ' { keyword: \'' + ('pattern') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { pattern:  ';
    if ($isData) {
      out += '' + ($schemaValue);
    } else {
      out += '' + (it.util.toQuotedString($schema));
    }
    out += '  } ';
    if (it.opts.messages !== false) {
      out += ' , message: \'should match pattern "';
      if ($isData) {
        out += '\' + ' + ($schemaValue) + ' + \'';
      } else {
        out += '' + (it.util.escapeQuotes($schema));
      }
      out += '"\' ';
    }
    if (it.opts.verbose) {
      out += ' , schema:  ';
      if ($isData) {
        out += 'validate.schema' + ($schemaPath);
      } else {
        out += '' + (it.util.toQuotedString($schema));
      }
      out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
    }
    out += ' } ';
  } else {
    out += ' {} ';
  }
  var __err = out;
  out = $$outStack.pop();
  if (!it.compositeRule && $breakOnError) {
    /* istanbul ignore if */
    if (it.async) {
      out += ' throw new ValidationError([' + (__err) + ']); ';
    } else {
      out += ' validate.errors = [' + (__err) + ']; return false; ';
    }
  } else {
    out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
  }
  out += '} ';
  if ($breakOnError) {
    out += ' else { ';
  }
  return out;
}


/***/ }),

/***/ 864977:
/***/ ((module) => {

"use strict";

module.exports = function generate_properties(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  var $key = 'key' + $lvl,
    $idx = 'idx' + $lvl,
    $dataNxt = $it.dataLevel = it.dataLevel + 1,
    $nextData = 'data' + $dataNxt,
    $dataProperties = 'dataProperties' + $lvl;
  var $schemaKeys = Object.keys($schema || {}).filter(notProto),
    $pProperties = it.schema.patternProperties || {},
    $pPropertyKeys = Object.keys($pProperties).filter(notProto),
    $aProperties = it.schema.additionalProperties,
    $someProperties = $schemaKeys.length || $pPropertyKeys.length,
    $noAdditional = $aProperties === false,
    $additionalIsSchema = typeof $aProperties == 'object' && Object.keys($aProperties).length,
    $removeAdditional = it.opts.removeAdditional,
    $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional,
    $ownProperties = it.opts.ownProperties,
    $currentBaseId = it.baseId;
  var $required = it.schema.required;
  if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {
    var $requiredHash = it.util.toHash($required);
  }

  function notProto(p) {
    return p !== '__proto__';
  }
  out += 'var ' + ($errs) + ' = errors;var ' + ($nextValid) + ' = true;';
  if ($ownProperties) {
    out += ' var ' + ($dataProperties) + ' = undefined;';
  }
  if ($checkAdditional) {
    if ($ownProperties) {
      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
    } else {
      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
    }
    if ($someProperties) {
      out += ' var isAdditional' + ($lvl) + ' = !(false ';
      if ($schemaKeys.length) {
        if ($schemaKeys.length > 8) {
          out += ' || validate.schema' + ($schemaPath) + '.hasOwnProperty(' + ($key) + ') ';
        } else {
          var arr1 = $schemaKeys;
          if (arr1) {
            var $propertyKey, i1 = -1,
              l1 = arr1.length - 1;
            while (i1 < l1) {
              $propertyKey = arr1[i1 += 1];
              out += ' || ' + ($key) + ' == ' + (it.util.toQuotedString($propertyKey)) + ' ';
            }
          }
        }
      }
      if ($pPropertyKeys.length) {
        var arr2 = $pPropertyKeys;
        if (arr2) {
          var $pProperty, $i = -1,
            l2 = arr2.length - 1;
          while ($i < l2) {
            $pProperty = arr2[$i += 1];
            out += ' || ' + (it.usePattern($pProperty)) + '.test(' + ($key) + ') ';
          }
        }
      }
      out += ' ); if (isAdditional' + ($lvl) + ') { ';
    }
    if ($removeAdditional == 'all') {
      out += ' delete ' + ($data) + '[' + ($key) + ']; ';
    } else {
      var $currentErrorPath = it.errorPath;
      var $additionalProperty = '\' + ' + $key + ' + \'';
      if (it.opts._errorDataPathProperty) {
        it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
      }
      if ($noAdditional) {
        if ($removeAdditional) {
          out += ' delete ' + ($data) + '[' + ($key) + ']; ';
        } else {
          out += ' ' + ($nextValid) + ' = false; ';
          var $currErrSchemaPath = $errSchemaPath;
          $errSchemaPath = it.errSchemaPath + '/additionalProperties';
          var $$outStack = $$outStack || [];
          $$outStack.push(out);
          out = ''; /* istanbul ignore else */
          if (it.createErrors !== false) {
            out += ' { keyword: \'' + ('additionalProperties') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { additionalProperty: \'' + ($additionalProperty) + '\' } ';
            if (it.opts.messages !== false) {
              out += ' , message: \'';
              if (it.opts._errorDataPathProperty) {
                out += 'is an invalid additional property';
              } else {
                out += 'should NOT have additional properties';
              }
              out += '\' ';
            }
            if (it.opts.verbose) {
              out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
            }
            out += ' } ';
          } else {
            out += ' {} ';
          }
          var __err = out;
          out = $$outStack.pop();
          if (!it.compositeRule && $breakOnError) {
            /* istanbul ignore if */
            if (it.async) {
              out += ' throw new ValidationError([' + (__err) + ']); ';
            } else {
              out += ' validate.errors = [' + (__err) + ']; return false; ';
            }
          } else {
            out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
          }
          $errSchemaPath = $currErrSchemaPath;
          if ($breakOnError) {
            out += ' break; ';
          }
        }
      } else if ($additionalIsSchema) {
        if ($removeAdditional == 'failing') {
          out += ' var ' + ($errs) + ' = errors;  ';
          var $wasComposite = it.compositeRule;
          it.compositeRule = $it.compositeRule = true;
          $it.schema = $aProperties;
          $it.schemaPath = it.schemaPath + '.additionalProperties';
          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';
          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
          var $passData = $data + '[' + $key + ']';
          $it.dataPathArr[$dataNxt] = $key;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          out += ' if (!' + ($nextValid) + ') { errors = ' + ($errs) + '; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete ' + ($data) + '[' + ($key) + ']; }  ';
          it.compositeRule = $it.compositeRule = $wasComposite;
        } else {
          $it.schema = $aProperties;
          $it.schemaPath = it.schemaPath + '.additionalProperties';
          $it.errSchemaPath = it.errSchemaPath + '/additionalProperties';
          $it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
          var $passData = $data + '[' + $key + ']';
          $it.dataPathArr[$dataNxt] = $key;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          if ($breakOnError) {
            out += ' if (!' + ($nextValid) + ') break; ';
          }
        }
      }
      it.errorPath = $currentErrorPath;
    }
    if ($someProperties) {
      out += ' } ';
    }
    out += ' }  ';
    if ($breakOnError) {
      out += ' if (' + ($nextValid) + ') { ';
      $closingBraces += '}';
    }
  }
  var $useDefaults = it.opts.useDefaults && !it.compositeRule;
  if ($schemaKeys.length) {
    var arr3 = $schemaKeys;
    if (arr3) {
      var $propertyKey, i3 = -1,
        l3 = arr3.length - 1;
      while (i3 < l3) {
        $propertyKey = arr3[i3 += 1];
        var $sch = $schema[$propertyKey];
        if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
          var $prop = it.util.getProperty($propertyKey),
            $passData = $data + $prop,
            $hasDefault = $useDefaults && $sch.default !== undefined;
          $it.schema = $sch;
          $it.schemaPath = $schemaPath + $prop;
          $it.errSchemaPath = $errSchemaPath + '/' + it.util.escapeFragment($propertyKey);
          $it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);
          $it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            $code = it.util.varReplace($code, $nextData, $passData);
            var $useData = $passData;
          } else {
            var $useData = $nextData;
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ';
          }
          if ($hasDefault) {
            out += ' ' + ($code) + ' ';
          } else {
            if ($requiredHash && $requiredHash[$propertyKey]) {
              out += ' if ( ' + ($useData) + ' === undefined ';
              if ($ownProperties) {
                out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
              }
              out += ') { ' + ($nextValid) + ' = false; ';
              var $currentErrorPath = it.errorPath,
                $currErrSchemaPath = $errSchemaPath,
                $missingProperty = it.util.escapeQuotes($propertyKey);
              if (it.opts._errorDataPathProperty) {
                it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
              }
              $errSchemaPath = it.errSchemaPath + '/required';
              var $$outStack = $$outStack || [];
              $$outStack.push(out);
              out = ''; /* istanbul ignore else */
              if (it.createErrors !== false) {
                out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
                if (it.opts.messages !== false) {
                  out += ' , message: \'';
                  if (it.opts._errorDataPathProperty) {
                    out += 'is a required property';
                  } else {
                    out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
                  }
                  out += '\' ';
                }
                if (it.opts.verbose) {
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
                }
                out += ' } ';
              } else {
                out += ' {} ';
              }
              var __err = out;
              out = $$outStack.pop();
              if (!it.compositeRule && $breakOnError) {
                /* istanbul ignore if */
                if (it.async) {
                  out += ' throw new ValidationError([' + (__err) + ']); ';
                } else {
                  out += ' validate.errors = [' + (__err) + ']; return false; ';
                }
              } else {
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
              }
              $errSchemaPath = $currErrSchemaPath;
              it.errorPath = $currentErrorPath;
              out += ' } else { ';
            } else {
              if ($breakOnError) {
                out += ' if ( ' + ($useData) + ' === undefined ';
                if ($ownProperties) {
                  out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
                }
                out += ') { ' + ($nextValid) + ' = true; } else { ';
              } else {
                out += ' if (' + ($useData) + ' !== undefined ';
                if ($ownProperties) {
                  out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
                }
                out += ' ) { ';
              }
            }
            out += ' ' + ($code) + ' } ';
          }
        }
        if ($breakOnError) {
          out += ' if (' + ($nextValid) + ') { ';
          $closingBraces += '}';
        }
      }
    }
  }
  if ($pPropertyKeys.length) {
    var arr4 = $pPropertyKeys;
    if (arr4) {
      var $pProperty, i4 = -1,
        l4 = arr4.length - 1;
      while (i4 < l4) {
        $pProperty = arr4[i4 += 1];
        var $sch = $pProperties[$pProperty];
        if ((it.opts.strictKeywords ? typeof $sch == 'object' && Object.keys($sch).length > 0 : it.util.schemaHasRules($sch, it.RULES.all))) {
          $it.schema = $sch;
          $it.schemaPath = it.schemaPath + '.patternProperties' + it.util.getProperty($pProperty);
          $it.errSchemaPath = it.errSchemaPath + '/patternProperties/' + it.util.escapeFragment($pProperty);
          if ($ownProperties) {
            out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
          } else {
            out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
          }
          out += ' if (' + (it.usePattern($pProperty)) + '.test(' + ($key) + ')) { ';
          $it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
          var $passData = $data + '[' + $key + ']';
          $it.dataPathArr[$dataNxt] = $key;
          var $code = it.validate($it);
          $it.baseId = $currentBaseId;
          if (it.util.varOccurences($code, $nextData) < 2) {
            out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
          } else {
            out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
          }
          if ($breakOnError) {
            out += ' if (!' + ($nextValid) + ') break; ';
          }
          out += ' } ';
          if ($breakOnError) {
            out += ' else ' + ($nextValid) + ' = true; ';
          }
          out += ' }  ';
          if ($breakOnError) {
            out += ' if (' + ($nextValid) + ') { ';
            $closingBraces += '}';
          }
        }
      }
    }
  }
  if ($breakOnError) {
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
  }
  return out;
}


/***/ }),

/***/ 282895:
/***/ ((module) => {

"use strict";

module.exports = function generate_propertyNames(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $errs = 'errs__' + $lvl;
  var $it = it.util.copy(it);
  var $closingBraces = '';
  $it.level++;
  var $nextValid = 'valid' + $it.level;
  out += 'var ' + ($errs) + ' = errors;';
  if ((it.opts.strictKeywords ? typeof $schema == 'object' && Object.keys($schema).length > 0 : it.util.schemaHasRules($schema, it.RULES.all))) {
    $it.schema = $schema;
    $it.schemaPath = $schemaPath;
    $it.errSchemaPath = $errSchemaPath;
    var $key = 'key' + $lvl,
      $idx = 'idx' + $lvl,
      $i = 'i' + $lvl,
      $invalidName = '\' + ' + $key + ' + \'',
      $dataNxt = $it.dataLevel = it.dataLevel + 1,
      $nextData = 'data' + $dataNxt,
      $dataProperties = 'dataProperties' + $lvl,
      $ownProperties = it.opts.ownProperties,
      $currentBaseId = it.baseId;
    if ($ownProperties) {
      out += ' var ' + ($dataProperties) + ' = undefined; ';
    }
    if ($ownProperties) {
      out += ' ' + ($dataProperties) + ' = ' + ($dataProperties) + ' || Object.keys(' + ($data) + '); for (var ' + ($idx) + '=0; ' + ($idx) + '<' + ($dataProperties) + '.length; ' + ($idx) + '++) { var ' + ($key) + ' = ' + ($dataProperties) + '[' + ($idx) + ']; ';
    } else {
      out += ' for (var ' + ($key) + ' in ' + ($data) + ') { ';
    }
    out += ' var startErrs' + ($lvl) + ' = errors; ';
    var $passData = $key;
    var $wasComposite = it.compositeRule;
    it.compositeRule = $it.compositeRule = true;
    var $code = it.validate($it);
    $it.baseId = $currentBaseId;
    if (it.util.varOccurences($code, $nextData) < 2) {
      out += ' ' + (it.util.varReplace($code, $nextData, $passData)) + ' ';
    } else {
      out += ' var ' + ($nextData) + ' = ' + ($passData) + '; ' + ($code) + ' ';
    }
    it.compositeRule = $it.compositeRule = $wasComposite;
    out += ' if (!' + ($nextValid) + ') { for (var ' + ($i) + '=startErrs' + ($lvl) + '; ' + ($i) + '<errors; ' + ($i) + '++) { vErrors[' + ($i) + '].propertyName = ' + ($key) + '; }   var err =   '; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('propertyNames') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { propertyName: \'' + ($invalidName) + '\' } ';
      if (it.opts.messages !== false) {
        out += ' , message: \'property name \\\'' + ($invalidName) + '\\\' is invalid\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    if (!it.compositeRule && $breakOnError) {
      /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError(vErrors); ';
      } else {
        out += ' validate.errors = vErrors; return false; ';
      }
    }
    if ($breakOnError) {
      out += ' break; ';
    }
    out += ' } }';
  }
  if ($breakOnError) {
    out += ' ' + ($closingBraces) + ' if (' + ($errs) + ' == errors) {';
  }
  return out;
}


/***/ }),

/***/ 104143:
/***/ ((module) => {

"use strict";

module.exports = function generate_ref(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $async, $refCode;
  if ($schema == '#' || $schema == '#/') {
    if (it.isRoot) {
      $async = it.async;
      $refCode = 'validate';
    } else {
      $async = it.root.schema.$async === true;
      $refCode = 'root.refVal[0]';
    }
  } else {
    var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);
    if ($refVal === undefined) {
      var $message = it.MissingRefError.message(it.baseId, $schema);
      if (it.opts.missingRefs == 'fail') {
        it.logger.error($message);
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('$ref') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { ref: \'' + (it.util.escapeQuotes($schema)) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'can\\\'t resolve reference ' + (it.util.escapeQuotes($schema)) + '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: ' + (it.util.toQuotedString($schema)) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) {
          /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
        if ($breakOnError) {
          out += ' if (false) { ';
        }
      } else if (it.opts.missingRefs == 'ignore') {
        it.logger.warn($message);
        if ($breakOnError) {
          out += ' if (true) { ';
        }
      } else {
        throw new it.MissingRefError(it.baseId, $schema, $message);
      }
    } else if ($refVal.inline) {
      var $it = it.util.copy(it);
      $it.level++;
      var $nextValid = 'valid' + $it.level;
      $it.schema = $refVal.schema;
      $it.schemaPath = '';
      $it.errSchemaPath = $schema;
      var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code);
      out += ' ' + ($code) + ' ';
      if ($breakOnError) {
        out += ' if (' + ($nextValid) + ') { ';
      }
    } else {
      $async = $refVal.$async === true || (it.async && $refVal.$async !== false);
      $refCode = $refVal.code;
    }
  }
  if ($refCode) {
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = '';
    if (it.opts.passContext) {
      out += ' ' + ($refCode) + '.call(this, ';
    } else {
      out += ' ' + ($refCode) + '( ';
    }
    out += ' ' + ($data) + ', (dataPath || \'\')';
    if (it.errorPath != '""') {
      out += ' + ' + (it.errorPath);
    }
    var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
      $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
    out += ' , ' + ($parentData) + ' , ' + ($parentDataProperty) + ', rootData)  ';
    var __callValidate = out;
    out = $$outStack.pop();
    if ($async) {
      if (!it.async) throw new Error('async schema referenced by sync schema');
      if ($breakOnError) {
        out += ' var ' + ($valid) + '; ';
      }
      out += ' try { await ' + (__callValidate) + '; ';
      if ($breakOnError) {
        out += ' ' + ($valid) + ' = true; ';
      }
      out += ' } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ';
      if ($breakOnError) {
        out += ' ' + ($valid) + ' = false; ';
      }
      out += ' } ';
      if ($breakOnError) {
        out += ' if (' + ($valid) + ') { ';
      }
    } else {
      out += ' if (!' + (__callValidate) + ') { if (vErrors === null) vErrors = ' + ($refCode) + '.errors; else vErrors = vErrors.concat(' + ($refCode) + '.errors); errors = vErrors.length; } ';
      if ($breakOnError) {
        out += ' else { ';
      }
    }
  }
  return out;
}


/***/ }),

/***/ 665333:
/***/ ((module) => {

"use strict";

module.exports = function generate_required(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  var $vSchema = 'schema' + $lvl;
  if (!$isData) {
    if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {
      var $required = [];
      var arr1 = $schema;
      if (arr1) {
        var $property, i1 = -1,
          l1 = arr1.length - 1;
        while (i1 < l1) {
          $property = arr1[i1 += 1];
          var $propertySch = it.schema.properties[$property];
          if (!($propertySch && (it.opts.strictKeywords ? typeof $propertySch == 'object' && Object.keys($propertySch).length > 0 : it.util.schemaHasRules($propertySch, it.RULES.all)))) {
            $required[$required.length] = $property;
          }
        }
      }
    } else {
      var $required = $schema;
    }
  }
  if ($isData || $required.length) {
    var $currentErrorPath = it.errorPath,
      $loopRequired = $isData || $required.length >= it.opts.loopRequired,
      $ownProperties = it.opts.ownProperties;
    if ($breakOnError) {
      out += ' var missing' + ($lvl) + '; ';
      if ($loopRequired) {
        if (!$isData) {
          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';
        }
        var $i = 'i' + $lvl,
          $propertyPath = 'schema' + $lvl + '[' + $i + ']',
          $missingProperty = '\' + ' + $propertyPath + ' + \'';
        if (it.opts._errorDataPathProperty) {
          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
        }
        out += ' var ' + ($valid) + ' = true; ';
        if ($isData) {
          out += ' if (schema' + ($lvl) + ' === undefined) ' + ($valid) + ' = true; else if (!Array.isArray(schema' + ($lvl) + ')) ' + ($valid) + ' = false; else {';
        }
        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { ' + ($valid) + ' = ' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] !== undefined ';
        if ($ownProperties) {
          out += ' &&   Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';
        }
        out += '; if (!' + ($valid) + ') break; } ';
        if ($isData) {
          out += '  }  ';
        }
        out += '  if (!' + ($valid) + ') {   ';
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'';
            if (it.opts._errorDataPathProperty) {
              out += 'is a required property';
            } else {
              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) {
          /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
        out += ' } else { ';
      } else {
        out += ' if ( ';
        var arr2 = $required;
        if (arr2) {
          var $propertyKey, $i = -1,
            l2 = arr2.length - 1;
          while ($i < l2) {
            $propertyKey = arr2[$i += 1];
            if ($i) {
              out += ' || ';
            }
            var $prop = it.util.getProperty($propertyKey),
              $useData = $data + $prop;
            out += ' ( ( ' + ($useData) + ' === undefined ';
            if ($ownProperties) {
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
            }
            out += ') && (missing' + ($lvl) + ' = ' + (it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop)) + ') ) ';
          }
        }
        out += ') {  ';
        var $propertyPath = 'missing' + $lvl,
          $missingProperty = '\' + ' + $propertyPath + ' + \'';
        if (it.opts._errorDataPathProperty) {
          it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + ' + ' + $propertyPath;
        }
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'';
            if (it.opts._errorDataPathProperty) {
              out += 'is a required property';
            } else {
              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) {
          /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
        out += ' } else { ';
      }
    } else {
      if ($loopRequired) {
        if (!$isData) {
          out += ' var ' + ($vSchema) + ' = validate.schema' + ($schemaPath) + '; ';
        }
        var $i = 'i' + $lvl,
          $propertyPath = 'schema' + $lvl + '[' + $i + ']',
          $missingProperty = '\' + ' + $propertyPath + ' + \'';
        if (it.opts._errorDataPathProperty) {
          it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
        }
        if ($isData) {
          out += ' if (' + ($vSchema) + ' && !Array.isArray(' + ($vSchema) + ')) {  var err =   '; /* istanbul ignore else */
          if (it.createErrors !== false) {
            out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
            if (it.opts.messages !== false) {
              out += ' , message: \'';
              if (it.opts._errorDataPathProperty) {
                out += 'is a required property';
              } else {
                out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
              }
              out += '\' ';
            }
            if (it.opts.verbose) {
              out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
            }
            out += ' } ';
          } else {
            out += ' {} ';
          }
          out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (' + ($vSchema) + ' !== undefined) { ';
        }
        out += ' for (var ' + ($i) + ' = 0; ' + ($i) + ' < ' + ($vSchema) + '.length; ' + ($i) + '++) { if (' + ($data) + '[' + ($vSchema) + '[' + ($i) + ']] === undefined ';
        if ($ownProperties) {
          out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', ' + ($vSchema) + '[' + ($i) + ']) ';
        }
        out += ') {  var err =   '; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'';
            if (it.opts._errorDataPathProperty) {
              out += 'is a required property';
            } else {
              out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ';
        if ($isData) {
          out += '  }  ';
        }
      } else {
        var arr3 = $required;
        if (arr3) {
          var $propertyKey, i3 = -1,
            l3 = arr3.length - 1;
          while (i3 < l3) {
            $propertyKey = arr3[i3 += 1];
            var $prop = it.util.getProperty($propertyKey),
              $missingProperty = it.util.escapeQuotes($propertyKey),
              $useData = $data + $prop;
            if (it.opts._errorDataPathProperty) {
              it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
            }
            out += ' if ( ' + ($useData) + ' === undefined ';
            if ($ownProperties) {
              out += ' || ! Object.prototype.hasOwnProperty.call(' + ($data) + ', \'' + (it.util.escapeQuotes($propertyKey)) + '\') ';
            }
            out += ') {  var err =   '; /* istanbul ignore else */
            if (it.createErrors !== false) {
              out += ' { keyword: \'' + ('required') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { missingProperty: \'' + ($missingProperty) + '\' } ';
              if (it.opts.messages !== false) {
                out += ' , message: \'';
                if (it.opts._errorDataPathProperty) {
                  out += 'is a required property';
                } else {
                  out += 'should have required property \\\'' + ($missingProperty) + '\\\'';
                }
                out += '\' ';
              }
              if (it.opts.verbose) {
                out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
              }
              out += ' } ';
            } else {
              out += ' {} ';
            }
            out += ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ';
          }
        }
      }
    }
    it.errorPath = $currentErrorPath;
  } else if ($breakOnError) {
    out += ' if (true) {';
  }
  return out;
}


/***/ }),

/***/ 910140:
/***/ ((module) => {

"use strict";

module.exports = function generate_uniqueItems(it, $keyword, $ruleType) {
  var out = ' ';
  var $lvl = it.level;
  var $dataLvl = it.dataLevel;
  var $schema = it.schema[$keyword];
  var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
  var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
  var $breakOnError = !it.opts.allErrors;
  var $data = 'data' + ($dataLvl || '');
  var $valid = 'valid' + $lvl;
  var $isData = it.opts.$data && $schema && $schema.$data,
    $schemaValue;
  if ($isData) {
    out += ' var schema' + ($lvl) + ' = ' + (it.util.getData($schema.$data, $dataLvl, it.dataPathArr)) + '; ';
    $schemaValue = 'schema' + $lvl;
  } else {
    $schemaValue = $schema;
  }
  if (($schema || $isData) && it.opts.uniqueItems !== false) {
    if ($isData) {
      out += ' var ' + ($valid) + '; if (' + ($schemaValue) + ' === false || ' + ($schemaValue) + ' === undefined) ' + ($valid) + ' = true; else if (typeof ' + ($schemaValue) + ' != \'boolean\') ' + ($valid) + ' = false; else { ';
    }
    out += ' var i = ' + ($data) + '.length , ' + ($valid) + ' = true , j; if (i > 1) { ';
    var $itemType = it.schema.items && it.schema.items.type,
      $typeIsArray = Array.isArray($itemType);
    if (!$itemType || $itemType == 'object' || $itemType == 'array' || ($typeIsArray && ($itemType.indexOf('object') >= 0 || $itemType.indexOf('array') >= 0))) {
      out += ' outer: for (;i--;) { for (j = i; j--;) { if (equal(' + ($data) + '[i], ' + ($data) + '[j])) { ' + ($valid) + ' = false; break outer; } } } ';
    } else {
      out += ' var itemIndices = {}, item; for (;i--;) { var item = ' + ($data) + '[i]; ';
      var $method = 'checkDataType' + ($typeIsArray ? 's' : '');
      out += ' if (' + (it.util[$method]($itemType, 'item', it.opts.strictNumbers, true)) + ') continue; ';
      if ($typeIsArray) {
        out += ' if (typeof item == \'string\') item = \'"\' + item; ';
      }
      out += ' if (typeof itemIndices[item] == \'number\') { ' + ($valid) + ' = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ';
    }
    out += ' } ';
    if ($isData) {
      out += '  }  ';
    }
    out += ' if (!' + ($valid) + ') {   ';
    var $$outStack = $$outStack || [];
    $$outStack.push(out);
    out = ''; /* istanbul ignore else */
    if (it.createErrors !== false) {
      out += ' { keyword: \'' + ('uniqueItems') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { i: i, j: j } ';
      if (it.opts.messages !== false) {
        out += ' , message: \'should NOT have duplicate items (items ## \' + j + \' and \' + i + \' are identical)\' ';
      }
      if (it.opts.verbose) {
        out += ' , schema:  ';
        if ($isData) {
          out += 'validate.schema' + ($schemaPath);
        } else {
          out += '' + ($schema);
        }
        out += '         , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
      }
      out += ' } ';
    } else {
      out += ' {} ';
    }
    var __err = out;
    out = $$outStack.pop();
    if (!it.compositeRule && $breakOnError) {
      /* istanbul ignore if */
      if (it.async) {
        out += ' throw new ValidationError([' + (__err) + ']); ';
      } else {
        out += ' validate.errors = [' + (__err) + ']; return false; ';
      }
    } else {
      out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
    }
    out += ' } ';
    if ($breakOnError) {
      out += ' else { ';
    }
  } else {
    if ($breakOnError) {
      out += ' if (true) { ';
    }
  }
  return out;
}


/***/ }),

/***/ 915992:
/***/ ((module) => {

"use strict";

module.exports = function generate_validate(it, $keyword, $ruleType) {
  var out = '';
  var $async = it.schema.$async === true,
    $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, '$ref'),
    $id = it.self._getId(it.schema);
  if (it.opts.strictKeywords) {
    var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);
    if ($unknownKwd) {
      var $keywordsMsg = 'unknown keyword: ' + $unknownKwd;
      if (it.opts.strictKeywords === 'log') it.logger.warn($keywordsMsg);
      else throw new Error($keywordsMsg);
    }
  }
  if (it.isTop) {
    out += ' var validate = ';
    if ($async) {
      it.async = true;
      out += 'async ';
    }
    out += 'function(data, dataPath, parentData, parentDataProperty, rootData) { \'use strict\'; ';
    if ($id && (it.opts.sourceCode || it.opts.processCode)) {
      out += ' ' + ('/\*# sourceURL=' + $id + ' */') + ' ';
    }
  }
  if (typeof it.schema == 'boolean' || !($refKeywords || it.schema.$ref)) {
    var $keyword = 'false schema';
    var $lvl = it.level;
    var $dataLvl = it.dataLevel;
    var $schema = it.schema[$keyword];
    var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
    var $errSchemaPath = it.errSchemaPath + '/' + $keyword;
    var $breakOnError = !it.opts.allErrors;
    var $errorKeyword;
    var $data = 'data' + ($dataLvl || '');
    var $valid = 'valid' + $lvl;
    if (it.schema === false) {
      if (it.isTop) {
        $breakOnError = true;
      } else {
        out += ' var ' + ($valid) + ' = false; ';
      }
      var $$outStack = $$outStack || [];
      $$outStack.push(out);
      out = ''; /* istanbul ignore else */
      if (it.createErrors !== false) {
        out += ' { keyword: \'' + ($errorKeyword || 'false schema') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: {} ';
        if (it.opts.messages !== false) {
          out += ' , message: \'boolean schema is false\' ';
        }
        if (it.opts.verbose) {
          out += ' , schema: false , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
        }
        out += ' } ';
      } else {
        out += ' {} ';
      }
      var __err = out;
      out = $$outStack.pop();
      if (!it.compositeRule && $breakOnError) {
        /* istanbul ignore if */
        if (it.async) {
          out += ' throw new ValidationError([' + (__err) + ']); ';
        } else {
          out += ' validate.errors = [' + (__err) + ']; return false; ';
        }
      } else {
        out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
      }
    } else {
      if (it.isTop) {
        if ($async) {
          out += ' return data; ';
        } else {
          out += ' validate.errors = null; return true; ';
        }
      } else {
        out += ' var ' + ($valid) + ' = true; ';
      }
    }
    if (it.isTop) {
      out += ' }; return validate; ';
    }
    return out;
  }
  if (it.isTop) {
    var $top = it.isTop,
      $lvl = it.level = 0,
      $dataLvl = it.dataLevel = 0,
      $data = 'data';
    it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));
    it.baseId = it.baseId || it.rootId;
    delete it.isTop;
    it.dataPathArr = [undefined];
    if (it.schema.default !== undefined && it.opts.useDefaults && it.opts.strictDefaults) {
      var $defaultMsg = 'default is ignored in the schema root';
      if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);
      else throw new Error($defaultMsg);
    }
    out += ' var vErrors = null; ';
    out += ' var errors = 0;     ';
    out += ' if (rootData === undefined) rootData = data; ';
  } else {
    var $lvl = it.level,
      $dataLvl = it.dataLevel,
      $data = 'data' + ($dataLvl || '');
    if ($id) it.baseId = it.resolve.url(it.baseId, $id);
    if ($async && !it.async) throw new Error('async schema in sync schema');
    out += ' var errs_' + ($lvl) + ' = errors;';
  }
  var $valid = 'valid' + $lvl,
    $breakOnError = !it.opts.allErrors,
    $closingBraces1 = '',
    $closingBraces2 = '';
  var $errorKeyword;
  var $typeSchema = it.schema.type,
    $typeIsArray = Array.isArray($typeSchema);
  if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {
    if ($typeIsArray) {
      if ($typeSchema.indexOf('null') == -1) $typeSchema = $typeSchema.concat('null');
    } else if ($typeSchema != 'null') {
      $typeSchema = [$typeSchema, 'null'];
      $typeIsArray = true;
    }
  }
  if ($typeIsArray && $typeSchema.length == 1) {
    $typeSchema = $typeSchema[0];
    $typeIsArray = false;
  }
  if (it.schema.$ref && $refKeywords) {
    if (it.opts.extendRefs == 'fail') {
      throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)');
    } else if (it.opts.extendRefs !== true) {
      $refKeywords = false;
      it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"');
    }
  }
  if (it.schema.$comment && it.opts.$comment) {
    out += ' ' + (it.RULES.all.$comment.code(it, '$comment'));
  }
  if ($typeSchema) {
    if (it.opts.coerceTypes) {
      var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);
    }
    var $rulesGroup = it.RULES.types[$typeSchema];
    if ($coerceToTypes || $typeIsArray || $rulesGroup === true || ($rulesGroup && !$shouldUseGroup($rulesGroup))) {
      var $schemaPath = it.schemaPath + '.type',
        $errSchemaPath = it.errSchemaPath + '/type';
      var $schemaPath = it.schemaPath + '.type',
        $errSchemaPath = it.errSchemaPath + '/type',
        $method = $typeIsArray ? 'checkDataTypes' : 'checkDataType';
      out += ' if (' + (it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true)) + ') { ';
      if ($coerceToTypes) {
        var $dataType = 'dataType' + $lvl,
          $coerced = 'coerced' + $lvl;
        out += ' var ' + ($dataType) + ' = typeof ' + ($data) + '; ';
        if (it.opts.coerceTypes == 'array') {
          out += ' if (' + ($dataType) + ' == \'object\' && Array.isArray(' + ($data) + ')) ' + ($dataType) + ' = \'array\'; ';
        }
        out += ' var ' + ($coerced) + ' = undefined; ';
        var $bracesCoercion = '';
        var arr1 = $coerceToTypes;
        if (arr1) {
          var $type, $i = -1,
            l1 = arr1.length - 1;
          while ($i < l1) {
            $type = arr1[$i += 1];
            if ($i) {
              out += ' if (' + ($coerced) + ' === undefined) { ';
              $bracesCoercion += '}';
            }
            if (it.opts.coerceTypes == 'array' && $type != 'array') {
              out += ' if (' + ($dataType) + ' == \'array\' && ' + ($data) + '.length == 1) { ' + ($coerced) + ' = ' + ($data) + ' = ' + ($data) + '[0]; ' + ($dataType) + ' = typeof ' + ($data) + ';  } ';
            }
            if ($type == 'string') {
              out += ' if (' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\') ' + ($coerced) + ' = \'\' + ' + ($data) + '; else if (' + ($data) + ' === null) ' + ($coerced) + ' = \'\'; ';
            } else if ($type == 'number' || $type == 'integer') {
              out += ' if (' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' === null || (' + ($dataType) + ' == \'string\' && ' + ($data) + ' && ' + ($data) + ' == +' + ($data) + ' ';
              if ($type == 'integer') {
                out += ' && !(' + ($data) + ' % 1)';
              }
              out += ')) ' + ($coerced) + ' = +' + ($data) + '; ';
            } else if ($type == 'boolean') {
              out += ' if (' + ($data) + ' === \'false\' || ' + ($data) + ' === 0 || ' + ($data) + ' === null) ' + ($coerced) + ' = false; else if (' + ($data) + ' === \'true\' || ' + ($data) + ' === 1) ' + ($coerced) + ' = true; ';
            } else if ($type == 'null') {
              out += ' if (' + ($data) + ' === \'\' || ' + ($data) + ' === 0 || ' + ($data) + ' === false) ' + ($coerced) + ' = null; ';
            } else if (it.opts.coerceTypes == 'array' && $type == 'array') {
              out += ' if (' + ($dataType) + ' == \'string\' || ' + ($dataType) + ' == \'number\' || ' + ($dataType) + ' == \'boolean\' || ' + ($data) + ' == null) ' + ($coerced) + ' = [' + ($data) + ']; ';
            }
          }
        }
        out += ' ' + ($bracesCoercion) + ' if (' + ($coerced) + ' === undefined) {   ';
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
          if ($typeIsArray) {
            out += '' + ($typeSchema.join(","));
          } else {
            out += '' + ($typeSchema);
          }
          out += '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'should be ';
            if ($typeIsArray) {
              out += '' + ($typeSchema.join(","));
            } else {
              out += '' + ($typeSchema);
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) {
          /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
        out += ' } else {  ';
        var $parentData = $dataLvl ? 'data' + (($dataLvl - 1) || '') : 'parentData',
          $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : 'parentDataProperty';
        out += ' ' + ($data) + ' = ' + ($coerced) + '; ';
        if (!$dataLvl) {
          out += 'if (' + ($parentData) + ' !== undefined)';
        }
        out += ' ' + ($parentData) + '[' + ($parentDataProperty) + '] = ' + ($coerced) + '; } ';
      } else {
        var $$outStack = $$outStack || [];
        $$outStack.push(out);
        out = ''; /* istanbul ignore else */
        if (it.createErrors !== false) {
          out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
          if ($typeIsArray) {
            out += '' + ($typeSchema.join(","));
          } else {
            out += '' + ($typeSchema);
          }
          out += '\' } ';
          if (it.opts.messages !== false) {
            out += ' , message: \'should be ';
            if ($typeIsArray) {
              out += '' + ($typeSchema.join(","));
            } else {
              out += '' + ($typeSchema);
            }
            out += '\' ';
          }
          if (it.opts.verbose) {
            out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
          }
          out += ' } ';
        } else {
          out += ' {} ';
        }
        var __err = out;
        out = $$outStack.pop();
        if (!it.compositeRule && $breakOnError) {
          /* istanbul ignore if */
          if (it.async) {
            out += ' throw new ValidationError([' + (__err) + ']); ';
          } else {
            out += ' validate.errors = [' + (__err) + ']; return false; ';
          }
        } else {
          out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
        }
      }
      out += ' } ';
    }
  }
  if (it.schema.$ref && !$refKeywords) {
    out += ' ' + (it.RULES.all.$ref.code(it, '$ref')) + ' ';
    if ($breakOnError) {
      out += ' } if (errors === ';
      if ($top) {
        out += '0';
      } else {
        out += 'errs_' + ($lvl);
      }
      out += ') { ';
      $closingBraces2 += '}';
    }
  } else {
    var arr2 = it.RULES;
    if (arr2) {
      var $rulesGroup, i2 = -1,
        l2 = arr2.length - 1;
      while (i2 < l2) {
        $rulesGroup = arr2[i2 += 1];
        if ($shouldUseGroup($rulesGroup)) {
          if ($rulesGroup.type) {
            out += ' if (' + (it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers)) + ') { ';
          }
          if (it.opts.useDefaults) {
            if ($rulesGroup.type == 'object' && it.schema.properties) {
              var $schema = it.schema.properties,
                $schemaKeys = Object.keys($schema);
              var arr3 = $schemaKeys;
              if (arr3) {
                var $propertyKey, i3 = -1,
                  l3 = arr3.length - 1;
                while (i3 < l3) {
                  $propertyKey = arr3[i3 += 1];
                  var $sch = $schema[$propertyKey];
                  if ($sch.default !== undefined) {
                    var $passData = $data + it.util.getProperty($propertyKey);
                    if (it.compositeRule) {
                      if (it.opts.strictDefaults) {
                        var $defaultMsg = 'default is ignored for: ' + $passData;
                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);
                        else throw new Error($defaultMsg);
                      }
                    } else {
                      out += ' if (' + ($passData) + ' === undefined ';
                      if (it.opts.useDefaults == 'empty') {
                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' ';
                      }
                      out += ' ) ' + ($passData) + ' = ';
                      if (it.opts.useDefaults == 'shared') {
                        out += ' ' + (it.useDefault($sch.default)) + ' ';
                      } else {
                        out += ' ' + (JSON.stringify($sch.default)) + ' ';
                      }
                      out += '; ';
                    }
                  }
                }
              }
            } else if ($rulesGroup.type == 'array' && Array.isArray(it.schema.items)) {
              var arr4 = it.schema.items;
              if (arr4) {
                var $sch, $i = -1,
                  l4 = arr4.length - 1;
                while ($i < l4) {
                  $sch = arr4[$i += 1];
                  if ($sch.default !== undefined) {
                    var $passData = $data + '[' + $i + ']';
                    if (it.compositeRule) {
                      if (it.opts.strictDefaults) {
                        var $defaultMsg = 'default is ignored for: ' + $passData;
                        if (it.opts.strictDefaults === 'log') it.logger.warn($defaultMsg);
                        else throw new Error($defaultMsg);
                      }
                    } else {
                      out += ' if (' + ($passData) + ' === undefined ';
                      if (it.opts.useDefaults == 'empty') {
                        out += ' || ' + ($passData) + ' === null || ' + ($passData) + ' === \'\' ';
                      }
                      out += ' ) ' + ($passData) + ' = ';
                      if (it.opts.useDefaults == 'shared') {
                        out += ' ' + (it.useDefault($sch.default)) + ' ';
                      } else {
                        out += ' ' + (JSON.stringify($sch.default)) + ' ';
                      }
                      out += '; ';
                    }
                  }
                }
              }
            }
          }
          var arr5 = $rulesGroup.rules;
          if (arr5) {
            var $rule, i5 = -1,
              l5 = arr5.length - 1;
            while (i5 < l5) {
              $rule = arr5[i5 += 1];
              if ($shouldUseRule($rule)) {
                var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);
                if ($code) {
                  out += ' ' + ($code) + ' ';
                  if ($breakOnError) {
                    $closingBraces1 += '}';
                  }
                }
              }
            }
          }
          if ($breakOnError) {
            out += ' ' + ($closingBraces1) + ' ';
            $closingBraces1 = '';
          }
          if ($rulesGroup.type) {
            out += ' } ';
            if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {
              out += ' else { ';
              var $schemaPath = it.schemaPath + '.type',
                $errSchemaPath = it.errSchemaPath + '/type';
              var $$outStack = $$outStack || [];
              $$outStack.push(out);
              out = ''; /* istanbul ignore else */
              if (it.createErrors !== false) {
                out += ' { keyword: \'' + ($errorKeyword || 'type') + '\' , dataPath: (dataPath || \'\') + ' + (it.errorPath) + ' , schemaPath: ' + (it.util.toQuotedString($errSchemaPath)) + ' , params: { type: \'';
                if ($typeIsArray) {
                  out += '' + ($typeSchema.join(","));
                } else {
                  out += '' + ($typeSchema);
                }
                out += '\' } ';
                if (it.opts.messages !== false) {
                  out += ' , message: \'should be ';
                  if ($typeIsArray) {
                    out += '' + ($typeSchema.join(","));
                  } else {
                    out += '' + ($typeSchema);
                  }
                  out += '\' ';
                }
                if (it.opts.verbose) {
                  out += ' , schema: validate.schema' + ($schemaPath) + ' , parentSchema: validate.schema' + (it.schemaPath) + ' , data: ' + ($data) + ' ';
                }
                out += ' } ';
              } else {
                out += ' {} ';
              }
              var __err = out;
              out = $$outStack.pop();
              if (!it.compositeRule && $breakOnError) {
                /* istanbul ignore if */
                if (it.async) {
                  out += ' throw new ValidationError([' + (__err) + ']); ';
                } else {
                  out += ' validate.errors = [' + (__err) + ']; return false; ';
                }
              } else {
                out += ' var err = ' + (__err) + ';  if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ';
              }
              out += ' } ';
            }
          }
          if ($breakOnError) {
            out += ' if (errors === ';
            if ($top) {
              out += '0';
            } else {
              out += 'errs_' + ($lvl);
            }
            out += ') { ';
            $closingBraces2 += '}';
          }
        }
      }
    }
  }
  if ($breakOnError) {
    out += ' ' + ($closingBraces2) + ' ';
  }
  if ($top) {
    if ($async) {
      out += ' if (errors === 0) return data;           ';
      out += ' else throw new ValidationError(vErrors); ';
    } else {
      out += ' validate.errors = vErrors; ';
      out += ' return errors === 0;       ';
    }
    out += ' }; return validate;';
  } else {
    out += ' var ' + ($valid) + ' = errors === errs_' + ($lvl) + ';';
  }

  function $shouldUseGroup($rulesGroup) {
    var rules = $rulesGroup.rules;
    for (var i = 0; i < rules.length; i++)
      if ($shouldUseRule(rules[i])) return true;
  }

  function $shouldUseRule($rule) {
    return it.schema[$rule.keyword] !== undefined || ($rule.implements && $ruleImplementsSomeKeyword($rule));
  }

  function $ruleImplementsSomeKeyword($rule) {
    var impl = $rule.implements;
    for (var i = 0; i < impl.length; i++)
      if (it.schema[impl[i]] !== undefined) return true;
  }
  return out;
}


/***/ }),

/***/ 444205:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;
var customRuleCode = __webpack_require__(375685);
var definitionSchema = __webpack_require__(711348);

module.exports = {
  add: addKeyword,
  get: getKeyword,
  remove: removeKeyword,
  validate: validateKeyword
};


/**
 * Define custom keyword
 * @this  Ajv
 * @param {String} keyword custom keyword, should be unique (including different from all standard, custom and macro keywords).
 * @param {Object} definition keyword definition object with properties `type` (type(s) which the keyword applies to), `validate` or `compile`.
 * @return {Ajv} this for method chaining
 */
function addKeyword(keyword, definition) {
  /* jshint validthis: true */
  /* eslint no-shadow: 0 */
  var RULES = this.RULES;
  if (RULES.keywords[keyword])
    throw new Error('Keyword ' + keyword + ' is already defined');

  if (!IDENTIFIER.test(keyword))
    throw new Error('Keyword ' + keyword + ' is not a valid identifier');

  if (definition) {
    this.validateKeyword(definition, true);

    var dataType = definition.type;
    if (Array.isArray(dataType)) {
      for (var i=0; i<dataType.length; i++)
        _addRule(keyword, dataType[i], definition);
    } else {
      _addRule(keyword, dataType, definition);
    }

    var metaSchema = definition.metaSchema;
    if (metaSchema) {
      if (definition.$data && this._opts.$data) {
        metaSchema = {
          anyOf: [
            metaSchema,
            { '$ref': 'https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#' }
          ]
        };
      }
      definition.validateSchema = this.compile(metaSchema, true);
    }
  }

  RULES.keywords[keyword] = RULES.all[keyword] = true;


  function _addRule(keyword, dataType, definition) {
    var ruleGroup;
    for (var i=0; i<RULES.length; i++) {
      var rg = RULES[i];
      if (rg.type == dataType) {
        ruleGroup = rg;
        break;
      }
    }

    if (!ruleGroup) {
      ruleGroup = { type: dataType, rules: [] };
      RULES.push(ruleGroup);
    }

    var rule = {
      keyword: keyword,
      definition: definition,
      custom: true,
      code: customRuleCode,
      implements: definition.implements
    };
    ruleGroup.rules.push(rule);
    RULES.custom[keyword] = rule;
  }

  return this;
}


/**
 * Get keyword
 * @this  Ajv
 * @param {String} keyword pre-defined or custom keyword.
 * @return {Object|Boolean} custom keyword definition, `true` if it is a predefined keyword, `false` otherwise.
 */
function getKeyword(keyword) {
  /* jshint validthis: true */
  var rule = this.RULES.custom[keyword];
  return rule ? rule.definition : this.RULES.keywords[keyword] || false;
}


/**
 * Remove keyword
 * @this  Ajv
 * @param {String} keyword pre-defined or custom keyword.
 * @return {Ajv} this for method chaining
 */
function removeKeyword(keyword) {
  /* jshint validthis: true */
  var RULES = this.RULES;
  delete RULES.keywords[keyword];
  delete RULES.all[keyword];
  delete RULES.custom[keyword];
  for (var i=0; i<RULES.length; i++) {
    var rules = RULES[i].rules;
    for (var j=0; j<rules.length; j++) {
      if (rules[j].keyword == keyword) {
        rules.splice(j, 1);
        break;
      }
    }
  }
  return this;
}


/**
 * Validate keyword definition
 * @this  Ajv
 * @param {Object} definition keyword definition object.
 * @param {Boolean} throwError true to throw exception if definition is invalid
 * @return {boolean} validation result
 */
function validateKeyword(definition, throwError) {
  validateKeyword.errors = null;
  var v = this._validateKeyword = this._validateKeyword
                                  || this.compile(definitionSchema, true);

  if (v(definition)) return true;
  validateKeyword.errors = v.errors;
  if (throwError)
    throw new Error('custom keyword definition is invalid: '  + this.errorsText(v.errors));
  else
    return false;
}


/***/ }),

/***/ 445152:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"$id\":\"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#\",\"description\":\"Meta-schema for $data reference (JSON Schema extension proposal)\",\"type\":\"object\",\"required\":[\"$data\"],\"properties\":{\"$data\":{\"type\":\"string\",\"anyOf\":[{\"format\":\"relative-json-pointer\"},{\"format\":\"json-pointer\"}]}},\"additionalProperties\":false}");

/***/ }),

/***/ 995157:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"$schema\":\"http://json-schema.org/draft-06/schema#\",\"$id\":\"http://json-schema.org/draft-06/schema#\",\"title\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"nonNegativeInteger\":{\"type\":\"integer\",\"minimum\":0},\"nonNegativeIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/nonNegativeInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"uniqueItems\":true,\"default\":[]}},\"type\":[\"object\",\"boolean\"],\"properties\":{\"$id\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"$ref\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":{},\"examples\":{\"type\":\"array\",\"items\":{}},\"multipleOf\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"number\"},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"number\"},\"maxLength\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minLength\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"$ref\":\"#\"},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":{}},\"maxItems\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minItems\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"contains\":{\"$ref\":\"#\"},\"maxProperties\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"$ref\":\"#\"},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"propertyNames\":{\"$ref\":\"#\"},\"const\":{},\"enum\":{\"type\":\"array\",\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"default\":{}}");

/***/ }),

/***/ 474612:
/***/ ((module) => {

"use strict";
module.exports = JSON.parse("{\"$schema\":\"http://json-schema.org/draft-07/schema#\",\"$id\":\"http://json-schema.org/draft-07/schema#\",\"title\":\"Core schema meta-schema\",\"definitions\":{\"schemaArray\":{\"type\":\"array\",\"minItems\":1,\"items\":{\"$ref\":\"#\"}},\"nonNegativeInteger\":{\"type\":\"integer\",\"minimum\":0},\"nonNegativeIntegerDefault0\":{\"allOf\":[{\"$ref\":\"#/definitions/nonNegativeInteger\"},{\"default\":0}]},\"simpleTypes\":{\"enum\":[\"array\",\"boolean\",\"integer\",\"null\",\"number\",\"object\",\"string\"]},\"stringArray\":{\"type\":\"array\",\"items\":{\"type\":\"string\"},\"uniqueItems\":true,\"default\":[]}},\"type\":[\"object\",\"boolean\"],\"properties\":{\"$id\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$schema\":{\"type\":\"string\",\"format\":\"uri\"},\"$ref\":{\"type\":\"string\",\"format\":\"uri-reference\"},\"$comment\":{\"type\":\"string\"},\"title\":{\"type\":\"string\"},\"description\":{\"type\":\"string\"},\"default\":true,\"readOnly\":{\"type\":\"boolean\",\"default\":false},\"examples\":{\"type\":\"array\",\"items\":true},\"multipleOf\":{\"type\":\"number\",\"exclusiveMinimum\":0},\"maximum\":{\"type\":\"number\"},\"exclusiveMaximum\":{\"type\":\"number\"},\"minimum\":{\"type\":\"number\"},\"exclusiveMinimum\":{\"type\":\"number\"},\"maxLength\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minLength\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"pattern\":{\"type\":\"string\",\"format\":\"regex\"},\"additionalItems\":{\"$ref\":\"#\"},\"items\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/schemaArray\"}],\"default\":true},\"maxItems\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minItems\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"uniqueItems\":{\"type\":\"boolean\",\"default\":false},\"contains\":{\"$ref\":\"#\"},\"maxProperties\":{\"$ref\":\"#/definitions/nonNegativeInteger\"},\"minProperties\":{\"$ref\":\"#/definitions/nonNegativeIntegerDefault0\"},\"required\":{\"$ref\":\"#/definitions/stringArray\"},\"additionalProperties\":{\"$ref\":\"#\"},\"definitions\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"properties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"default\":{}},\"patternProperties\":{\"type\":\"object\",\"additionalProperties\":{\"$ref\":\"#\"},\"propertyNames\":{\"format\":\"regex\"},\"default\":{}},\"dependencies\":{\"type\":\"object\",\"additionalProperties\":{\"anyOf\":[{\"$ref\":\"#\"},{\"$ref\":\"#/definitions/stringArray\"}]}},\"propertyNames\":{\"$ref\":\"#\"},\"const\":true,\"enum\":{\"type\":\"array\",\"items\":true,\"minItems\":1,\"uniqueItems\":true},\"type\":{\"anyOf\":[{\"$ref\":\"#/definitions/simpleTypes\"},{\"type\":\"array\",\"items\":{\"$ref\":\"#/definitions/simpleTypes\"},\"minItems\":1,\"uniqueItems\":true}]},\"format\":{\"type\":\"string\"},\"contentMediaType\":{\"type\":\"string\"},\"contentEncoding\":{\"type\":\"string\"},\"if\":{\"$ref\":\"#\"},\"then\":{\"$ref\":\"#\"},\"else\":{\"$ref\":\"#\"},\"allOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"anyOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"oneOf\":{\"$ref\":\"#/definitions/schemaArray\"},\"not\":{\"$ref\":\"#\"}},\"default\":true}");

/***/ }),

/***/ 287385:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

var CombinedStream = __webpack_require__(809779);
var util = __webpack_require__(431669);
var path = __webpack_require__(385622);
var http = __webpack_require__(298605);
var https = __webpack_require__(957211);
var parseUrl = __webpack_require__(978835).parse;
var fs = __webpack_require__(935747);
var mime = __webpack_require__(580983);
var asynckit = __webpack_require__(59118);
var populate = __webpack_require__(103610);

// Public API
module.exports = FormData;

// make it a Stream
util.inherits(FormData, CombinedStream);

/**
 * Create readable "multipart/form-data" streams.
 * Can be used to submit forms
 * and file uploads to other web applications.
 *
 * @constructor
 * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
 */
function FormData(options) {
  if (!(this instanceof FormData)) {
    return new FormData();
  }

  this._overheadLength = 0;
  this._valueLength = 0;
  this._valuesToMeasure = [];

  CombinedStream.call(this);

  options = options || {};
  for (var option in options) {
    this[option] = options[option];
  }
}

FormData.LINE_BREAK = '\r\n';
FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';

FormData.prototype.append = function(field, value, options) {

  options = options || {};

  // allow filename as single option
  if (typeof options == 'string') {
    options = {filename: options};
  }

  var append = CombinedStream.prototype.append.bind(this);

  // all that streamy business can't handle numbers
  if (typeof value == 'number') {
    value = '' + value;
  }

  // https://github.com/felixge/node-form-data/issues/38
  if (util.isArray(value)) {
    // Please convert your array into string
    // the way web server expects it
    this._error(new Error('Arrays are not supported.'));
    return;
  }

  var header = this._multiPartHeader(field, value, options);
  var footer = this._multiPartFooter();

  append(header);
  append(value);
  append(footer);

  // pass along options.knownLength
  this._trackLength(header, value, options);
};

FormData.prototype._trackLength = function(header, value, options) {
  var valueLength = 0;

  // used w/ getLengthSync(), when length is known.
  // e.g. for streaming directly from a remote server,
  // w/ a known file a size, and not wanting to wait for
  // incoming file to finish to get its size.
  if (options.knownLength != null) {
    valueLength += +options.knownLength;
  } else if (Buffer.isBuffer(value)) {
    valueLength = value.length;
  } else if (typeof value === 'string') {
    valueLength = Buffer.byteLength(value);
  }

  this._valueLength += valueLength;

  // @check why add CRLF? does this account for custom/multiple CRLFs?
  this._overheadLength +=
    Buffer.byteLength(header) +
    FormData.LINE_BREAK.length;

  // empty or either doesn't have path or not an http response
  if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) )) {
    return;
  }

  // no need to bother with the length
  if (!options.knownLength) {
    this._valuesToMeasure.push(value);
  }
};

FormData.prototype._lengthRetriever = function(value, callback) {

  if (value.hasOwnProperty('fd')) {

    // take read range into a account
    // `end` = Infinity –> read file till the end
    //
    // TODO: Looks like there is bug in Node fs.createReadStream
    // it doesn't respect `end` options without `start` options
    // Fix it when node fixes it.
    // https://github.com/joyent/node/issues/7819
    if (value.end != undefined && value.end != Infinity && value.start != undefined) {

      // when end specified
      // no need to calculate range
      // inclusive, starts with 0
      callback(null, value.end + 1 - (value.start ? value.start : 0));

    // not that fast snoopy
    } else {
      // still need to fetch file size from fs
      fs.stat(value.path, function(err, stat) {

        var fileSize;

        if (err) {
          callback(err);
          return;
        }

        // update final size based on the range options
        fileSize = stat.size - (value.start ? value.start : 0);
        callback(null, fileSize);
      });
    }

  // or http response
  } else if (value.hasOwnProperty('httpVersion')) {
    callback(null, +value.headers['content-length']);

  // or request stream http://github.com/mikeal/request
  } else if (value.hasOwnProperty('httpModule')) {
    // wait till response come back
    value.on('response', function(response) {
      value.pause();
      callback(null, +response.headers['content-length']);
    });
    value.resume();

  // something else
  } else {
    callback('Unknown stream');
  }
};

FormData.prototype._multiPartHeader = function(field, value, options) {
  // custom header specified (as string)?
  // it becomes responsible for boundary
  // (e.g. to handle extra CRLFs on .NET servers)
  if (typeof options.header == 'string') {
    return options.header;
  }

  var contentDisposition = this._getContentDisposition(value, options);
  var contentType = this._getContentType(value, options);

  var contents = '';
  var headers  = {
    // add custom disposition as third element or keep it two elements if not
    'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []),
    // if no content type. allow it to be empty array
    'Content-Type': [].concat(contentType || [])
  };

  // allow custom headers.
  if (typeof options.header == 'object') {
    populate(headers, options.header);
  }

  var header;
  for (var prop in headers) {
    if (!headers.hasOwnProperty(prop)) continue;
    header = headers[prop];

    // skip nullish headers.
    if (header == null) {
      continue;
    }

    // convert all headers to arrays.
    if (!Array.isArray(header)) {
      header = [header];
    }

    // add non-empty headers.
    if (header.length) {
      contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
    }
  }

  return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
};

FormData.prototype._getContentDisposition = function(value, options) {

  var filename
    , contentDisposition
    ;

  if (typeof options.filepath === 'string') {
    // custom filepath for relative paths
    filename = path.normalize(options.filepath).replace(/\\/g, '/');
  } else if (options.filename || value.name || value.path) {
    // custom filename take precedence
    // formidable and the browser add a name property
    // fs- and request- streams have path property
    filename = path.basename(options.filename || value.name || value.path);
  } else if (value.readable && value.hasOwnProperty('httpVersion')) {
    // or try http response
    filename = path.basename(value.client._httpMessage.path);
  }

  if (filename) {
    contentDisposition = 'filename="' + filename + '"';
  }

  return contentDisposition;
};

FormData.prototype._getContentType = function(value, options) {

  // use custom content-type above all
  var contentType = options.contentType;

  // or try `name` from formidable, browser
  if (!contentType && value.name) {
    contentType = mime.lookup(value.name);
  }

  // or try `path` from fs-, request- streams
  if (!contentType && value.path) {
    contentType = mime.lookup(value.path);
  }

  // or if it's http-reponse
  if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
    contentType = value.headers['content-type'];
  }

  // or guess it from the filepath or filename
  if (!contentType && (options.filepath || options.filename)) {
    contentType = mime.lookup(options.filepath || options.filename);
  }

  // fallback to the default content type if `value` is not simple value
  if (!contentType && typeof value == 'object') {
    contentType = FormData.DEFAULT_CONTENT_TYPE;
  }

  return contentType;
};

FormData.prototype._multiPartFooter = function() {
  return function(next) {
    var footer = FormData.LINE_BREAK;

    var lastPart = (this._streams.length === 0);
    if (lastPart) {
      footer += this._lastBoundary();
    }

    next(footer);
  }.bind(this);
};

FormData.prototype._lastBoundary = function() {
  return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
};

FormData.prototype.getHeaders = function(userHeaders) {
  var header;
  var formHeaders = {
    'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
  };

  for (header in userHeaders) {
    if (userHeaders.hasOwnProperty(header)) {
      formHeaders[header.toLowerCase()] = userHeaders[header];
    }
  }

  return formHeaders;
};

FormData.prototype.getBoundary = function() {
  if (!this._boundary) {
    this._generateBoundary();
  }

  return this._boundary;
};

FormData.prototype._generateBoundary = function() {
  // This generates a 50 character boundary similar to those used by Firefox.
  // They are optimized for boyer-moore parsing.
  var boundary = '--------------------------';
  for (var i = 0; i < 24; i++) {
    boundary += Math.floor(Math.random() * 10).toString(16);
  }

  this._boundary = boundary;
};

// Note: getLengthSync DOESN'T calculate streams length
// As workaround one can calculate file size manually
// and add it as knownLength option
FormData.prototype.getLengthSync = function() {
  var knownLength = this._overheadLength + this._valueLength;

  // Don't get confused, there are 3 "internal" streams for each keyval pair
  // so it basically checks if there is any value added to the form
  if (this._streams.length) {
    knownLength += this._lastBoundary().length;
  }

  // https://github.com/form-data/form-data/issues/40
  if (!this.hasKnownLength()) {
    // Some async length retrievers are present
    // therefore synchronous length calculation is false.
    // Please use getLength(callback) to get proper length
    this._error(new Error('Cannot calculate proper length in synchronous way.'));
  }

  return knownLength;
};

// Public API to check if length of added values is known
// https://github.com/form-data/form-data/issues/196
// https://github.com/form-data/form-data/issues/262
FormData.prototype.hasKnownLength = function() {
  var hasKnownLength = true;

  if (this._valuesToMeasure.length) {
    hasKnownLength = false;
  }

  return hasKnownLength;
};

FormData.prototype.getLength = function(cb) {
  var knownLength = this._overheadLength + this._valueLength;

  if (this._streams.length) {
    knownLength += this._lastBoundary().length;
  }

  if (!this._valuesToMeasure.length) {
    process.nextTick(cb.bind(this, null, knownLength));
    return;
  }

  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
    if (err) {
      cb(err);
      return;
    }

    values.forEach(function(length) {
      knownLength += length;
    });

    cb(null, knownLength);
  });
};

FormData.prototype.submit = function(params, cb) {
  var request
    , options
    , defaults = {method: 'post'}
    ;

  // parse provided url if it's string
  // or treat it as options object
  if (typeof params == 'string') {

    params = parseUrl(params);
    options = populate({
      port: params.port,
      path: params.pathname,
      host: params.hostname,
      protocol: params.protocol
    }, defaults);

  // use custom params
  } else {

    options = populate(params, defaults);
    // if no port provided use default one
    if (!options.port) {
      options.port = options.protocol == 'https:' ? 443 : 80;
    }
  }

  // put that good code in getHeaders to some use
  options.headers = this.getHeaders(params.headers);

  // https if specified, fallback to http in any other case
  if (options.protocol == 'https:') {
    request = https.request(options);
  } else {
    request = http.request(options);
  }

  // get content length and fire away
  this.getLength(function(err, length) {
    if (err) {
      this._error(err);
      return;
    }

    // add content length
    request.setHeader('Content-Length', length);

    this.pipe(request);
    if (cb) {
      request.on('error', cb);
      request.on('response', cb.bind(this, null));
    }
  }.bind(this));

  return request;
};

FormData.prototype._error = function(err) {
  if (!this.error) {
    this.error = err;
    this.pause();
    this.emit('error', err);
  }
};

FormData.prototype.toString = function () {
  return '[object FormData]';
};


/***/ }),

/***/ 103610:
/***/ ((module) => {

// populates missing values
module.exports = function(dst, src) {

  Object.keys(src).forEach(function(prop)
  {
    dst[prop] = dst[prop] || src[prop];
  });

  return dst;
};


/***/ }),

/***/ 600110:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const mkdirpSync = __webpack_require__(8150).mkdirsSync
const utimesSync = __webpack_require__(481429).utimesMillisSync

const notExist = Symbol('notExist')
const existsReg = Symbol('existsReg')

function copySync (src, dest, opts) {
  if (typeof opts === 'function') {
    opts = {filter: opts}
  }

  opts = opts || {}
  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber

  // Warn about using preserveTimestamps on 32-bit node
  if (opts.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  const resolvedDest = checkPaths(src, dest)

  if (opts.filter && !opts.filter(src, dest)) return

  const destParent = path.dirname(dest)
  if (!fs.existsSync(destParent)) mkdirpSync(destParent)
  return startCopy(resolvedDest, src, dest, opts)
}

function startCopy (resolvedDest, src, dest, opts) {
  if (opts.filter && !opts.filter(src, dest)) return
  return getStats(resolvedDest, src, dest, opts)
}

function getStats (resolvedDest, src, dest, opts) {
  const statSync = opts.dereference ? fs.statSync : fs.lstatSync
  const st = statSync(src)

  if (st.isDirectory()) return onDir(st, resolvedDest, src, dest, opts)
  else if (st.isFile() ||
           st.isCharacterDevice() ||
           st.isBlockDevice()) return onFile(st, resolvedDest, src, dest, opts)
  else if (st.isSymbolicLink()) return onLink(resolvedDest, src, dest, opts)
}

function onFile (srcStat, resolvedDest, src, dest, opts) {
  if (resolvedDest === notExist) return copyFile(srcStat, src, dest, opts)
  else if (resolvedDest === existsReg) return mayCopyFile(srcStat, src, dest, opts)
  return mayCopyFile(srcStat, src, dest, opts)
}

function mayCopyFile (srcStat, src, dest, opts) {
  if (opts.overwrite) {
    fs.unlinkSync(dest)
    return copyFile(srcStat, src, dest, opts)
  } else if (opts.errorOnExist) {
    throw new Error(`'${dest}' already exists`)
  }
}

function copyFile (srcStat, src, dest, opts) {
  if (typeof fs.copyFileSync === 'function') {
    fs.copyFileSync(src, dest)
    fs.chmodSync(dest, srcStat.mode)
    if (opts.preserveTimestamps) {
      return utimesSync(dest, srcStat.atime, srcStat.mtime)
    }
    return
  }
  return copyFileFallback(srcStat, src, dest, opts)
}

function copyFileFallback (srcStat, src, dest, opts) {
  const BUF_LENGTH = 64 * 1024
  const _buff = __webpack_require__(942512)(BUF_LENGTH)

  const fdr = fs.openSync(src, 'r')
  const fdw = fs.openSync(dest, 'w', srcStat.mode)
  let pos = 0

  while (pos < srcStat.size) {
    const bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  if (opts.preserveTimestamps) fs.futimesSync(fdw, srcStat.atime, srcStat.mtime)

  fs.closeSync(fdr)
  fs.closeSync(fdw)
}

function onDir (srcStat, resolvedDest, src, dest, opts) {
  if (resolvedDest === notExist) {
    if (isSrcSubdir(src, dest)) {
      throw new Error(`Cannot copy '${src}' to a subdirectory of itself, '${dest}'.`)
    }
    return mkDirAndCopy(srcStat, src, dest, opts)
  } else if (resolvedDest === existsReg) {
    if (isSrcSubdir(src, dest)) {
      throw new Error(`Cannot copy '${src}' to a subdirectory of itself, '${dest}'.`)
    }
    return mayCopyDir(src, dest, opts)
  }
  return copyDir(src, dest, opts)
}

function mayCopyDir (src, dest, opts) {
  if (!fs.statSync(dest).isDirectory()) {
    throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
  }
  return copyDir(src, dest, opts)
}

function mkDirAndCopy (srcStat, src, dest, opts) {
  fs.mkdirSync(dest, srcStat.mode)
  fs.chmodSync(dest, srcStat.mode)
  return copyDir(src, dest, opts)
}

function copyDir (src, dest, opts) {
  fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
}

function copyDirItem (item, src, dest, opts) {
  const srcItem = path.join(src, item)
  const destItem = path.join(dest, item)
  const resolvedDest = checkPaths(srcItem, destItem)
  return startCopy(resolvedDest, srcItem, destItem, opts)
}

function onLink (resolvedDest, src, dest, opts) {
  let resolvedSrc = fs.readlinkSync(src)

  if (opts.dereference) {
    resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
  }

  if (resolvedDest === notExist || resolvedDest === existsReg) {
    // if dest already exists, fs throws error anyway,
    // so no need to guard against it here.
    return fs.symlinkSync(resolvedSrc, dest)
  } else {
    if (opts.dereference) {
      resolvedDest = path.resolve(process.cwd(), resolvedDest)
    }
    if (pathsAreIdentical(resolvedSrc, resolvedDest)) return

    // prevent copy if src is a subdir of dest since unlinking
    // dest in this case would result in removing src contents
    // and therefore a broken symlink would be created.
    if (fs.statSync(dest).isDirectory() && isSrcSubdir(resolvedDest, resolvedSrc)) {
      throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
    }
    return copyLink(resolvedSrc, dest)
  }
}

function copyLink (resolvedSrc, dest) {
  fs.unlinkSync(dest)
  return fs.symlinkSync(resolvedSrc, dest)
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename.
function isSrcSubdir (src, dest) {
  const srcArray = path.resolve(src).split(path.sep)
  const destArray = path.resolve(dest).split(path.sep)

  return srcArray.reduce((acc, current, i) => {
    return acc && destArray[i] === current
  }, true)
}

// check if dest exists and is a symlink.
function checkDest (dest) {
  let resolvedPath
  try {
    resolvedPath = fs.readlinkSync(dest)
  } catch (err) {
    if (err.code === 'ENOENT') return notExist

    // dest exists and is a regular file or directory, Windows may throw UNKNOWN error.
    if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return existsReg

    throw err
  }
  return resolvedPath // dest exists and is a symlink
}

function pathsAreIdentical (src, dest) {
  const os = process.platform
  const resolvedSrc = path.resolve(src)
  const resolvedDest = path.resolve(dest)
  // case-insensitive paths
  if (os === 'darwin' || os === 'win32') {
    return resolvedSrc.toLowerCase() === resolvedDest.toLowerCase()
  }
  return resolvedSrc === resolvedDest
}

function checkPaths (src, dest) {
  const resolvedDest = checkDest(dest)
  if (resolvedDest === notExist || resolvedDest === existsReg) {
    if (pathsAreIdentical(src, dest)) throw new Error('Source and destination must not be the same.')
    return resolvedDest
  } else {
    // check resolved dest path if dest is a symlink
    if (pathsAreIdentical(src, resolvedDest)) throw new Error('Source and destination must not be the same.')
    return resolvedDest
  }
}

module.exports = copySync


/***/ }),

/***/ 852558:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


module.exports = {
  copySync: __webpack_require__(600110)
}


/***/ }),

/***/ 230133:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const mkdirp = __webpack_require__(8150).mkdirs
const pathExists = __webpack_require__(520540).pathExists
const utimes = __webpack_require__(481429).utimesMillis

const notExist = Symbol('notExist')
const existsReg = Symbol('existsReg')

function copy (src, dest, opts, cb) {
  if (typeof opts === 'function' && !cb) {
    cb = opts
    opts = {}
  } else if (typeof opts === 'function') {
    opts = {filter: opts}
  }

  cb = cb || function () {}
  opts = opts || {}

  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber

  // Warn about using preserveTimestamps on 32-bit node
  if (opts.preserveTimestamps && process.arch === 'ia32') {
    console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
    see https://github.com/jprichardson/node-fs-extra/issues/269`)
  }

  checkPaths(src, dest, (err, resolvedDest) => {
    if (err) return cb(err)
    if (opts.filter) return handleFilter(checkParentDir, resolvedDest, src, dest, opts, cb)
    return checkParentDir(resolvedDest, src, dest, opts, cb)
  })
}

function checkParentDir (resolvedDest, src, dest, opts, cb) {
  const destParent = path.dirname(dest)
  pathExists(destParent, (err, dirExists) => {
    if (err) return cb(err)
    if (dirExists) return startCopy(resolvedDest, src, dest, opts, cb)
    mkdirp(destParent, err => {
      if (err) return cb(err)
      return startCopy(resolvedDest, src, dest, opts, cb)
    })
  })
}

function startCopy (resolvedDest, src, dest, opts, cb) {
  if (opts.filter) return handleFilter(getStats, resolvedDest, src, dest, opts, cb)
  return getStats(resolvedDest, src, dest, opts, cb)
}

function handleFilter (onInclude, resolvedDest, src, dest, opts, cb) {
  Promise.resolve(opts.filter(src, dest)).then(include => {
    if (include) {
      if (resolvedDest) return onInclude(resolvedDest, src, dest, opts, cb)
      return onInclude(src, dest, opts, cb)
    }
    return cb()
  }, error => cb(error))
}

function getStats (resolvedDest, src, dest, opts, cb) {
  const stat = opts.dereference ? fs.stat : fs.lstat
  stat(src, (err, st) => {
    if (err) return cb(err)

    if (st.isDirectory()) return onDir(st, resolvedDest, src, dest, opts, cb)
    else if (st.isFile() ||
             st.isCharacterDevice() ||
             st.isBlockDevice()) return onFile(st, resolvedDest, src, dest, opts, cb)
    else if (st.isSymbolicLink()) return onLink(resolvedDest, src, dest, opts, cb)
  })
}

function onFile (srcStat, resolvedDest, src, dest, opts, cb) {
  if (resolvedDest === notExist) return copyFile(srcStat, src, dest, opts, cb)
  else if (resolvedDest === existsReg) return mayCopyFile(srcStat, src, dest, opts, cb)
  return mayCopyFile(srcStat, src, dest, opts, cb)
}

function mayCopyFile (srcStat, src, dest, opts, cb) {
  if (opts.overwrite) {
    fs.unlink(dest, err => {
      if (err) return cb(err)
      return copyFile(srcStat, src, dest, opts, cb)
    })
  } else if (opts.errorOnExist) {
    return cb(new Error(`'${dest}' already exists`))
  } else return cb()
}

function copyFile (srcStat, src, dest, opts, cb) {
  if (typeof fs.copyFile === 'function') {
    return fs.copyFile(src, dest, err => {
      if (err) return cb(err)
      return setDestModeAndTimestamps(srcStat, dest, opts, cb)
    })
  }
  return copyFileFallback(srcStat, src, dest, opts, cb)
}

function copyFileFallback (srcStat, src, dest, opts, cb) {
  const rs = fs.createReadStream(src)
  rs.on('error', err => cb(err)).once('open', () => {
    const ws = fs.createWriteStream(dest, { mode: srcStat.mode })
    ws.on('error', err => cb(err))
      .on('open', () => rs.pipe(ws))
      .once('close', () => setDestModeAndTimestamps(srcStat, dest, opts, cb))
  })
}

function setDestModeAndTimestamps (srcStat, dest, opts, cb) {
  fs.chmod(dest, srcStat.mode, err => {
    if (err) return cb(err)
    if (opts.preserveTimestamps) {
      return utimes(dest, srcStat.atime, srcStat.mtime, cb)
    }
    return cb()
  })
}

function onDir (srcStat, resolvedDest, src, dest, opts, cb) {
  if (resolvedDest === notExist) {
    if (isSrcSubdir(src, dest)) {
      return cb(new Error(`Cannot copy '${src}' to a subdirectory of itself, '${dest}'.`))
    }
    return mkDirAndCopy(srcStat, src, dest, opts, cb)
  } else if (resolvedDest === existsReg) {
    if (isSrcSubdir(src, dest)) {
      return cb(new Error(`Cannot copy '${src}' to a subdirectory of itself, '${dest}'.`))
    }
    return mayCopyDir(src, dest, opts, cb)
  }
  return copyDir(src, dest, opts, cb)
}

function mayCopyDir (src, dest, opts, cb) {
  fs.stat(dest, (err, st) => {
    if (err) return cb(err)
    if (!st.isDirectory()) {
      return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))
    }
    return copyDir(src, dest, opts, cb)
  })
}

function mkDirAndCopy (srcStat, src, dest, opts, cb) {
  fs.mkdir(dest, srcStat.mode, err => {
    if (err) return cb(err)
    fs.chmod(dest, srcStat.mode, err => {
      if (err) return cb(err)
      return copyDir(src, dest, opts, cb)
    })
  })
}

function copyDir (src, dest, opts, cb) {
  fs.readdir(src, (err, items) => {
    if (err) return cb(err)
    return copyDirItems(items, src, dest, opts, cb)
  })
}

function copyDirItems (items, src, dest, opts, cb) {
  const item = items.pop()
  if (!item) return cb()
  return copyDirItem(items, item, src, dest, opts, cb)
}

function copyDirItem (items, item, src, dest, opts, cb) {
  const srcItem = path.join(src, item)
  const destItem = path.join(dest, item)
  checkPaths(srcItem, destItem, (err, resolvedDest) => {
    if (err) return cb(err)
    startCopy(resolvedDest, srcItem, destItem, opts, err => {
      if (err) return cb(err)
      return copyDirItems(items, src, dest, opts, cb)
    })
  })
}

function onLink (resolvedDest, src, dest, opts, cb) {
  fs.readlink(src, (err, resolvedSrc) => {
    if (err) return cb(err)

    if (opts.dereference) {
      resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
    }

    if (resolvedDest === notExist || resolvedDest === existsReg) {
      // if dest already exists, fs throws error anyway,
      // so no need to guard against it here.
      return fs.symlink(resolvedSrc, dest, cb)
    } else {
      if (opts.dereference) {
        resolvedDest = path.resolve(process.cwd(), resolvedDest)
      }
      if (pathsAreIdentical(resolvedSrc, resolvedDest)) return cb()

      // prevent copy if src is a subdir of dest since unlinking
      // dest in this case would result in removing src contents
      // and therefore a broken symlink would be created.
      fs.stat(dest, (err, st) => {
        if (err) return cb(err)
        if (st.isDirectory() && isSrcSubdir(resolvedDest, resolvedSrc)) {
          return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))
        }
        return copyLink(resolvedSrc, dest, cb)
      })
    }
  })
}

function copyLink (resolvedSrc, dest, cb) {
  fs.unlink(dest, err => {
    if (err) return cb(err)
    return fs.symlink(resolvedSrc, dest, cb)
  })
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename.
function isSrcSubdir (src, dest) {
  const srcArray = path.resolve(src).split(path.sep)
  const destArray = path.resolve(dest).split(path.sep)

  return srcArray.reduce((acc, current, i) => {
    return acc && destArray[i] === current
  }, true)
}

// check if dest exists and is a symlink.
function checkDest (dest, cb) {
  fs.readlink(dest, (err, resolvedPath) => {
    if (err) {
      if (err.code === 'ENOENT') return cb(null, notExist)

      // dest exists and is a regular file or directory, Windows may throw UNKNOWN error.
      if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return cb(null, existsReg)

      return cb(err)
    }
    return cb(null, resolvedPath) // dest exists and is a symlink
  })
}

function pathsAreIdentical (src, dest) {
  const os = process.platform
  const resolvedSrc = path.resolve(src)
  const resolvedDest = path.resolve(dest)
  // case-insensitive paths
  if (os === 'darwin' || os === 'win32') {
    return resolvedSrc.toLowerCase() === resolvedDest.toLowerCase()
  }
  return resolvedSrc === resolvedDest
}

function checkPaths (src, dest, cb) {
  checkDest(dest, (err, resolvedDest) => {
    if (err) return cb(err)
    if (resolvedDest === notExist || resolvedDest === existsReg) {
      if (pathsAreIdentical(src, dest)) return cb(new Error('Source and destination must not be the same.'))
      return cb(null, resolvedDest)
    } else {
      // check resolved dest path if dest is a symlink
      if (pathsAreIdentical(src, resolvedDest)) return cb(new Error('Source and destination must not be the same.'))
      return cb(null, resolvedDest)
    }
  })
}

module.exports = copy


/***/ }),

/***/ 142719:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
module.exports = {
  copy: u(__webpack_require__(230133))
}


/***/ }),

/***/ 628007:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(935747)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(8150)
const remove = __webpack_require__(432208)

const emptyDir = u(function emptyDir (dir, callback) {
  callback = callback || function () {}
  fs.readdir(dir, (err, items) => {
    if (err) return mkdir.mkdirs(dir, callback)

    items = items.map(item => path.join(dir, item))

    deleteItem()

    function deleteItem () {
      const item = items.pop()
      if (!item) return callback()
      remove.remove(item, err => {
        if (err) return callback(err)
        deleteItem()
      })
    }
  })
})

function emptyDirSync (dir) {
  let items
  try {
    items = fs.readdirSync(dir)
  } catch (err) {
    return mkdir.mkdirsSync(dir)
  }

  items.forEach(item => {
    item = path.join(dir, item)
    remove.removeSync(item)
  })
}

module.exports = {
  emptyDirSync,
  emptydirSync: emptyDirSync,
  emptyDir,
  emptydir: emptyDir
}


/***/ }),

/***/ 406354:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const mkdir = __webpack_require__(8150)
const pathExists = __webpack_require__(520540).pathExists

function createFile (file, callback) {
  function makeFile () {
    fs.writeFile(file, '', err => {
      if (err) return callback(err)
      callback()
    })
  }

  fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
    if (!err && stats.isFile()) return callback()
    const dir = path.dirname(file)
    pathExists(dir, (err, dirExists) => {
      if (err) return callback(err)
      if (dirExists) return makeFile()
      mkdir.mkdirs(dir, err => {
        if (err) return callback(err)
        makeFile()
      })
    })
  })
}

function createFileSync (file) {
  let stats
  try {
    stats = fs.statSync(file)
  } catch (e) {}
  if (stats && stats.isFile()) return

  const dir = path.dirname(file)
  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  fs.writeFileSync(file, '')
}

module.exports = {
  createFile: u(createFile),
  createFileSync
}


/***/ }),

/***/ 38066:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const file = __webpack_require__(406354)
const link = __webpack_require__(171041)
const symlink = __webpack_require__(596430)

module.exports = {
  // file
  createFile: file.createFile,
  createFileSync: file.createFileSync,
  ensureFile: file.createFile,
  ensureFileSync: file.createFileSync,
  // link
  createLink: link.createLink,
  createLinkSync: link.createLinkSync,
  ensureLink: link.createLink,
  ensureLinkSync: link.createLinkSync,
  // symlink
  createSymlink: symlink.createSymlink,
  createSymlinkSync: symlink.createSymlinkSync,
  ensureSymlink: symlink.createSymlink,
  ensureSymlinkSync: symlink.createSymlinkSync
}


/***/ }),

/***/ 171041:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const mkdir = __webpack_require__(8150)
const pathExists = __webpack_require__(520540).pathExists

function createLink (srcpath, dstpath, callback) {
  function makeLink (srcpath, dstpath) {
    fs.link(srcpath, dstpath, err => {
      if (err) return callback(err)
      callback(null)
    })
  }

  pathExists(dstpath, (err, destinationExists) => {
    if (err) return callback(err)
    if (destinationExists) return callback(null)
    fs.lstat(srcpath, (err) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureLink')
        return callback(err)
      }

      const dir = path.dirname(dstpath)
      pathExists(dir, (err, dirExists) => {
        if (err) return callback(err)
        if (dirExists) return makeLink(srcpath, dstpath)
        mkdir.mkdirs(dir, err => {
          if (err) return callback(err)
          makeLink(srcpath, dstpath)
        })
      })
    })
  })
}

function createLinkSync (srcpath, dstpath) {
  const destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  try {
    fs.lstatSync(srcpath)
  } catch (err) {
    err.message = err.message.replace('lstat', 'ensureLink')
    throw err
  }

  const dir = path.dirname(dstpath)
  const dirExists = fs.existsSync(dir)
  if (dirExists) return fs.linkSync(srcpath, dstpath)
  mkdir.mkdirsSync(dir)

  return fs.linkSync(srcpath, dstpath)
}

module.exports = {
  createLink: u(createLink),
  createLinkSync
}


/***/ }),

/***/ 32282:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const pathExists = __webpack_require__(520540).pathExists

/**
 * Function that returns two types of paths, one relative to symlink, and one
 * relative to the current working directory. Checks if path is absolute or
 * relative. If the path is relative, this function checks if the path is
 * relative to symlink or relative to current working directory. This is an
 * initiative to find a smarter `srcpath` to supply when building symlinks.
 * This allows you to determine which path to use out of one of three possible
 * types of source paths. The first is an absolute path. This is detected by
 * `path.isAbsolute()`. When an absolute path is provided, it is checked to
 * see if it exists. If it does it's used, if not an error is returned
 * (callback)/ thrown (sync). The other two options for `srcpath` are a
 * relative url. By default Node's `fs.symlink` works by creating a symlink
 * using `dstpath` and expects the `srcpath` to be relative to the newly
 * created symlink. If you provide a `srcpath` that does not exist on the file
 * system it results in a broken symlink. To minimize this, the function
 * checks to see if the 'relative to symlink' source file exists, and if it
 * does it will use it. If it does not, it checks if there's a file that
 * exists that is relative to the current working directory, if does its used.
 * This preserves the expectations of the original fs.symlink spec and adds
 * the ability to pass in `relative to current working direcotry` paths.
 */

function symlinkPaths (srcpath, dstpath, callback) {
  if (path.isAbsolute(srcpath)) {
    return fs.lstat(srcpath, (err) => {
      if (err) {
        err.message = err.message.replace('lstat', 'ensureSymlink')
        return callback(err)
      }
      return callback(null, {
        'toCwd': srcpath,
        'toDst': srcpath
      })
    })
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    return pathExists(relativeToDst, (err, exists) => {
      if (err) return callback(err)
      if (exists) {
        return callback(null, {
          'toCwd': relativeToDst,
          'toDst': srcpath
        })
      } else {
        return fs.lstat(srcpath, (err) => {
          if (err) {
            err.message = err.message.replace('lstat', 'ensureSymlink')
            return callback(err)
          }
          return callback(null, {
            'toCwd': srcpath,
            'toDst': path.relative(dstdir, srcpath)
          })
        })
      }
    })
  }
}

function symlinkPathsSync (srcpath, dstpath) {
  let exists
  if (path.isAbsolute(srcpath)) {
    exists = fs.existsSync(srcpath)
    if (!exists) throw new Error('absolute srcpath does not exist')
    return {
      'toCwd': srcpath,
      'toDst': srcpath
    }
  } else {
    const dstdir = path.dirname(dstpath)
    const relativeToDst = path.join(dstdir, srcpath)
    exists = fs.existsSync(relativeToDst)
    if (exists) {
      return {
        'toCwd': relativeToDst,
        'toDst': srcpath
      }
    } else {
      exists = fs.existsSync(srcpath)
      if (!exists) throw new Error('relative srcpath does not exist')
      return {
        'toCwd': srcpath,
        'toDst': path.relative(dstdir, srcpath)
      }
    }
  }
}

module.exports = {
  symlinkPaths,
  symlinkPathsSync
}


/***/ }),

/***/ 388089:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)

function symlinkType (srcpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type
  if (type) return callback(null, type)
  fs.lstat(srcpath, (err, stats) => {
    if (err) return callback(null, 'file')
    type = (stats && stats.isDirectory()) ? 'dir' : 'file'
    callback(null, type)
  })
}

function symlinkTypeSync (srcpath, type) {
  let stats

  if (type) return type
  try {
    stats = fs.lstatSync(srcpath)
  } catch (e) {
    return 'file'
  }
  return (stats && stats.isDirectory()) ? 'dir' : 'file'
}

module.exports = {
  symlinkType,
  symlinkTypeSync
}


/***/ }),

/***/ 596430:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const path = __webpack_require__(385622)
const fs = __webpack_require__(220077)
const _mkdirs = __webpack_require__(8150)
const mkdirs = _mkdirs.mkdirs
const mkdirsSync = _mkdirs.mkdirsSync

const _symlinkPaths = __webpack_require__(32282)
const symlinkPaths = _symlinkPaths.symlinkPaths
const symlinkPathsSync = _symlinkPaths.symlinkPathsSync

const _symlinkType = __webpack_require__(388089)
const symlinkType = _symlinkType.symlinkType
const symlinkTypeSync = _symlinkType.symlinkTypeSync

const pathExists = __webpack_require__(520540).pathExists

function createSymlink (srcpath, dstpath, type, callback) {
  callback = (typeof type === 'function') ? type : callback
  type = (typeof type === 'function') ? false : type

  pathExists(dstpath, (err, destinationExists) => {
    if (err) return callback(err)
    if (destinationExists) return callback(null)
    symlinkPaths(srcpath, dstpath, (err, relative) => {
      if (err) return callback(err)
      srcpath = relative.toDst
      symlinkType(relative.toCwd, type, (err, type) => {
        if (err) return callback(err)
        const dir = path.dirname(dstpath)
        pathExists(dir, (err, dirExists) => {
          if (err) return callback(err)
          if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
          mkdirs(dir, err => {
            if (err) return callback(err)
            fs.symlink(srcpath, dstpath, type, callback)
          })
        })
      })
    })
  })
}

function createSymlinkSync (srcpath, dstpath, type) {
  const destinationExists = fs.existsSync(dstpath)
  if (destinationExists) return undefined

  const relative = symlinkPathsSync(srcpath, dstpath)
  srcpath = relative.toDst
  type = symlinkTypeSync(relative.toCwd, type)
  const dir = path.dirname(dstpath)
  const exists = fs.existsSync(dir)
  if (exists) return fs.symlinkSync(srcpath, dstpath, type)
  mkdirsSync(dir)
  return fs.symlinkSync(srcpath, dstpath, type)
}

module.exports = {
  createSymlink: u(createSymlink),
  createSymlinkSync
}


/***/ }),

/***/ 856623:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";

// This is adapted from https://github.com/normalize/mz
// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)

const api = [
  'access',
  'appendFile',
  'chmod',
  'chown',
  'close',
  'copyFile',
  'fchmod',
  'fchown',
  'fdatasync',
  'fstat',
  'fsync',
  'ftruncate',
  'futimes',
  'lchown',
  'link',
  'lstat',
  'mkdir',
  'mkdtemp',
  'open',
  'readFile',
  'readdir',
  'readlink',
  'realpath',
  'rename',
  'rmdir',
  'stat',
  'symlink',
  'truncate',
  'unlink',
  'utimes',
  'writeFile'
].filter(key => {
  // Some commands are not available on some systems. Ex:
  // fs.copyFile was added in Node.js v8.5.0
  // fs.mkdtemp was added in Node.js v5.10.0
  // fs.lchown is not available on at least some Linux
  return typeof fs[key] === 'function'
})

// Export all keys:
Object.keys(fs).forEach(key => {
  if (key === 'promises') {
    // fs.promises is a getter property that triggers ExperimentalWarning
    // Don't re-export it here, the getter is defined in "lib/index.js"
    return
  }
  exports[key] = fs[key]
})

// Universalify async methods:
api.forEach(method => {
  exports[method] = u(fs[method])
})

// We differ from mz/fs in that we still ship the old, broken, fs.exists()
// since we are a drop-in replacement for the native module
exports.exists = function (filename, callback) {
  if (typeof callback === 'function') {
    return fs.exists(filename, callback)
  }
  return new Promise(resolve => {
    return fs.exists(filename, resolve)
  })
}

// fs.read() & fs.write need special treatment due to multiple callback args

exports.read = function (fd, buffer, offset, length, position, callback) {
  if (typeof callback === 'function') {
    return fs.read(fd, buffer, offset, length, position, callback)
  }
  return new Promise((resolve, reject) => {
    fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
      if (err) return reject(err)
      resolve({ bytesRead, buffer })
    })
  })
}

// Function signature can be
// fs.write(fd, buffer[, offset[, length[, position]]], callback)
// OR
// fs.write(fd, string[, position[, encoding]], callback)
// We need to handle both cases, so we use ...args
exports.write = function (fd, buffer, ...args) {
  if (typeof args[args.length - 1] === 'function') {
    return fs.write(fd, buffer, ...args)
  }

  return new Promise((resolve, reject) => {
    fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {
      if (err) return reject(err)
      resolve({ bytesWritten, buffer })
    })
  })
}


/***/ }),

/***/ 444798:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


module.exports = Object.assign(
  {},
  // Export promiseified graceful-fs:
  __webpack_require__(856623),
  // Export extra methods:
  __webpack_require__(852558),
  __webpack_require__(142719),
  __webpack_require__(628007),
  __webpack_require__(38066),
  __webpack_require__(440953),
  __webpack_require__(8150),
  __webpack_require__(582803),
  __webpack_require__(506529),
  __webpack_require__(398533),
  __webpack_require__(520540),
  __webpack_require__(432208)
)

// Export fs.promises as a getter property so that we don't trigger
// ExperimentalWarning before fs.promises is actually accessed.
const fs = __webpack_require__(935747)
if (Object.getOwnPropertyDescriptor(fs, 'promises')) {
  Object.defineProperty(module.exports, "promises", ({
    get () { return fs.promises }
  }))
}


/***/ }),

/***/ 440953:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const jsonFile = __webpack_require__(436899)

jsonFile.outputJson = u(__webpack_require__(661993))
jsonFile.outputJsonSync = __webpack_require__(753180)
// aliases
jsonFile.outputJSON = jsonFile.outputJson
jsonFile.outputJSONSync = jsonFile.outputJsonSync
jsonFile.writeJSON = jsonFile.writeJson
jsonFile.writeJSONSync = jsonFile.writeJsonSync
jsonFile.readJSON = jsonFile.readJson
jsonFile.readJSONSync = jsonFile.readJsonSync

module.exports = jsonFile


/***/ }),

/***/ 436899:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const jsonFile = __webpack_require__(96813)

module.exports = {
  // jsonfile exports
  readJson: u(jsonFile.readFile),
  readJsonSync: jsonFile.readFileSync,
  writeJson: u(jsonFile.writeFile),
  writeJsonSync: jsonFile.writeFileSync
}


/***/ }),

/***/ 753180:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(8150)
const jsonFile = __webpack_require__(436899)

function outputJsonSync (file, data, options) {
  const dir = path.dirname(file)

  if (!fs.existsSync(dir)) {
    mkdir.mkdirsSync(dir)
  }

  jsonFile.writeJsonSync(file, data, options)
}

module.exports = outputJsonSync


/***/ }),

/***/ 661993:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)
const mkdir = __webpack_require__(8150)
const pathExists = __webpack_require__(520540).pathExists
const jsonFile = __webpack_require__(436899)

function outputJson (file, data, options, callback) {
  if (typeof options === 'function') {
    callback = options
    options = {}
  }

  const dir = path.dirname(file)

  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return jsonFile.writeJson(file, data, options, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)
      jsonFile.writeJson(file, data, options, callback)
    })
  })
}

module.exports = outputJson


/***/ }),

/***/ 8150:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const u = __webpack_require__(238981)/* .fromCallback */ .E
const mkdirs = u(__webpack_require__(304410))
const mkdirsSync = __webpack_require__(650603)

module.exports = {
  mkdirs,
  mkdirsSync,
  // alias
  mkdirp: mkdirs,
  mkdirpSync: mkdirsSync,
  ensureDir: mkdirs,
  ensureDirSync: mkdirsSync
}


/***/ }),

/***/ 650603:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const invalidWin32Path = __webpack_require__(483304).invalidWin32Path

const o777 = parseInt('0777', 8)

function mkdirsSync (p, opts, made) {
  if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  let mode = opts.mode
  const xfs = opts.fs || fs

  if (process.platform === 'win32' && invalidWin32Path(p)) {
    const errInval = new Error(p + ' contains invalid WIN32 path characters.')
    errInval.code = 'EINVAL'
    throw errInval
  }

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  p = path.resolve(p)

  try {
    xfs.mkdirSync(p, mode)
    made = made || p
  } catch (err0) {
    if (err0.code === 'ENOENT') {
      if (path.dirname(p) === p) throw err0
      made = mkdirsSync(path.dirname(p), opts, made)
      mkdirsSync(p, opts, made)
    } else {
      // In the case of any other error, just see if there's a dir there
      // already. If so, then hooray!  If not, then something is borked.
      let stat
      try {
        stat = xfs.statSync(p)
      } catch (err1) {
        throw err0
      }
      if (!stat.isDirectory()) throw err0
    }
  }

  return made
}

module.exports = mkdirsSync


/***/ }),

/***/ 304410:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const invalidWin32Path = __webpack_require__(483304).invalidWin32Path

const o777 = parseInt('0777', 8)

function mkdirs (p, opts, callback, made) {
  if (typeof opts === 'function') {
    callback = opts
    opts = {}
  } else if (!opts || typeof opts !== 'object') {
    opts = { mode: opts }
  }

  if (process.platform === 'win32' && invalidWin32Path(p)) {
    const errInval = new Error(p + ' contains invalid WIN32 path characters.')
    errInval.code = 'EINVAL'
    return callback(errInval)
  }

  let mode = opts.mode
  const xfs = opts.fs || fs

  if (mode === undefined) {
    mode = o777 & (~process.umask())
  }
  if (!made) made = null

  callback = callback || function () {}
  p = path.resolve(p)

  xfs.mkdir(p, mode, er => {
    if (!er) {
      made = made || p
      return callback(null, made)
    }
    switch (er.code) {
      case 'ENOENT':
        if (path.dirname(p) === p) return callback(er)
        mkdirs(path.dirname(p), opts, (er, made) => {
          if (er) callback(er, made)
          else mkdirs(p, opts, callback, made)
        })
        break

      // In the case of any other error, just see if there's a dir
      // there already.  If so, then hooray!  If not, then something
      // is borked.
      default:
        xfs.stat(p, (er2, stat) => {
          // if the stat fails, then that's super weird.
          // let the original error be the failure reason.
          if (er2 || !stat.isDirectory()) callback(er, made)
          else callback(null, made)
        })
        break
    }
  })
}

module.exports = mkdirs


/***/ }),

/***/ 483304:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const path = __webpack_require__(385622)

// get drive on windows
function getRootPath (p) {
  p = path.normalize(path.resolve(p)).split(path.sep)
  if (p.length > 0) return p[0]
  return null
}

// http://stackoverflow.com/a/62888/10333 contains more accurate
// TODO: expand to include the rest
const INVALID_PATH_CHARS = /[<>:"|?*]/

function invalidWin32Path (p) {
  const rp = getRootPath(p)
  p = p.replace(rp, '')
  return INVALID_PATH_CHARS.test(p)
}

module.exports = {
  getRootPath,
  invalidWin32Path
}


/***/ }),

/***/ 582803:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const copySync = __webpack_require__(852558).copySync
const removeSync = __webpack_require__(432208).removeSync
const mkdirpSync = __webpack_require__(8150).mkdirsSync
const buffer = __webpack_require__(942512)

function moveSync (src, dest, options) {
  options = options || {}
  const overwrite = options.overwrite || options.clobber || false

  src = path.resolve(src)
  dest = path.resolve(dest)

  if (src === dest) return fs.accessSync(src)

  if (isSrcSubdir(src, dest)) throw new Error(`Cannot move '${src}' into itself '${dest}'.`)

  mkdirpSync(path.dirname(dest))
  tryRenameSync()

  function tryRenameSync () {
    if (overwrite) {
      try {
        return fs.renameSync(src, dest)
      } catch (err) {
        if (err.code === 'ENOTEMPTY' || err.code === 'EEXIST' || err.code === 'EPERM') {
          removeSync(dest)
          options.overwrite = false // just overwriteed it, no need to do it again
          return moveSync(src, dest, options)
        }

        if (err.code !== 'EXDEV') throw err
        return moveSyncAcrossDevice(src, dest, overwrite)
      }
    } else {
      try {
        fs.linkSync(src, dest)
        return fs.unlinkSync(src)
      } catch (err) {
        if (err.code === 'EXDEV' || err.code === 'EISDIR' || err.code === 'EPERM' || err.code === 'ENOTSUP') {
          return moveSyncAcrossDevice(src, dest, overwrite)
        }
        throw err
      }
    }
  }
}

function moveSyncAcrossDevice (src, dest, overwrite) {
  const stat = fs.statSync(src)

  if (stat.isDirectory()) {
    return moveDirSyncAcrossDevice(src, dest, overwrite)
  } else {
    return moveFileSyncAcrossDevice(src, dest, overwrite)
  }
}

function moveFileSyncAcrossDevice (src, dest, overwrite) {
  const BUF_LENGTH = 64 * 1024
  const _buff = buffer(BUF_LENGTH)

  const flags = overwrite ? 'w' : 'wx'

  const fdr = fs.openSync(src, 'r')
  const stat = fs.fstatSync(fdr)
  const fdw = fs.openSync(dest, flags, stat.mode)
  let pos = 0

  while (pos < stat.size) {
    const bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos)
    fs.writeSync(fdw, _buff, 0, bytesRead)
    pos += bytesRead
  }

  fs.closeSync(fdr)
  fs.closeSync(fdw)
  return fs.unlinkSync(src)
}

function moveDirSyncAcrossDevice (src, dest, overwrite) {
  const options = {
    overwrite: false
  }

  if (overwrite) {
    removeSync(dest)
    tryCopySync()
  } else {
    tryCopySync()
  }

  function tryCopySync () {
    copySync(src, dest, options)
    return removeSync(src)
  }
}

// return true if dest is a subdir of src, otherwise false.
// extract dest base dir and check if that is the same as src basename
function isSrcSubdir (src, dest) {
  try {
    return fs.statSync(src).isDirectory() &&
           src !== dest &&
           dest.indexOf(src) > -1 &&
           dest.split(path.dirname(src) + path.sep)[1].split(path.sep)[0] === path.basename(src)
  } catch (e) {
    return false
  }
}

module.exports = {
  moveSync
}


/***/ }),

/***/ 506529:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const copy = __webpack_require__(142719).copy
const remove = __webpack_require__(432208).remove
const mkdirp = __webpack_require__(8150).mkdirp
const pathExists = __webpack_require__(520540).pathExists

function move (src, dest, opts, cb) {
  if (typeof opts === 'function') {
    cb = opts
    opts = {}
  }

  const overwrite = opts.overwrite || opts.clobber || false

  src = path.resolve(src)
  dest = path.resolve(dest)

  if (src === dest) return fs.access(src, cb)

  fs.stat(src, (err, st) => {
    if (err) return cb(err)

    if (st.isDirectory() && isSrcSubdir(src, dest)) {
      return cb(new Error(`Cannot move '${src}' to a subdirectory of itself, '${dest}'.`))
    }
    mkdirp(path.dirname(dest), err => {
      if (err) return cb(err)
      return doRename(src, dest, overwrite, cb)
    })
  })
}

function doRename (src, dest, overwrite, cb) {
  if (overwrite) {
    return remove(dest, err => {
      if (err) return cb(err)
      return rename(src, dest, overwrite, cb)
    })
  }
  pathExists(dest, (err, destExists) => {
    if (err) return cb(err)
    if (destExists) return cb(new Error('dest already exists.'))
    return rename(src, dest, overwrite, cb)
  })
}

function rename (src, dest, overwrite, cb) {
  fs.rename(src, dest, err => {
    if (!err) return cb()
    if (err.code !== 'EXDEV') return cb(err)
    return moveAcrossDevice(src, dest, overwrite, cb)
  })
}

function moveAcrossDevice (src, dest, overwrite, cb) {
  const opts = {
    overwrite,
    errorOnExist: true
  }

  copy(src, dest, opts, err => {
    if (err) return cb(err)
    return remove(src, cb)
  })
}

function isSrcSubdir (src, dest) {
  const srcArray = src.split(path.sep)
  const destArray = dest.split(path.sep)

  return srcArray.reduce((acc, current, i) => {
    return acc && destArray[i] === current
  }, true)
}

module.exports = {
  move: u(move)
}


/***/ }),

/***/ 398533:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const mkdir = __webpack_require__(8150)
const pathExists = __webpack_require__(520540).pathExists

function outputFile (file, data, encoding, callback) {
  if (typeof encoding === 'function') {
    callback = encoding
    encoding = 'utf8'
  }

  const dir = path.dirname(file)
  pathExists(dir, (err, itDoes) => {
    if (err) return callback(err)
    if (itDoes) return fs.writeFile(file, data, encoding, callback)

    mkdir.mkdirs(dir, err => {
      if (err) return callback(err)

      fs.writeFile(file, data, encoding, callback)
    })
  })
}

function outputFileSync (file, ...args) {
  const dir = path.dirname(file)
  if (fs.existsSync(dir)) {
    return fs.writeFileSync(file, ...args)
  }
  mkdir.mkdirsSync(dir)
  fs.writeFileSync(file, ...args)
}

module.exports = {
  outputFile: u(outputFile),
  outputFileSync
}


/***/ }),

/***/ 520540:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";

const u = __webpack_require__(238981)/* .fromPromise */ .p
const fs = __webpack_require__(856623)

function pathExists (path) {
  return fs.access(path).then(() => true).catch(() => false)
}

module.exports = {
  pathExists: u(pathExists),
  pathExistsSync: fs.existsSync
}


/***/ }),

/***/ 432208:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const u = __webpack_require__(238981)/* .fromCallback */ .E
const rimraf = __webpack_require__(751215)

module.exports = {
  remove: u(rimraf),
  removeSync: rimraf.sync
}


/***/ }),

/***/ 751215:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const path = __webpack_require__(385622)
const assert = __webpack_require__(742357)

const isWindows = (process.platform === 'win32')

function defaults (options) {
  const methods = [
    'unlink',
    'chmod',
    'stat',
    'lstat',
    'rmdir',
    'readdir'
  ]
  methods.forEach(m => {
    options[m] = options[m] || fs[m]
    m = m + 'Sync'
    options[m] = options[m] || fs[m]
  })

  options.maxBusyTries = options.maxBusyTries || 3
}

function rimraf (p, options, cb) {
  let busyTries = 0

  if (typeof options === 'function') {
    cb = options
    options = {}
  }

  assert(p, 'rimraf: missing path')
  assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
  assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
  assert(options, 'rimraf: invalid options argument provided')
  assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')

  defaults(options)

  rimraf_(p, options, function CB (er) {
    if (er) {
      if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
          busyTries < options.maxBusyTries) {
        busyTries++
        const time = busyTries * 100
        // try again, with the same exact callback as this one.
        return setTimeout(() => rimraf_(p, options, CB), time)
      }

      // already gone
      if (er.code === 'ENOENT') er = null
    }

    cb(er)
  })
}

// Two possible strategies.
// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong.  However, there
// are likely far more normal files in the world than directories.  This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow.  But until then, YAGNI.
function rimraf_ (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  // sunos lets the root user unlink directories, which is... weird.
  // so we have to lstat here and make sure it's not a dir.
  options.lstat(p, (er, st) => {
    if (er && er.code === 'ENOENT') {
      return cb(null)
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er && er.code === 'EPERM' && isWindows) {
      return fixWinEPERM(p, options, er, cb)
    }

    if (st && st.isDirectory()) {
      return rmdir(p, options, er, cb)
    }

    options.unlink(p, er => {
      if (er) {
        if (er.code === 'ENOENT') {
          return cb(null)
        }
        if (er.code === 'EPERM') {
          return (isWindows)
            ? fixWinEPERM(p, options, er, cb)
            : rmdir(p, options, er, cb)
        }
        if (er.code === 'EISDIR') {
          return rmdir(p, options, er, cb)
        }
      }
      return cb(er)
    })
  })
}

function fixWinEPERM (p, options, er, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')
  if (er) {
    assert(er instanceof Error)
  }

  options.chmod(p, 0o666, er2 => {
    if (er2) {
      cb(er2.code === 'ENOENT' ? null : er)
    } else {
      options.stat(p, (er3, stats) => {
        if (er3) {
          cb(er3.code === 'ENOENT' ? null : er)
        } else if (stats.isDirectory()) {
          rmdir(p, options, er, cb)
        } else {
          options.unlink(p, cb)
        }
      })
    }
  })
}

function fixWinEPERMSync (p, options, er) {
  let stats

  assert(p)
  assert(options)
  if (er) {
    assert(er instanceof Error)
  }

  try {
    options.chmodSync(p, 0o666)
  } catch (er2) {
    if (er2.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  try {
    stats = options.statSync(p)
  } catch (er3) {
    if (er3.code === 'ENOENT') {
      return
    } else {
      throw er
    }
  }

  if (stats.isDirectory()) {
    rmdirSync(p, options, er)
  } else {
    options.unlinkSync(p)
  }
}

function rmdir (p, options, originalEr, cb) {
  assert(p)
  assert(options)
  if (originalEr) {
    assert(originalEr instanceof Error)
  }
  assert(typeof cb === 'function')

  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
  // if we guessed wrong, and it's not a directory, then
  // raise the original error.
  options.rmdir(p, er => {
    if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
      rmkids(p, options, cb)
    } else if (er && er.code === 'ENOTDIR') {
      cb(originalEr)
    } else {
      cb(er)
    }
  })
}

function rmkids (p, options, cb) {
  assert(p)
  assert(options)
  assert(typeof cb === 'function')

  options.readdir(p, (er, files) => {
    if (er) return cb(er)

    let n = files.length
    let errState

    if (n === 0) return options.rmdir(p, cb)

    files.forEach(f => {
      rimraf(path.join(p, f), options, er => {
        if (errState) {
          return
        }
        if (er) return cb(errState = er)
        if (--n === 0) {
          options.rmdir(p, cb)
        }
      })
    })
  })
}

// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
  let st

  options = options || {}
  defaults(options)

  assert(p, 'rimraf: missing path')
  assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
  assert(options, 'rimraf: missing options')
  assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')

  try {
    st = options.lstatSync(p)
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    }

    // Windows can EPERM on stat.  Life is suffering.
    if (er.code === 'EPERM' && isWindows) {
      fixWinEPERMSync(p, options, er)
    }
  }

  try {
    // sunos lets the root user unlink directories, which is... weird.
    if (st && st.isDirectory()) {
      rmdirSync(p, options, null)
    } else {
      options.unlinkSync(p)
    }
  } catch (er) {
    if (er.code === 'ENOENT') {
      return
    } else if (er.code === 'EPERM') {
      return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
    } else if (er.code !== 'EISDIR') {
      throw er
    }
    rmdirSync(p, options, er)
  }
}

function rmdirSync (p, options, originalEr) {
  assert(p)
  assert(options)
  if (originalEr) {
    assert(originalEr instanceof Error)
  }

  try {
    options.rmdirSync(p)
  } catch (er) {
    if (er.code === 'ENOTDIR') {
      throw originalEr
    } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
      rmkidsSync(p, options)
    } else if (er.code !== 'ENOENT') {
      throw er
    }
  }
}

function rmkidsSync (p, options) {
  assert(p)
  assert(options)
  options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))

  // We only end up here once we got ENOTEMPTY at least once, and
  // at this point, we are guaranteed to have removed all the kids.
  // So, we know that it won't be ENOENT or ENOTDIR or anything else.
  // try really hard to delete stuff on windows, because it has a
  // PROFOUNDLY annoying habit of not closing handles promptly when
  // files are deleted, resulting in spurious ENOTEMPTY errors.
  const retries = isWindows ? 100 : 1
  let i = 0
  do {
    let threw = true
    try {
      const ret = options.rmdirSync(p, options)
      threw = false
      return ret
    } finally {
      if (++i < retries && threw) continue // eslint-disable-line
    }
  } while (true)
}

module.exports = rimraf
rimraf.sync = rimrafSync


/***/ }),

/***/ 942512:
/***/ ((module) => {

"use strict";

/* eslint-disable node/no-deprecated-api */
module.exports = function (size) {
  if (typeof Buffer.allocUnsafe === 'function') {
    try {
      return Buffer.allocUnsafe(size)
    } catch (e) {
      return new Buffer(size)
    }
  }
  return new Buffer(size)
}


/***/ }),

/***/ 481429:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


const fs = __webpack_require__(220077)
const os = __webpack_require__(712087)
const path = __webpack_require__(385622)

// HFS, ext{2,3}, FAT do not, Node.js v0.10 does not
function hasMillisResSync () {
  let tmpfile = path.join('millis-test-sync' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  const d = new Date(1435410243862)
  fs.writeFileSync(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141')
  const fd = fs.openSync(tmpfile, 'r+')
  fs.futimesSync(fd, d, d)
  fs.closeSync(fd)
  return fs.statSync(tmpfile).mtime > 1435410243000
}

function hasMillisRes (callback) {
  let tmpfile = path.join('millis-test' + Date.now().toString() + Math.random().toString().slice(2))
  tmpfile = path.join(os.tmpdir(), tmpfile)

  // 550 millis past UNIX epoch
  const d = new Date(1435410243862)
  fs.writeFile(tmpfile, 'https://github.com/jprichardson/node-fs-extra/pull/141', err => {
    if (err) return callback(err)
    fs.open(tmpfile, 'r+', (err, fd) => {
      if (err) return callback(err)
      fs.futimes(fd, d, d, err => {
        if (err) return callback(err)
        fs.close(fd, err => {
          if (err) return callback(err)
          fs.stat(tmpfile, (err, stats) => {
            if (err) return callback(err)
            callback(null, stats.mtime > 1435410243000)
          })
        })
      })
    })
  })
}

function timeRemoveMillis (timestamp) {
  if (typeof timestamp === 'number') {
    return Math.floor(timestamp / 1000) * 1000
  } else if (timestamp instanceof Date) {
    return new Date(Math.floor(timestamp.getTime() / 1000) * 1000)
  } else {
    throw new Error('fs-extra: timeRemoveMillis() unknown parameter type')
  }
}

function utimesMillis (path, atime, mtime, callback) {
  // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
  fs.open(path, 'r+', (err, fd) => {
    if (err) return callback(err)
    fs.futimes(fd, atime, mtime, futimesErr => {
      fs.close(fd, closeErr => {
        if (callback) callback(futimesErr || closeErr)
      })
    })
  })
}

function utimesMillisSync (path, atime, mtime) {
  const fd = fs.openSync(path, 'r+')
  fs.futimesSync(fd, atime, mtime)
  return fs.closeSync(fd)
}

module.exports = {
  hasMillisRes,
  hasMillisResSync,
  timeRemoveMillis,
  utimesMillis,
  utimesMillisSync
}


/***/ }),

/***/ 767142:
/***/ ((module) => {

function HARError (errors) {
  var message = 'validation failed'

  this.name = 'HARError'
  this.message = message
  this.errors = errors

  if (typeof Error.captureStackTrace === 'function') {
    Error.captureStackTrace(this, this.constructor)
  } else {
    this.stack = (new Error(message)).stack
  }
}

HARError.prototype = Error.prototype

module.exports = HARError


/***/ }),

/***/ 224053:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

var Ajv = __webpack_require__(443360)
var HARError = __webpack_require__(767142)
var schemas = __webpack_require__(808023)

var ajv

function createAjvInstance () {
  var ajv = new Ajv({
    allErrors: true
  })
  ajv.addMetaSchema(__webpack_require__(995157))
  ajv.addSchema(schemas)

  return ajv
}

function validate (name, data) {
  data = data || {}

  // validator config
  ajv = ajv || createAjvInstance()

  var validate = ajv.getSchema(name + '.json')

  return new Promise(function (resolve, reject) {
    var valid = validate(data)

    !valid ? reject(new HARError(validate.errors)) : resolve(data)
  })
}

exports.afterRequest = function (data) {
  return validate('afterRequest', data)
}

exports.beforeRequest = function (data) {
  return validate('beforeRequest', data)
}

exports.browser = function (data) {
  return validate('browser', data)
}

exports.cache = function (data) {
  return validate('cache', data)
}

exports.content = function (data) {
  return validate('content', data)
}

exports.cookie = function (data) {
  return validate('cookie', data)
}

exports.creator = function (data) {
  return validate('creator', data)
}

exports.entry = function (data) {
  return validate('entry', data)
}

exports.har = function (data) {
  return validate('har', data)
}

exports.header = function (data) {
  return validate('header', data)
}

exports.log = function (data) {
  return validate('log', data)
}

exports.page = function (data) {
  return validate('page', data)
}

exports.pageTimings = function (data) {
  return validate('pageTimings', data)
}

exports.postData = function (data) {
  return validate('postData', data)
}

exports.query = function (data) {
  return validate('query', data)
}

exports.request = function (data) {
  return validate('request', data)
}

exports.response = function (data) {
  return validate('response', data)
}

exports.timings = function (data) {
  return validate('timings', data)
}


/***/ }),

/***/ 708594:
/***/ (function(module, exports, __webpack_require__) {

/* module decorator */ module = __webpack_require__.nmd(module);
var __WEBPACK_AMD_DEFINE_RESULT__;/**
 * @license
 * Lodash <https://lodash.com/>
 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
 * Released under MIT license <https://lodash.com/license>
 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
 */
;(function() {

  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
  var undefined;

  /** Used as the semantic version number. */
  var VERSION = '4.17.20';

  /** Used as the size to enable large array optimizations. */
  var LARGE_ARRAY_SIZE = 200;

  /** Error message constants. */
  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
      FUNC_ERROR_TEXT = 'Expected a function';

  /** Used to stand-in for `undefined` hash values. */
  var HASH_UNDEFINED = '__lodash_hash_undefined__';

  /** Used as the maximum memoize cache size. */
  var MAX_MEMOIZE_SIZE = 500;

  /** Used as the internal argument placeholder. */
  var PLACEHOLDER = '__lodash_placeholder__';

  /** Used to compose bitmasks for cloning. */
  var CLONE_DEEP_FLAG = 1,
      CLONE_FLAT_FLAG = 2,
      CLONE_SYMBOLS_FLAG = 4;

  /** Used to compose bitmasks for value comparisons. */
  var COMPARE_PARTIAL_FLAG = 1,
      COMPARE_UNORDERED_FLAG = 2;

  /** Used to compose bitmasks for function metadata. */
  var WRAP_BIND_FLAG = 1,
      WRAP_BIND_KEY_FLAG = 2,
      WRAP_CURRY_BOUND_FLAG = 4,
      WRAP_CURRY_FLAG = 8,
      WRAP_CURRY_RIGHT_FLAG = 16,
      WRAP_PARTIAL_FLAG = 32,
      WRAP_PARTIAL_RIGHT_FLAG = 64,
      WRAP_ARY_FLAG = 128,
      WRAP_REARG_FLAG = 256,
      WRAP_FLIP_FLAG = 512;

  /** Used as default options for `_.truncate`. */
  var DEFAULT_TRUNC_LENGTH = 30,
      DEFAULT_TRUNC_OMISSION = '...';

  /** Used to detect hot functions by number of calls within a span of milliseconds. */
  var HOT_COUNT = 800,
      HOT_SPAN = 16;

  /** Used to indicate the type of lazy iteratees. */
  var LAZY_FILTER_FLAG = 1,
      LAZY_MAP_FLAG = 2,
      LAZY_WHILE_FLAG = 3;

  /** Used as references for various `Number` constants. */
  var INFINITY = 1 / 0,
      MAX_SAFE_INTEGER = 9007199254740991,
      MAX_INTEGER = 1.7976931348623157e+308,
      NAN = 0 / 0;

  /** Used as references for the maximum length and index of an array. */
  var MAX_ARRAY_LENGTH = 4294967295,
      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;

  /** Used to associate wrap methods with their bit flags. */
  var wrapFlags = [
    ['ary', WRAP_ARY_FLAG],
    ['bind', WRAP_BIND_FLAG],
    ['bindKey', WRAP_BIND_KEY_FLAG],
    ['curry', WRAP_CURRY_FLAG],
    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
    ['flip', WRAP_FLIP_FLAG],
    ['partial', WRAP_PARTIAL_FLAG],
    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
    ['rearg', WRAP_REARG_FLAG]
  ];

  /** `Object#toString` result references. */
  var argsTag = '[object Arguments]',
      arrayTag = '[object Array]',
      asyncTag = '[object AsyncFunction]',
      boolTag = '[object Boolean]',
      dateTag = '[object Date]',
      domExcTag = '[object DOMException]',
      errorTag = '[object Error]',
      funcTag = '[object Function]',
      genTag = '[object GeneratorFunction]',
      mapTag = '[object Map]',
      numberTag = '[object Number]',
      nullTag = '[object Null]',
      objectTag = '[object Object]',
      promiseTag = '[object Promise]',
      proxyTag = '[object Proxy]',
      regexpTag = '[object RegExp]',
      setTag = '[object Set]',
      stringTag = '[object String]',
      symbolTag = '[object Symbol]',
      undefinedTag = '[object Undefined]',
      weakMapTag = '[object WeakMap]',
      weakSetTag = '[object WeakSet]';

  var arrayBufferTag = '[object ArrayBuffer]',
      dataViewTag = '[object DataView]',
      float32Tag = '[object Float32Array]',
      float64Tag = '[object Float64Array]',
      int8Tag = '[object Int8Array]',
      int16Tag = '[object Int16Array]',
      int32Tag = '[object Int32Array]',
      uint8Tag = '[object Uint8Array]',
      uint8ClampedTag = '[object Uint8ClampedArray]',
      uint16Tag = '[object Uint16Array]',
      uint32Tag = '[object Uint32Array]';

  /** Used to match empty string literals in compiled template source. */
  var reEmptyStringLeading = /\b__p \+= '';/g,
      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;

  /** Used to match HTML entities and HTML characters. */
  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
      reUnescapedHtml = /[&<>"']/g,
      reHasEscapedHtml = RegExp(reEscapedHtml.source),
      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);

  /** Used to match template delimiters. */
  var reEscape = /<%-([\s\S]+?)%>/g,
      reEvaluate = /<%([\s\S]+?)%>/g,
      reInterpolate = /<%=([\s\S]+?)%>/g;

  /** Used to match property names within property paths. */
  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
      reIsPlainProp = /^\w*$/,
      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

  /**
   * Used to match `RegExp`
   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
   */
  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
      reHasRegExpChar = RegExp(reRegExpChar.source);

  /** Used to match leading and trailing whitespace. */
  var reTrim = /^\s+|\s+$/g,
      reTrimStart = /^\s+/,
      reTrimEnd = /\s+$/;

  /** Used to match wrap detail comments. */
  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
      reSplitDetails = /,? & /;

  /** Used to match words composed of alphanumeric characters. */
  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;

  /** Used to match backslashes in property paths. */
  var reEscapeChar = /\\(\\)?/g;

  /**
   * Used to match
   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
   */
  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;

  /** Used to match `RegExp` flags from their coerced string values. */
  var reFlags = /\w*$/;

  /** Used to detect bad signed hexadecimal string values. */
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

  /** Used to detect binary string values. */
  var reIsBinary = /^0b[01]+$/i;

  /** Used to detect host constructors (Safari). */
  var reIsHostCtor = /^\[object .+?Constructor\]$/;

  /** Used to detect octal string values. */
  var reIsOctal = /^0o[0-7]+$/i;

  /** Used to detect unsigned integer values. */
  var reIsUint = /^(?:0|[1-9]\d*)$/;

  /** Used to match Latin Unicode letters (excluding mathematical operators). */
  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;

  /** Used to ensure capturing order of template delimiters. */
  var reNoMatch = /($^)/;

  /** Used to match unescaped characters in compiled string literals. */
  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;

  /** Used to compose unicode character classes. */
  var rsAstralRange = '\\ud800-\\udfff',
      rsComboMarksRange = '\\u0300-\\u036f',
      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
      rsComboSymbolsRange = '\\u20d0-\\u20ff',
      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
      rsDingbatRange = '\\u2700-\\u27bf',
      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
      rsPunctuationRange = '\\u2000-\\u206f',
      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
      rsVarRange = '\\ufe0e\\ufe0f',
      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;

  /** Used to compose unicode capture groups. */
  var rsApos = "['\u2019]",
      rsAstral = '[' + rsAstralRange + ']',
      rsBreak = '[' + rsBreakRange + ']',
      rsCombo = '[' + rsComboRange + ']',
      rsDigits = '\\d+',
      rsDingbat = '[' + rsDingbatRange + ']',
      rsLower = '[' + rsLowerRange + ']',
      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
      rsFitz = '\\ud83c[\\udffb-\\udfff]',
      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
      rsNonAstral = '[^' + rsAstralRange + ']',
      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
      rsUpper = '[' + rsUpperRange + ']',
      rsZWJ = '\\u200d';

  /** Used to compose unicode regexes. */
  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
      reOptMod = rsModifier + '?',
      rsOptVar = '[' + rsVarRange + ']?',
      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
      rsSeq = rsOptVar + reOptMod + rsOptJoin,
      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';

  /** Used to match apostrophes. */
  var reApos = RegExp(rsApos, 'g');

  /**
   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
   */
  var reComboMark = RegExp(rsCombo, 'g');

  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');

  /** Used to match complex or compound words. */
  var reUnicodeWord = RegExp([
    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
    rsUpper + '+' + rsOptContrUpper,
    rsOrdUpper,
    rsOrdLower,
    rsDigits,
    rsEmoji
  ].join('|'), 'g');

  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');

  /** Used to detect strings that need a more robust regexp to match words. */
  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;

  /** Used to assign default `context` object properties. */
  var contextProps = [
    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
  ];

  /** Used to make template sourceURLs easier to identify. */
  var templateCounter = -1;

  /** Used to identify `toStringTag` values of typed arrays. */
  var typedArrayTags = {};
  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
  typedArrayTags[uint32Tag] = true;
  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
  typedArrayTags[setTag] = typedArrayTags[stringTag] =
  typedArrayTags[weakMapTag] = false;

  /** Used to identify `toStringTag` values supported by `_.clone`. */
  var cloneableTags = {};
  cloneableTags[argsTag] = cloneableTags[arrayTag] =
  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
  cloneableTags[boolTag] = cloneableTags[dateTag] =
  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
  cloneableTags[int32Tag] = cloneableTags[mapTag] =
  cloneableTags[numberTag] = cloneableTags[objectTag] =
  cloneableTags[regexpTag] = cloneableTags[setTag] =
  cloneableTags[stringTag] = cloneableTags[symbolTag] =
  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
  cloneableTags[errorTag] = cloneableTags[funcTag] =
  cloneableTags[weakMapTag] = false;

  /** Used to map Latin Unicode letters to basic Latin letters. */
  var deburredLetters = {
    // Latin-1 Supplement block.
    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
    '\xc7': 'C',  '\xe7': 'c',
    '\xd0': 'D',  '\xf0': 'd',
    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
    '\xd1': 'N',  '\xf1': 'n',
    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
    '\xc6': 'Ae', '\xe6': 'ae',
    '\xde': 'Th', '\xfe': 'th',
    '\xdf': 'ss',
    // Latin Extended-A block.
    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
    '\u0134': 'J',  '\u0135': 'j',
    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
    '\u0174': 'W',  '\u0175': 'w',
    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
    '\u0132': 'IJ', '\u0133': 'ij',
    '\u0152': 'Oe', '\u0153': 'oe',
    '\u0149': "'n", '\u017f': 's'
  };

  /** Used to map characters to HTML entities. */
  var htmlEscapes = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#39;'
  };

  /** Used to map HTML entities to characters. */
  var htmlUnescapes = {
    '&amp;': '&',
    '&lt;': '<',
    '&gt;': '>',
    '&quot;': '"',
    '&#39;': "'"
  };

  /** Used to escape characters for inclusion in compiled string literals. */
  var stringEscapes = {
    '\\': '\\',
    "'": "'",
    '\n': 'n',
    '\r': 'r',
    '\u2028': 'u2028',
    '\u2029': 'u2029'
  };

  /** Built-in method references without a dependency on `root`. */
  var freeParseFloat = parseFloat,
      freeParseInt = parseInt;

  /** Detect free variable `global` from Node.js. */
  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;

  /** Detect free variable `self`. */
  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;

  /** Used as a reference to the global object. */
  var root = freeGlobal || freeSelf || Function('return this')();

  /** Detect free variable `exports`. */
  var freeExports =  true && exports && !exports.nodeType && exports;

  /** Detect free variable `module`. */
  var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;

  /** Detect the popular CommonJS extension `module.exports`. */
  var moduleExports = freeModule && freeModule.exports === freeExports;

  /** Detect free variable `process` from Node.js. */
  var freeProcess = moduleExports && freeGlobal.process;

  /** Used to access faster Node.js helpers. */
  var nodeUtil = (function() {
    try {
      // Use `util.types` for Node.js 10+.
      var types = freeModule && freeModule.require && freeModule.require('util').types;

      if (types) {
        return types;
      }

      // Legacy `process.binding('util')` for Node.js < 10.
      return freeProcess && freeProcess.binding && freeProcess.binding('util');
    } catch (e) {}
  }());

  /* Node.js helper references. */
  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
      nodeIsDate = nodeUtil && nodeUtil.isDate,
      nodeIsMap = nodeUtil && nodeUtil.isMap,
      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
      nodeIsSet = nodeUtil && nodeUtil.isSet,
      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;

  /*--------------------------------------------------------------------------*/

  /**
   * A faster alternative to `Function#apply`, this function invokes `func`
   * with the `this` binding of `thisArg` and the arguments of `args`.
   *
   * @private
   * @param {Function} func The function to invoke.
   * @param {*} thisArg The `this` binding of `func`.
   * @param {Array} args The arguments to invoke `func` with.
   * @returns {*} Returns the result of `func`.
   */
  function apply(func, thisArg, args) {
    switch (args.length) {
      case 0: return func.call(thisArg);
      case 1: return func.call(thisArg, args[0]);
      case 2: return func.call(thisArg, args[0], args[1]);
      case 3: return func.call(thisArg, args[0], args[1], args[2]);
    }
    return func.apply(thisArg, args);
  }

  /**
   * A specialized version of `baseAggregator` for arrays.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} setter The function to set `accumulator` values.
   * @param {Function} iteratee The iteratee to transform keys.
   * @param {Object} accumulator The initial aggregated object.
   * @returns {Function} Returns `accumulator`.
   */
  function arrayAggregator(array, setter, iteratee, accumulator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      var value = array[index];
      setter(accumulator, value, iteratee(value), array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.forEach` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEach(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (iteratee(array[index], index, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.forEachRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns `array`.
   */
  function arrayEachRight(array, iteratee) {
    var length = array == null ? 0 : array.length;

    while (length--) {
      if (iteratee(array[length], length, array) === false) {
        break;
      }
    }
    return array;
  }

  /**
   * A specialized version of `_.every` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if all elements pass the predicate check,
   *  else `false`.
   */
  function arrayEvery(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (!predicate(array[index], index, array)) {
        return false;
      }
    }
    return true;
  }

  /**
   * A specialized version of `_.filter` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {Array} Returns the new filtered array.
   */
  function arrayFilter(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (predicate(value, index, array)) {
        result[resIndex++] = value;
      }
    }
    return result;
  }

  /**
   * A specialized version of `_.includes` for arrays without support for
   * specifying an index to search from.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludes(array, value) {
    var length = array == null ? 0 : array.length;
    return !!length && baseIndexOf(array, value, 0) > -1;
  }

  /**
   * This function is like `arrayIncludes` except that it accepts a comparator.
   *
   * @private
   * @param {Array} [array] The array to inspect.
   * @param {*} target The value to search for.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {boolean} Returns `true` if `target` is found, else `false`.
   */
  function arrayIncludesWith(array, value, comparator) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (comparator(value, array[index])) {
        return true;
      }
    }
    return false;
  }

  /**
   * A specialized version of `_.map` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the new mapped array.
   */
  function arrayMap(array, iteratee) {
    var index = -1,
        length = array == null ? 0 : array.length,
        result = Array(length);

    while (++index < length) {
      result[index] = iteratee(array[index], index, array);
    }
    return result;
  }

  /**
   * Appends the elements of `values` to `array`.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {Array} values The values to append.
   * @returns {Array} Returns `array`.
   */
  function arrayPush(array, values) {
    var index = -1,
        length = values.length,
        offset = array.length;

    while (++index < length) {
      array[offset + index] = values[index];
    }
    return array;
  }

  /**
   * A specialized version of `_.reduce` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the first element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduce(array, iteratee, accumulator, initAccum) {
    var index = -1,
        length = array == null ? 0 : array.length;

    if (initAccum && length) {
      accumulator = array[++index];
    }
    while (++index < length) {
      accumulator = iteratee(accumulator, array[index], index, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.reduceRight` for arrays without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} [accumulator] The initial value.
   * @param {boolean} [initAccum] Specify using the last element of `array` as
   *  the initial value.
   * @returns {*} Returns the accumulated value.
   */
  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
    var length = array == null ? 0 : array.length;
    if (initAccum && length) {
      accumulator = array[--length];
    }
    while (length--) {
      accumulator = iteratee(accumulator, array[length], length, array);
    }
    return accumulator;
  }

  /**
   * A specialized version of `_.some` for arrays without support for iteratee
   * shorthands.
   *
   * @private
   * @param {Array} [array] The array to iterate over.
   * @param {Function} predicate The function invoked per iteration.
   * @returns {boolean} Returns `true` if any element passes the predicate check,
   *  else `false`.
   */
  function arraySome(array, predicate) {
    var index = -1,
        length = array == null ? 0 : array.length;

    while (++index < length) {
      if (predicate(array[index], index, array)) {
        return true;
      }
    }
    return false;
  }

  /**
   * Gets the size of an ASCII `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  var asciiSize = baseProperty('length');

  /**
   * Converts an ASCII `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function asciiToArray(string) {
    return string.split('');
  }

  /**
   * Splits an ASCII `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function asciiWords(string) {
    return string.match(reAsciiWord) || [];
  }

  /**
   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
   * without support for iteratee shorthands, which iterates over `collection`
   * using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the found element or its key, else `undefined`.
   */
  function baseFindKey(collection, predicate, eachFunc) {
    var result;
    eachFunc(collection, function(value, key, collection) {
      if (predicate(value, key, collection)) {
        result = key;
        return false;
      }
    });
    return result;
  }

  /**
   * The base implementation of `_.findIndex` and `_.findLastIndex` without
   * support for iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {Function} predicate The function invoked per iteration.
   * @param {number} fromIndex The index to search from.
   * @param {boolean} [fromRight] Specify iterating from right to left.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseFindIndex(array, predicate, fromIndex, fromRight) {
    var length = array.length,
        index = fromIndex + (fromRight ? 1 : -1);

    while ((fromRight ? index-- : ++index < length)) {
      if (predicate(array[index], index, array)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOf(array, value, fromIndex) {
    return value === value
      ? strictIndexOf(array, value, fromIndex)
      : baseFindIndex(array, baseIsNaN, fromIndex);
  }

  /**
   * This function is like `baseIndexOf` except that it accepts a comparator.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @param {Function} comparator The comparator invoked per element.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function baseIndexOfWith(array, value, fromIndex, comparator) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (comparator(array[index], value)) {
        return index;
      }
    }
    return -1;
  }

  /**
   * The base implementation of `_.isNaN` without support for number objects.
   *
   * @private
   * @param {*} value The value to check.
   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
   */
  function baseIsNaN(value) {
    return value !== value;
  }

  /**
   * The base implementation of `_.mean` and `_.meanBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the mean.
   */
  function baseMean(array, iteratee) {
    var length = array == null ? 0 : array.length;
    return length ? (baseSum(array, iteratee) / length) : NAN;
  }

  /**
   * The base implementation of `_.property` without support for deep paths.
   *
   * @private
   * @param {string} key The key of the property to get.
   * @returns {Function} Returns the new accessor function.
   */
  function baseProperty(key) {
    return function(object) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.propertyOf` without support for deep paths.
   *
   * @private
   * @param {Object} object The object to query.
   * @returns {Function} Returns the new accessor function.
   */
  function basePropertyOf(object) {
    return function(key) {
      return object == null ? undefined : object[key];
    };
  }

  /**
   * The base implementation of `_.reduce` and `_.reduceRight`, without support
   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
   *
   * @private
   * @param {Array|Object} collection The collection to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @param {*} accumulator The initial value.
   * @param {boolean} initAccum Specify using the first or last element of
   *  `collection` as the initial value.
   * @param {Function} eachFunc The function to iterate over `collection`.
   * @returns {*} Returns the accumulated value.
   */
  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
    eachFunc(collection, function(value, index, collection) {
      accumulator = initAccum
        ? (initAccum = false, value)
        : iteratee(accumulator, value, index, collection);
    });
    return accumulator;
  }

  /**
   * The base implementation of `_.sortBy` which uses `comparer` to define the
   * sort order of `array` and replaces criteria objects with their corresponding
   * values.
   *
   * @private
   * @param {Array} array The array to sort.
   * @param {Function} comparer The function to define sort order.
   * @returns {Array} Returns `array`.
   */
  function baseSortBy(array, comparer) {
    var length = array.length;

    array.sort(comparer);
    while (length--) {
      array[length] = array[length].value;
    }
    return array;
  }

  /**
   * The base implementation of `_.sum` and `_.sumBy` without support for
   * iteratee shorthands.
   *
   * @private
   * @param {Array} array The array to iterate over.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {number} Returns the sum.
   */
  function baseSum(array, iteratee) {
    var result,
        index = -1,
        length = array.length;

    while (++index < length) {
      var current = iteratee(array[index]);
      if (current !== undefined) {
        result = result === undefined ? current : (result + current);
      }
    }
    return result;
  }

  /**
   * The base implementation of `_.times` without support for iteratee shorthands
   * or max array length checks.
   *
   * @private
   * @param {number} n The number of times to invoke `iteratee`.
   * @param {Function} iteratee The function invoked per iteration.
   * @returns {Array} Returns the array of results.
   */
  function baseTimes(n, iteratee) {
    var index = -1,
        result = Array(n);

    while (++index < n) {
      result[index] = iteratee(index);
    }
    return result;
  }

  /**
   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
   * of key-value pairs for `object` corresponding to the property names of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the key-value pairs.
   */
  function baseToPairs(object, props) {
    return arrayMap(props, function(key) {
      return [key, object[key]];
    });
  }

  /**
   * The base implementation of `_.unary` without support for storing metadata.
   *
   * @private
   * @param {Function} func The function to cap arguments for.
   * @returns {Function} Returns the new capped function.
   */
  function baseUnary(func) {
    return function(value) {
      return func(value);
    };
  }

  /**
   * The base implementation of `_.values` and `_.valuesIn` which creates an
   * array of `object` property values corresponding to the property names
   * of `props`.
   *
   * @private
   * @param {Object} object The object to query.
   * @param {Array} props The property names to get values for.
   * @returns {Object} Returns the array of property values.
   */
  function baseValues(object, props) {
    return arrayMap(props, function(key) {
      return object[key];
    });
  }

  /**
   * Checks if a `cache` value for `key` exists.
   *
   * @private
   * @param {Object} cache The cache to query.
   * @param {string} key The key of the entry to check.
   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
   */
  function cacheHas(cache, key) {
    return cache.has(key);
  }

  /**
   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the first unmatched string symbol.
   */
  function charsStartIndex(strSymbols, chrSymbols) {
    var index = -1,
        length = strSymbols.length;

    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
   * that is not found in the character symbols.
   *
   * @private
   * @param {Array} strSymbols The string symbols to inspect.
   * @param {Array} chrSymbols The character symbols to find.
   * @returns {number} Returns the index of the last unmatched string symbol.
   */
  function charsEndIndex(strSymbols, chrSymbols) {
    var index = strSymbols.length;

    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
    return index;
  }

  /**
   * Gets the number of `placeholder` occurrences in `array`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} placeholder The placeholder to search for.
   * @returns {number} Returns the placeholder count.
   */
  function countHolders(array, placeholder) {
    var length = array.length,
        result = 0;

    while (length--) {
      if (array[length] === placeholder) {
        ++result;
      }
    }
    return result;
  }

  /**
   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
   * letters to basic Latin letters.
   *
   * @private
   * @param {string} letter The matched letter to deburr.
   * @returns {string} Returns the deburred letter.
   */
  var deburrLetter = basePropertyOf(deburredLetters);

  /**
   * Used by `_.escape` to convert characters to HTML entities.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  var escapeHtmlChar = basePropertyOf(htmlEscapes);

  /**
   * Used by `_.template` to escape characters for inclusion in compiled string literals.
   *
   * @private
   * @param {string} chr The matched character to escape.
   * @returns {string} Returns the escaped character.
   */
  function escapeStringChar(chr) {
    return '\\' + stringEscapes[chr];
  }

  /**
   * Gets the value at `key` of `object`.
   *
   * @private
   * @param {Object} [object] The object to query.
   * @param {string} key The key of the property to get.
   * @returns {*} Returns the property value.
   */
  function getValue(object, key) {
    return object == null ? undefined : object[key];
  }

  /**
   * Checks if `string` contains Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
   */
  function hasUnicode(string) {
    return reHasUnicode.test(string);
  }

  /**
   * Checks if `string` contains a word composed of Unicode symbols.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {boolean} Returns `true` if a word is found, else `false`.
   */
  function hasUnicodeWord(string) {
    return reHasUnicodeWord.test(string);
  }

  /**
   * Converts `iterator` to an array.
   *
   * @private
   * @param {Object} iterator The iterator to convert.
   * @returns {Array} Returns the converted array.
   */
  function iteratorToArray(iterator) {
    var data,
        result = [];

    while (!(data = iterator.next()).done) {
      result.push(data.value);
    }
    return result;
  }

  /**
   * Converts `map` to its key-value pairs.
   *
   * @private
   * @param {Object} map The map to convert.
   * @returns {Array} Returns the key-value pairs.
   */
  function mapToArray(map) {
    var index = -1,
        result = Array(map.size);

    map.forEach(function(value, key) {
      result[++index] = [key, value];
    });
    return result;
  }

  /**
   * Creates a unary function that invokes `func` with its argument transformed.
   *
   * @private
   * @param {Function} func The function to wrap.
   * @param {Function} transform The argument transform.
   * @returns {Function} Returns the new function.
   */
  function overArg(func, transform) {
    return function(arg) {
      return func(transform(arg));
    };
  }

  /**
   * Replaces all `placeholder` elements in `array` with an internal placeholder
   * and returns an array of their indexes.
   *
   * @private
   * @param {Array} array The array to modify.
   * @param {*} placeholder The placeholder to replace.
   * @returns {Array} Returns the new array of placeholder indexes.
   */
  function replaceHolders(array, placeholder) {
    var index = -1,
        length = array.length,
        resIndex = 0,
        result = [];

    while (++index < length) {
      var value = array[index];
      if (value === placeholder || value === PLACEHOLDER) {
        array[index] = PLACEHOLDER;
        result[resIndex++] = index;
      }
    }
    return result;
  }

  /**
   * Converts `set` to an array of its values.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the values.
   */
  function setToArray(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = value;
    });
    return result;
  }

  /**
   * Converts `set` to its value-value pairs.
   *
   * @private
   * @param {Object} set The set to convert.
   * @returns {Array} Returns the value-value pairs.
   */
  function setToPairs(set) {
    var index = -1,
        result = Array(set.size);

    set.forEach(function(value) {
      result[++index] = [value, value];
    });
    return result;
  }

  /**
   * A specialized version of `_.indexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictIndexOf(array, value, fromIndex) {
    var index = fromIndex - 1,
        length = array.length;

    while (++index < length) {
      if (array[index] === value) {
        return index;
      }
    }
    return -1;
  }

  /**
   * A specialized version of `_.lastIndexOf` which performs strict equality
   * comparisons of values, i.e. `===`.
   *
   * @private
   * @param {Array} array The array to inspect.
   * @param {*} value The value to search for.
   * @param {number} fromIndex The index to search from.
   * @returns {number} Returns the index of the matched value, else `-1`.
   */
  function strictLastIndexOf(array, value, fromIndex) {
    var index = fromIndex + 1;
    while (index--) {
      if (array[index] === value) {
        return index;
      }
    }
    return index;
  }

  /**
   * Gets the number of symbols in `string`.
   *
   * @private
   * @param {string} string The string to inspect.
   * @returns {number} Returns the string size.
   */
  function stringSize(string) {
    return hasUnicode(string)
      ? unicodeSize(string)
      : asciiSize(string);
  }

  /**
   * Converts `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function stringToArray(string) {
    return hasUnicode(string)
      ? unicodeToArray(string)
      : asciiToArray(string);
  }

  /**
   * Used by `_.unescape` to convert HTML entities to characters.
   *
   * @private
   * @param {string} chr The matched character to unescape.
   * @returns {string} Returns the unescaped character.
   */
  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);

  /**
   * Gets the size of a Unicode `string`.
   *
   * @private
   * @param {string} string The string inspect.
   * @returns {number} Returns the string size.
   */
  function unicodeSize(string) {
    var result = reUnicode.lastIndex = 0;
    while (reUnicode.test(string)) {
      ++result;
    }
    return result;
  }

  /**
   * Converts a Unicode `string` to an array.
   *
   * @private
   * @param {string} string The string to convert.
   * @returns {Array} Returns the converted array.
   */
  function unicodeToArray(string) {
    return string.match(reUnicode) || [];
  }

  /**
   * Splits a Unicode `string` into an array of its words.
   *
   * @private
   * @param {string} The string to inspect.
   * @returns {Array} Returns the words of `string`.
   */
  function unicodeWords(string) {
    return string.match(reUnicodeWord) || [];
  }

  /*--------------------------------------------------------------------------*/

  /**
   * Create a new pristine `lodash` function using the `context` object.
   *
   * @static
   * @memberOf _
   * @since 1.1.0
   * @category Util
   * @param {Object} [context=root] The context object.
   * @returns {Function} Returns a new `lodash` function.
   * @example
   *
   * _.mixin({ 'foo': _.constant('foo') });
   *
   * var lodash = _.runInContext();
   * lodash.mixin({ 'bar': lodash.constant('bar') });
   *
   * _.isFunction(_.foo);
   * // => true
   * _.isFunction(_.bar);
   * // => false
   *
   * lodash.isFunction(lodash.foo);
   * // => false
   * lodash.isFunction(lodash.bar);
   * // => true
   *
   * // Create a suped-up `defer` in Node.js.
   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
   */
  var runInContext = (function runInContext(context) {
    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));

    /** Built-in constructor references. */
    var Array = context.Array,
        Date = context.Date,
        Error = context.Error,
        Function = context.Function,
        Math = context.Math,
        Object = context.Object,
        RegExp = context.RegExp,
        String = context.String,
        TypeError = context.TypeError;

    /** Used for built-in method references. */
    var arrayProto = Array.prototype,
        funcProto = Function.prototype,
        objectProto = Object.prototype;

    /** Used to detect overreaching core-js shims. */
    var coreJsData = context['__core-js_shared__'];

    /** Used to resolve the decompiled source of functions. */
    var funcToString = funcProto.toString;

    /** Used to check objects for own properties. */
    var hasOwnProperty = objectProto.hasOwnProperty;

    /** Used to generate unique IDs. */
    var idCounter = 0;

    /** Used to detect methods masquerading as native. */
    var maskSrcKey = (function() {
      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
      return uid ? ('Symbol(src)_1.' + uid) : '';
    }());

    /**
     * Used to resolve the
     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
     * of values.
     */
    var nativeObjectToString = objectProto.toString;

    /** Used to infer the `Object` constructor. */
    var objectCtorString = funcToString.call(Object);

    /** Used to restore the original `_` reference in `_.noConflict`. */
    var oldDash = root._;

    /** Used to detect if a method is native. */
    var reIsNative = RegExp('^' +
      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
    );

    /** Built-in value references. */
    var Buffer = moduleExports ? context.Buffer : undefined,
        Symbol = context.Symbol,
        Uint8Array = context.Uint8Array,
        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
        getPrototype = overArg(Object.getPrototypeOf, Object),
        objectCreate = Object.create,
        propertyIsEnumerable = objectProto.propertyIsEnumerable,
        splice = arrayProto.splice,
        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
        symIterator = Symbol ? Symbol.iterator : undefined,
        symToStringTag = Symbol ? Symbol.toStringTag : undefined;

    var defineProperty = (function() {
      try {
        var func = getNative(Object, 'defineProperty');
        func({}, '', {});
        return func;
      } catch (e) {}
    }());

    /** Mocked built-ins. */
    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
        ctxNow = Date && Date.now !== root.Date.now && Date.now,
        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;

    /* Built-in method references for those with the same name as other `lodash` methods. */
    var nativeCeil = Math.ceil,
        nativeFloor = Math.floor,
        nativeGetSymbols = Object.getOwnPropertySymbols,
        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
        nativeIsFinite = context.isFinite,
        nativeJoin = arrayProto.join,
        nativeKeys = overArg(Object.keys, Object),
        nativeMax = Math.max,
        nativeMin = Math.min,
        nativeNow = Date.now,
        nativeParseInt = context.parseInt,
        nativeRandom = Math.random,
        nativeReverse = arrayProto.reverse;

    /* Built-in method references that are verified to be native. */
    var DataView = getNative(context, 'DataView'),
        Map = getNative(context, 'Map'),
        Promise = getNative(context, 'Promise'),
        Set = getNative(context, 'Set'),
        WeakMap = getNative(context, 'WeakMap'),
        nativeCreate = getNative(Object, 'create');

    /** Used to store function metadata. */
    var metaMap = WeakMap && new WeakMap;

    /** Used to lookup unminified function names. */
    var realNames = {};

    /** Used to detect maps, sets, and weakmaps. */
    var dataViewCtorString = toSource(DataView),
        mapCtorString = toSource(Map),
        promiseCtorString = toSource(Promise),
        setCtorString = toSource(Set),
        weakMapCtorString = toSource(WeakMap);

    /** Used to convert symbols to primitives and strings. */
    var symbolProto = Symbol ? Symbol.prototype : undefined,
        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
        symbolToString = symbolProto ? symbolProto.toString : undefined;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` object which wraps `value` to enable implicit method
     * chain sequences. Methods that operate on and return arrays, collections,
     * and functions can be chained together. Methods that retrieve a single value
     * or may return a primitive value will automatically end the chain sequence
     * and return the unwrapped value. Otherwise, the value must be unwrapped
     * with `_#value`.
     *
     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
     * enabled using `_.chain`.
     *
     * The execution of chained methods is lazy, that is, it's deferred until
     * `_#value` is implicitly or explicitly called.
     *
     * Lazy evaluation allows several methods to support shortcut fusion.
     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
     * the creation of intermediate arrays and can greatly reduce the number of
     * iteratee executions. Sections of a chain sequence qualify for shortcut
     * fusion if the section is applied to an array and iteratees accept only
     * one argument. The heuristic for whether a section qualifies for shortcut
     * fusion is subject to change.
     *
     * Chaining is supported in custom builds as long as the `_#value` method is
     * directly or indirectly included in the build.
     *
     * In addition to lodash methods, wrappers have `Array` and `String` methods.
     *
     * The wrapper `Array` methods are:
     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
     *
     * The wrapper `String` methods are:
     * `replace` and `split`
     *
     * The wrapper methods that support shortcut fusion are:
     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
     *
     * The chainable wrapper methods are:
     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
     * `zipObject`, `zipObjectDeep`, and `zipWith`
     *
     * The wrapper methods that are **not** chainable by default are:
     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
     * `upperFirst`, `value`, and `words`
     *
     * @name _
     * @constructor
     * @category Seq
     * @param {*} value The value to wrap in a `lodash` instance.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2, 3]);
     *
     * // Returns an unwrapped value.
     * wrapped.reduce(_.add);
     * // => 6
     *
     * // Returns a wrapped value.
     * var squares = wrapped.map(square);
     *
     * _.isArray(squares);
     * // => false
     *
     * _.isArray(squares.value());
     * // => true
     */
    function lodash(value) {
      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
        if (value instanceof LodashWrapper) {
          return value;
        }
        if (hasOwnProperty.call(value, '__wrapped__')) {
          return wrapperClone(value);
        }
      }
      return new LodashWrapper(value);
    }

    /**
     * The base implementation of `_.create` without support for assigning
     * properties to the created object.
     *
     * @private
     * @param {Object} proto The object to inherit from.
     * @returns {Object} Returns the new object.
     */
    var baseCreate = (function() {
      function object() {}
      return function(proto) {
        if (!isObject(proto)) {
          return {};
        }
        if (objectCreate) {
          return objectCreate(proto);
        }
        object.prototype = proto;
        var result = new object;
        object.prototype = undefined;
        return result;
      };
    }());

    /**
     * The function whose prototype chain sequence wrappers inherit from.
     *
     * @private
     */
    function baseLodash() {
      // No operation performed.
    }

    /**
     * The base constructor for creating `lodash` wrapper objects.
     *
     * @private
     * @param {*} value The value to wrap.
     * @param {boolean} [chainAll] Enable explicit method chain sequences.
     */
    function LodashWrapper(value, chainAll) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__chain__ = !!chainAll;
      this.__index__ = 0;
      this.__values__ = undefined;
    }

    /**
     * By default, the template delimiters used by lodash are like those in
     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
     * following template settings to use alternative delimiters.
     *
     * @static
     * @memberOf _
     * @type {Object}
     */
    lodash.templateSettings = {

      /**
       * Used to detect `data` property values to be HTML-escaped.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'escape': reEscape,

      /**
       * Used to detect code to be evaluated.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'evaluate': reEvaluate,

      /**
       * Used to detect `data` property values to inject.
       *
       * @memberOf _.templateSettings
       * @type {RegExp}
       */
      'interpolate': reInterpolate,

      /**
       * Used to reference the data object in the template text.
       *
       * @memberOf _.templateSettings
       * @type {string}
       */
      'variable': '',

      /**
       * Used to import variables into the compiled template.
       *
       * @memberOf _.templateSettings
       * @type {Object}
       */
      'imports': {

        /**
         * A reference to the `lodash` function.
         *
         * @memberOf _.templateSettings.imports
         * @type {Function}
         */
        '_': lodash
      }
    };

    // Ensure wrappers are instances of `baseLodash`.
    lodash.prototype = baseLodash.prototype;
    lodash.prototype.constructor = lodash;

    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
    LodashWrapper.prototype.constructor = LodashWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
     *
     * @private
     * @constructor
     * @param {*} value The value to wrap.
     */
    function LazyWrapper(value) {
      this.__wrapped__ = value;
      this.__actions__ = [];
      this.__dir__ = 1;
      this.__filtered__ = false;
      this.__iteratees__ = [];
      this.__takeCount__ = MAX_ARRAY_LENGTH;
      this.__views__ = [];
    }

    /**
     * Creates a clone of the lazy wrapper object.
     *
     * @private
     * @name clone
     * @memberOf LazyWrapper
     * @returns {Object} Returns the cloned `LazyWrapper` object.
     */
    function lazyClone() {
      var result = new LazyWrapper(this.__wrapped__);
      result.__actions__ = copyArray(this.__actions__);
      result.__dir__ = this.__dir__;
      result.__filtered__ = this.__filtered__;
      result.__iteratees__ = copyArray(this.__iteratees__);
      result.__takeCount__ = this.__takeCount__;
      result.__views__ = copyArray(this.__views__);
      return result;
    }

    /**
     * Reverses the direction of lazy iteration.
     *
     * @private
     * @name reverse
     * @memberOf LazyWrapper
     * @returns {Object} Returns the new reversed `LazyWrapper` object.
     */
    function lazyReverse() {
      if (this.__filtered__) {
        var result = new LazyWrapper(this);
        result.__dir__ = -1;
        result.__filtered__ = true;
      } else {
        result = this.clone();
        result.__dir__ *= -1;
      }
      return result;
    }

    /**
     * Extracts the unwrapped value from its lazy wrapper.
     *
     * @private
     * @name value
     * @memberOf LazyWrapper
     * @returns {*} Returns the unwrapped value.
     */
    function lazyValue() {
      var array = this.__wrapped__.value(),
          dir = this.__dir__,
          isArr = isArray(array),
          isRight = dir < 0,
          arrLength = isArr ? array.length : 0,
          view = getView(0, arrLength, this.__views__),
          start = view.start,
          end = view.end,
          length = end - start,
          index = isRight ? end : (start - 1),
          iteratees = this.__iteratees__,
          iterLength = iteratees.length,
          resIndex = 0,
          takeCount = nativeMin(length, this.__takeCount__);

      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
        return baseWrapperValue(array, this.__actions__);
      }
      var result = [];

      outer:
      while (length-- && resIndex < takeCount) {
        index += dir;

        var iterIndex = -1,
            value = array[index];

        while (++iterIndex < iterLength) {
          var data = iteratees[iterIndex],
              iteratee = data.iteratee,
              type = data.type,
              computed = iteratee(value);

          if (type == LAZY_MAP_FLAG) {
            value = computed;
          } else if (!computed) {
            if (type == LAZY_FILTER_FLAG) {
              continue outer;
            } else {
              break outer;
            }
          }
        }
        result[resIndex++] = value;
      }
      return result;
    }

    // Ensure `LazyWrapper` is an instance of `baseLodash`.
    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
    LazyWrapper.prototype.constructor = LazyWrapper;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a hash object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Hash(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the hash.
     *
     * @private
     * @name clear
     * @memberOf Hash
     */
    function hashClear() {
      this.__data__ = nativeCreate ? nativeCreate(null) : {};
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the hash.
     *
     * @private
     * @name delete
     * @memberOf Hash
     * @param {Object} hash The hash to modify.
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function hashDelete(key) {
      var result = this.has(key) && delete this.__data__[key];
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the hash value for `key`.
     *
     * @private
     * @name get
     * @memberOf Hash
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function hashGet(key) {
      var data = this.__data__;
      if (nativeCreate) {
        var result = data[key];
        return result === HASH_UNDEFINED ? undefined : result;
      }
      return hasOwnProperty.call(data, key) ? data[key] : undefined;
    }

    /**
     * Checks if a hash value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Hash
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function hashHas(key) {
      var data = this.__data__;
      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
    }

    /**
     * Sets the hash `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Hash
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the hash instance.
     */
    function hashSet(key, value) {
      var data = this.__data__;
      this.size += this.has(key) ? 0 : 1;
      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
      return this;
    }

    // Add methods to `Hash`.
    Hash.prototype.clear = hashClear;
    Hash.prototype['delete'] = hashDelete;
    Hash.prototype.get = hashGet;
    Hash.prototype.has = hashHas;
    Hash.prototype.set = hashSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an list cache object.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function ListCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the list cache.
     *
     * @private
     * @name clear
     * @memberOf ListCache
     */
    function listCacheClear() {
      this.__data__ = [];
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the list cache.
     *
     * @private
     * @name delete
     * @memberOf ListCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function listCacheDelete(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        return false;
      }
      var lastIndex = data.length - 1;
      if (index == lastIndex) {
        data.pop();
      } else {
        splice.call(data, index, 1);
      }
      --this.size;
      return true;
    }

    /**
     * Gets the list cache value for `key`.
     *
     * @private
     * @name get
     * @memberOf ListCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function listCacheGet(key) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      return index < 0 ? undefined : data[index][1];
    }

    /**
     * Checks if a list cache value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf ListCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function listCacheHas(key) {
      return assocIndexOf(this.__data__, key) > -1;
    }

    /**
     * Sets the list cache `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf ListCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the list cache instance.
     */
    function listCacheSet(key, value) {
      var data = this.__data__,
          index = assocIndexOf(data, key);

      if (index < 0) {
        ++this.size;
        data.push([key, value]);
      } else {
        data[index][1] = value;
      }
      return this;
    }

    // Add methods to `ListCache`.
    ListCache.prototype.clear = listCacheClear;
    ListCache.prototype['delete'] = listCacheDelete;
    ListCache.prototype.get = listCacheGet;
    ListCache.prototype.has = listCacheHas;
    ListCache.prototype.set = listCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a map cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function MapCache(entries) {
      var index = -1,
          length = entries == null ? 0 : entries.length;

      this.clear();
      while (++index < length) {
        var entry = entries[index];
        this.set(entry[0], entry[1]);
      }
    }

    /**
     * Removes all key-value entries from the map.
     *
     * @private
     * @name clear
     * @memberOf MapCache
     */
    function mapCacheClear() {
      this.size = 0;
      this.__data__ = {
        'hash': new Hash,
        'map': new (Map || ListCache),
        'string': new Hash
      };
    }

    /**
     * Removes `key` and its value from the map.
     *
     * @private
     * @name delete
     * @memberOf MapCache
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function mapCacheDelete(key) {
      var result = getMapData(this, key)['delete'](key);
      this.size -= result ? 1 : 0;
      return result;
    }

    /**
     * Gets the map value for `key`.
     *
     * @private
     * @name get
     * @memberOf MapCache
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function mapCacheGet(key) {
      return getMapData(this, key).get(key);
    }

    /**
     * Checks if a map value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf MapCache
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function mapCacheHas(key) {
      return getMapData(this, key).has(key);
    }

    /**
     * Sets the map `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf MapCache
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the map cache instance.
     */
    function mapCacheSet(key, value) {
      var data = getMapData(this, key),
          size = data.size;

      data.set(key, value);
      this.size += data.size == size ? 0 : 1;
      return this;
    }

    // Add methods to `MapCache`.
    MapCache.prototype.clear = mapCacheClear;
    MapCache.prototype['delete'] = mapCacheDelete;
    MapCache.prototype.get = mapCacheGet;
    MapCache.prototype.has = mapCacheHas;
    MapCache.prototype.set = mapCacheSet;

    /*------------------------------------------------------------------------*/

    /**
     *
     * Creates an array cache object to store unique values.
     *
     * @private
     * @constructor
     * @param {Array} [values] The values to cache.
     */
    function SetCache(values) {
      var index = -1,
          length = values == null ? 0 : values.length;

      this.__data__ = new MapCache;
      while (++index < length) {
        this.add(values[index]);
      }
    }

    /**
     * Adds `value` to the array cache.
     *
     * @private
     * @name add
     * @memberOf SetCache
     * @alias push
     * @param {*} value The value to cache.
     * @returns {Object} Returns the cache instance.
     */
    function setCacheAdd(value) {
      this.__data__.set(value, HASH_UNDEFINED);
      return this;
    }

    /**
     * Checks if `value` is in the array cache.
     *
     * @private
     * @name has
     * @memberOf SetCache
     * @param {*} value The value to search for.
     * @returns {number} Returns `true` if `value` is found, else `false`.
     */
    function setCacheHas(value) {
      return this.__data__.has(value);
    }

    // Add methods to `SetCache`.
    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
    SetCache.prototype.has = setCacheHas;

    /*------------------------------------------------------------------------*/

    /**
     * Creates a stack cache object to store key-value pairs.
     *
     * @private
     * @constructor
     * @param {Array} [entries] The key-value pairs to cache.
     */
    function Stack(entries) {
      var data = this.__data__ = new ListCache(entries);
      this.size = data.size;
    }

    /**
     * Removes all key-value entries from the stack.
     *
     * @private
     * @name clear
     * @memberOf Stack
     */
    function stackClear() {
      this.__data__ = new ListCache;
      this.size = 0;
    }

    /**
     * Removes `key` and its value from the stack.
     *
     * @private
     * @name delete
     * @memberOf Stack
     * @param {string} key The key of the value to remove.
     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
     */
    function stackDelete(key) {
      var data = this.__data__,
          result = data['delete'](key);

      this.size = data.size;
      return result;
    }

    /**
     * Gets the stack value for `key`.
     *
     * @private
     * @name get
     * @memberOf Stack
     * @param {string} key The key of the value to get.
     * @returns {*} Returns the entry value.
     */
    function stackGet(key) {
      return this.__data__.get(key);
    }

    /**
     * Checks if a stack value for `key` exists.
     *
     * @private
     * @name has
     * @memberOf Stack
     * @param {string} key The key of the entry to check.
     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
     */
    function stackHas(key) {
      return this.__data__.has(key);
    }

    /**
     * Sets the stack `key` to `value`.
     *
     * @private
     * @name set
     * @memberOf Stack
     * @param {string} key The key of the value to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns the stack cache instance.
     */
    function stackSet(key, value) {
      var data = this.__data__;
      if (data instanceof ListCache) {
        var pairs = data.__data__;
        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
          pairs.push([key, value]);
          this.size = ++data.size;
          return this;
        }
        data = this.__data__ = new MapCache(pairs);
      }
      data.set(key, value);
      this.size = data.size;
      return this;
    }

    // Add methods to `Stack`.
    Stack.prototype.clear = stackClear;
    Stack.prototype['delete'] = stackDelete;
    Stack.prototype.get = stackGet;
    Stack.prototype.has = stackHas;
    Stack.prototype.set = stackSet;

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of the enumerable property names of the array-like `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @param {boolean} inherited Specify returning inherited property names.
     * @returns {Array} Returns the array of property names.
     */
    function arrayLikeKeys(value, inherited) {
      var isArr = isArray(value),
          isArg = !isArr && isArguments(value),
          isBuff = !isArr && !isArg && isBuffer(value),
          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
          skipIndexes = isArr || isArg || isBuff || isType,
          result = skipIndexes ? baseTimes(value.length, String) : [],
          length = result.length;

      for (var key in value) {
        if ((inherited || hasOwnProperty.call(value, key)) &&
            !(skipIndexes && (
               // Safari 9 has enumerable `arguments.length` in strict mode.
               key == 'length' ||
               // Node.js 0.10 has enumerable non-index properties on buffers.
               (isBuff && (key == 'offset' || key == 'parent')) ||
               // PhantomJS 2 has enumerable non-index properties on typed arrays.
               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
               // Skip index properties.
               isIndex(key, length)
            ))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * A specialized version of `_.sample` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @returns {*} Returns the random element.
     */
    function arraySample(array) {
      var length = array.length;
      return length ? array[baseRandom(0, length - 1)] : undefined;
    }

    /**
     * A specialized version of `_.sampleSize` for arrays.
     *
     * @private
     * @param {Array} array The array to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function arraySampleSize(array, n) {
      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
    }

    /**
     * A specialized version of `_.shuffle` for arrays.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function arrayShuffle(array) {
      return shuffleSelf(copyArray(array));
    }

    /**
     * This function is like `assignValue` except that it doesn't assign
     * `undefined` values.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignMergeValue(object, key, value) {
      if ((value !== undefined && !eq(object[key], value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Assigns `value` to `key` of `object` if the existing value is not equivalent
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function assignValue(object, key, value) {
      var objValue = object[key];
      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
          (value === undefined && !(key in object))) {
        baseAssignValue(object, key, value);
      }
    }

    /**
     * Gets the index at which the `key` is found in `array` of key-value pairs.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {*} key The key to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     */
    function assocIndexOf(array, key) {
      var length = array.length;
      while (length--) {
        if (eq(array[length][0], key)) {
          return length;
        }
      }
      return -1;
    }

    /**
     * Aggregates elements of `collection` on `accumulator` with keys transformed
     * by `iteratee` and values set by `setter`.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform keys.
     * @param {Object} accumulator The initial aggregated object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseAggregator(collection, setter, iteratee, accumulator) {
      baseEach(collection, function(value, key, collection) {
        setter(accumulator, value, iteratee(value), collection);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.assign` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssign(object, source) {
      return object && copyObject(source, keys(source), object);
    }

    /**
     * The base implementation of `_.assignIn` without support for multiple sources
     * or `customizer` functions.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @returns {Object} Returns `object`.
     */
    function baseAssignIn(object, source) {
      return object && copyObject(source, keysIn(source), object);
    }

    /**
     * The base implementation of `assignValue` and `assignMergeValue` without
     * value checks.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {string} key The key of the property to assign.
     * @param {*} value The value to assign.
     */
    function baseAssignValue(object, key, value) {
      if (key == '__proto__' && defineProperty) {
        defineProperty(object, key, {
          'configurable': true,
          'enumerable': true,
          'value': value,
          'writable': true
        });
      } else {
        object[key] = value;
      }
    }

    /**
     * The base implementation of `_.at` without support for individual paths.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {string[]} paths The property paths to pick.
     * @returns {Array} Returns the picked elements.
     */
    function baseAt(object, paths) {
      var index = -1,
          length = paths.length,
          result = Array(length),
          skip = object == null;

      while (++index < length) {
        result[index] = skip ? undefined : get(object, paths[index]);
      }
      return result;
    }

    /**
     * The base implementation of `_.clamp` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     */
    function baseClamp(number, lower, upper) {
      if (number === number) {
        if (upper !== undefined) {
          number = number <= upper ? number : upper;
        }
        if (lower !== undefined) {
          number = number >= lower ? number : lower;
        }
      }
      return number;
    }

    /**
     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
     * traversed objects.
     *
     * @private
     * @param {*} value The value to clone.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Deep clone
     *  2 - Flatten inherited properties
     *  4 - Clone symbols
     * @param {Function} [customizer] The function to customize cloning.
     * @param {string} [key] The key of `value`.
     * @param {Object} [object] The parent object of `value`.
     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
     * @returns {*} Returns the cloned value.
     */
    function baseClone(value, bitmask, customizer, key, object, stack) {
      var result,
          isDeep = bitmask & CLONE_DEEP_FLAG,
          isFlat = bitmask & CLONE_FLAT_FLAG,
          isFull = bitmask & CLONE_SYMBOLS_FLAG;

      if (customizer) {
        result = object ? customizer(value, key, object, stack) : customizer(value);
      }
      if (result !== undefined) {
        return result;
      }
      if (!isObject(value)) {
        return value;
      }
      var isArr = isArray(value);
      if (isArr) {
        result = initCloneArray(value);
        if (!isDeep) {
          return copyArray(value, result);
        }
      } else {
        var tag = getTag(value),
            isFunc = tag == funcTag || tag == genTag;

        if (isBuffer(value)) {
          return cloneBuffer(value, isDeep);
        }
        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
          result = (isFlat || isFunc) ? {} : initCloneObject(value);
          if (!isDeep) {
            return isFlat
              ? copySymbolsIn(value, baseAssignIn(result, value))
              : copySymbols(value, baseAssign(result, value));
          }
        } else {
          if (!cloneableTags[tag]) {
            return object ? value : {};
          }
          result = initCloneByTag(value, tag, isDeep);
        }
      }
      // Check for circular references and return its corresponding clone.
      stack || (stack = new Stack);
      var stacked = stack.get(value);
      if (stacked) {
        return stacked;
      }
      stack.set(value, result);

      if (isSet(value)) {
        value.forEach(function(subValue) {
          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
        });
      } else if (isMap(value)) {
        value.forEach(function(subValue, key) {
          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
        });
      }

      var keysFunc = isFull
        ? (isFlat ? getAllKeysIn : getAllKeys)
        : (isFlat ? keysIn : keys);

      var props = isArr ? undefined : keysFunc(value);
      arrayEach(props || value, function(subValue, key) {
        if (props) {
          key = subValue;
          subValue = value[key];
        }
        // Recursively populate clone (susceptible to call stack limits).
        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
      });
      return result;
    }

    /**
     * The base implementation of `_.conforms` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     */
    function baseConforms(source) {
      var props = keys(source);
      return function(object) {
        return baseConformsTo(object, source, props);
      };
    }

    /**
     * The base implementation of `_.conformsTo` which accepts `props` to check.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     */
    function baseConformsTo(object, source, props) {
      var length = props.length;
      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (length--) {
        var key = props[length],
            predicate = source[key],
            value = object[key];

        if ((value === undefined && !(key in object)) || !predicate(value)) {
          return false;
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.delay` and `_.defer` which accepts `args`
     * to provide to `func`.
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {Array} args The arguments to provide to `func`.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    function baseDelay(func, wait, args) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return setTimeout(function() { func.apply(undefined, args); }, wait);
    }

    /**
     * The base implementation of methods like `_.difference` without support
     * for excluding multiple arrays or iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Array} values The values to exclude.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     */
    function baseDifference(array, values, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          isCommon = true,
          length = array.length,
          result = [],
          valuesLength = values.length;

      if (!length) {
        return result;
      }
      if (iteratee) {
        values = arrayMap(values, baseUnary(iteratee));
      }
      if (comparator) {
        includes = arrayIncludesWith;
        isCommon = false;
      }
      else if (values.length >= LARGE_ARRAY_SIZE) {
        includes = cacheHas;
        isCommon = false;
        values = new SetCache(values);
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee == null ? value : iteratee(value);

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var valuesIndex = valuesLength;
          while (valuesIndex--) {
            if (values[valuesIndex] === computed) {
              continue outer;
            }
          }
          result.push(value);
        }
        else if (!includes(values, computed, comparator)) {
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.forEach` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEach = createBaseEach(baseForOwn);

    /**
     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     */
    var baseEachRight = createBaseEach(baseForOwnRight, true);

    /**
     * The base implementation of `_.every` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`
     */
    function baseEvery(collection, predicate) {
      var result = true;
      baseEach(collection, function(value, index, collection) {
        result = !!predicate(value, index, collection);
        return result;
      });
      return result;
    }

    /**
     * The base implementation of methods like `_.max` and `_.min` which accepts a
     * `comparator` to determine the extremum value.
     *
     * @private
     * @param {Array} array The array to iterate over.
     * @param {Function} iteratee The iteratee invoked per iteration.
     * @param {Function} comparator The comparator used to compare values.
     * @returns {*} Returns the extremum value.
     */
    function baseExtremum(array, iteratee, comparator) {
      var index = -1,
          length = array.length;

      while (++index < length) {
        var value = array[index],
            current = iteratee(value);

        if (current != null && (computed === undefined
              ? (current === current && !isSymbol(current))
              : comparator(current, computed)
            )) {
          var computed = current,
              result = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.fill` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     */
    function baseFill(array, value, start, end) {
      var length = array.length;

      start = toInteger(start);
      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = (end === undefined || end > length) ? length : toInteger(end);
      if (end < 0) {
        end += length;
      }
      end = start > end ? 0 : toLength(end);
      while (start < end) {
        array[start++] = value;
      }
      return array;
    }

    /**
     * The base implementation of `_.filter` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     */
    function baseFilter(collection, predicate) {
      var result = [];
      baseEach(collection, function(value, index, collection) {
        if (predicate(value, index, collection)) {
          result.push(value);
        }
      });
      return result;
    }

    /**
     * The base implementation of `_.flatten` with support for restricting flattening.
     *
     * @private
     * @param {Array} array The array to flatten.
     * @param {number} depth The maximum recursion depth.
     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
     * @param {Array} [result=[]] The initial result value.
     * @returns {Array} Returns the new flattened array.
     */
    function baseFlatten(array, depth, predicate, isStrict, result) {
      var index = -1,
          length = array.length;

      predicate || (predicate = isFlattenable);
      result || (result = []);

      while (++index < length) {
        var value = array[index];
        if (depth > 0 && predicate(value)) {
          if (depth > 1) {
            // Recursively flatten arrays (susceptible to call stack limits).
            baseFlatten(value, depth - 1, predicate, isStrict, result);
          } else {
            arrayPush(result, value);
          }
        } else if (!isStrict) {
          result[result.length] = value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `baseForOwn` which iterates over `object`
     * properties returned by `keysFunc` and invokes `iteratee` for each property.
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseFor = createBaseFor();

    /**
     * This function is like `baseFor` except that it iterates over properties
     * in the opposite order.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @returns {Object} Returns `object`.
     */
    var baseForRight = createBaseFor(true);

    /**
     * The base implementation of `_.forOwn` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwn(object, iteratee) {
      return object && baseFor(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Object} Returns `object`.
     */
    function baseForOwnRight(object, iteratee) {
      return object && baseForRight(object, iteratee, keys);
    }

    /**
     * The base implementation of `_.functions` which creates an array of
     * `object` function property names filtered from `props`.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Array} props The property names to filter.
     * @returns {Array} Returns the function names.
     */
    function baseFunctions(object, props) {
      return arrayFilter(props, function(key) {
        return isFunction(object[key]);
      });
    }

    /**
     * The base implementation of `_.get` without support for default values.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @returns {*} Returns the resolved value.
     */
    function baseGet(object, path) {
      path = castPath(path, object);

      var index = 0,
          length = path.length;

      while (object != null && index < length) {
        object = object[toKey(path[index++])];
      }
      return (index && index == length) ? object : undefined;
    }

    /**
     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Function} keysFunc The function to get the keys of `object`.
     * @param {Function} symbolsFunc The function to get the symbols of `object`.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
      var result = keysFunc(object);
      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
    }

    /**
     * The base implementation of `getTag` without fallbacks for buggy environments.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    function baseGetTag(value) {
      if (value == null) {
        return value === undefined ? undefinedTag : nullTag;
      }
      return (symToStringTag && symToStringTag in Object(value))
        ? getRawTag(value)
        : objectToString(value);
    }

    /**
     * The base implementation of `_.gt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     */
    function baseGt(value, other) {
      return value > other;
    }

    /**
     * The base implementation of `_.has` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHas(object, key) {
      return object != null && hasOwnProperty.call(object, key);
    }

    /**
     * The base implementation of `_.hasIn` without support for deep paths.
     *
     * @private
     * @param {Object} [object] The object to query.
     * @param {Array|string} key The key to check.
     * @returns {boolean} Returns `true` if `key` exists, else `false`.
     */
    function baseHasIn(object, key) {
      return object != null && key in Object(object);
    }

    /**
     * The base implementation of `_.inRange` which doesn't coerce arguments.
     *
     * @private
     * @param {number} number The number to check.
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     */
    function baseInRange(number, start, end) {
      return number >= nativeMin(start, end) && number < nativeMax(start, end);
    }

    /**
     * The base implementation of methods like `_.intersection`, without support
     * for iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of shared values.
     */
    function baseIntersection(arrays, iteratee, comparator) {
      var includes = comparator ? arrayIncludesWith : arrayIncludes,
          length = arrays[0].length,
          othLength = arrays.length,
          othIndex = othLength,
          caches = Array(othLength),
          maxLength = Infinity,
          result = [];

      while (othIndex--) {
        var array = arrays[othIndex];
        if (othIndex && iteratee) {
          array = arrayMap(array, baseUnary(iteratee));
        }
        maxLength = nativeMin(array.length, maxLength);
        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
          ? new SetCache(othIndex && array)
          : undefined;
      }
      array = arrays[0];

      var index = -1,
          seen = caches[0];

      outer:
      while (++index < length && result.length < maxLength) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (!(seen
              ? cacheHas(seen, computed)
              : includes(result, computed, comparator)
            )) {
          othIndex = othLength;
          while (--othIndex) {
            var cache = caches[othIndex];
            if (!(cache
                  ? cacheHas(cache, computed)
                  : includes(arrays[othIndex], computed, comparator))
                ) {
              continue outer;
            }
          }
          if (seen) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.invert` and `_.invertBy` which inverts
     * `object` with values transformed by `iteratee` and set by `setter`.
     *
     * @private
     * @param {Object} object The object to iterate over.
     * @param {Function} setter The function to set `accumulator` values.
     * @param {Function} iteratee The iteratee to transform values.
     * @param {Object} accumulator The initial inverted object.
     * @returns {Function} Returns `accumulator`.
     */
    function baseInverter(object, setter, iteratee, accumulator) {
      baseForOwn(object, function(value, key, object) {
        setter(accumulator, iteratee(value), key, object);
      });
      return accumulator;
    }

    /**
     * The base implementation of `_.invoke` without support for individual
     * method arguments.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {Array} args The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     */
    function baseInvoke(object, path, args) {
      path = castPath(path, object);
      object = parent(object, path);
      var func = object == null ? object : object[toKey(last(path))];
      return func == null ? undefined : apply(func, object, args);
    }

    /**
     * The base implementation of `_.isArguments`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     */
    function baseIsArguments(value) {
      return isObjectLike(value) && baseGetTag(value) == argsTag;
    }

    /**
     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     */
    function baseIsArrayBuffer(value) {
      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
    }

    /**
     * The base implementation of `_.isDate` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     */
    function baseIsDate(value) {
      return isObjectLike(value) && baseGetTag(value) == dateTag;
    }

    /**
     * The base implementation of `_.isEqual` which supports partial comparisons
     * and tracks traversed objects.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {boolean} bitmask The bitmask flags.
     *  1 - Unordered comparison
     *  2 - Partial comparison
     * @param {Function} [customizer] The function to customize comparisons.
     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     */
    function baseIsEqual(value, other, bitmask, customizer, stack) {
      if (value === other) {
        return true;
      }
      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
        return value !== value && other !== other;
      }
      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
    }

    /**
     * A specialized version of `baseIsEqual` for arrays and objects which performs
     * deep comparisons and tracks traversed objects enabling objects with circular
     * references to be compared.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
      var objIsArr = isArray(object),
          othIsArr = isArray(other),
          objTag = objIsArr ? arrayTag : getTag(object),
          othTag = othIsArr ? arrayTag : getTag(other);

      objTag = objTag == argsTag ? objectTag : objTag;
      othTag = othTag == argsTag ? objectTag : othTag;

      var objIsObj = objTag == objectTag,
          othIsObj = othTag == objectTag,
          isSameTag = objTag == othTag;

      if (isSameTag && isBuffer(object)) {
        if (!isBuffer(other)) {
          return false;
        }
        objIsArr = true;
        objIsObj = false;
      }
      if (isSameTag && !objIsObj) {
        stack || (stack = new Stack);
        return (objIsArr || isTypedArray(object))
          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
      }
      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');

        if (objIsWrapped || othIsWrapped) {
          var objUnwrapped = objIsWrapped ? object.value() : object,
              othUnwrapped = othIsWrapped ? other.value() : other;

          stack || (stack = new Stack);
          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
        }
      }
      if (!isSameTag) {
        return false;
      }
      stack || (stack = new Stack);
      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
    }

    /**
     * The base implementation of `_.isMap` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     */
    function baseIsMap(value) {
      return isObjectLike(value) && getTag(value) == mapTag;
    }

    /**
     * The base implementation of `_.isMatch` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Array} matchData The property names, values, and compare flags to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     */
    function baseIsMatch(object, source, matchData, customizer) {
      var index = matchData.length,
          length = index,
          noCustomizer = !customizer;

      if (object == null) {
        return !length;
      }
      object = Object(object);
      while (index--) {
        var data = matchData[index];
        if ((noCustomizer && data[2])
              ? data[1] !== object[data[0]]
              : !(data[0] in object)
            ) {
          return false;
        }
      }
      while (++index < length) {
        data = matchData[index];
        var key = data[0],
            objValue = object[key],
            srcValue = data[1];

        if (noCustomizer && data[2]) {
          if (objValue === undefined && !(key in object)) {
            return false;
          }
        } else {
          var stack = new Stack;
          if (customizer) {
            var result = customizer(objValue, srcValue, key, object, source, stack);
          }
          if (!(result === undefined
                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
                : result
              )) {
            return false;
          }
        }
      }
      return true;
    }

    /**
     * The base implementation of `_.isNative` without bad shim checks.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     */
    function baseIsNative(value) {
      if (!isObject(value) || isMasked(value)) {
        return false;
      }
      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
      return pattern.test(toSource(value));
    }

    /**
     * The base implementation of `_.isRegExp` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     */
    function baseIsRegExp(value) {
      return isObjectLike(value) && baseGetTag(value) == regexpTag;
    }

    /**
     * The base implementation of `_.isSet` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     */
    function baseIsSet(value) {
      return isObjectLike(value) && getTag(value) == setTag;
    }

    /**
     * The base implementation of `_.isTypedArray` without Node.js optimizations.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     */
    function baseIsTypedArray(value) {
      return isObjectLike(value) &&
        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
    }

    /**
     * The base implementation of `_.iteratee`.
     *
     * @private
     * @param {*} [value=_.identity] The value to convert to an iteratee.
     * @returns {Function} Returns the iteratee.
     */
    function baseIteratee(value) {
      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
      if (typeof value == 'function') {
        return value;
      }
      if (value == null) {
        return identity;
      }
      if (typeof value == 'object') {
        return isArray(value)
          ? baseMatchesProperty(value[0], value[1])
          : baseMatches(value);
      }
      return property(value);
    }

    /**
     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeys(object) {
      if (!isPrototype(object)) {
        return nativeKeys(object);
      }
      var result = [];
      for (var key in Object(object)) {
        if (hasOwnProperty.call(object, key) && key != 'constructor') {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function baseKeysIn(object) {
      if (!isObject(object)) {
        return nativeKeysIn(object);
      }
      var isProto = isPrototype(object),
          result = [];

      for (var key in object) {
        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.lt` which doesn't coerce arguments.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     */
    function baseLt(value, other) {
      return value < other;
    }

    /**
     * The base implementation of `_.map` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} iteratee The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     */
    function baseMap(collection, iteratee) {
      var index = -1,
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value, key, collection) {
        result[++index] = iteratee(value, key, collection);
      });
      return result;
    }

    /**
     * The base implementation of `_.matches` which doesn't clone `source`.
     *
     * @private
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatches(source) {
      var matchData = getMatchData(source);
      if (matchData.length == 1 && matchData[0][2]) {
        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
      }
      return function(object) {
        return object === source || baseIsMatch(object, source, matchData);
      };
    }

    /**
     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
     *
     * @private
     * @param {string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function baseMatchesProperty(path, srcValue) {
      if (isKey(path) && isStrictComparable(srcValue)) {
        return matchesStrictComparable(toKey(path), srcValue);
      }
      return function(object) {
        var objValue = get(object, path);
        return (objValue === undefined && objValue === srcValue)
          ? hasIn(object, path)
          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
      };
    }

    /**
     * The base implementation of `_.merge` without support for multiple sources.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} [customizer] The function to customize merged values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMerge(object, source, srcIndex, customizer, stack) {
      if (object === source) {
        return;
      }
      baseFor(source, function(srcValue, key) {
        stack || (stack = new Stack);
        if (isObject(srcValue)) {
          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
        }
        else {
          var newValue = customizer
            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
            : undefined;

          if (newValue === undefined) {
            newValue = srcValue;
          }
          assignMergeValue(object, key, newValue);
        }
      }, keysIn);
    }

    /**
     * A specialized version of `baseMerge` for arrays and objects which performs
     * deep merges and tracks traversed objects enabling objects with circular
     * references to be merged.
     *
     * @private
     * @param {Object} object The destination object.
     * @param {Object} source The source object.
     * @param {string} key The key of the value to merge.
     * @param {number} srcIndex The index of `source`.
     * @param {Function} mergeFunc The function to merge values.
     * @param {Function} [customizer] The function to customize assigned values.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     */
    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
      var objValue = safeGet(object, key),
          srcValue = safeGet(source, key),
          stacked = stack.get(srcValue);

      if (stacked) {
        assignMergeValue(object, key, stacked);
        return;
      }
      var newValue = customizer
        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
        : undefined;

      var isCommon = newValue === undefined;

      if (isCommon) {
        var isArr = isArray(srcValue),
            isBuff = !isArr && isBuffer(srcValue),
            isTyped = !isArr && !isBuff && isTypedArray(srcValue);

        newValue = srcValue;
        if (isArr || isBuff || isTyped) {
          if (isArray(objValue)) {
            newValue = objValue;
          }
          else if (isArrayLikeObject(objValue)) {
            newValue = copyArray(objValue);
          }
          else if (isBuff) {
            isCommon = false;
            newValue = cloneBuffer(srcValue, true);
          }
          else if (isTyped) {
            isCommon = false;
            newValue = cloneTypedArray(srcValue, true);
          }
          else {
            newValue = [];
          }
        }
        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
          newValue = objValue;
          if (isArguments(objValue)) {
            newValue = toPlainObject(objValue);
          }
          else if (!isObject(objValue) || isFunction(objValue)) {
            newValue = initCloneObject(srcValue);
          }
        }
        else {
          isCommon = false;
        }
      }
      if (isCommon) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, newValue);
        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
        stack['delete'](srcValue);
      }
      assignMergeValue(object, key, newValue);
    }

    /**
     * The base implementation of `_.nth` which doesn't coerce arguments.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {number} n The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     */
    function baseNth(array, n) {
      var length = array.length;
      if (!length) {
        return;
      }
      n += n < 0 ? length : 0;
      return isIndex(n, length) ? array[n] : undefined;
    }

    /**
     * The base implementation of `_.orderBy` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
     * @param {string[]} orders The sort orders of `iteratees`.
     * @returns {Array} Returns the new sorted array.
     */
    function baseOrderBy(collection, iteratees, orders) {
      if (iteratees.length) {
        iteratees = arrayMap(iteratees, function(iteratee) {
          if (isArray(iteratee)) {
            return function(value) {
              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
            }
          }
          return iteratee;
        });
      } else {
        iteratees = [identity];
      }

      var index = -1;
      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));

      var result = baseMap(collection, function(value, key, collection) {
        var criteria = arrayMap(iteratees, function(iteratee) {
          return iteratee(value);
        });
        return { 'criteria': criteria, 'index': ++index, 'value': value };
      });

      return baseSortBy(result, function(object, other) {
        return compareMultiple(object, other, orders);
      });
    }

    /**
     * The base implementation of `_.pick` without support for individual
     * property identifiers.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @returns {Object} Returns the new object.
     */
    function basePick(object, paths) {
      return basePickBy(object, paths, function(value, path) {
        return hasIn(object, path);
      });
    }

    /**
     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Object} object The source object.
     * @param {string[]} paths The property paths to pick.
     * @param {Function} predicate The function invoked per property.
     * @returns {Object} Returns the new object.
     */
    function basePickBy(object, paths, predicate) {
      var index = -1,
          length = paths.length,
          result = {};

      while (++index < length) {
        var path = paths[index],
            value = baseGet(object, path);

        if (predicate(value, path)) {
          baseSet(result, castPath(path, object), value);
        }
      }
      return result;
    }

    /**
     * A specialized version of `baseProperty` which supports deep paths.
     *
     * @private
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     */
    function basePropertyDeep(path) {
      return function(object) {
        return baseGet(object, path);
      };
    }

    /**
     * The base implementation of `_.pullAllBy` without support for iteratee
     * shorthands.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     */
    function basePullAll(array, values, iteratee, comparator) {
      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
          index = -1,
          length = values.length,
          seen = array;

      if (array === values) {
        values = copyArray(values);
      }
      if (iteratee) {
        seen = arrayMap(array, baseUnary(iteratee));
      }
      while (++index < length) {
        var fromIndex = 0,
            value = values[index],
            computed = iteratee ? iteratee(value) : value;

        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
          if (seen !== array) {
            splice.call(seen, fromIndex, 1);
          }
          splice.call(array, fromIndex, 1);
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.pullAt` without support for individual
     * indexes or capturing the removed elements.
     *
     * @private
     * @param {Array} array The array to modify.
     * @param {number[]} indexes The indexes of elements to remove.
     * @returns {Array} Returns `array`.
     */
    function basePullAt(array, indexes) {
      var length = array ? indexes.length : 0,
          lastIndex = length - 1;

      while (length--) {
        var index = indexes[length];
        if (length == lastIndex || index !== previous) {
          var previous = index;
          if (isIndex(index)) {
            splice.call(array, index, 1);
          } else {
            baseUnset(array, index);
          }
        }
      }
      return array;
    }

    /**
     * The base implementation of `_.random` without support for returning
     * floating-point numbers.
     *
     * @private
     * @param {number} lower The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the random number.
     */
    function baseRandom(lower, upper) {
      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
    }

    /**
     * The base implementation of `_.range` and `_.rangeRight` which doesn't
     * coerce arguments.
     *
     * @private
     * @param {number} start The start of the range.
     * @param {number} end The end of the range.
     * @param {number} step The value to increment or decrement by.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the range of numbers.
     */
    function baseRange(start, end, step, fromRight) {
      var index = -1,
          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
          result = Array(length);

      while (length--) {
        result[fromRight ? length : ++index] = start;
        start += step;
      }
      return result;
    }

    /**
     * The base implementation of `_.repeat` which doesn't coerce arguments.
     *
     * @private
     * @param {string} string The string to repeat.
     * @param {number} n The number of times to repeat the string.
     * @returns {string} Returns the repeated string.
     */
    function baseRepeat(string, n) {
      var result = '';
      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
        return result;
      }
      // Leverage the exponentiation by squaring algorithm for a faster repeat.
      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
      do {
        if (n % 2) {
          result += string;
        }
        n = nativeFloor(n / 2);
        if (n) {
          string += string;
        }
      } while (n);

      return result;
    }

    /**
     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     */
    function baseRest(func, start) {
      return setToString(overRest(func, start, identity), func + '');
    }

    /**
     * The base implementation of `_.sample`.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     */
    function baseSample(collection) {
      return arraySample(values(collection));
    }

    /**
     * The base implementation of `_.sampleSize` without param guards.
     *
     * @private
     * @param {Array|Object} collection The collection to sample.
     * @param {number} n The number of elements to sample.
     * @returns {Array} Returns the random elements.
     */
    function baseSampleSize(collection, n) {
      var array = values(collection);
      return shuffleSelf(array, baseClamp(n, 0, array.length));
    }

    /**
     * The base implementation of `_.set`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseSet(object, path, value, customizer) {
      if (!isObject(object)) {
        return object;
      }
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          lastIndex = length - 1,
          nested = object;

      while (nested != null && ++index < length) {
        var key = toKey(path[index]),
            newValue = value;

        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
          return object;
        }

        if (index != lastIndex) {
          var objValue = nested[key];
          newValue = customizer ? customizer(objValue, key, nested) : undefined;
          if (newValue === undefined) {
            newValue = isObject(objValue)
              ? objValue
              : (isIndex(path[index + 1]) ? [] : {});
          }
        }
        assignValue(nested, key, newValue);
        nested = nested[key];
      }
      return object;
    }

    /**
     * The base implementation of `setData` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var baseSetData = !metaMap ? identity : function(func, data) {
      metaMap.set(func, data);
      return func;
    };

    /**
     * The base implementation of `setToString` without support for hot loop shorting.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var baseSetToString = !defineProperty ? identity : function(func, string) {
      return defineProperty(func, 'toString', {
        'configurable': true,
        'enumerable': false,
        'value': constant(string),
        'writable': true
      });
    };

    /**
     * The base implementation of `_.shuffle`.
     *
     * @private
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     */
    function baseShuffle(collection) {
      return shuffleSelf(values(collection));
    }

    /**
     * The base implementation of `_.slice` without an iteratee call guard.
     *
     * @private
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseSlice(array, start, end) {
      var index = -1,
          length = array.length;

      if (start < 0) {
        start = -start > length ? 0 : (length + start);
      }
      end = end > length ? length : end;
      if (end < 0) {
        end += length;
      }
      length = start > end ? 0 : ((end - start) >>> 0);
      start >>>= 0;

      var result = Array(length);
      while (++index < length) {
        result[index] = array[index + start];
      }
      return result;
    }

    /**
     * The base implementation of `_.some` without support for iteratee shorthands.
     *
     * @private
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} predicate The function invoked per iteration.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     */
    function baseSome(collection, predicate) {
      var result;

      baseEach(collection, function(value, index, collection) {
        result = predicate(value, index, collection);
        return !result;
      });
      return !!result;
    }

    /**
     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
     * performs a binary search of `array` to determine the index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndex(array, value, retHighest) {
      var low = 0,
          high = array == null ? low : array.length;

      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
        while (low < high) {
          var mid = (low + high) >>> 1,
              computed = array[mid];

          if (computed !== null && !isSymbol(computed) &&
              (retHighest ? (computed <= value) : (computed < value))) {
            low = mid + 1;
          } else {
            high = mid;
          }
        }
        return high;
      }
      return baseSortedIndexBy(array, value, identity, retHighest);
    }

    /**
     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
     * which invokes `iteratee` for `value` and each element of `array` to compute
     * their sort ranking. The iteratee is invoked with one argument; (value).
     *
     * @private
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} iteratee The iteratee invoked per element.
     * @param {boolean} [retHighest] Specify returning the highest qualified index.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     */
    function baseSortedIndexBy(array, value, iteratee, retHighest) {
      var low = 0,
          high = array == null ? 0 : array.length;
      if (high === 0) {
        return 0;
      }

      value = iteratee(value);
      var valIsNaN = value !== value,
          valIsNull = value === null,
          valIsSymbol = isSymbol(value),
          valIsUndefined = value === undefined;

      while (low < high) {
        var mid = nativeFloor((low + high) / 2),
            computed = iteratee(array[mid]),
            othIsDefined = computed !== undefined,
            othIsNull = computed === null,
            othIsReflexive = computed === computed,
            othIsSymbol = isSymbol(computed);

        if (valIsNaN) {
          var setLow = retHighest || othIsReflexive;
        } else if (valIsUndefined) {
          setLow = othIsReflexive && (retHighest || othIsDefined);
        } else if (valIsNull) {
          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
        } else if (valIsSymbol) {
          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
        } else if (othIsNull || othIsSymbol) {
          setLow = false;
        } else {
          setLow = retHighest ? (computed <= value) : (computed < value);
        }
        if (setLow) {
          low = mid + 1;
        } else {
          high = mid;
        }
      }
      return nativeMin(high, MAX_ARRAY_INDEX);
    }

    /**
     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
     * support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseSortedUniq(array, iteratee) {
      var index = -1,
          length = array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        if (!index || !eq(computed, seen)) {
          var seen = computed;
          result[resIndex++] = value === 0 ? 0 : value;
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.toNumber` which doesn't ensure correct
     * conversions of binary, hexadecimal, or octal string values.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     */
    function baseToNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      return +value;
    }

    /**
     * The base implementation of `_.toString` which doesn't convert nullish
     * values to empty strings.
     *
     * @private
     * @param {*} value The value to process.
     * @returns {string} Returns the string.
     */
    function baseToString(value) {
      // Exit early for strings to avoid a performance hit in some environments.
      if (typeof value == 'string') {
        return value;
      }
      if (isArray(value)) {
        // Recursively convert values (susceptible to call stack limits).
        return arrayMap(value, baseToString) + '';
      }
      if (isSymbol(value)) {
        return symbolToString ? symbolToString.call(value) : '';
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     */
    function baseUniq(array, iteratee, comparator) {
      var index = -1,
          includes = arrayIncludes,
          length = array.length,
          isCommon = true,
          result = [],
          seen = result;

      if (comparator) {
        isCommon = false;
        includes = arrayIncludesWith;
      }
      else if (length >= LARGE_ARRAY_SIZE) {
        var set = iteratee ? null : createSet(array);
        if (set) {
          return setToArray(set);
        }
        isCommon = false;
        includes = cacheHas;
        seen = new SetCache;
      }
      else {
        seen = iteratee ? [] : result;
      }
      outer:
      while (++index < length) {
        var value = array[index],
            computed = iteratee ? iteratee(value) : value;

        value = (comparator || value !== 0) ? value : 0;
        if (isCommon && computed === computed) {
          var seenIndex = seen.length;
          while (seenIndex--) {
            if (seen[seenIndex] === computed) {
              continue outer;
            }
          }
          if (iteratee) {
            seen.push(computed);
          }
          result.push(value);
        }
        else if (!includes(seen, computed, comparator)) {
          if (seen !== result) {
            seen.push(computed);
          }
          result.push(value);
        }
      }
      return result;
    }

    /**
     * The base implementation of `_.unset`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The property path to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     */
    function baseUnset(object, path) {
      path = castPath(path, object);
      object = parent(object, path);
      return object == null || delete object[toKey(last(path))];
    }

    /**
     * The base implementation of `_.update`.
     *
     * @private
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to update.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize path creation.
     * @returns {Object} Returns `object`.
     */
    function baseUpdate(object, path, updater, customizer) {
      return baseSet(object, path, updater(baseGet(object, path)), customizer);
    }

    /**
     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
     * without support for iteratee shorthands.
     *
     * @private
     * @param {Array} array The array to query.
     * @param {Function} predicate The function invoked per iteration.
     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Array} Returns the slice of `array`.
     */
    function baseWhile(array, predicate, isDrop, fromRight) {
      var length = array.length,
          index = fromRight ? length : -1;

      while ((fromRight ? index-- : ++index < length) &&
        predicate(array[index], index, array)) {}

      return isDrop
        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
    }

    /**
     * The base implementation of `wrapperValue` which returns the result of
     * performing a sequence of actions on the unwrapped `value`, where each
     * successive action is supplied the return value of the previous.
     *
     * @private
     * @param {*} value The unwrapped value.
     * @param {Array} actions Actions to perform to resolve the unwrapped value.
     * @returns {*} Returns the resolved value.
     */
    function baseWrapperValue(value, actions) {
      var result = value;
      if (result instanceof LazyWrapper) {
        result = result.value();
      }
      return arrayReduce(actions, function(result, action) {
        return action.func.apply(action.thisArg, arrayPush([result], action.args));
      }, result);
    }

    /**
     * The base implementation of methods like `_.xor`, without support for
     * iteratee shorthands, that accepts an array of arrays to inspect.
     *
     * @private
     * @param {Array} arrays The arrays to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of values.
     */
    function baseXor(arrays, iteratee, comparator) {
      var length = arrays.length;
      if (length < 2) {
        return length ? baseUniq(arrays[0]) : [];
      }
      var index = -1,
          result = Array(length);

      while (++index < length) {
        var array = arrays[index],
            othIndex = -1;

        while (++othIndex < length) {
          if (othIndex != index) {
            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
          }
        }
      }
      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
    }

    /**
     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
     *
     * @private
     * @param {Array} props The property identifiers.
     * @param {Array} values The property values.
     * @param {Function} assignFunc The function to assign values.
     * @returns {Object} Returns the new object.
     */
    function baseZipObject(props, values, assignFunc) {
      var index = -1,
          length = props.length,
          valsLength = values.length,
          result = {};

      while (++index < length) {
        var value = index < valsLength ? values[index] : undefined;
        assignFunc(result, props[index], value);
      }
      return result;
    }

    /**
     * Casts `value` to an empty array if it's not an array like object.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Array|Object} Returns the cast array-like object.
     */
    function castArrayLikeObject(value) {
      return isArrayLikeObject(value) ? value : [];
    }

    /**
     * Casts `value` to `identity` if it's not a function.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {Function} Returns cast function.
     */
    function castFunction(value) {
      return typeof value == 'function' ? value : identity;
    }

    /**
     * Casts `value` to a path array if it's not one.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {Object} [object] The object to query keys on.
     * @returns {Array} Returns the cast property path array.
     */
    function castPath(value, object) {
      if (isArray(value)) {
        return value;
      }
      return isKey(value, object) ? [value] : stringToPath(toString(value));
    }

    /**
     * A `baseRest` alias which can be replaced with `identity` by module
     * replacement plugins.
     *
     * @private
     * @type {Function}
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    var castRest = baseRest;

    /**
     * Casts `array` to a slice if it's needed.
     *
     * @private
     * @param {Array} array The array to inspect.
     * @param {number} start The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the cast slice.
     */
    function castSlice(array, start, end) {
      var length = array.length;
      end = end === undefined ? length : end;
      return (!start && end >= length) ? array : baseSlice(array, start, end);
    }

    /**
     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
     *
     * @private
     * @param {number|Object} id The timer id or timeout object of the timer to clear.
     */
    var clearTimeout = ctxClearTimeout || function(id) {
      return root.clearTimeout(id);
    };

    /**
     * Creates a clone of  `buffer`.
     *
     * @private
     * @param {Buffer} buffer The buffer to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Buffer} Returns the cloned buffer.
     */
    function cloneBuffer(buffer, isDeep) {
      if (isDeep) {
        return buffer.slice();
      }
      var length = buffer.length,
          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);

      buffer.copy(result);
      return result;
    }

    /**
     * Creates a clone of `arrayBuffer`.
     *
     * @private
     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
     * @returns {ArrayBuffer} Returns the cloned array buffer.
     */
    function cloneArrayBuffer(arrayBuffer) {
      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
      return result;
    }

    /**
     * Creates a clone of `dataView`.
     *
     * @private
     * @param {Object} dataView The data view to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned data view.
     */
    function cloneDataView(dataView, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
    }

    /**
     * Creates a clone of `regexp`.
     *
     * @private
     * @param {Object} regexp The regexp to clone.
     * @returns {Object} Returns the cloned regexp.
     */
    function cloneRegExp(regexp) {
      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
      result.lastIndex = regexp.lastIndex;
      return result;
    }

    /**
     * Creates a clone of the `symbol` object.
     *
     * @private
     * @param {Object} symbol The symbol object to clone.
     * @returns {Object} Returns the cloned symbol object.
     */
    function cloneSymbol(symbol) {
      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
    }

    /**
     * Creates a clone of `typedArray`.
     *
     * @private
     * @param {Object} typedArray The typed array to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the cloned typed array.
     */
    function cloneTypedArray(typedArray, isDeep) {
      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
    }

    /**
     * Compares values to sort them in ascending order.
     *
     * @private
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {number} Returns the sort order indicator for `value`.
     */
    function compareAscending(value, other) {
      if (value !== other) {
        var valIsDefined = value !== undefined,
            valIsNull = value === null,
            valIsReflexive = value === value,
            valIsSymbol = isSymbol(value);

        var othIsDefined = other !== undefined,
            othIsNull = other === null,
            othIsReflexive = other === other,
            othIsSymbol = isSymbol(other);

        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
            (valIsNull && othIsDefined && othIsReflexive) ||
            (!valIsDefined && othIsReflexive) ||
            !valIsReflexive) {
          return 1;
        }
        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
            (othIsNull && valIsDefined && valIsReflexive) ||
            (!othIsDefined && valIsReflexive) ||
            !othIsReflexive) {
          return -1;
        }
      }
      return 0;
    }

    /**
     * Used by `_.orderBy` to compare multiple properties of a value to another
     * and stable sort them.
     *
     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
     * specify an order of "desc" for descending or "asc" for ascending sort order
     * of corresponding values.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {boolean[]|string[]} orders The order to sort by for each property.
     * @returns {number} Returns the sort order indicator for `object`.
     */
    function compareMultiple(object, other, orders) {
      var index = -1,
          objCriteria = object.criteria,
          othCriteria = other.criteria,
          length = objCriteria.length,
          ordersLength = orders.length;

      while (++index < length) {
        var result = compareAscending(objCriteria[index], othCriteria[index]);
        if (result) {
          if (index >= ordersLength) {
            return result;
          }
          var order = orders[index];
          return result * (order == 'desc' ? -1 : 1);
        }
      }
      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
      // that causes it, under certain circumstances, to provide the same value for
      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
      // for more details.
      //
      // This also ensures a stable sort in V8 and other engines.
      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
      return object.index - other.index;
    }

    /**
     * Creates an array that is the composition of partially applied arguments,
     * placeholders, and provided arguments into a single array of arguments.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to prepend to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgs(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersLength = holders.length,
          leftIndex = -1,
          leftLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(leftLength + rangeLength),
          isUncurried = !isCurried;

      while (++leftIndex < leftLength) {
        result[leftIndex] = partials[leftIndex];
      }
      while (++argsIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[holders[argsIndex]] = args[argsIndex];
        }
      }
      while (rangeLength--) {
        result[leftIndex++] = args[argsIndex++];
      }
      return result;
    }

    /**
     * This function is like `composeArgs` except that the arguments composition
     * is tailored for `_.partialRight`.
     *
     * @private
     * @param {Array} args The provided arguments.
     * @param {Array} partials The arguments to append to those provided.
     * @param {Array} holders The `partials` placeholder indexes.
     * @params {boolean} [isCurried] Specify composing for a curried function.
     * @returns {Array} Returns the new array of composed arguments.
     */
    function composeArgsRight(args, partials, holders, isCurried) {
      var argsIndex = -1,
          argsLength = args.length,
          holdersIndex = -1,
          holdersLength = holders.length,
          rightIndex = -1,
          rightLength = partials.length,
          rangeLength = nativeMax(argsLength - holdersLength, 0),
          result = Array(rangeLength + rightLength),
          isUncurried = !isCurried;

      while (++argsIndex < rangeLength) {
        result[argsIndex] = args[argsIndex];
      }
      var offset = argsIndex;
      while (++rightIndex < rightLength) {
        result[offset + rightIndex] = partials[rightIndex];
      }
      while (++holdersIndex < holdersLength) {
        if (isUncurried || argsIndex < argsLength) {
          result[offset + holders[holdersIndex]] = args[argsIndex++];
        }
      }
      return result;
    }

    /**
     * Copies the values of `source` to `array`.
     *
     * @private
     * @param {Array} source The array to copy values from.
     * @param {Array} [array=[]] The array to copy values to.
     * @returns {Array} Returns `array`.
     */
    function copyArray(source, array) {
      var index = -1,
          length = source.length;

      array || (array = Array(length));
      while (++index < length) {
        array[index] = source[index];
      }
      return array;
    }

    /**
     * Copies properties of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy properties from.
     * @param {Array} props The property identifiers to copy.
     * @param {Object} [object={}] The object to copy properties to.
     * @param {Function} [customizer] The function to customize copied values.
     * @returns {Object} Returns `object`.
     */
    function copyObject(source, props, object, customizer) {
      var isNew = !object;
      object || (object = {});

      var index = -1,
          length = props.length;

      while (++index < length) {
        var key = props[index];

        var newValue = customizer
          ? customizer(object[key], source[key], key, object, source)
          : undefined;

        if (newValue === undefined) {
          newValue = source[key];
        }
        if (isNew) {
          baseAssignValue(object, key, newValue);
        } else {
          assignValue(object, key, newValue);
        }
      }
      return object;
    }

    /**
     * Copies own symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbols(source, object) {
      return copyObject(source, getSymbols(source), object);
    }

    /**
     * Copies own and inherited symbols of `source` to `object`.
     *
     * @private
     * @param {Object} source The object to copy symbols from.
     * @param {Object} [object={}] The object to copy symbols to.
     * @returns {Object} Returns `object`.
     */
    function copySymbolsIn(source, object) {
      return copyObject(source, getSymbolsIn(source), object);
    }

    /**
     * Creates a function like `_.groupBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} [initializer] The accumulator object initializer.
     * @returns {Function} Returns the new aggregator function.
     */
    function createAggregator(setter, initializer) {
      return function(collection, iteratee) {
        var func = isArray(collection) ? arrayAggregator : baseAggregator,
            accumulator = initializer ? initializer() : {};

        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
      };
    }

    /**
     * Creates a function like `_.assign`.
     *
     * @private
     * @param {Function} assigner The function to assign values.
     * @returns {Function} Returns the new assigner function.
     */
    function createAssigner(assigner) {
      return baseRest(function(object, sources) {
        var index = -1,
            length = sources.length,
            customizer = length > 1 ? sources[length - 1] : undefined,
            guard = length > 2 ? sources[2] : undefined;

        customizer = (assigner.length > 3 && typeof customizer == 'function')
          ? (length--, customizer)
          : undefined;

        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
          customizer = length < 3 ? undefined : customizer;
          length = 1;
        }
        object = Object(object);
        while (++index < length) {
          var source = sources[index];
          if (source) {
            assigner(object, source, index, customizer);
          }
        }
        return object;
      });
    }

    /**
     * Creates a `baseEach` or `baseEachRight` function.
     *
     * @private
     * @param {Function} eachFunc The function to iterate over a collection.
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseEach(eachFunc, fromRight) {
      return function(collection, iteratee) {
        if (collection == null) {
          return collection;
        }
        if (!isArrayLike(collection)) {
          return eachFunc(collection, iteratee);
        }
        var length = collection.length,
            index = fromRight ? length : -1,
            iterable = Object(collection);

        while ((fromRight ? index-- : ++index < length)) {
          if (iteratee(iterable[index], index, iterable) === false) {
            break;
          }
        }
        return collection;
      };
    }

    /**
     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new base function.
     */
    function createBaseFor(fromRight) {
      return function(object, iteratee, keysFunc) {
        var index = -1,
            iterable = Object(object),
            props = keysFunc(object),
            length = props.length;

        while (length--) {
          var key = props[fromRight ? length : ++index];
          if (iteratee(iterable[key], key, iterable) === false) {
            break;
          }
        }
        return object;
      };
    }

    /**
     * Creates a function that wraps `func` to invoke it with the optional `this`
     * binding of `thisArg`.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createBind(func, bitmask, thisArg) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return fn.apply(isBind ? thisArg : this, arguments);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.lowerFirst`.
     *
     * @private
     * @param {string} methodName The name of the `String` case method to use.
     * @returns {Function} Returns the new case function.
     */
    function createCaseFirst(methodName) {
      return function(string) {
        string = toString(string);

        var strSymbols = hasUnicode(string)
          ? stringToArray(string)
          : undefined;

        var chr = strSymbols
          ? strSymbols[0]
          : string.charAt(0);

        var trailing = strSymbols
          ? castSlice(strSymbols, 1).join('')
          : string.slice(1);

        return chr[methodName]() + trailing;
      };
    }

    /**
     * Creates a function like `_.camelCase`.
     *
     * @private
     * @param {Function} callback The function to combine each word.
     * @returns {Function} Returns the new compounder function.
     */
    function createCompounder(callback) {
      return function(string) {
        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
      };
    }

    /**
     * Creates a function that produces an instance of `Ctor` regardless of
     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
     *
     * @private
     * @param {Function} Ctor The constructor to wrap.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCtor(Ctor) {
      return function() {
        // Use a `switch` statement to work with class constructors. See
        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
        // for more details.
        var args = arguments;
        switch (args.length) {
          case 0: return new Ctor;
          case 1: return new Ctor(args[0]);
          case 2: return new Ctor(args[0], args[1]);
          case 3: return new Ctor(args[0], args[1], args[2]);
          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
        }
        var thisBinding = baseCreate(Ctor.prototype),
            result = Ctor.apply(thisBinding, args);

        // Mimic the constructor's `return` behavior.
        // See https://es5.github.io/#x13.2.2 for more details.
        return isObject(result) ? result : thisBinding;
      };
    }

    /**
     * Creates a function that wraps `func` to enable currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {number} arity The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createCurry(func, bitmask, arity) {
      var Ctor = createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length,
            placeholder = getHolder(wrapper);

        while (index--) {
          args[index] = arguments[index];
        }
        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
          ? []
          : replaceHolders(args, placeholder);

        length -= holders.length;
        if (length < arity) {
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, undefined,
            args, holders, undefined, undefined, arity - length);
        }
        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
        return apply(fn, this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.find` or `_.findLast` function.
     *
     * @private
     * @param {Function} findIndexFunc The function to find the collection index.
     * @returns {Function} Returns the new find function.
     */
    function createFind(findIndexFunc) {
      return function(collection, predicate, fromIndex) {
        var iterable = Object(collection);
        if (!isArrayLike(collection)) {
          var iteratee = getIteratee(predicate, 3);
          collection = keys(collection);
          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
        }
        var index = findIndexFunc(collection, predicate, fromIndex);
        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
      };
    }

    /**
     * Creates a `_.flow` or `_.flowRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new flow function.
     */
    function createFlow(fromRight) {
      return flatRest(function(funcs) {
        var length = funcs.length,
            index = length,
            prereq = LodashWrapper.prototype.thru;

        if (fromRight) {
          funcs.reverse();
        }
        while (index--) {
          var func = funcs[index];
          if (typeof func != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT);
          }
          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
            var wrapper = new LodashWrapper([], true);
          }
        }
        index = wrapper ? index : length;
        while (++index < length) {
          func = funcs[index];

          var funcName = getFuncName(func),
              data = funcName == 'wrapper' ? getData(func) : undefined;

          if (data && isLaziable(data[0]) &&
                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
                !data[4].length && data[9] == 1
              ) {
            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
          } else {
            wrapper = (func.length == 1 && isLaziable(func))
              ? wrapper[funcName]()
              : wrapper.thru(func);
          }
        }
        return function() {
          var args = arguments,
              value = args[0];

          if (wrapper && args.length == 1 && isArray(value)) {
            return wrapper.plant(value).value();
          }
          var index = 0,
              result = length ? funcs[index].apply(this, args) : value;

          while (++index < length) {
            result = funcs[index].call(this, result);
          }
          return result;
        };
      });
    }

    /**
     * Creates a function that wraps `func` to invoke it with optional `this`
     * binding of `thisArg`, partial application, and currying.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [partialsRight] The arguments to append to those provided
     *  to the new function.
     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
      var isAry = bitmask & WRAP_ARY_FLAG,
          isBind = bitmask & WRAP_BIND_FLAG,
          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
          isFlip = bitmask & WRAP_FLIP_FLAG,
          Ctor = isBindKey ? undefined : createCtor(func);

      function wrapper() {
        var length = arguments.length,
            args = Array(length),
            index = length;

        while (index--) {
          args[index] = arguments[index];
        }
        if (isCurried) {
          var placeholder = getHolder(wrapper),
              holdersCount = countHolders(args, placeholder);
        }
        if (partials) {
          args = composeArgs(args, partials, holders, isCurried);
        }
        if (partialsRight) {
          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
        }
        length -= holdersCount;
        if (isCurried && length < arity) {
          var newHolders = replaceHolders(args, placeholder);
          return createRecurry(
            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
            args, newHolders, argPos, ary, arity - length
          );
        }
        var thisBinding = isBind ? thisArg : this,
            fn = isBindKey ? thisBinding[func] : func;

        length = args.length;
        if (argPos) {
          args = reorder(args, argPos);
        } else if (isFlip && length > 1) {
          args.reverse();
        }
        if (isAry && ary < length) {
          args.length = ary;
        }
        if (this && this !== root && this instanceof wrapper) {
          fn = Ctor || createCtor(fn);
        }
        return fn.apply(thisBinding, args);
      }
      return wrapper;
    }

    /**
     * Creates a function like `_.invertBy`.
     *
     * @private
     * @param {Function} setter The function to set accumulator values.
     * @param {Function} toIteratee The function to resolve iteratees.
     * @returns {Function} Returns the new inverter function.
     */
    function createInverter(setter, toIteratee) {
      return function(object, iteratee) {
        return baseInverter(object, setter, toIteratee(iteratee), {});
      };
    }

    /**
     * Creates a function that performs a mathematical operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @param {number} [defaultValue] The value used for `undefined` arguments.
     * @returns {Function} Returns the new mathematical operation function.
     */
    function createMathOperation(operator, defaultValue) {
      return function(value, other) {
        var result;
        if (value === undefined && other === undefined) {
          return defaultValue;
        }
        if (value !== undefined) {
          result = value;
        }
        if (other !== undefined) {
          if (result === undefined) {
            return other;
          }
          if (typeof value == 'string' || typeof other == 'string') {
            value = baseToString(value);
            other = baseToString(other);
          } else {
            value = baseToNumber(value);
            other = baseToNumber(other);
          }
          result = operator(value, other);
        }
        return result;
      };
    }

    /**
     * Creates a function like `_.over`.
     *
     * @private
     * @param {Function} arrayFunc The function to iterate over iteratees.
     * @returns {Function} Returns the new over function.
     */
    function createOver(arrayFunc) {
      return flatRest(function(iteratees) {
        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
        return baseRest(function(args) {
          var thisArg = this;
          return arrayFunc(iteratees, function(iteratee) {
            return apply(iteratee, thisArg, args);
          });
        });
      });
    }

    /**
     * Creates the padding for `string` based on `length`. The `chars` string
     * is truncated if the number of characters exceeds `length`.
     *
     * @private
     * @param {number} length The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padding for `string`.
     */
    function createPadding(length, chars) {
      chars = chars === undefined ? ' ' : baseToString(chars);

      var charsLength = chars.length;
      if (charsLength < 2) {
        return charsLength ? baseRepeat(chars, length) : chars;
      }
      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
      return hasUnicode(chars)
        ? castSlice(stringToArray(result), 0, length).join('')
        : result.slice(0, length);
    }

    /**
     * Creates a function that wraps `func` to invoke it with the `this` binding
     * of `thisArg` and `partials` prepended to the arguments it receives.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {Array} partials The arguments to prepend to those provided to
     *  the new function.
     * @returns {Function} Returns the new wrapped function.
     */
    function createPartial(func, bitmask, thisArg, partials) {
      var isBind = bitmask & WRAP_BIND_FLAG,
          Ctor = createCtor(func);

      function wrapper() {
        var argsIndex = -1,
            argsLength = arguments.length,
            leftIndex = -1,
            leftLength = partials.length,
            args = Array(leftLength + argsLength),
            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;

        while (++leftIndex < leftLength) {
          args[leftIndex] = partials[leftIndex];
        }
        while (argsLength--) {
          args[leftIndex++] = arguments[++argsIndex];
        }
        return apply(fn, isBind ? thisArg : this, args);
      }
      return wrapper;
    }

    /**
     * Creates a `_.range` or `_.rangeRight` function.
     *
     * @private
     * @param {boolean} [fromRight] Specify iterating from right to left.
     * @returns {Function} Returns the new range function.
     */
    function createRange(fromRight) {
      return function(start, end, step) {
        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
          end = step = undefined;
        }
        // Ensure the sign of `-0` is preserved.
        start = toFinite(start);
        if (end === undefined) {
          end = start;
          start = 0;
        } else {
          end = toFinite(end);
        }
        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
        return baseRange(start, end, step, fromRight);
      };
    }

    /**
     * Creates a function that performs a relational operation on two values.
     *
     * @private
     * @param {Function} operator The function to perform the operation.
     * @returns {Function} Returns the new relational operation function.
     */
    function createRelationalOperation(operator) {
      return function(value, other) {
        if (!(typeof value == 'string' && typeof other == 'string')) {
          value = toNumber(value);
          other = toNumber(other);
        }
        return operator(value, other);
      };
    }

    /**
     * Creates a function that wraps `func` to continue currying.
     *
     * @private
     * @param {Function} func The function to wrap.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @param {Function} wrapFunc The function to create the `func` wrapper.
     * @param {*} placeholder The placeholder value.
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to prepend to those provided to
     *  the new function.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
      var isCurry = bitmask & WRAP_CURRY_FLAG,
          newHolders = isCurry ? holders : undefined,
          newHoldersRight = isCurry ? undefined : holders,
          newPartials = isCurry ? partials : undefined,
          newPartialsRight = isCurry ? undefined : partials;

      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);

      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
      }
      var newData = [
        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
        newHoldersRight, argPos, ary, arity
      ];

      var result = wrapFunc.apply(undefined, newData);
      if (isLaziable(func)) {
        setData(result, newData);
      }
      result.placeholder = placeholder;
      return setWrapToString(result, func, bitmask);
    }

    /**
     * Creates a function like `_.round`.
     *
     * @private
     * @param {string} methodName The name of the `Math` method to use when rounding.
     * @returns {Function} Returns the new round function.
     */
    function createRound(methodName) {
      var func = Math[methodName];
      return function(number, precision) {
        number = toNumber(number);
        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
        if (precision && nativeIsFinite(number)) {
          // Shift with exponential notation to avoid floating-point issues.
          // See [MDN](https://mdn.io/round#Examples) for more details.
          var pair = (toString(number) + 'e').split('e'),
              value = func(pair[0] + 'e' + (+pair[1] + precision));

          pair = (toString(value) + 'e').split('e');
          return +(pair[0] + 'e' + (+pair[1] - precision));
        }
        return func(number);
      };
    }

    /**
     * Creates a set object of `values`.
     *
     * @private
     * @param {Array} values The values to add to the set.
     * @returns {Object} Returns the new set.
     */
    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
      return new Set(values);
    };

    /**
     * Creates a `_.toPairs` or `_.toPairsIn` function.
     *
     * @private
     * @param {Function} keysFunc The function to get the keys of a given object.
     * @returns {Function} Returns the new pairs function.
     */
    function createToPairs(keysFunc) {
      return function(object) {
        var tag = getTag(object);
        if (tag == mapTag) {
          return mapToArray(object);
        }
        if (tag == setTag) {
          return setToPairs(object);
        }
        return baseToPairs(object, keysFunc(object));
      };
    }

    /**
     * Creates a function that either curries or invokes `func` with optional
     * `this` binding and partially applied arguments.
     *
     * @private
     * @param {Function|string} func The function or method name to wrap.
     * @param {number} bitmask The bitmask flags.
     *    1 - `_.bind`
     *    2 - `_.bindKey`
     *    4 - `_.curry` or `_.curryRight` of a bound function
     *    8 - `_.curry`
     *   16 - `_.curryRight`
     *   32 - `_.partial`
     *   64 - `_.partialRight`
     *  128 - `_.rearg`
     *  256 - `_.ary`
     *  512 - `_.flip`
     * @param {*} [thisArg] The `this` binding of `func`.
     * @param {Array} [partials] The arguments to be partially applied.
     * @param {Array} [holders] The `partials` placeholder indexes.
     * @param {Array} [argPos] The argument positions of the new function.
     * @param {number} [ary] The arity cap of `func`.
     * @param {number} [arity] The arity of `func`.
     * @returns {Function} Returns the new wrapped function.
     */
    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
      if (!isBindKey && typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var length = partials ? partials.length : 0;
      if (!length) {
        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
        partials = holders = undefined;
      }
      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
      arity = arity === undefined ? arity : toInteger(arity);
      length -= holders ? holders.length : 0;

      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
        var partialsRight = partials,
            holdersRight = holders;

        partials = holders = undefined;
      }
      var data = isBindKey ? undefined : getData(func);

      var newData = [
        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
        argPos, ary, arity
      ];

      if (data) {
        mergeData(newData, data);
      }
      func = newData[0];
      bitmask = newData[1];
      thisArg = newData[2];
      partials = newData[3];
      holders = newData[4];
      arity = newData[9] = newData[9] === undefined
        ? (isBindKey ? 0 : func.length)
        : nativeMax(newData[9] - length, 0);

      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
      }
      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
        var result = createBind(func, bitmask, thisArg);
      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
        result = createCurry(func, bitmask, arity);
      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
        result = createPartial(func, bitmask, thisArg, partials);
      } else {
        result = createHybrid.apply(undefined, newData);
      }
      var setter = data ? baseSetData : setData;
      return setWrapToString(setter(result, newData), func, bitmask);
    }

    /**
     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
     * of source objects to the destination object for all destination properties
     * that resolve to `undefined`.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to assign.
     * @param {Object} object The parent object of `objValue`.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsAssignIn(objValue, srcValue, key, object) {
      if (objValue === undefined ||
          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
        return srcValue;
      }
      return objValue;
    }

    /**
     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
     * objects into destination objects that are passed thru.
     *
     * @private
     * @param {*} objValue The destination value.
     * @param {*} srcValue The source value.
     * @param {string} key The key of the property to merge.
     * @param {Object} object The parent object of `objValue`.
     * @param {Object} source The parent object of `srcValue`.
     * @param {Object} [stack] Tracks traversed source values and their merged
     *  counterparts.
     * @returns {*} Returns the value to assign.
     */
    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
      if (isObject(objValue) && isObject(srcValue)) {
        // Recursively merge objects and arrays (susceptible to call stack limits).
        stack.set(srcValue, objValue);
        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
        stack['delete'](srcValue);
      }
      return objValue;
    }

    /**
     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
     * objects.
     *
     * @private
     * @param {*} value The value to inspect.
     * @param {string} key The key of the property to inspect.
     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
     */
    function customOmitClone(value) {
      return isPlainObject(value) ? undefined : value;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for arrays with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Array} array The array to compare.
     * @param {Array} other The other array to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `array` and `other` objects.
     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
     */
    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          arrLength = array.length,
          othLength = other.length;

      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
        return false;
      }
      // Check that cyclic values are equal.
      var arrStacked = stack.get(array);
      var othStacked = stack.get(other);
      if (arrStacked && othStacked) {
        return arrStacked == other && othStacked == array;
      }
      var index = -1,
          result = true,
          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;

      stack.set(array, other);
      stack.set(other, array);

      // Ignore non-index properties.
      while (++index < arrLength) {
        var arrValue = array[index],
            othValue = other[index];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, arrValue, index, other, array, stack)
            : customizer(arrValue, othValue, index, array, other, stack);
        }
        if (compared !== undefined) {
          if (compared) {
            continue;
          }
          result = false;
          break;
        }
        // Recursively compare arrays (susceptible to call stack limits).
        if (seen) {
          if (!arraySome(other, function(othValue, othIndex) {
                if (!cacheHas(seen, othIndex) &&
                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                  return seen.push(othIndex);
                }
              })) {
            result = false;
            break;
          }
        } else if (!(
              arrValue === othValue ||
                equalFunc(arrValue, othValue, bitmask, customizer, stack)
            )) {
          result = false;
          break;
        }
      }
      stack['delete'](array);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for comparing objects of
     * the same `toStringTag`.
     *
     * **Note:** This function only supports comparing values with tags of
     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {string} tag The `toStringTag` of the objects to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
      switch (tag) {
        case dataViewTag:
          if ((object.byteLength != other.byteLength) ||
              (object.byteOffset != other.byteOffset)) {
            return false;
          }
          object = object.buffer;
          other = other.buffer;

        case arrayBufferTag:
          if ((object.byteLength != other.byteLength) ||
              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
            return false;
          }
          return true;

        case boolTag:
        case dateTag:
        case numberTag:
          // Coerce booleans to `1` or `0` and dates to milliseconds.
          // Invalid dates are coerced to `NaN`.
          return eq(+object, +other);

        case errorTag:
          return object.name == other.name && object.message == other.message;

        case regexpTag:
        case stringTag:
          // Coerce regexes to strings and treat strings, primitives and objects,
          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
          // for more details.
          return object == (other + '');

        case mapTag:
          var convert = mapToArray;

        case setTag:
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
          convert || (convert = setToArray);

          if (object.size != other.size && !isPartial) {
            return false;
          }
          // Assume cyclic values are equal.
          var stacked = stack.get(object);
          if (stacked) {
            return stacked == other;
          }
          bitmask |= COMPARE_UNORDERED_FLAG;

          // Recursively compare objects (susceptible to call stack limits).
          stack.set(object, other);
          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
          stack['delete'](object);
          return result;

        case symbolTag:
          if (symbolValueOf) {
            return symbolValueOf.call(object) == symbolValueOf.call(other);
          }
      }
      return false;
    }

    /**
     * A specialized version of `baseIsEqualDeep` for objects with support for
     * partial deep comparisons.
     *
     * @private
     * @param {Object} object The object to compare.
     * @param {Object} other The other object to compare.
     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
     * @param {Function} customizer The function to customize comparisons.
     * @param {Function} equalFunc The function to determine equivalents of values.
     * @param {Object} stack Tracks traversed `object` and `other` objects.
     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
     */
    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
          objProps = getAllKeys(object),
          objLength = objProps.length,
          othProps = getAllKeys(other),
          othLength = othProps.length;

      if (objLength != othLength && !isPartial) {
        return false;
      }
      var index = objLength;
      while (index--) {
        var key = objProps[index];
        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
          return false;
        }
      }
      // Check that cyclic values are equal.
      var objStacked = stack.get(object);
      var othStacked = stack.get(other);
      if (objStacked && othStacked) {
        return objStacked == other && othStacked == object;
      }
      var result = true;
      stack.set(object, other);
      stack.set(other, object);

      var skipCtor = isPartial;
      while (++index < objLength) {
        key = objProps[index];
        var objValue = object[key],
            othValue = other[key];

        if (customizer) {
          var compared = isPartial
            ? customizer(othValue, objValue, key, other, object, stack)
            : customizer(objValue, othValue, key, object, other, stack);
        }
        // Recursively compare objects (susceptible to call stack limits).
        if (!(compared === undefined
              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
              : compared
            )) {
          result = false;
          break;
        }
        skipCtor || (skipCtor = key == 'constructor');
      }
      if (result && !skipCtor) {
        var objCtor = object.constructor,
            othCtor = other.constructor;

        // Non `Object` object instances with different constructors are not equal.
        if (objCtor != othCtor &&
            ('constructor' in object && 'constructor' in other) &&
            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
          result = false;
        }
      }
      stack['delete'](object);
      stack['delete'](other);
      return result;
    }

    /**
     * A specialized version of `baseRest` which flattens the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @returns {Function} Returns the new function.
     */
    function flatRest(func) {
      return setToString(overRest(func, undefined, flatten), func + '');
    }

    /**
     * Creates an array of own enumerable property names and symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeys(object) {
      return baseGetAllKeys(object, keys, getSymbols);
    }

    /**
     * Creates an array of own and inherited enumerable property names and
     * symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names and symbols.
     */
    function getAllKeysIn(object) {
      return baseGetAllKeys(object, keysIn, getSymbolsIn);
    }

    /**
     * Gets metadata for `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {*} Returns the metadata for `func`.
     */
    var getData = !metaMap ? noop : function(func) {
      return metaMap.get(func);
    };

    /**
     * Gets the name of `func`.
     *
     * @private
     * @param {Function} func The function to query.
     * @returns {string} Returns the function name.
     */
    function getFuncName(func) {
      var result = (func.name + ''),
          array = realNames[result],
          length = hasOwnProperty.call(realNames, result) ? array.length : 0;

      while (length--) {
        var data = array[length],
            otherFunc = data.func;
        if (otherFunc == null || otherFunc == func) {
          return data.name;
        }
      }
      return result;
    }

    /**
     * Gets the argument placeholder value for `func`.
     *
     * @private
     * @param {Function} func The function to inspect.
     * @returns {*} Returns the placeholder value.
     */
    function getHolder(func) {
      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
      return object.placeholder;
    }

    /**
     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
     * this function returns the custom method, otherwise it returns `baseIteratee`.
     * If arguments are provided, the chosen function is invoked with them and
     * its result is returned.
     *
     * @private
     * @param {*} [value] The value to convert to an iteratee.
     * @param {number} [arity] The arity of the created iteratee.
     * @returns {Function} Returns the chosen function or its result.
     */
    function getIteratee() {
      var result = lodash.iteratee || iteratee;
      result = result === iteratee ? baseIteratee : result;
      return arguments.length ? result(arguments[0], arguments[1]) : result;
    }

    /**
     * Gets the data for `map`.
     *
     * @private
     * @param {Object} map The map to query.
     * @param {string} key The reference key.
     * @returns {*} Returns the map data.
     */
    function getMapData(map, key) {
      var data = map.__data__;
      return isKeyable(key)
        ? data[typeof key == 'string' ? 'string' : 'hash']
        : data.map;
    }

    /**
     * Gets the property names, values, and compare flags of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the match data of `object`.
     */
    function getMatchData(object) {
      var result = keys(object),
          length = result.length;

      while (length--) {
        var key = result[length],
            value = object[key];

        result[length] = [key, value, isStrictComparable(value)];
      }
      return result;
    }

    /**
     * Gets the native function at `key` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the method to get.
     * @returns {*} Returns the function if it's native, else `undefined`.
     */
    function getNative(object, key) {
      var value = getValue(object, key);
      return baseIsNative(value) ? value : undefined;
    }

    /**
     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the raw `toStringTag`.
     */
    function getRawTag(value) {
      var isOwn = hasOwnProperty.call(value, symToStringTag),
          tag = value[symToStringTag];

      try {
        value[symToStringTag] = undefined;
        var unmasked = true;
      } catch (e) {}

      var result = nativeObjectToString.call(value);
      if (unmasked) {
        if (isOwn) {
          value[symToStringTag] = tag;
        } else {
          delete value[symToStringTag];
        }
      }
      return result;
    }

    /**
     * Creates an array of the own enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
      if (object == null) {
        return [];
      }
      object = Object(object);
      return arrayFilter(nativeGetSymbols(object), function(symbol) {
        return propertyIsEnumerable.call(object, symbol);
      });
    };

    /**
     * Creates an array of the own and inherited enumerable symbols of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of symbols.
     */
    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
      var result = [];
      while (object) {
        arrayPush(result, getSymbols(object));
        object = getPrototype(object);
      }
      return result;
    };

    /**
     * Gets the `toStringTag` of `value`.
     *
     * @private
     * @param {*} value The value to query.
     * @returns {string} Returns the `toStringTag`.
     */
    var getTag = baseGetTag;

    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
        (Map && getTag(new Map) != mapTag) ||
        (Promise && getTag(Promise.resolve()) != promiseTag) ||
        (Set && getTag(new Set) != setTag) ||
        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
      getTag = function(value) {
        var result = baseGetTag(value),
            Ctor = result == objectTag ? value.constructor : undefined,
            ctorString = Ctor ? toSource(Ctor) : '';

        if (ctorString) {
          switch (ctorString) {
            case dataViewCtorString: return dataViewTag;
            case mapCtorString: return mapTag;
            case promiseCtorString: return promiseTag;
            case setCtorString: return setTag;
            case weakMapCtorString: return weakMapTag;
          }
        }
        return result;
      };
    }

    /**
     * Gets the view, applying any `transforms` to the `start` and `end` positions.
     *
     * @private
     * @param {number} start The start of the view.
     * @param {number} end The end of the view.
     * @param {Array} transforms The transformations to apply to the view.
     * @returns {Object} Returns an object containing the `start` and `end`
     *  positions of the view.
     */
    function getView(start, end, transforms) {
      var index = -1,
          length = transforms.length;

      while (++index < length) {
        var data = transforms[index],
            size = data.size;

        switch (data.type) {
          case 'drop':      start += size; break;
          case 'dropRight': end -= size; break;
          case 'take':      end = nativeMin(end, start + size); break;
          case 'takeRight': start = nativeMax(start, end - size); break;
        }
      }
      return { 'start': start, 'end': end };
    }

    /**
     * Extracts wrapper details from the `source` body comment.
     *
     * @private
     * @param {string} source The source to inspect.
     * @returns {Array} Returns the wrapper details.
     */
    function getWrapDetails(source) {
      var match = source.match(reWrapDetails);
      return match ? match[1].split(reSplitDetails) : [];
    }

    /**
     * Checks if `path` exists on `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @param {Function} hasFunc The function to check properties.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     */
    function hasPath(object, path, hasFunc) {
      path = castPath(path, object);

      var index = -1,
          length = path.length,
          result = false;

      while (++index < length) {
        var key = toKey(path[index]);
        if (!(result = object != null && hasFunc(object, key))) {
          break;
        }
        object = object[key];
      }
      if (result || ++index != length) {
        return result;
      }
      length = object == null ? 0 : object.length;
      return !!length && isLength(length) && isIndex(key, length) &&
        (isArray(object) || isArguments(object));
    }

    /**
     * Initializes an array clone.
     *
     * @private
     * @param {Array} array The array to clone.
     * @returns {Array} Returns the initialized clone.
     */
    function initCloneArray(array) {
      var length = array.length,
          result = new array.constructor(length);

      // Add properties assigned by `RegExp#exec`.
      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
        result.index = array.index;
        result.input = array.input;
      }
      return result;
    }

    /**
     * Initializes an object clone.
     *
     * @private
     * @param {Object} object The object to clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneObject(object) {
      return (typeof object.constructor == 'function' && !isPrototype(object))
        ? baseCreate(getPrototype(object))
        : {};
    }

    /**
     * Initializes an object clone based on its `toStringTag`.
     *
     * **Note:** This function only supports cloning values with tags of
     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
     *
     * @private
     * @param {Object} object The object to clone.
     * @param {string} tag The `toStringTag` of the object to clone.
     * @param {boolean} [isDeep] Specify a deep clone.
     * @returns {Object} Returns the initialized clone.
     */
    function initCloneByTag(object, tag, isDeep) {
      var Ctor = object.constructor;
      switch (tag) {
        case arrayBufferTag:
          return cloneArrayBuffer(object);

        case boolTag:
        case dateTag:
          return new Ctor(+object);

        case dataViewTag:
          return cloneDataView(object, isDeep);

        case float32Tag: case float64Tag:
        case int8Tag: case int16Tag: case int32Tag:
        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
          return cloneTypedArray(object, isDeep);

        case mapTag:
          return new Ctor;

        case numberTag:
        case stringTag:
          return new Ctor(object);

        case regexpTag:
          return cloneRegExp(object);

        case setTag:
          return new Ctor;

        case symbolTag:
          return cloneSymbol(object);
      }
    }

    /**
     * Inserts wrapper `details` in a comment at the top of the `source` body.
     *
     * @private
     * @param {string} source The source to modify.
     * @returns {Array} details The details to insert.
     * @returns {string} Returns the modified source.
     */
    function insertWrapDetails(source, details) {
      var length = details.length;
      if (!length) {
        return source;
      }
      var lastIndex = length - 1;
      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
      details = details.join(length > 2 ? ', ' : ' ');
      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
    }

    /**
     * Checks if `value` is a flattenable `arguments` object or array.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
     */
    function isFlattenable(value) {
      return isArray(value) || isArguments(value) ||
        !!(spreadableSymbol && value && value[spreadableSymbol]);
    }

    /**
     * Checks if `value` is a valid array-like index.
     *
     * @private
     * @param {*} value The value to check.
     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
     */
    function isIndex(value, length) {
      var type = typeof value;
      length = length == null ? MAX_SAFE_INTEGER : length;

      return !!length &&
        (type == 'number' ||
          (type != 'symbol' && reIsUint.test(value))) &&
            (value > -1 && value % 1 == 0 && value < length);
    }

    /**
     * Checks if the given arguments are from an iteratee call.
     *
     * @private
     * @param {*} value The potential iteratee value argument.
     * @param {*} index The potential iteratee index or key argument.
     * @param {*} object The potential iteratee object argument.
     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
     *  else `false`.
     */
    function isIterateeCall(value, index, object) {
      if (!isObject(object)) {
        return false;
      }
      var type = typeof index;
      if (type == 'number'
            ? (isArrayLike(object) && isIndex(index, object.length))
            : (type == 'string' && index in object)
          ) {
        return eq(object[index], value);
      }
      return false;
    }

    /**
     * Checks if `value` is a property name and not a property path.
     *
     * @private
     * @param {*} value The value to check.
     * @param {Object} [object] The object to query keys on.
     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
     */
    function isKey(value, object) {
      if (isArray(value)) {
        return false;
      }
      var type = typeof value;
      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
          value == null || isSymbol(value)) {
        return true;
      }
      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
        (object != null && value in Object(object));
    }

    /**
     * Checks if `value` is suitable for use as unique object key.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
     */
    function isKeyable(value) {
      var type = typeof value;
      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
        ? (value !== '__proto__')
        : (value === null);
    }

    /**
     * Checks if `func` has a lazy counterpart.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
     *  else `false`.
     */
    function isLaziable(func) {
      var funcName = getFuncName(func),
          other = lodash[funcName];

      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
        return false;
      }
      if (func === other) {
        return true;
      }
      var data = getData(other);
      return !!data && func === data[0];
    }

    /**
     * Checks if `func` has its source masked.
     *
     * @private
     * @param {Function} func The function to check.
     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
     */
    function isMasked(func) {
      return !!maskSrcKey && (maskSrcKey in func);
    }

    /**
     * Checks if `func` is capable of being masked.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
     */
    var isMaskable = coreJsData ? isFunction : stubFalse;

    /**
     * Checks if `value` is likely a prototype object.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
     */
    function isPrototype(value) {
      var Ctor = value && value.constructor,
          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;

      return value === proto;
    }

    /**
     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` if suitable for strict
     *  equality comparisons, else `false`.
     */
    function isStrictComparable(value) {
      return value === value && !isObject(value);
    }

    /**
     * A specialized version of `matchesProperty` for source values suitable
     * for strict equality comparisons, i.e. `===`.
     *
     * @private
     * @param {string} key The key of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     */
    function matchesStrictComparable(key, srcValue) {
      return function(object) {
        if (object == null) {
          return false;
        }
        return object[key] === srcValue &&
          (srcValue !== undefined || (key in Object(object)));
      };
    }

    /**
     * A specialized version of `_.memoize` which clears the memoized function's
     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
     *
     * @private
     * @param {Function} func The function to have its output memoized.
     * @returns {Function} Returns the new memoized function.
     */
    function memoizeCapped(func) {
      var result = memoize(func, function(key) {
        if (cache.size === MAX_MEMOIZE_SIZE) {
          cache.clear();
        }
        return key;
      });

      var cache = result.cache;
      return result;
    }

    /**
     * Merges the function metadata of `source` into `data`.
     *
     * Merging metadata reduces the number of wrappers used to invoke a function.
     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
     * may be applied regardless of execution order. Methods like `_.ary` and
     * `_.rearg` modify function arguments, making the order in which they are
     * executed important, preventing the merging of metadata. However, we make
     * an exception for a safe combined case where curried functions have `_.ary`
     * and or `_.rearg` applied.
     *
     * @private
     * @param {Array} data The destination metadata.
     * @param {Array} source The source metadata.
     * @returns {Array} Returns `data`.
     */
    function mergeData(data, source) {
      var bitmask = data[1],
          srcBitmask = source[1],
          newBitmask = bitmask | srcBitmask,
          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);

      var isCombo =
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));

      // Exit early if metadata can't be merged.
      if (!(isCommon || isCombo)) {
        return data;
      }
      // Use source `thisArg` if available.
      if (srcBitmask & WRAP_BIND_FLAG) {
        data[2] = source[2];
        // Set when currying a bound function.
        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
      }
      // Compose partial arguments.
      var value = source[3];
      if (value) {
        var partials = data[3];
        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
      }
      // Compose partial right arguments.
      value = source[5];
      if (value) {
        partials = data[5];
        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
      }
      // Use source `argPos` if available.
      value = source[7];
      if (value) {
        data[7] = value;
      }
      // Use source `ary` if it's smaller.
      if (srcBitmask & WRAP_ARY_FLAG) {
        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
      }
      // Use source `arity` if one is not provided.
      if (data[9] == null) {
        data[9] = source[9];
      }
      // Use source `func` and merge bitmasks.
      data[0] = source[0];
      data[1] = newBitmask;

      return data;
    }

    /**
     * This function is like
     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * except that it includes inherited enumerable properties.
     *
     * @private
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     */
    function nativeKeysIn(object) {
      var result = [];
      if (object != null) {
        for (var key in Object(object)) {
          result.push(key);
        }
      }
      return result;
    }

    /**
     * Converts `value` to a string using `Object.prototype.toString`.
     *
     * @private
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     */
    function objectToString(value) {
      return nativeObjectToString.call(value);
    }

    /**
     * A specialized version of `baseRest` which transforms the rest array.
     *
     * @private
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @param {Function} transform The rest array transform.
     * @returns {Function} Returns the new function.
     */
    function overRest(func, start, transform) {
      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
      return function() {
        var args = arguments,
            index = -1,
            length = nativeMax(args.length - start, 0),
            array = Array(length);

        while (++index < length) {
          array[index] = args[start + index];
        }
        index = -1;
        var otherArgs = Array(start + 1);
        while (++index < start) {
          otherArgs[index] = args[index];
        }
        otherArgs[start] = transform(array);
        return apply(func, this, otherArgs);
      };
    }

    /**
     * Gets the parent value at `path` of `object`.
     *
     * @private
     * @param {Object} object The object to query.
     * @param {Array} path The path to get the parent value of.
     * @returns {*} Returns the parent value.
     */
    function parent(object, path) {
      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
    }

    /**
     * Reorder `array` according to the specified indexes where the element at
     * the first index is assigned as the first element, the element at
     * the second index is assigned as the second element, and so on.
     *
     * @private
     * @param {Array} array The array to reorder.
     * @param {Array} indexes The arranged array indexes.
     * @returns {Array} Returns `array`.
     */
    function reorder(array, indexes) {
      var arrLength = array.length,
          length = nativeMin(indexes.length, arrLength),
          oldArray = copyArray(array);

      while (length--) {
        var index = indexes[length];
        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
      }
      return array;
    }

    /**
     * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
     *
     * @private
     * @param {Object} object The object to query.
     * @param {string} key The key of the property to get.
     * @returns {*} Returns the property value.
     */
    function safeGet(object, key) {
      if (key === 'constructor' && typeof object[key] === 'function') {
        return;
      }

      if (key == '__proto__') {
        return;
      }

      return object[key];
    }

    /**
     * Sets metadata for `func`.
     *
     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
     * period of time, it will trip its breaker and transition to an identity
     * function to avoid garbage collection pauses in V8. See
     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
     * for more details.
     *
     * @private
     * @param {Function} func The function to associate metadata with.
     * @param {*} data The metadata.
     * @returns {Function} Returns `func`.
     */
    var setData = shortOut(baseSetData);

    /**
     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
     *
     * @private
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @returns {number|Object} Returns the timer id or timeout object.
     */
    var setTimeout = ctxSetTimeout || function(func, wait) {
      return root.setTimeout(func, wait);
    };

    /**
     * Sets the `toString` method of `func` to return `string`.
     *
     * @private
     * @param {Function} func The function to modify.
     * @param {Function} string The `toString` result.
     * @returns {Function} Returns `func`.
     */
    var setToString = shortOut(baseSetToString);

    /**
     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
     * with wrapper details in a comment at the top of the source body.
     *
     * @private
     * @param {Function} wrapper The function to modify.
     * @param {Function} reference The reference function.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Function} Returns `wrapper`.
     */
    function setWrapToString(wrapper, reference, bitmask) {
      var source = (reference + '');
      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
    }

    /**
     * Creates a function that'll short out and invoke `identity` instead
     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
     * milliseconds.
     *
     * @private
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new shortable function.
     */
    function shortOut(func) {
      var count = 0,
          lastCalled = 0;

      return function() {
        var stamp = nativeNow(),
            remaining = HOT_SPAN - (stamp - lastCalled);

        lastCalled = stamp;
        if (remaining > 0) {
          if (++count >= HOT_COUNT) {
            return arguments[0];
          }
        } else {
          count = 0;
        }
        return func.apply(undefined, arguments);
      };
    }

    /**
     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
     *
     * @private
     * @param {Array} array The array to shuffle.
     * @param {number} [size=array.length] The size of `array`.
     * @returns {Array} Returns `array`.
     */
    function shuffleSelf(array, size) {
      var index = -1,
          length = array.length,
          lastIndex = length - 1;

      size = size === undefined ? length : size;
      while (++index < size) {
        var rand = baseRandom(index, lastIndex),
            value = array[rand];

        array[rand] = array[index];
        array[index] = value;
      }
      array.length = size;
      return array;
    }

    /**
     * Converts `string` to a property path array.
     *
     * @private
     * @param {string} string The string to convert.
     * @returns {Array} Returns the property path array.
     */
    var stringToPath = memoizeCapped(function(string) {
      var result = [];
      if (string.charCodeAt(0) === 46 /* . */) {
        result.push('');
      }
      string.replace(rePropName, function(match, number, quote, subString) {
        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
      });
      return result;
    });

    /**
     * Converts `value` to a string key if it's not a string or symbol.
     *
     * @private
     * @param {*} value The value to inspect.
     * @returns {string|symbol} Returns the key.
     */
    function toKey(value) {
      if (typeof value == 'string' || isSymbol(value)) {
        return value;
      }
      var result = (value + '');
      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
    }

    /**
     * Converts `func` to its source code.
     *
     * @private
     * @param {Function} func The function to convert.
     * @returns {string} Returns the source code.
     */
    function toSource(func) {
      if (func != null) {
        try {
          return funcToString.call(func);
        } catch (e) {}
        try {
          return (func + '');
        } catch (e) {}
      }
      return '';
    }

    /**
     * Updates wrapper `details` based on `bitmask` flags.
     *
     * @private
     * @returns {Array} details The details to modify.
     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
     * @returns {Array} Returns `details`.
     */
    function updateWrapDetails(details, bitmask) {
      arrayEach(wrapFlags, function(pair) {
        var value = '_.' + pair[0];
        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
          details.push(value);
        }
      });
      return details.sort();
    }

    /**
     * Creates a clone of `wrapper`.
     *
     * @private
     * @param {Object} wrapper The wrapper to clone.
     * @returns {Object} Returns the cloned wrapper.
     */
    function wrapperClone(wrapper) {
      if (wrapper instanceof LazyWrapper) {
        return wrapper.clone();
      }
      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
      result.__actions__ = copyArray(wrapper.__actions__);
      result.__index__  = wrapper.__index__;
      result.__values__ = wrapper.__values__;
      return result;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an array of elements split into groups the length of `size`.
     * If `array` can't be split evenly, the final chunk will be the remaining
     * elements.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to process.
     * @param {number} [size=1] The length of each chunk
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the new array of chunks.
     * @example
     *
     * _.chunk(['a', 'b', 'c', 'd'], 2);
     * // => [['a', 'b'], ['c', 'd']]
     *
     * _.chunk(['a', 'b', 'c', 'd'], 3);
     * // => [['a', 'b', 'c'], ['d']]
     */
    function chunk(array, size, guard) {
      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
        size = 1;
      } else {
        size = nativeMax(toInteger(size), 0);
      }
      var length = array == null ? 0 : array.length;
      if (!length || size < 1) {
        return [];
      }
      var index = 0,
          resIndex = 0,
          result = Array(nativeCeil(length / size));

      while (index < length) {
        result[resIndex++] = baseSlice(array, index, (index += size));
      }
      return result;
    }

    /**
     * Creates an array with all falsey values removed. The values `false`, `null`,
     * `0`, `""`, `undefined`, and `NaN` are falsey.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to compact.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.compact([0, 1, false, 2, '', 3]);
     * // => [1, 2, 3]
     */
    function compact(array) {
      var index = -1,
          length = array == null ? 0 : array.length,
          resIndex = 0,
          result = [];

      while (++index < length) {
        var value = array[index];
        if (value) {
          result[resIndex++] = value;
        }
      }
      return result;
    }

    /**
     * Creates a new array concatenating `array` with any additional arrays
     * and/or values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to concatenate.
     * @param {...*} [values] The values to concatenate.
     * @returns {Array} Returns the new concatenated array.
     * @example
     *
     * var array = [1];
     * var other = _.concat(array, 2, [3], [[4]]);
     *
     * console.log(other);
     * // => [1, 2, 3, [4]]
     *
     * console.log(array);
     * // => [1]
     */
    function concat() {
      var length = arguments.length;
      if (!length) {
        return [];
      }
      var args = Array(length - 1),
          array = arguments[0],
          index = length;

      while (index--) {
        args[index - 1] = arguments[index];
      }
      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
    }

    /**
     * Creates an array of `array` values not included in the other given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * **Note:** Unlike `_.pullAll`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.without, _.xor
     * @example
     *
     * _.difference([2, 1], [2, 3]);
     * // => [1]
     */
    var difference = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `iteratee` which
     * is invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var differenceBy = baseRest(function(array, values) {
      var iteratee = last(values);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.difference` except that it accepts `comparator`
     * which is invoked to compare elements of `array` to `values`. The order and
     * references of result values are determined by the first array. The comparator
     * is invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...Array} [values] The values to exclude.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     *
     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }]
     */
    var differenceWith = baseRest(function(array, values) {
      var comparator = last(values);
      if (isArrayLikeObject(comparator)) {
        comparator = undefined;
      }
      return isArrayLikeObject(array)
        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
        : [];
    });

    /**
     * Creates a slice of `array` with `n` elements dropped from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.drop([1, 2, 3]);
     * // => [2, 3]
     *
     * _.drop([1, 2, 3], 2);
     * // => [3]
     *
     * _.drop([1, 2, 3], 5);
     * // => []
     *
     * _.drop([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function drop(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with `n` elements dropped from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to drop.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.dropRight([1, 2, 3]);
     * // => [1, 2]
     *
     * _.dropRight([1, 2, 3], 2);
     * // => [1]
     *
     * _.dropRight([1, 2, 3], 5);
     * // => []
     *
     * _.dropRight([1, 2, 3], 0);
     * // => [1, 2, 3]
     */
    function dropRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the end.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.dropRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropRightWhile(users, ['active', false]);
     * // => objects for ['barney']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropRightWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true, true)
        : [];
    }

    /**
     * Creates a slice of `array` excluding elements dropped from the beginning.
     * Elements are dropped until `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.dropWhile(users, function(o) { return !o.active; });
     * // => objects for ['pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.dropWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.dropWhile(users, ['active', false]);
     * // => objects for ['pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.dropWhile(users, 'active');
     * // => objects for ['barney', 'fred', 'pebbles']
     */
    function dropWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), true)
        : [];
    }

    /**
     * Fills elements of `array` with `value` from `start` up to, but not
     * including, `end`.
     *
     * **Note:** This method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Array
     * @param {Array} array The array to fill.
     * @param {*} value The value to fill `array` with.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.fill(array, 'a');
     * console.log(array);
     * // => ['a', 'a', 'a']
     *
     * _.fill(Array(3), 2);
     * // => [2, 2, 2]
     *
     * _.fill([4, 6, 8, 10], '*', 1, 3);
     * // => [4, '*', '*', 10]
     */
    function fill(array, value, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
        start = 0;
        end = length;
      }
      return baseFill(array, value, start, end);
    }

    /**
     * This method is like `_.find` except that it returns the index of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.findIndex(users, function(o) { return o.user == 'barney'; });
     * // => 0
     *
     * // The `_.matches` iteratee shorthand.
     * _.findIndex(users, { 'user': 'fred', 'active': false });
     * // => 1
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findIndex(users, ['active', false]);
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.findIndex(users, 'active');
     * // => 2
     */
    function findIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index);
    }

    /**
     * This method is like `_.findIndex` except that it iterates over elements
     * of `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the found element, else `-1`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
     * // => 2
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
     * // => 0
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastIndex(users, ['active', false]);
     * // => 2
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastIndex(users, 'active');
     * // => 0
     */
    function findLastIndex(array, predicate, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length - 1;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = fromIndex < 0
          ? nativeMax(length + index, 0)
          : nativeMin(index, length - 1);
      }
      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
    }

    /**
     * Flattens `array` a single level deep.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flatten([1, [2, [3, [4]], 5]]);
     * // => [1, 2, [3, [4]], 5]
     */
    function flatten(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, 1) : [];
    }

    /**
     * Recursively flattens `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * _.flattenDeep([1, [2, [3, [4]], 5]]);
     * // => [1, 2, 3, 4, 5]
     */
    function flattenDeep(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseFlatten(array, INFINITY) : [];
    }

    /**
     * Recursively flatten `array` up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Array
     * @param {Array} array The array to flatten.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * var array = [1, [2, [3, [4]], 5]];
     *
     * _.flattenDepth(array, 1);
     * // => [1, 2, [3, [4]], 5]
     *
     * _.flattenDepth(array, 2);
     * // => [1, 2, 3, [4], 5]
     */
    function flattenDepth(array, depth) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(array, depth);
    }

    /**
     * The inverse of `_.toPairs`; this method returns an object composed
     * from key-value `pairs`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} pairs The key-value pairs.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.fromPairs([['a', 1], ['b', 2]]);
     * // => { 'a': 1, 'b': 2 }
     */
    function fromPairs(pairs) {
      var index = -1,
          length = pairs == null ? 0 : pairs.length,
          result = {};

      while (++index < length) {
        var pair = pairs[index];
        result[pair[0]] = pair[1];
      }
      return result;
    }

    /**
     * Gets the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias first
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the first element of `array`.
     * @example
     *
     * _.head([1, 2, 3]);
     * // => 1
     *
     * _.head([]);
     * // => undefined
     */
    function head(array) {
      return (array && array.length) ? array[0] : undefined;
    }

    /**
     * Gets the index at which the first occurrence of `value` is found in `array`
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. If `fromIndex` is negative, it's used as the
     * offset from the end of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.indexOf([1, 2, 1, 2], 2);
     * // => 1
     *
     * // Search from the `fromIndex`.
     * _.indexOf([1, 2, 1, 2], 2, 2);
     * // => 3
     */
    function indexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = fromIndex == null ? 0 : toInteger(fromIndex);
      if (index < 0) {
        index = nativeMax(length + index, 0);
      }
      return baseIndexOf(array, value, index);
    }

    /**
     * Gets all but the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.initial([1, 2, 3]);
     * // => [1, 2]
     */
    function initial(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 0, -1) : [];
    }

    /**
     * Creates an array of unique values that are included in all given arrays
     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons. The order and references of result values are
     * determined by the first array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersection([2, 1], [2, 3]);
     * // => [2]
     */
    var intersection = baseRest(function(arrays) {
      var mapped = arrayMap(arrays, castArrayLikeObject);
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped)
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `iteratee`
     * which is invoked for each element of each `arrays` to generate the criterion
     * by which they're compared. The order and references of result values are
     * determined by the first array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [2.1]
     *
     * // The `_.property` iteratee shorthand.
     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }]
     */
    var intersectionBy = baseRest(function(arrays) {
      var iteratee = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      if (iteratee === last(mapped)) {
        iteratee = undefined;
      } else {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, getIteratee(iteratee, 2))
        : [];
    });

    /**
     * This method is like `_.intersection` except that it accepts `comparator`
     * which is invoked to compare elements of `arrays`. The order and references
     * of result values are determined by the first array. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of intersecting values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.intersectionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }]
     */
    var intersectionWith = baseRest(function(arrays) {
      var comparator = last(arrays),
          mapped = arrayMap(arrays, castArrayLikeObject);

      comparator = typeof comparator == 'function' ? comparator : undefined;
      if (comparator) {
        mapped.pop();
      }
      return (mapped.length && mapped[0] === arrays[0])
        ? baseIntersection(mapped, undefined, comparator)
        : [];
    });

    /**
     * Converts all elements in `array` into a string separated by `separator`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to convert.
     * @param {string} [separator=','] The element separator.
     * @returns {string} Returns the joined string.
     * @example
     *
     * _.join(['a', 'b', 'c'], '~');
     * // => 'a~b~c'
     */
    function join(array, separator) {
      return array == null ? '' : nativeJoin.call(array, separator);
    }

    /**
     * Gets the last element of `array`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {*} Returns the last element of `array`.
     * @example
     *
     * _.last([1, 2, 3]);
     * // => 3
     */
    function last(array) {
      var length = array == null ? 0 : array.length;
      return length ? array[length - 1] : undefined;
    }

    /**
     * This method is like `_.indexOf` except that it iterates over elements of
     * `array` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=array.length-1] The index to search from.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.lastIndexOf([1, 2, 1, 2], 2);
     * // => 3
     *
     * // Search from the `fromIndex`.
     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
     * // => 1
     */
    function lastIndexOf(array, value, fromIndex) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return -1;
      }
      var index = length;
      if (fromIndex !== undefined) {
        index = toInteger(fromIndex);
        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
      }
      return value === value
        ? strictLastIndexOf(array, value, index)
        : baseFindIndex(array, baseIsNaN, index, true);
    }

    /**
     * Gets the element at index `n` of `array`. If `n` is negative, the nth
     * element from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.11.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=0] The index of the element to return.
     * @returns {*} Returns the nth element of `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     *
     * _.nth(array, 1);
     * // => 'b'
     *
     * _.nth(array, -2);
     * // => 'c';
     */
    function nth(array, n) {
      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
    }

    /**
     * Removes all given values from `array` using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
     * to remove elements from an array by predicate.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...*} [values] The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pull(array, 'a', 'c');
     * console.log(array);
     * // => ['b', 'b']
     */
    var pull = baseRest(pullAll);

    /**
     * This method is like `_.pull` except that it accepts an array of values to remove.
     *
     * **Note:** Unlike `_.difference`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
     *
     * _.pullAll(array, ['a', 'c']);
     * console.log(array);
     * // => ['b', 'b']
     */
    function pullAll(array, values) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values)
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `iteratee` which is
     * invoked for each element of `array` and `values` to generate the criterion
     * by which they're compared. The iteratee is invoked with one argument: (value).
     *
     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
     *
     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
     * console.log(array);
     * // => [{ 'x': 2 }]
     */
    function pullAllBy(array, values, iteratee) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, getIteratee(iteratee, 2))
        : array;
    }

    /**
     * This method is like `_.pullAll` except that it accepts `comparator` which
     * is invoked to compare elements of `array` to `values`. The comparator is
     * invoked with two arguments: (arrVal, othVal).
     *
     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Array} values The values to remove.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
     *
     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
     * console.log(array);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
     */
    function pullAllWith(array, values, comparator) {
      return (array && array.length && values && values.length)
        ? basePullAll(array, values, undefined, comparator)
        : array;
    }

    /**
     * Removes elements from `array` corresponding to `indexes` and returns an
     * array of removed elements.
     *
     * **Note:** Unlike `_.at`, this method mutates `array`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = ['a', 'b', 'c', 'd'];
     * var pulled = _.pullAt(array, [1, 3]);
     *
     * console.log(array);
     * // => ['a', 'c']
     *
     * console.log(pulled);
     * // => ['b', 'd']
     */
    var pullAt = flatRest(function(array, indexes) {
      var length = array == null ? 0 : array.length,
          result = baseAt(array, indexes);

      basePullAt(array, arrayMap(indexes, function(index) {
        return isIndex(index, length) ? +index : index;
      }).sort(compareAscending));

      return result;
    });

    /**
     * Removes all elements from `array` that `predicate` returns truthy for
     * and returns an array of the removed elements. The predicate is invoked
     * with three arguments: (value, index, array).
     *
     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
     * to pull elements from an array by value.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new array of removed elements.
     * @example
     *
     * var array = [1, 2, 3, 4];
     * var evens = _.remove(array, function(n) {
     *   return n % 2 == 0;
     * });
     *
     * console.log(array);
     * // => [1, 3]
     *
     * console.log(evens);
     * // => [2, 4]
     */
    function remove(array, predicate) {
      var result = [];
      if (!(array && array.length)) {
        return result;
      }
      var index = -1,
          indexes = [],
          length = array.length;

      predicate = getIteratee(predicate, 3);
      while (++index < length) {
        var value = array[index];
        if (predicate(value, index, array)) {
          result.push(value);
          indexes.push(index);
        }
      }
      basePullAt(array, indexes);
      return result;
    }

    /**
     * Reverses `array` so that the first element becomes the last, the second
     * element becomes the second to last, and so on.
     *
     * **Note:** This method mutates `array` and is based on
     * [`Array#reverse`](https://mdn.io/Array/reverse).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to modify.
     * @returns {Array} Returns `array`.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _.reverse(array);
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function reverse(array) {
      return array == null ? array : nativeReverse.call(array);
    }

    /**
     * Creates a slice of `array` from `start` up to, but not including, `end`.
     *
     * **Note:** This method is used instead of
     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
     * returned.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to slice.
     * @param {number} [start=0] The start position.
     * @param {number} [end=array.length] The end position.
     * @returns {Array} Returns the slice of `array`.
     */
    function slice(array, start, end) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
        start = 0;
        end = length;
      }
      else {
        start = start == null ? 0 : toInteger(start);
        end = end === undefined ? length : toInteger(end);
      }
      return baseSlice(array, start, end);
    }

    /**
     * Uses a binary search to determine the lowest index at which `value`
     * should be inserted into `array` in order to maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedIndex([30, 50], 40);
     * // => 1
     */
    function sortedIndex(array, value) {
      return baseSortedIndex(array, value);
    }

    /**
     * This method is like `_.sortedIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 0
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
     * // => 0
     */
    function sortedIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
    }

    /**
     * This method is like `_.indexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
     * // => 1
     */
    function sortedIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value);
        if (index < length && eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.sortedIndex` except that it returns the highest
     * index at which `value` should be inserted into `array` in order to
     * maintain its sort order.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
     * // => 4
     */
    function sortedLastIndex(array, value) {
      return baseSortedIndex(array, value, true);
    }

    /**
     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
     * which is invoked for `value` and each element of `array` to compute their
     * sort ranking. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The sorted array to inspect.
     * @param {*} value The value to evaluate.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the index at which `value` should be inserted
     *  into `array`.
     * @example
     *
     * var objects = [{ 'x': 4 }, { 'x': 5 }];
     *
     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
     * // => 1
     *
     * // The `_.property` iteratee shorthand.
     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
     * // => 1
     */
    function sortedLastIndexBy(array, value, iteratee) {
      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
    }

    /**
     * This method is like `_.lastIndexOf` except that it performs a binary
     * search on a sorted `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {*} value The value to search for.
     * @returns {number} Returns the index of the matched value, else `-1`.
     * @example
     *
     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
     * // => 3
     */
    function sortedLastIndexOf(array, value) {
      var length = array == null ? 0 : array.length;
      if (length) {
        var index = baseSortedIndex(array, value, true) - 1;
        if (eq(array[index], value)) {
          return index;
        }
      }
      return -1;
    }

    /**
     * This method is like `_.uniq` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniq([1, 1, 2]);
     * // => [1, 2]
     */
    function sortedUniq(array) {
      return (array && array.length)
        ? baseSortedUniq(array)
        : [];
    }

    /**
     * This method is like `_.uniqBy` except that it's designed and optimized
     * for sorted arrays.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
     * // => [1.1, 2.3]
     */
    function sortedUniqBy(array, iteratee) {
      return (array && array.length)
        ? baseSortedUniq(array, getIteratee(iteratee, 2))
        : [];
    }

    /**
     * Gets all but the first element of `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.tail([1, 2, 3]);
     * // => [2, 3]
     */
    function tail(array) {
      var length = array == null ? 0 : array.length;
      return length ? baseSlice(array, 1, length) : [];
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the beginning.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.take([1, 2, 3]);
     * // => [1]
     *
     * _.take([1, 2, 3], 2);
     * // => [1, 2]
     *
     * _.take([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.take([1, 2, 3], 0);
     * // => []
     */
    function take(array, n, guard) {
      if (!(array && array.length)) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      return baseSlice(array, 0, n < 0 ? 0 : n);
    }

    /**
     * Creates a slice of `array` with `n` elements taken from the end.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {number} [n=1] The number of elements to take.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * _.takeRight([1, 2, 3]);
     * // => [3]
     *
     * _.takeRight([1, 2, 3], 2);
     * // => [2, 3]
     *
     * _.takeRight([1, 2, 3], 5);
     * // => [1, 2, 3]
     *
     * _.takeRight([1, 2, 3], 0);
     * // => []
     */
    function takeRight(array, n, guard) {
      var length = array == null ? 0 : array.length;
      if (!length) {
        return [];
      }
      n = (guard || n === undefined) ? 1 : toInteger(n);
      n = length - n;
      return baseSlice(array, n < 0 ? 0 : n, length);
    }

    /**
     * Creates a slice of `array` with elements taken from the end. Elements are
     * taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': true },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': false }
     * ];
     *
     * _.takeRightWhile(users, function(o) { return !o.active; });
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
     * // => objects for ['pebbles']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeRightWhile(users, ['active', false]);
     * // => objects for ['fred', 'pebbles']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeRightWhile(users, 'active');
     * // => []
     */
    function takeRightWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3), false, true)
        : [];
    }

    /**
     * Creates a slice of `array` with elements taken from the beginning. Elements
     * are taken until `predicate` returns falsey. The predicate is invoked with
     * three arguments: (value, index, array).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Array
     * @param {Array} array The array to query.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the slice of `array`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'active': false },
     *   { 'user': 'fred',    'active': false },
     *   { 'user': 'pebbles', 'active': true }
     * ];
     *
     * _.takeWhile(users, function(o) { return !o.active; });
     * // => objects for ['barney', 'fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.takeWhile(users, { 'user': 'barney', 'active': false });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.takeWhile(users, ['active', false]);
     * // => objects for ['barney', 'fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.takeWhile(users, 'active');
     * // => []
     */
    function takeWhile(array, predicate) {
      return (array && array.length)
        ? baseWhile(array, getIteratee(predicate, 3))
        : [];
    }

    /**
     * Creates an array of unique values, in order, from all given arrays using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.union([2], [1, 2]);
     * // => [2, 1]
     */
    var union = baseRest(function(arrays) {
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
    });

    /**
     * This method is like `_.union` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which uniqueness is computed. Result values are chosen from the first
     * array in which the value occurs. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    var unionBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.union` except that it accepts `comparator` which
     * is invoked to compare elements of `arrays`. Result values are chosen from
     * the first array in which the value occurs. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of combined values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.unionWith(objects, others, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var unionWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
    });

    /**
     * Creates a duplicate-free version of an array, using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons, in which only the first occurrence of each element
     * is kept. The order of result values is determined by the order they occur
     * in the array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniq([2, 1, 2]);
     * // => [2, 1]
     */
    function uniq(array) {
      return (array && array.length) ? baseUniq(array) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * uniqueness is computed. The order of result values is determined by the
     * order they occur in the array. The iteratee is invoked with one argument:
     * (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
     * // => [2.1, 1.2]
     *
     * // The `_.property` iteratee shorthand.
     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 1 }, { 'x': 2 }]
     */
    function uniqBy(array, iteratee) {
      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
    }

    /**
     * This method is like `_.uniq` except that it accepts `comparator` which
     * is invoked to compare elements of `array`. The order of result values is
     * determined by the order they occur in the array.The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new duplicate free array.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.uniqWith(objects, _.isEqual);
     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
     */
    function uniqWith(array, comparator) {
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
    }

    /**
     * This method is like `_.zip` except that it accepts an array of grouped
     * elements and creates an array regrouping the elements to their pre-zip
     * configuration.
     *
     * @static
     * @memberOf _
     * @since 1.2.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     *
     * _.unzip(zipped);
     * // => [['a', 'b'], [1, 2], [true, false]]
     */
    function unzip(array) {
      if (!(array && array.length)) {
        return [];
      }
      var length = 0;
      array = arrayFilter(array, function(group) {
        if (isArrayLikeObject(group)) {
          length = nativeMax(group.length, length);
          return true;
        }
      });
      return baseTimes(length, function(index) {
        return arrayMap(array, baseProperty(index));
      });
    }

    /**
     * This method is like `_.unzip` except that it accepts `iteratee` to specify
     * how regrouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {Array} array The array of grouped elements to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  regrouped values.
     * @returns {Array} Returns the new array of regrouped elements.
     * @example
     *
     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
     * // => [[1, 10, 100], [2, 20, 200]]
     *
     * _.unzipWith(zipped, _.add);
     * // => [3, 30, 300]
     */
    function unzipWith(array, iteratee) {
      if (!(array && array.length)) {
        return [];
      }
      var result = unzip(array);
      if (iteratee == null) {
        return result;
      }
      return arrayMap(result, function(group) {
        return apply(iteratee, undefined, group);
      });
    }

    /**
     * Creates an array excluding all given values using
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * for equality comparisons.
     *
     * **Note:** Unlike `_.pull`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {Array} array The array to inspect.
     * @param {...*} [values] The values to exclude.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.xor
     * @example
     *
     * _.without([2, 1, 2, 3], 1, 2);
     * // => [3]
     */
    var without = baseRest(function(array, values) {
      return isArrayLikeObject(array)
        ? baseDifference(array, values)
        : [];
    });

    /**
     * Creates an array of unique values that is the
     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
     * of the given arrays. The order of result values is determined by the order
     * they occur in the arrays.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @returns {Array} Returns the new array of filtered values.
     * @see _.difference, _.without
     * @example
     *
     * _.xor([2, 1], [2, 3]);
     * // => [1, 3]
     */
    var xor = baseRest(function(arrays) {
      return baseXor(arrayFilter(arrays, isArrayLikeObject));
    });

    /**
     * This method is like `_.xor` except that it accepts `iteratee` which is
     * invoked for each element of each `arrays` to generate the criterion by
     * which by which they're compared. The order of result values is determined
     * by the order they occur in the arrays. The iteratee is invoked with one
     * argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
     * // => [1.2, 3.4]
     *
     * // The `_.property` iteratee shorthand.
     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
     * // => [{ 'x': 2 }]
     */
    var xorBy = baseRest(function(arrays) {
      var iteratee = last(arrays);
      if (isArrayLikeObject(iteratee)) {
        iteratee = undefined;
      }
      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
    });

    /**
     * This method is like `_.xor` except that it accepts `comparator` which is
     * invoked to compare elements of `arrays`. The order of result values is
     * determined by the order they occur in the arrays. The comparator is invoked
     * with two arguments: (arrVal, othVal).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Array
     * @param {...Array} [arrays] The arrays to inspect.
     * @param {Function} [comparator] The comparator invoked per element.
     * @returns {Array} Returns the new array of filtered values.
     * @example
     *
     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
     *
     * _.xorWith(objects, others, _.isEqual);
     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
     */
    var xorWith = baseRest(function(arrays) {
      var comparator = last(arrays);
      comparator = typeof comparator == 'function' ? comparator : undefined;
      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
    });

    /**
     * Creates an array of grouped elements, the first of which contains the
     * first elements of the given arrays, the second of which contains the
     * second elements of the given arrays, and so on.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zip(['a', 'b'], [1, 2], [true, false]);
     * // => [['a', 1, true], ['b', 2, false]]
     */
    var zip = baseRest(unzip);

    /**
     * This method is like `_.fromPairs` except that it accepts two arrays,
     * one of property identifiers and one of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 0.4.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObject(['a', 'b'], [1, 2]);
     * // => { 'a': 1, 'b': 2 }
     */
    function zipObject(props, values) {
      return baseZipObject(props || [], values || [], assignValue);
    }

    /**
     * This method is like `_.zipObject` except that it supports property paths.
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Array
     * @param {Array} [props=[]] The property identifiers.
     * @param {Array} [values=[]] The property values.
     * @returns {Object} Returns the new object.
     * @example
     *
     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
     */
    function zipObjectDeep(props, values) {
      return baseZipObject(props || [], values || [], baseSet);
    }

    /**
     * This method is like `_.zip` except that it accepts `iteratee` to specify
     * how grouped values should be combined. The iteratee is invoked with the
     * elements of each group: (...group).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Array
     * @param {...Array} [arrays] The arrays to process.
     * @param {Function} [iteratee=_.identity] The function to combine
     *  grouped values.
     * @returns {Array} Returns the new array of grouped elements.
     * @example
     *
     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
     *   return a + b + c;
     * });
     * // => [111, 222]
     */
    var zipWith = baseRest(function(arrays) {
      var length = arrays.length,
          iteratee = length > 1 ? arrays[length - 1] : undefined;

      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
      return unzipWith(arrays, iteratee);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
     * chain sequences enabled. The result of such sequences must be unwrapped
     * with `_#value`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Seq
     * @param {*} value The value to wrap.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36 },
     *   { 'user': 'fred',    'age': 40 },
     *   { 'user': 'pebbles', 'age': 1 }
     * ];
     *
     * var youngest = _
     *   .chain(users)
     *   .sortBy('age')
     *   .map(function(o) {
     *     return o.user + ' is ' + o.age;
     *   })
     *   .head()
     *   .value();
     * // => 'pebbles is 1'
     */
    function chain(value) {
      var result = lodash(value);
      result.__chain__ = true;
      return result;
    }

    /**
     * This method invokes `interceptor` and returns `value`. The interceptor
     * is invoked with one argument; (value). The purpose of this method is to
     * "tap into" a method chain sequence in order to modify intermediate results.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns `value`.
     * @example
     *
     * _([1, 2, 3])
     *  .tap(function(array) {
     *    // Mutate input array.
     *    array.pop();
     *  })
     *  .reverse()
     *  .value();
     * // => [2, 1]
     */
    function tap(value, interceptor) {
      interceptor(value);
      return value;
    }

    /**
     * This method is like `_.tap` except that it returns the result of `interceptor`.
     * The purpose of this method is to "pass thru" values replacing intermediate
     * results in a method chain sequence.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Seq
     * @param {*} value The value to provide to `interceptor`.
     * @param {Function} interceptor The function to invoke.
     * @returns {*} Returns the result of `interceptor`.
     * @example
     *
     * _('  abc  ')
     *  .chain()
     *  .trim()
     *  .thru(function(value) {
     *    return [value];
     *  })
     *  .value();
     * // => ['abc']
     */
    function thru(value, interceptor) {
      return interceptor(value);
    }

    /**
     * This method is the wrapper version of `_.at`.
     *
     * @name at
     * @memberOf _
     * @since 1.0.0
     * @category Seq
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _(object).at(['a[0].b.c', 'a[1]']).value();
     * // => [3, 4]
     */
    var wrapperAt = flatRest(function(paths) {
      var length = paths.length,
          start = length ? paths[0] : 0,
          value = this.__wrapped__,
          interceptor = function(object) { return baseAt(object, paths); };

      if (length > 1 || this.__actions__.length ||
          !(value instanceof LazyWrapper) || !isIndex(start)) {
        return this.thru(interceptor);
      }
      value = value.slice(start, +start + (length ? 1 : 0));
      value.__actions__.push({
        'func': thru,
        'args': [interceptor],
        'thisArg': undefined
      });
      return new LodashWrapper(value, this.__chain__).thru(function(array) {
        if (length && !array.length) {
          array.push(undefined);
        }
        return array;
      });
    });

    /**
     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
     *
     * @name chain
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 40 }
     * ];
     *
     * // A sequence without explicit chaining.
     * _(users).head();
     * // => { 'user': 'barney', 'age': 36 }
     *
     * // A sequence with explicit chaining.
     * _(users)
     *   .chain()
     *   .head()
     *   .pick('user')
     *   .value();
     * // => { 'user': 'barney' }
     */
    function wrapperChain() {
      return chain(this);
    }

    /**
     * Executes the chain sequence and returns the wrapped result.
     *
     * @name commit
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2];
     * var wrapped = _(array).push(3);
     *
     * console.log(array);
     * // => [1, 2]
     *
     * wrapped = wrapped.commit();
     * console.log(array);
     * // => [1, 2, 3]
     *
     * wrapped.last();
     * // => 3
     *
     * console.log(array);
     * // => [1, 2, 3]
     */
    function wrapperCommit() {
      return new LodashWrapper(this.value(), this.__chain__);
    }

    /**
     * Gets the next value on a wrapped object following the
     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
     *
     * @name next
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the next iterator value.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 1 }
     *
     * wrapped.next();
     * // => { 'done': false, 'value': 2 }
     *
     * wrapped.next();
     * // => { 'done': true, 'value': undefined }
     */
    function wrapperNext() {
      if (this.__values__ === undefined) {
        this.__values__ = toArray(this.value());
      }
      var done = this.__index__ >= this.__values__.length,
          value = done ? undefined : this.__values__[this.__index__++];

      return { 'done': done, 'value': value };
    }

    /**
     * Enables the wrapper to be iterable.
     *
     * @name Symbol.iterator
     * @memberOf _
     * @since 4.0.0
     * @category Seq
     * @returns {Object} Returns the wrapper object.
     * @example
     *
     * var wrapped = _([1, 2]);
     *
     * wrapped[Symbol.iterator]() === wrapped;
     * // => true
     *
     * Array.from(wrapped);
     * // => [1, 2]
     */
    function wrapperToIterator() {
      return this;
    }

    /**
     * Creates a clone of the chain sequence planting `value` as the wrapped value.
     *
     * @name plant
     * @memberOf _
     * @since 3.2.0
     * @category Seq
     * @param {*} value The value to plant.
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var wrapped = _([1, 2]).map(square);
     * var other = wrapped.plant([3, 4]);
     *
     * other.value();
     * // => [9, 16]
     *
     * wrapped.value();
     * // => [1, 4]
     */
    function wrapperPlant(value) {
      var result,
          parent = this;

      while (parent instanceof baseLodash) {
        var clone = wrapperClone(parent);
        clone.__index__ = 0;
        clone.__values__ = undefined;
        if (result) {
          previous.__wrapped__ = clone;
        } else {
          result = clone;
        }
        var previous = clone;
        parent = parent.__wrapped__;
      }
      previous.__wrapped__ = value;
      return result;
    }

    /**
     * This method is the wrapper version of `_.reverse`.
     *
     * **Note:** This method mutates the wrapped array.
     *
     * @name reverse
     * @memberOf _
     * @since 0.1.0
     * @category Seq
     * @returns {Object} Returns the new `lodash` wrapper instance.
     * @example
     *
     * var array = [1, 2, 3];
     *
     * _(array).reverse().value()
     * // => [3, 2, 1]
     *
     * console.log(array);
     * // => [3, 2, 1]
     */
    function wrapperReverse() {
      var value = this.__wrapped__;
      if (value instanceof LazyWrapper) {
        var wrapped = value;
        if (this.__actions__.length) {
          wrapped = new LazyWrapper(this);
        }
        wrapped = wrapped.reverse();
        wrapped.__actions__.push({
          'func': thru,
          'args': [reverse],
          'thisArg': undefined
        });
        return new LodashWrapper(wrapped, this.__chain__);
      }
      return this.thru(reverse);
    }

    /**
     * Executes the chain sequence to resolve the unwrapped value.
     *
     * @name value
     * @memberOf _
     * @since 0.1.0
     * @alias toJSON, valueOf
     * @category Seq
     * @returns {*} Returns the resolved unwrapped value.
     * @example
     *
     * _([1, 2, 3]).value();
     * // => [1, 2, 3]
     */
    function wrapperValue() {
      return baseWrapperValue(this.__wrapped__, this.__actions__);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the number of times the key was returned by `iteratee`. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.countBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': 1, '6': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.countBy(['one', 'two', 'three'], 'length');
     * // => { '3': 2, '5': 1 }
     */
    var countBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        ++result[key];
      } else {
        baseAssignValue(result, key, 1);
      }
    });

    /**
     * Checks if `predicate` returns truthy for **all** elements of `collection`.
     * Iteration is stopped once `predicate` returns falsey. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * **Note:** This method returns `true` for
     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
     * elements of empty collections.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if all elements pass the predicate check,
     *  else `false`.
     * @example
     *
     * _.every([true, 1, null, 'yes'], Boolean);
     * // => false
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.every(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.every(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.every(users, 'active');
     * // => false
     */
    function every(collection, predicate, guard) {
      var func = isArray(collection) ? arrayEvery : baseEvery;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning an array of all elements
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * **Note:** Unlike `_.remove`, this method returns a new array.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.reject
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * _.filter(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, { 'age': 36, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.filter(users, 'active');
     * // => objects for ['barney']
     *
     * // Combining several predicates using `_.overEvery` or `_.overSome`.
     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
     * // => objects for ['fred', 'barney']
     */
    function filter(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Iterates over elements of `collection`, returning the first element
     * `predicate` returns truthy for. The predicate is invoked with three
     * arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=0] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': true },
     *   { 'user': 'fred',    'age': 40, 'active': false },
     *   { 'user': 'pebbles', 'age': 1,  'active': true }
     * ];
     *
     * _.find(users, function(o) { return o.age < 40; });
     * // => object for 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.find(users, { 'age': 1, 'active': true });
     * // => object for 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.find(users, ['active', false]);
     * // => object for 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.find(users, 'active');
     * // => object for 'barney'
     */
    var find = createFind(findIndex);

    /**
     * This method is like `_.find` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param {number} [fromIndex=collection.length-1] The index to search from.
     * @returns {*} Returns the matched element, else `undefined`.
     * @example
     *
     * _.findLast([1, 2, 3, 4], function(n) {
     *   return n % 2 == 1;
     * });
     * // => 3
     */
    var findLast = createFind(findLastIndex);

    /**
     * Creates a flattened array of values by running each element in `collection`
     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
     * with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [n, n];
     * }
     *
     * _.flatMap([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMap(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), 1);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDeep([1, 2], duplicate);
     * // => [1, 1, 2, 2]
     */
    function flatMapDeep(collection, iteratee) {
      return baseFlatten(map(collection, iteratee), INFINITY);
    }

    /**
     * This method is like `_.flatMap` except that it recursively flattens the
     * mapped results up to `depth` times.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {number} [depth=1] The maximum recursion depth.
     * @returns {Array} Returns the new flattened array.
     * @example
     *
     * function duplicate(n) {
     *   return [[[n, n]]];
     * }
     *
     * _.flatMapDepth([1, 2], duplicate, 2);
     * // => [[1, 1], [2, 2]]
     */
    function flatMapDepth(collection, iteratee, depth) {
      depth = depth === undefined ? 1 : toInteger(depth);
      return baseFlatten(map(collection, iteratee), depth);
    }

    /**
     * Iterates over elements of `collection` and invokes `iteratee` for each element.
     * The iteratee is invoked with three arguments: (value, index|key, collection).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * **Note:** As with other "Collections" methods, objects with a "length"
     * property are iterated like arrays. To avoid this behavior use `_.forIn`
     * or `_.forOwn` for object iteration.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @alias each
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEachRight
     * @example
     *
     * _.forEach([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `1` then `2`.
     *
     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forEach(collection, iteratee) {
      var func = isArray(collection) ? arrayEach : baseEach;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forEach` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @alias eachRight
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array|Object} Returns `collection`.
     * @see _.forEach
     * @example
     *
     * _.forEachRight([1, 2], function(value) {
     *   console.log(value);
     * });
     * // => Logs `2` then `1`.
     */
    function forEachRight(collection, iteratee) {
      var func = isArray(collection) ? arrayEachRight : baseEachRight;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The order of grouped values
     * is determined by the order they occur in `collection`. The corresponding
     * value of each key is an array of elements responsible for generating the
     * key. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
     * // => { '4': [4.2], '6': [6.1, 6.3] }
     *
     * // The `_.property` iteratee shorthand.
     * _.groupBy(['one', 'two', 'three'], 'length');
     * // => { '3': ['one', 'two'], '5': ['three'] }
     */
    var groupBy = createAggregator(function(result, value, key) {
      if (hasOwnProperty.call(result, key)) {
        result[key].push(value);
      } else {
        baseAssignValue(result, key, [value]);
      }
    });

    /**
     * Checks if `value` is in `collection`. If `collection` is a string, it's
     * checked for a substring of `value`, otherwise
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * is used for equality comparisons. If `fromIndex` is negative, it's used as
     * the offset from the end of `collection`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @param {*} value The value to search for.
     * @param {number} [fromIndex=0] The index to search from.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {boolean} Returns `true` if `value` is found, else `false`.
     * @example
     *
     * _.includes([1, 2, 3], 1);
     * // => true
     *
     * _.includes([1, 2, 3], 1, 2);
     * // => false
     *
     * _.includes({ 'a': 1, 'b': 2 }, 1);
     * // => true
     *
     * _.includes('abcd', 'bc');
     * // => true
     */
    function includes(collection, value, fromIndex, guard) {
      collection = isArrayLike(collection) ? collection : values(collection);
      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;

      var length = collection.length;
      if (fromIndex < 0) {
        fromIndex = nativeMax(length + fromIndex, 0);
      }
      return isString(collection)
        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
    }

    /**
     * Invokes the method at `path` of each element in `collection`, returning
     * an array of the results of each invoked method. Any additional arguments
     * are provided to each invoked method. If `path` is a function, it's invoked
     * for, and `this` bound to, each element in `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array|Function|string} path The path of the method to invoke or
     *  the function invoked per iteration.
     * @param {...*} [args] The arguments to invoke each method with.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
     * // => [[1, 5, 7], [1, 2, 3]]
     *
     * _.invokeMap([123, 456], String.prototype.split, '');
     * // => [['1', '2', '3'], ['4', '5', '6']]
     */
    var invokeMap = baseRest(function(collection, path, args) {
      var index = -1,
          isFunc = typeof path == 'function',
          result = isArrayLike(collection) ? Array(collection.length) : [];

      baseEach(collection, function(value) {
        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
      });
      return result;
    });

    /**
     * Creates an object composed of keys generated from the results of running
     * each element of `collection` thru `iteratee`. The corresponding value of
     * each key is the last element responsible for generating the key. The
     * iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
     * @returns {Object} Returns the composed aggregate object.
     * @example
     *
     * var array = [
     *   { 'dir': 'left', 'code': 97 },
     *   { 'dir': 'right', 'code': 100 }
     * ];
     *
     * _.keyBy(array, function(o) {
     *   return String.fromCharCode(o.code);
     * });
     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
     *
     * _.keyBy(array, 'dir');
     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
     */
    var keyBy = createAggregator(function(result, value, key) {
      baseAssignValue(result, key, value);
    });

    /**
     * Creates an array of values by running each element in `collection` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
     *
     * The guarded methods are:
     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new mapped array.
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * _.map([4, 8], square);
     * // => [16, 64]
     *
     * _.map({ 'a': 4, 'b': 8 }, square);
     * // => [16, 64] (iteration order is not guaranteed)
     *
     * var users = [
     *   { 'user': 'barney' },
     *   { 'user': 'fred' }
     * ];
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, 'user');
     * // => ['barney', 'fred']
     */
    function map(collection, iteratee) {
      var func = isArray(collection) ? arrayMap : baseMap;
      return func(collection, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.sortBy` except that it allows specifying the sort
     * orders of the iteratees to sort by. If `orders` is unspecified, all values
     * are sorted in ascending order. Otherwise, specify an order of "desc" for
     * descending or "asc" for ascending sort order of corresponding values.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @param {string[]} [orders] The sort orders of `iteratees`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 34 },
     *   { 'user': 'fred',   'age': 40 },
     *   { 'user': 'barney', 'age': 36 }
     * ];
     *
     * // Sort by `user` in ascending order and by `age` in descending order.
     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
     */
    function orderBy(collection, iteratees, orders, guard) {
      if (collection == null) {
        return [];
      }
      if (!isArray(iteratees)) {
        iteratees = iteratees == null ? [] : [iteratees];
      }
      orders = guard ? undefined : orders;
      if (!isArray(orders)) {
        orders = orders == null ? [] : [orders];
      }
      return baseOrderBy(collection, iteratees, orders);
    }

    /**
     * Creates an array of elements split into two groups, the first of which
     * contains elements `predicate` returns truthy for, the second of which
     * contains elements `predicate` returns falsey for. The predicate is
     * invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of grouped elements.
     * @example
     *
     * var users = [
     *   { 'user': 'barney',  'age': 36, 'active': false },
     *   { 'user': 'fred',    'age': 40, 'active': true },
     *   { 'user': 'pebbles', 'age': 1,  'active': false }
     * ];
     *
     * _.partition(users, function(o) { return o.active; });
     * // => objects for [['fred'], ['barney', 'pebbles']]
     *
     * // The `_.matches` iteratee shorthand.
     * _.partition(users, { 'age': 1, 'active': false });
     * // => objects for [['pebbles'], ['barney', 'fred']]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.partition(users, ['active', false]);
     * // => objects for [['barney', 'pebbles'], ['fred']]
     *
     * // The `_.property` iteratee shorthand.
     * _.partition(users, 'active');
     * // => objects for [['fred'], ['barney', 'pebbles']]
     */
    var partition = createAggregator(function(result, value, key) {
      result[key ? 0 : 1].push(value);
    }, function() { return [[], []]; });

    /**
     * Reduces `collection` to a value which is the accumulated result of running
     * each element in `collection` thru `iteratee`, where each successive
     * invocation is supplied the return value of the previous. If `accumulator`
     * is not given, the first element of `collection` is used as the initial
     * value. The iteratee is invoked with four arguments:
     * (accumulator, value, index|key, collection).
     *
     * Many lodash methods are guarded to work as iteratees for methods like
     * `_.reduce`, `_.reduceRight`, and `_.transform`.
     *
     * The guarded methods are:
     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
     * and `sortBy`
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduceRight
     * @example
     *
     * _.reduce([1, 2], function(sum, n) {
     *   return sum + n;
     * }, 0);
     * // => 3
     *
     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     *   return result;
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
     */
    function reduce(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduce : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
    }

    /**
     * This method is like `_.reduce` except that it iterates over elements of
     * `collection` from right to left.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The initial value.
     * @returns {*} Returns the accumulated value.
     * @see _.reduce
     * @example
     *
     * var array = [[0, 1], [2, 3], [4, 5]];
     *
     * _.reduceRight(array, function(flattened, other) {
     *   return flattened.concat(other);
     * }, []);
     * // => [4, 5, 2, 3, 0, 1]
     */
    function reduceRight(collection, iteratee, accumulator) {
      var func = isArray(collection) ? arrayReduceRight : baseReduce,
          initAccum = arguments.length < 3;

      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
    }

    /**
     * The opposite of `_.filter`; this method returns the elements of `collection`
     * that `predicate` does **not** return truthy for.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the new filtered array.
     * @see _.filter
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': false },
     *   { 'user': 'fred',   'age': 40, 'active': true }
     * ];
     *
     * _.reject(users, function(o) { return !o.active; });
     * // => objects for ['fred']
     *
     * // The `_.matches` iteratee shorthand.
     * _.reject(users, { 'age': 40, 'active': true });
     * // => objects for ['barney']
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.reject(users, ['active', false]);
     * // => objects for ['fred']
     *
     * // The `_.property` iteratee shorthand.
     * _.reject(users, 'active');
     * // => objects for ['barney']
     */
    function reject(collection, predicate) {
      var func = isArray(collection) ? arrayFilter : baseFilter;
      return func(collection, negate(getIteratee(predicate, 3)));
    }

    /**
     * Gets a random element from `collection`.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @returns {*} Returns the random element.
     * @example
     *
     * _.sample([1, 2, 3, 4]);
     * // => 2
     */
    function sample(collection) {
      var func = isArray(collection) ? arraySample : baseSample;
      return func(collection);
    }

    /**
     * Gets `n` random elements at unique keys from `collection` up to the
     * size of `collection`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Collection
     * @param {Array|Object} collection The collection to sample.
     * @param {number} [n=1] The number of elements to sample.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the random elements.
     * @example
     *
     * _.sampleSize([1, 2, 3], 2);
     * // => [3, 1]
     *
     * _.sampleSize([1, 2, 3], 4);
     * // => [2, 3, 1]
     */
    function sampleSize(collection, n, guard) {
      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
      return func(collection, n);
    }

    /**
     * Creates an array of shuffled values, using a version of the
     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to shuffle.
     * @returns {Array} Returns the new shuffled array.
     * @example
     *
     * _.shuffle([1, 2, 3, 4]);
     * // => [4, 1, 3, 2]
     */
    function shuffle(collection) {
      var func = isArray(collection) ? arrayShuffle : baseShuffle;
      return func(collection);
    }

    /**
     * Gets the size of `collection` by returning its length for array-like
     * values or the number of own enumerable string keyed properties for objects.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object|string} collection The collection to inspect.
     * @returns {number} Returns the collection size.
     * @example
     *
     * _.size([1, 2, 3]);
     * // => 3
     *
     * _.size({ 'a': 1, 'b': 2 });
     * // => 2
     *
     * _.size('pebbles');
     * // => 7
     */
    function size(collection) {
      if (collection == null) {
        return 0;
      }
      if (isArrayLike(collection)) {
        return isString(collection) ? stringSize(collection) : collection.length;
      }
      var tag = getTag(collection);
      if (tag == mapTag || tag == setTag) {
        return collection.size;
      }
      return baseKeys(collection).length;
    }

    /**
     * Checks if `predicate` returns truthy for **any** element of `collection`.
     * Iteration is stopped once `predicate` returns truthy. The predicate is
     * invoked with three arguments: (value, index|key, collection).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {boolean} Returns `true` if any element passes the predicate check,
     *  else `false`.
     * @example
     *
     * _.some([null, 0, 'yes', false], Boolean);
     * // => true
     *
     * var users = [
     *   { 'user': 'barney', 'active': true },
     *   { 'user': 'fred',   'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.some(users, { 'user': 'barney', 'active': false });
     * // => false
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.some(users, ['active', false]);
     * // => true
     *
     * // The `_.property` iteratee shorthand.
     * _.some(users, 'active');
     * // => true
     */
    function some(collection, predicate, guard) {
      var func = isArray(collection) ? arraySome : baseSome;
      if (guard && isIterateeCall(collection, predicate, guard)) {
        predicate = undefined;
      }
      return func(collection, getIteratee(predicate, 3));
    }

    /**
     * Creates an array of elements, sorted in ascending order by the results of
     * running each element in a collection thru each iteratee. This method
     * performs a stable sort, that is, it preserves the original sort order of
     * equal elements. The iteratees are invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Collection
     * @param {Array|Object} collection The collection to iterate over.
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to sort by.
     * @returns {Array} Returns the new sorted array.
     * @example
     *
     * var users = [
     *   { 'user': 'fred',   'age': 48 },
     *   { 'user': 'barney', 'age': 36 },
     *   { 'user': 'fred',   'age': 30 },
     *   { 'user': 'barney', 'age': 34 }
     * ];
     *
     * _.sortBy(users, [function(o) { return o.user; }]);
     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
     *
     * _.sortBy(users, ['user', 'age']);
     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
     */
    var sortBy = baseRest(function(collection, iteratees) {
      if (collection == null) {
        return [];
      }
      var length = iteratees.length;
      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
        iteratees = [];
      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
        iteratees = [iteratees[0]];
      }
      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
    });

    /*------------------------------------------------------------------------*/

    /**
     * Gets the timestamp of the number of milliseconds that have elapsed since
     * the Unix epoch (1 January 1970 00:00:00 UTC).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Date
     * @returns {number} Returns the timestamp.
     * @example
     *
     * _.defer(function(stamp) {
     *   console.log(_.now() - stamp);
     * }, _.now());
     * // => Logs the number of milliseconds it took for the deferred invocation.
     */
    var now = ctxNow || function() {
      return root.Date.now();
    };

    /*------------------------------------------------------------------------*/

    /**
     * The opposite of `_.before`; this method creates a function that invokes
     * `func` once it's called `n` or more times.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {number} n The number of calls before `func` is invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var saves = ['profile', 'settings'];
     *
     * var done = _.after(saves.length, function() {
     *   console.log('done saving!');
     * });
     *
     * _.forEach(saves, function(type) {
     *   asyncSave({ 'type': type, 'complete': done });
     * });
     * // => Logs 'done saving!' after the two async saves have completed.
     */
    function after(n, func) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n < 1) {
          return func.apply(this, arguments);
        }
      };
    }

    /**
     * Creates a function that invokes `func`, with up to `n` arguments,
     * ignoring any additional arguments.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @param {number} [n=func.length] The arity cap.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
     * // => [6, 8, 10]
     */
    function ary(func, n, guard) {
      n = guard ? undefined : n;
      n = (func && n == null) ? func.length : n;
      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
    }

    /**
     * Creates a function that invokes `func`, with the `this` binding and arguments
     * of the created function, while it's called less than `n` times. Subsequent
     * calls to the created function return the result of the last `func` invocation.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {number} n The number of calls at which `func` is no longer invoked.
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * jQuery(element).on('click', _.before(5, addContactToList));
     * // => Allows adding up to 4 contacts to the list.
     */
    function before(n, func) {
      var result;
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      n = toInteger(n);
      return function() {
        if (--n > 0) {
          result = func.apply(this, arguments);
        }
        if (n <= 1) {
          func = undefined;
        }
        return result;
      };
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of `thisArg`
     * and `partials` prepended to the arguments it receives.
     *
     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for partially applied arguments.
     *
     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
     * property of bound functions.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to bind.
     * @param {*} thisArg The `this` binding of `func`.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * function greet(greeting, punctuation) {
     *   return greeting + ' ' + this.user + punctuation;
     * }
     *
     * var object = { 'user': 'fred' };
     *
     * var bound = _.bind(greet, object, 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bind(greet, object, _, '!');
     * bound('hi');
     * // => 'hi fred!'
     */
    var bind = baseRest(function(func, thisArg, partials) {
      var bitmask = WRAP_BIND_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bind));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(func, bitmask, thisArg, partials, holders);
    });

    /**
     * Creates a function that invokes the method at `object[key]` with `partials`
     * prepended to the arguments it receives.
     *
     * This method differs from `_.bind` by allowing bound functions to reference
     * methods that may be redefined or don't yet exist. See
     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
     * for more details.
     *
     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Function
     * @param {Object} object The object to invoke the method on.
     * @param {string} key The key of the method.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new bound function.
     * @example
     *
     * var object = {
     *   'user': 'fred',
     *   'greet': function(greeting, punctuation) {
     *     return greeting + ' ' + this.user + punctuation;
     *   }
     * };
     *
     * var bound = _.bindKey(object, 'greet', 'hi');
     * bound('!');
     * // => 'hi fred!'
     *
     * object.greet = function(greeting, punctuation) {
     *   return greeting + 'ya ' + this.user + punctuation;
     * };
     *
     * bound('!');
     * // => 'hiya fred!'
     *
     * // Bound with placeholders.
     * var bound = _.bindKey(object, 'greet', _, '!');
     * bound('hi');
     * // => 'hiya fred!'
     */
    var bindKey = baseRest(function(object, key, partials) {
      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
      if (partials.length) {
        var holders = replaceHolders(partials, getHolder(bindKey));
        bitmask |= WRAP_PARTIAL_FLAG;
      }
      return createWrap(key, bitmask, object, partials, holders);
    });

    /**
     * Creates a function that accepts arguments of `func` and either invokes
     * `func` returning its result, if at least `arity` number of arguments have
     * been provided, or returns a function that accepts the remaining `func`
     * arguments, and so on. The arity of `func` may be specified if `func.length`
     * is not sufficient.
     *
     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
     * may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curry(abc);
     *
     * curried(1)(2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2)(3);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(1)(_, 3)(2);
     * // => [1, 2, 3]
     */
    function curry(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curry.placeholder;
      return result;
    }

    /**
     * This method is like `_.curry` except that arguments are applied to `func`
     * in the manner of `_.partialRight` instead of `_.partial`.
     *
     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for provided arguments.
     *
     * **Note:** This method doesn't set the "length" property of curried functions.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to curry.
     * @param {number} [arity=func.length] The arity of `func`.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the new curried function.
     * @example
     *
     * var abc = function(a, b, c) {
     *   return [a, b, c];
     * };
     *
     * var curried = _.curryRight(abc);
     *
     * curried(3)(2)(1);
     * // => [1, 2, 3]
     *
     * curried(2, 3)(1);
     * // => [1, 2, 3]
     *
     * curried(1, 2, 3);
     * // => [1, 2, 3]
     *
     * // Curried with placeholders.
     * curried(3)(1, _)(2);
     * // => [1, 2, 3]
     */
    function curryRight(func, arity, guard) {
      arity = guard ? undefined : arity;
      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
      result.placeholder = curryRight.placeholder;
      return result;
    }

    /**
     * Creates a debounced function that delays invoking `func` until after `wait`
     * milliseconds have elapsed since the last time the debounced function was
     * invoked. The debounced function comes with a `cancel` method to cancel
     * delayed `func` invocations and a `flush` method to immediately invoke them.
     * Provide `options` to indicate whether `func` should be invoked on the
     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
     * with the last arguments provided to the debounced function. Subsequent
     * calls to the debounced function return the result of the last `func`
     * invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the debounced function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.debounce` and `_.throttle`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to debounce.
     * @param {number} [wait=0] The number of milliseconds to delay.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=false]
     *  Specify invoking on the leading edge of the timeout.
     * @param {number} [options.maxWait]
     *  The maximum time `func` is allowed to be delayed before it's invoked.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new debounced function.
     * @example
     *
     * // Avoid costly calculations while the window size is in flux.
     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
     *
     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
     * jQuery(element).on('click', _.debounce(sendMail, 300, {
     *   'leading': true,
     *   'trailing': false
     * }));
     *
     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
     * var source = new EventSource('/stream');
     * jQuery(source).on('message', debounced);
     *
     * // Cancel the trailing debounced invocation.
     * jQuery(window).on('popstate', debounced.cancel);
     */
    function debounce(func, wait, options) {
      var lastArgs,
          lastThis,
          maxWait,
          result,
          timerId,
          lastCallTime,
          lastInvokeTime = 0,
          leading = false,
          maxing = false,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      wait = toNumber(wait) || 0;
      if (isObject(options)) {
        leading = !!options.leading;
        maxing = 'maxWait' in options;
        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }

      function invokeFunc(time) {
        var args = lastArgs,
            thisArg = lastThis;

        lastArgs = lastThis = undefined;
        lastInvokeTime = time;
        result = func.apply(thisArg, args);
        return result;
      }

      function leadingEdge(time) {
        // Reset any `maxWait` timer.
        lastInvokeTime = time;
        // Start the timer for the trailing edge.
        timerId = setTimeout(timerExpired, wait);
        // Invoke the leading edge.
        return leading ? invokeFunc(time) : result;
      }

      function remainingWait(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime,
            timeWaiting = wait - timeSinceLastCall;

        return maxing
          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
          : timeWaiting;
      }

      function shouldInvoke(time) {
        var timeSinceLastCall = time - lastCallTime,
            timeSinceLastInvoke = time - lastInvokeTime;

        // Either this is the first call, activity has stopped and we're at the
        // trailing edge, the system time has gone backwards and we're treating
        // it as the trailing edge, or we've hit the `maxWait` limit.
        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
      }

      function timerExpired() {
        var time = now();
        if (shouldInvoke(time)) {
          return trailingEdge(time);
        }
        // Restart the timer.
        timerId = setTimeout(timerExpired, remainingWait(time));
      }

      function trailingEdge(time) {
        timerId = undefined;

        // Only invoke if we have `lastArgs` which means `func` has been
        // debounced at least once.
        if (trailing && lastArgs) {
          return invokeFunc(time);
        }
        lastArgs = lastThis = undefined;
        return result;
      }

      function cancel() {
        if (timerId !== undefined) {
          clearTimeout(timerId);
        }
        lastInvokeTime = 0;
        lastArgs = lastCallTime = lastThis = timerId = undefined;
      }

      function flush() {
        return timerId === undefined ? result : trailingEdge(now());
      }

      function debounced() {
        var time = now(),
            isInvoking = shouldInvoke(time);

        lastArgs = arguments;
        lastThis = this;
        lastCallTime = time;

        if (isInvoking) {
          if (timerId === undefined) {
            return leadingEdge(lastCallTime);
          }
          if (maxing) {
            // Handle invocations in a tight loop.
            clearTimeout(timerId);
            timerId = setTimeout(timerExpired, wait);
            return invokeFunc(lastCallTime);
          }
        }
        if (timerId === undefined) {
          timerId = setTimeout(timerExpired, wait);
        }
        return result;
      }
      debounced.cancel = cancel;
      debounced.flush = flush;
      return debounced;
    }

    /**
     * Defers invoking the `func` until the current call stack has cleared. Any
     * additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to defer.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.defer(function(text) {
     *   console.log(text);
     * }, 'deferred');
     * // => Logs 'deferred' after one millisecond.
     */
    var defer = baseRest(function(func, args) {
      return baseDelay(func, 1, args);
    });

    /**
     * Invokes `func` after `wait` milliseconds. Any additional arguments are
     * provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to delay.
     * @param {number} wait The number of milliseconds to delay invocation.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {number} Returns the timer id.
     * @example
     *
     * _.delay(function(text) {
     *   console.log(text);
     * }, 1000, 'later');
     * // => Logs 'later' after one second.
     */
    var delay = baseRest(function(func, wait, args) {
      return baseDelay(func, toNumber(wait) || 0, args);
    });

    /**
     * Creates a function that invokes `func` with arguments reversed.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to flip arguments for.
     * @returns {Function} Returns the new flipped function.
     * @example
     *
     * var flipped = _.flip(function() {
     *   return _.toArray(arguments);
     * });
     *
     * flipped('a', 'b', 'c', 'd');
     * // => ['d', 'c', 'b', 'a']
     */
    function flip(func) {
      return createWrap(func, WRAP_FLIP_FLAG);
    }

    /**
     * Creates a function that memoizes the result of `func`. If `resolver` is
     * provided, it determines the cache key for storing the result based on the
     * arguments provided to the memoized function. By default, the first argument
     * provided to the memoized function is used as the map cache key. The `func`
     * is invoked with the `this` binding of the memoized function.
     *
     * **Note:** The cache is exposed as the `cache` property on the memoized
     * function. Its creation may be customized by replacing the `_.memoize.Cache`
     * constructor with one whose instances implement the
     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to have its output memoized.
     * @param {Function} [resolver] The function to resolve the cache key.
     * @returns {Function} Returns the new memoized function.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     * var other = { 'c': 3, 'd': 4 };
     *
     * var values = _.memoize(_.values);
     * values(object);
     * // => [1, 2]
     *
     * values(other);
     * // => [3, 4]
     *
     * object.a = 2;
     * values(object);
     * // => [1, 2]
     *
     * // Modify the result cache.
     * values.cache.set(object, ['a', 'b']);
     * values(object);
     * // => ['a', 'b']
     *
     * // Replace `_.memoize.Cache`.
     * _.memoize.Cache = WeakMap;
     */
    function memoize(func, resolver) {
      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      var memoized = function() {
        var args = arguments,
            key = resolver ? resolver.apply(this, args) : args[0],
            cache = memoized.cache;

        if (cache.has(key)) {
          return cache.get(key);
        }
        var result = func.apply(this, args);
        memoized.cache = cache.set(key, result) || cache;
        return result;
      };
      memoized.cache = new (memoize.Cache || MapCache);
      return memoized;
    }

    // Expose `MapCache`.
    memoize.Cache = MapCache;

    /**
     * Creates a function that negates the result of the predicate `func`. The
     * `func` predicate is invoked with the `this` binding and arguments of the
     * created function.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} predicate The predicate to negate.
     * @returns {Function} Returns the new negated function.
     * @example
     *
     * function isEven(n) {
     *   return n % 2 == 0;
     * }
     *
     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
     * // => [1, 3, 5]
     */
    function negate(predicate) {
      if (typeof predicate != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      return function() {
        var args = arguments;
        switch (args.length) {
          case 0: return !predicate.call(this);
          case 1: return !predicate.call(this, args[0]);
          case 2: return !predicate.call(this, args[0], args[1]);
          case 3: return !predicate.call(this, args[0], args[1], args[2]);
        }
        return !predicate.apply(this, args);
      };
    }

    /**
     * Creates a function that is restricted to invoking `func` once. Repeat calls
     * to the function return the value of the first invocation. The `func` is
     * invoked with the `this` binding and arguments of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to restrict.
     * @returns {Function} Returns the new restricted function.
     * @example
     *
     * var initialize = _.once(createApplication);
     * initialize();
     * initialize();
     * // => `createApplication` is invoked once
     */
    function once(func) {
      return before(2, func);
    }

    /**
     * Creates a function that invokes `func` with its arguments transformed.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Function
     * @param {Function} func The function to wrap.
     * @param {...(Function|Function[])} [transforms=[_.identity]]
     *  The argument transforms.
     * @returns {Function} Returns the new function.
     * @example
     *
     * function doubled(n) {
     *   return n * 2;
     * }
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var func = _.overArgs(function(x, y) {
     *   return [x, y];
     * }, [square, doubled]);
     *
     * func(9, 3);
     * // => [81, 6]
     *
     * func(10, 5);
     * // => [100, 10]
     */
    var overArgs = castRest(function(func, transforms) {
      transforms = (transforms.length == 1 && isArray(transforms[0]))
        ? arrayMap(transforms[0], baseUnary(getIteratee()))
        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));

      var funcsLength = transforms.length;
      return baseRest(function(args) {
        var index = -1,
            length = nativeMin(args.length, funcsLength);

        while (++index < length) {
          args[index] = transforms[index].call(this, args[index]);
        }
        return apply(func, this, args);
      });
    });

    /**
     * Creates a function that invokes `func` with `partials` prepended to the
     * arguments it receives. This method is like `_.bind` except it does **not**
     * alter the `this` binding.
     *
     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 0.2.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var sayHelloTo = _.partial(greet, 'hello');
     * sayHelloTo('fred');
     * // => 'hello fred'
     *
     * // Partially applied with placeholders.
     * var greetFred = _.partial(greet, _, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     */
    var partial = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partial));
      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
    });

    /**
     * This method is like `_.partial` except that partially applied arguments
     * are appended to the arguments it receives.
     *
     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
     * builds, may be used as a placeholder for partially applied arguments.
     *
     * **Note:** This method doesn't set the "length" property of partially
     * applied functions.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Function
     * @param {Function} func The function to partially apply arguments to.
     * @param {...*} [partials] The arguments to be partially applied.
     * @returns {Function} Returns the new partially applied function.
     * @example
     *
     * function greet(greeting, name) {
     *   return greeting + ' ' + name;
     * }
     *
     * var greetFred = _.partialRight(greet, 'fred');
     * greetFred('hi');
     * // => 'hi fred'
     *
     * // Partially applied with placeholders.
     * var sayHelloTo = _.partialRight(greet, 'hello', _);
     * sayHelloTo('fred');
     * // => 'hello fred'
     */
    var partialRight = baseRest(function(func, partials) {
      var holders = replaceHolders(partials, getHolder(partialRight));
      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
    });

    /**
     * Creates a function that invokes `func` with arguments arranged according
     * to the specified `indexes` where the argument value at the first index is
     * provided as the first argument, the argument value at the second index is
     * provided as the second argument, and so on.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Function
     * @param {Function} func The function to rearrange arguments for.
     * @param {...(number|number[])} indexes The arranged argument indexes.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var rearged = _.rearg(function(a, b, c) {
     *   return [a, b, c];
     * }, [2, 0, 1]);
     *
     * rearged('b', 'c', 'a')
     * // => ['a', 'b', 'c']
     */
    var rearg = flatRest(function(func, indexes) {
      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
    });

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * created function and arguments from `start` and beyond provided as
     * an array.
     *
     * **Note:** This method is based on the
     * [rest parameter](https://mdn.io/rest_parameters).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to apply a rest parameter to.
     * @param {number} [start=func.length-1] The start position of the rest parameter.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.rest(function(what, names) {
     *   return what + ' ' + _.initial(names).join(', ') +
     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
     * });
     *
     * say('hello', 'fred', 'barney', 'pebbles');
     * // => 'hello fred, barney, & pebbles'
     */
    function rest(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start === undefined ? start : toInteger(start);
      return baseRest(func, start);
    }

    /**
     * Creates a function that invokes `func` with the `this` binding of the
     * create function and an array of arguments much like
     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
     *
     * **Note:** This method is based on the
     * [spread operator](https://mdn.io/spread_operator).
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Function
     * @param {Function} func The function to spread arguments over.
     * @param {number} [start=0] The start position of the spread.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var say = _.spread(function(who, what) {
     *   return who + ' says ' + what;
     * });
     *
     * say(['fred', 'hello']);
     * // => 'fred says hello'
     *
     * var numbers = Promise.all([
     *   Promise.resolve(40),
     *   Promise.resolve(36)
     * ]);
     *
     * numbers.then(_.spread(function(x, y) {
     *   return x + y;
     * }));
     * // => a Promise of 76
     */
    function spread(func, start) {
      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      start = start == null ? 0 : nativeMax(toInteger(start), 0);
      return baseRest(function(args) {
        var array = args[start],
            otherArgs = castSlice(args, 0, start);

        if (array) {
          arrayPush(otherArgs, array);
        }
        return apply(func, this, otherArgs);
      });
    }

    /**
     * Creates a throttled function that only invokes `func` at most once per
     * every `wait` milliseconds. The throttled function comes with a `cancel`
     * method to cancel delayed `func` invocations and a `flush` method to
     * immediately invoke them. Provide `options` to indicate whether `func`
     * should be invoked on the leading and/or trailing edge of the `wait`
     * timeout. The `func` is invoked with the last arguments provided to the
     * throttled function. Subsequent calls to the throttled function return the
     * result of the last `func` invocation.
     *
     * **Note:** If `leading` and `trailing` options are `true`, `func` is
     * invoked on the trailing edge of the timeout only if the throttled function
     * is invoked more than once during the `wait` timeout.
     *
     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
     *
     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
     * for details over the differences between `_.throttle` and `_.debounce`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {Function} func The function to throttle.
     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.leading=true]
     *  Specify invoking on the leading edge of the timeout.
     * @param {boolean} [options.trailing=true]
     *  Specify invoking on the trailing edge of the timeout.
     * @returns {Function} Returns the new throttled function.
     * @example
     *
     * // Avoid excessively updating the position while scrolling.
     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
     *
     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
     * jQuery(element).on('click', throttled);
     *
     * // Cancel the trailing throttled invocation.
     * jQuery(window).on('popstate', throttled.cancel);
     */
    function throttle(func, wait, options) {
      var leading = true,
          trailing = true;

      if (typeof func != 'function') {
        throw new TypeError(FUNC_ERROR_TEXT);
      }
      if (isObject(options)) {
        leading = 'leading' in options ? !!options.leading : leading;
        trailing = 'trailing' in options ? !!options.trailing : trailing;
      }
      return debounce(func, wait, {
        'leading': leading,
        'maxWait': wait,
        'trailing': trailing
      });
    }

    /**
     * Creates a function that accepts up to one argument, ignoring any
     * additional arguments.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Function
     * @param {Function} func The function to cap arguments for.
     * @returns {Function} Returns the new capped function.
     * @example
     *
     * _.map(['6', '8', '10'], _.unary(parseInt));
     * // => [6, 8, 10]
     */
    function unary(func) {
      return ary(func, 1);
    }

    /**
     * Creates a function that provides `value` to `wrapper` as its first
     * argument. Any additional arguments provided to the function are appended
     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
     * binding of the created function.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Function
     * @param {*} value The value to wrap.
     * @param {Function} [wrapper=identity] The wrapper function.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var p = _.wrap(_.escape, function(func, text) {
     *   return '<p>' + func(text) + '</p>';
     * });
     *
     * p('fred, barney, & pebbles');
     * // => '<p>fred, barney, &amp; pebbles</p>'
     */
    function wrap(value, wrapper) {
      return partial(castFunction(wrapper), value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Casts `value` as an array if it's not one.
     *
     * @static
     * @memberOf _
     * @since 4.4.0
     * @category Lang
     * @param {*} value The value to inspect.
     * @returns {Array} Returns the cast array.
     * @example
     *
     * _.castArray(1);
     * // => [1]
     *
     * _.castArray({ 'a': 1 });
     * // => [{ 'a': 1 }]
     *
     * _.castArray('abc');
     * // => ['abc']
     *
     * _.castArray(null);
     * // => [null]
     *
     * _.castArray(undefined);
     * // => [undefined]
     *
     * _.castArray();
     * // => []
     *
     * var array = [1, 2, 3];
     * console.log(_.castArray(array) === array);
     * // => true
     */
    function castArray() {
      if (!arguments.length) {
        return [];
      }
      var value = arguments[0];
      return isArray(value) ? value : [value];
    }

    /**
     * Creates a shallow clone of `value`.
     *
     * **Note:** This method is loosely based on the
     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
     * and supports cloning arrays, array buffers, booleans, date objects, maps,
     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
     * arrays. The own enumerable properties of `arguments` objects are cloned
     * as plain objects. An empty object is returned for uncloneable values such
     * as error objects, functions, DOM nodes, and WeakMaps.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to clone.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeep
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var shallow = _.clone(objects);
     * console.log(shallow[0] === objects[0]);
     * // => true
     */
    function clone(value) {
      return baseClone(value, CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.clone` except that it accepts `customizer` which
     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
     * cloning is handled by the method instead. The `customizer` is invoked with
     * up to four arguments; (value [, index|key, object, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the cloned value.
     * @see _.cloneDeepWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(false);
     *   }
     * }
     *
     * var el = _.cloneWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 0
     */
    function cloneWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * This method is like `_.clone` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @returns {*} Returns the deep cloned value.
     * @see _.clone
     * @example
     *
     * var objects = [{ 'a': 1 }, { 'b': 2 }];
     *
     * var deep = _.cloneDeep(objects);
     * console.log(deep[0] === objects[0]);
     * // => false
     */
    function cloneDeep(value) {
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
    }

    /**
     * This method is like `_.cloneWith` except that it recursively clones `value`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to recursively clone.
     * @param {Function} [customizer] The function to customize cloning.
     * @returns {*} Returns the deep cloned value.
     * @see _.cloneWith
     * @example
     *
     * function customizer(value) {
     *   if (_.isElement(value)) {
     *     return value.cloneNode(true);
     *   }
     * }
     *
     * var el = _.cloneDeepWith(document.body, customizer);
     *
     * console.log(el === document.body);
     * // => false
     * console.log(el.nodeName);
     * // => 'BODY'
     * console.log(el.childNodes.length);
     * // => 20
     */
    function cloneDeepWith(value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
    }

    /**
     * Checks if `object` conforms to `source` by invoking the predicate
     * properties of `source` with the corresponding property values of `object`.
     *
     * **Note:** This method is equivalent to `_.conforms` when `source` is
     * partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property predicates to conform to.
     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
     * // => true
     *
     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
     * // => false
     */
    function conformsTo(object, source) {
      return source == null || baseConformsTo(object, source, keys(source));
    }

    /**
     * Performs a
     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
     * comparison between two values to determine if they are equivalent.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.eq(object, object);
     * // => true
     *
     * _.eq(object, other);
     * // => false
     *
     * _.eq('a', 'a');
     * // => true
     *
     * _.eq('a', Object('a'));
     * // => false
     *
     * _.eq(NaN, NaN);
     * // => true
     */
    function eq(value, other) {
      return value === other || (value !== value && other !== other);
    }

    /**
     * Checks if `value` is greater than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than `other`,
     *  else `false`.
     * @see _.lt
     * @example
     *
     * _.gt(3, 1);
     * // => true
     *
     * _.gt(3, 3);
     * // => false
     *
     * _.gt(1, 3);
     * // => false
     */
    var gt = createRelationalOperation(baseGt);

    /**
     * Checks if `value` is greater than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is greater than or equal to
     *  `other`, else `false`.
     * @see _.lte
     * @example
     *
     * _.gte(3, 1);
     * // => true
     *
     * _.gte(3, 3);
     * // => true
     *
     * _.gte(1, 3);
     * // => false
     */
    var gte = createRelationalOperation(function(value, other) {
      return value >= other;
    });

    /**
     * Checks if `value` is likely an `arguments` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
     *  else `false`.
     * @example
     *
     * _.isArguments(function() { return arguments; }());
     * // => true
     *
     * _.isArguments([1, 2, 3]);
     * // => false
     */
    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
        !propertyIsEnumerable.call(value, 'callee');
    };

    /**
     * Checks if `value` is classified as an `Array` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
     * @example
     *
     * _.isArray([1, 2, 3]);
     * // => true
     *
     * _.isArray(document.body.children);
     * // => false
     *
     * _.isArray('abc');
     * // => false
     *
     * _.isArray(_.noop);
     * // => false
     */
    var isArray = Array.isArray;

    /**
     * Checks if `value` is classified as an `ArrayBuffer` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
     * @example
     *
     * _.isArrayBuffer(new ArrayBuffer(2));
     * // => true
     *
     * _.isArrayBuffer(new Array(2));
     * // => false
     */
    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;

    /**
     * Checks if `value` is array-like. A value is considered array-like if it's
     * not a function and has a `value.length` that's an integer greater than or
     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
     * @example
     *
     * _.isArrayLike([1, 2, 3]);
     * // => true
     *
     * _.isArrayLike(document.body.children);
     * // => true
     *
     * _.isArrayLike('abc');
     * // => true
     *
     * _.isArrayLike(_.noop);
     * // => false
     */
    function isArrayLike(value) {
      return value != null && isLength(value.length) && !isFunction(value);
    }

    /**
     * This method is like `_.isArrayLike` except that it also checks if `value`
     * is an object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an array-like object,
     *  else `false`.
     * @example
     *
     * _.isArrayLikeObject([1, 2, 3]);
     * // => true
     *
     * _.isArrayLikeObject(document.body.children);
     * // => true
     *
     * _.isArrayLikeObject('abc');
     * // => false
     *
     * _.isArrayLikeObject(_.noop);
     * // => false
     */
    function isArrayLikeObject(value) {
      return isObjectLike(value) && isArrayLike(value);
    }

    /**
     * Checks if `value` is classified as a boolean primitive or object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
     * @example
     *
     * _.isBoolean(false);
     * // => true
     *
     * _.isBoolean(null);
     * // => false
     */
    function isBoolean(value) {
      return value === true || value === false ||
        (isObjectLike(value) && baseGetTag(value) == boolTag);
    }

    /**
     * Checks if `value` is a buffer.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
     * @example
     *
     * _.isBuffer(new Buffer(2));
     * // => true
     *
     * _.isBuffer(new Uint8Array(2));
     * // => false
     */
    var isBuffer = nativeIsBuffer || stubFalse;

    /**
     * Checks if `value` is classified as a `Date` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
     * @example
     *
     * _.isDate(new Date);
     * // => true
     *
     * _.isDate('Mon April 23 2012');
     * // => false
     */
    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;

    /**
     * Checks if `value` is likely a DOM element.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
     * @example
     *
     * _.isElement(document.body);
     * // => true
     *
     * _.isElement('<body>');
     * // => false
     */
    function isElement(value) {
      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
    }

    /**
     * Checks if `value` is an empty object, collection, map, or set.
     *
     * Objects are considered empty if they have no own enumerable string keyed
     * properties.
     *
     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
     * jQuery-like collections are considered empty if they have a `length` of `0`.
     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
     * @example
     *
     * _.isEmpty(null);
     * // => true
     *
     * _.isEmpty(true);
     * // => true
     *
     * _.isEmpty(1);
     * // => true
     *
     * _.isEmpty([1, 2, 3]);
     * // => false
     *
     * _.isEmpty({ 'a': 1 });
     * // => false
     */
    function isEmpty(value) {
      if (value == null) {
        return true;
      }
      if (isArrayLike(value) &&
          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
        return !value.length;
      }
      var tag = getTag(value);
      if (tag == mapTag || tag == setTag) {
        return !value.size;
      }
      if (isPrototype(value)) {
        return !baseKeys(value).length;
      }
      for (var key in value) {
        if (hasOwnProperty.call(value, key)) {
          return false;
        }
      }
      return true;
    }

    /**
     * Performs a deep comparison between two values to determine if they are
     * equivalent.
     *
     * **Note:** This method supports comparing arrays, array buffers, booleans,
     * date objects, error objects, maps, numbers, `Object` objects, regexes,
     * sets, strings, symbols, and typed arrays. `Object` objects are compared
     * by their own, not inherited, enumerable properties. Functions and DOM
     * nodes are compared by strict equality, i.e. `===`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * var object = { 'a': 1 };
     * var other = { 'a': 1 };
     *
     * _.isEqual(object, other);
     * // => true
     *
     * object === other;
     * // => false
     */
    function isEqual(value, other) {
      return baseIsEqual(value, other);
    }

    /**
     * This method is like `_.isEqual` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with up to
     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, othValue) {
     *   if (isGreeting(objValue) && isGreeting(othValue)) {
     *     return true;
     *   }
     * }
     *
     * var array = ['hello', 'goodbye'];
     * var other = ['hi', 'goodbye'];
     *
     * _.isEqualWith(array, other, customizer);
     * // => true
     */
    function isEqualWith(value, other, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      var result = customizer ? customizer(value, other) : undefined;
      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
    }

    /**
     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
     * `SyntaxError`, `TypeError`, or `URIError` object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
     * @example
     *
     * _.isError(new Error);
     * // => true
     *
     * _.isError(Error);
     * // => false
     */
    function isError(value) {
      if (!isObjectLike(value)) {
        return false;
      }
      var tag = baseGetTag(value);
      return tag == errorTag || tag == domExcTag ||
        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
    }

    /**
     * Checks if `value` is a finite primitive number.
     *
     * **Note:** This method is based on
     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
     * @example
     *
     * _.isFinite(3);
     * // => true
     *
     * _.isFinite(Number.MIN_VALUE);
     * // => true
     *
     * _.isFinite(Infinity);
     * // => false
     *
     * _.isFinite('3');
     * // => false
     */
    function isFinite(value) {
      return typeof value == 'number' && nativeIsFinite(value);
    }

    /**
     * Checks if `value` is classified as a `Function` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
     * @example
     *
     * _.isFunction(_);
     * // => true
     *
     * _.isFunction(/abc/);
     * // => false
     */
    function isFunction(value) {
      if (!isObject(value)) {
        return false;
      }
      // The use of `Object#toString` avoids issues with the `typeof` operator
      // in Safari 9 which returns 'object' for typed arrays and other constructors.
      var tag = baseGetTag(value);
      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
    }

    /**
     * Checks if `value` is an integer.
     *
     * **Note:** This method is based on
     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
     * @example
     *
     * _.isInteger(3);
     * // => true
     *
     * _.isInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isInteger(Infinity);
     * // => false
     *
     * _.isInteger('3');
     * // => false
     */
    function isInteger(value) {
      return typeof value == 'number' && value == toInteger(value);
    }

    /**
     * Checks if `value` is a valid array-like length.
     *
     * **Note:** This method is loosely based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
     * @example
     *
     * _.isLength(3);
     * // => true
     *
     * _.isLength(Number.MIN_VALUE);
     * // => false
     *
     * _.isLength(Infinity);
     * // => false
     *
     * _.isLength('3');
     * // => false
     */
    function isLength(value) {
      return typeof value == 'number' &&
        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is the
     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
     * @example
     *
     * _.isObject({});
     * // => true
     *
     * _.isObject([1, 2, 3]);
     * // => true
     *
     * _.isObject(_.noop);
     * // => true
     *
     * _.isObject(null);
     * // => false
     */
    function isObject(value) {
      var type = typeof value;
      return value != null && (type == 'object' || type == 'function');
    }

    /**
     * Checks if `value` is object-like. A value is object-like if it's not `null`
     * and has a `typeof` result of "object".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
     * @example
     *
     * _.isObjectLike({});
     * // => true
     *
     * _.isObjectLike([1, 2, 3]);
     * // => true
     *
     * _.isObjectLike(_.noop);
     * // => false
     *
     * _.isObjectLike(null);
     * // => false
     */
    function isObjectLike(value) {
      return value != null && typeof value == 'object';
    }

    /**
     * Checks if `value` is classified as a `Map` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
     * @example
     *
     * _.isMap(new Map);
     * // => true
     *
     * _.isMap(new WeakMap);
     * // => false
     */
    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;

    /**
     * Performs a partial deep comparison between `object` and `source` to
     * determine if `object` contains equivalent property values.
     *
     * **Note:** This method is equivalent to `_.matches` when `source` is
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * var object = { 'a': 1, 'b': 2 };
     *
     * _.isMatch(object, { 'b': 2 });
     * // => true
     *
     * _.isMatch(object, { 'b': 1 });
     * // => false
     */
    function isMatch(object, source) {
      return object === source || baseIsMatch(object, source, getMatchData(source));
    }

    /**
     * This method is like `_.isMatch` except that it accepts `customizer` which
     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
     * are handled by the method instead. The `customizer` is invoked with five
     * arguments: (objValue, srcValue, index|key, object, source).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {Object} object The object to inspect.
     * @param {Object} source The object of property values to match.
     * @param {Function} [customizer] The function to customize comparisons.
     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
     * @example
     *
     * function isGreeting(value) {
     *   return /^h(?:i|ello)$/.test(value);
     * }
     *
     * function customizer(objValue, srcValue) {
     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
     *     return true;
     *   }
     * }
     *
     * var object = { 'greeting': 'hello' };
     * var source = { 'greeting': 'hi' };
     *
     * _.isMatchWith(object, source, customizer);
     * // => true
     */
    function isMatchWith(object, source, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return baseIsMatch(object, source, getMatchData(source), customizer);
    }

    /**
     * Checks if `value` is `NaN`.
     *
     * **Note:** This method is based on
     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
     * `undefined` and other non-number values.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
     * @example
     *
     * _.isNaN(NaN);
     * // => true
     *
     * _.isNaN(new Number(NaN));
     * // => true
     *
     * isNaN(undefined);
     * // => true
     *
     * _.isNaN(undefined);
     * // => false
     */
    function isNaN(value) {
      // An `NaN` primitive is the only value that is not equal to itself.
      // Perform the `toStringTag` check first to avoid errors with some
      // ActiveX objects in IE.
      return isNumber(value) && value != +value;
    }

    /**
     * Checks if `value` is a pristine native function.
     *
     * **Note:** This method can't reliably detect native functions in the presence
     * of the core-js package because core-js circumvents this kind of detection.
     * Despite multiple requests, the core-js maintainer has made it clear: any
     * attempt to fix the detection will be obstructed. As a result, we're left
     * with little choice but to throw an error. Unfortunately, this also affects
     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
     * which rely on core-js.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a native function,
     *  else `false`.
     * @example
     *
     * _.isNative(Array.prototype.push);
     * // => true
     *
     * _.isNative(_);
     * // => false
     */
    function isNative(value) {
      if (isMaskable(value)) {
        throw new Error(CORE_ERROR_TEXT);
      }
      return baseIsNative(value);
    }

    /**
     * Checks if `value` is `null`.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
     * @example
     *
     * _.isNull(null);
     * // => true
     *
     * _.isNull(void 0);
     * // => false
     */
    function isNull(value) {
      return value === null;
    }

    /**
     * Checks if `value` is `null` or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
     * @example
     *
     * _.isNil(null);
     * // => true
     *
     * _.isNil(void 0);
     * // => true
     *
     * _.isNil(NaN);
     * // => false
     */
    function isNil(value) {
      return value == null;
    }

    /**
     * Checks if `value` is classified as a `Number` primitive or object.
     *
     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
     * classified as numbers, use the `_.isFinite` method.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
     * @example
     *
     * _.isNumber(3);
     * // => true
     *
     * _.isNumber(Number.MIN_VALUE);
     * // => true
     *
     * _.isNumber(Infinity);
     * // => true
     *
     * _.isNumber('3');
     * // => false
     */
    function isNumber(value) {
      return typeof value == 'number' ||
        (isObjectLike(value) && baseGetTag(value) == numberTag);
    }

    /**
     * Checks if `value` is a plain object, that is, an object created by the
     * `Object` constructor or one with a `[[Prototype]]` of `null`.
     *
     * @static
     * @memberOf _
     * @since 0.8.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * _.isPlainObject(new Foo);
     * // => false
     *
     * _.isPlainObject([1, 2, 3]);
     * // => false
     *
     * _.isPlainObject({ 'x': 0, 'y': 0 });
     * // => true
     *
     * _.isPlainObject(Object.create(null));
     * // => true
     */
    function isPlainObject(value) {
      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
        return false;
      }
      var proto = getPrototype(value);
      if (proto === null) {
        return true;
      }
      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
        funcToString.call(Ctor) == objectCtorString;
    }

    /**
     * Checks if `value` is classified as a `RegExp` object.
     *
     * @static
     * @memberOf _
     * @since 0.1.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
     * @example
     *
     * _.isRegExp(/abc/);
     * // => true
     *
     * _.isRegExp('/abc/');
     * // => false
     */
    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;

    /**
     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
     * double precision number which isn't the result of a rounded unsafe integer.
     *
     * **Note:** This method is based on
     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
     * @example
     *
     * _.isSafeInteger(3);
     * // => true
     *
     * _.isSafeInteger(Number.MIN_VALUE);
     * // => false
     *
     * _.isSafeInteger(Infinity);
     * // => false
     *
     * _.isSafeInteger('3');
     * // => false
     */
    function isSafeInteger(value) {
      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
    }

    /**
     * Checks if `value` is classified as a `Set` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
     * @example
     *
     * _.isSet(new Set);
     * // => true
     *
     * _.isSet(new WeakSet);
     * // => false
     */
    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;

    /**
     * Checks if `value` is classified as a `String` primitive or object.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
     * @example
     *
     * _.isString('abc');
     * // => true
     *
     * _.isString(1);
     * // => false
     */
    function isString(value) {
      return typeof value == 'string' ||
        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
    }

    /**
     * Checks if `value` is classified as a `Symbol` primitive or object.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
     * @example
     *
     * _.isSymbol(Symbol.iterator);
     * // => true
     *
     * _.isSymbol('abc');
     * // => false
     */
    function isSymbol(value) {
      return typeof value == 'symbol' ||
        (isObjectLike(value) && baseGetTag(value) == symbolTag);
    }

    /**
     * Checks if `value` is classified as a typed array.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
     * @example
     *
     * _.isTypedArray(new Uint8Array);
     * // => true
     *
     * _.isTypedArray([]);
     * // => false
     */
    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;

    /**
     * Checks if `value` is `undefined`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
     * @example
     *
     * _.isUndefined(void 0);
     * // => true
     *
     * _.isUndefined(null);
     * // => false
     */
    function isUndefined(value) {
      return value === undefined;
    }

    /**
     * Checks if `value` is classified as a `WeakMap` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
     * @example
     *
     * _.isWeakMap(new WeakMap);
     * // => true
     *
     * _.isWeakMap(new Map);
     * // => false
     */
    function isWeakMap(value) {
      return isObjectLike(value) && getTag(value) == weakMapTag;
    }

    /**
     * Checks if `value` is classified as a `WeakSet` object.
     *
     * @static
     * @memberOf _
     * @since 4.3.0
     * @category Lang
     * @param {*} value The value to check.
     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
     * @example
     *
     * _.isWeakSet(new WeakSet);
     * // => true
     *
     * _.isWeakSet(new Set);
     * // => false
     */
    function isWeakSet(value) {
      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
    }

    /**
     * Checks if `value` is less than `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than `other`,
     *  else `false`.
     * @see _.gt
     * @example
     *
     * _.lt(1, 3);
     * // => true
     *
     * _.lt(3, 3);
     * // => false
     *
     * _.lt(3, 1);
     * // => false
     */
    var lt = createRelationalOperation(baseLt);

    /**
     * Checks if `value` is less than or equal to `other`.
     *
     * @static
     * @memberOf _
     * @since 3.9.0
     * @category Lang
     * @param {*} value The value to compare.
     * @param {*} other The other value to compare.
     * @returns {boolean} Returns `true` if `value` is less than or equal to
     *  `other`, else `false`.
     * @see _.gte
     * @example
     *
     * _.lte(1, 3);
     * // => true
     *
     * _.lte(3, 3);
     * // => true
     *
     * _.lte(3, 1);
     * // => false
     */
    var lte = createRelationalOperation(function(value, other) {
      return value <= other;
    });

    /**
     * Converts `value` to an array.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Array} Returns the converted array.
     * @example
     *
     * _.toArray({ 'a': 1, 'b': 2 });
     * // => [1, 2]
     *
     * _.toArray('abc');
     * // => ['a', 'b', 'c']
     *
     * _.toArray(1);
     * // => []
     *
     * _.toArray(null);
     * // => []
     */
    function toArray(value) {
      if (!value) {
        return [];
      }
      if (isArrayLike(value)) {
        return isString(value) ? stringToArray(value) : copyArray(value);
      }
      if (symIterator && value[symIterator]) {
        return iteratorToArray(value[symIterator]());
      }
      var tag = getTag(value),
          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);

      return func(value);
    }

    /**
     * Converts `value` to a finite number.
     *
     * @static
     * @memberOf _
     * @since 4.12.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted number.
     * @example
     *
     * _.toFinite(3.2);
     * // => 3.2
     *
     * _.toFinite(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toFinite(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toFinite('3.2');
     * // => 3.2
     */
    function toFinite(value) {
      if (!value) {
        return value === 0 ? value : 0;
      }
      value = toNumber(value);
      if (value === INFINITY || value === -INFINITY) {
        var sign = (value < 0 ? -1 : 1);
        return sign * MAX_INTEGER;
      }
      return value === value ? value : 0;
    }

    /**
     * Converts `value` to an integer.
     *
     * **Note:** This method is loosely based on
     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toInteger(3.2);
     * // => 3
     *
     * _.toInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toInteger(Infinity);
     * // => 1.7976931348623157e+308
     *
     * _.toInteger('3.2');
     * // => 3
     */
    function toInteger(value) {
      var result = toFinite(value),
          remainder = result % 1;

      return result === result ? (remainder ? result - remainder : result) : 0;
    }

    /**
     * Converts `value` to an integer suitable for use as the length of an
     * array-like object.
     *
     * **Note:** This method is based on
     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toLength(3.2);
     * // => 3
     *
     * _.toLength(Number.MIN_VALUE);
     * // => 0
     *
     * _.toLength(Infinity);
     * // => 4294967295
     *
     * _.toLength('3.2');
     * // => 3
     */
    function toLength(value) {
      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
    }

    /**
     * Converts `value` to a number.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to process.
     * @returns {number} Returns the number.
     * @example
     *
     * _.toNumber(3.2);
     * // => 3.2
     *
     * _.toNumber(Number.MIN_VALUE);
     * // => 5e-324
     *
     * _.toNumber(Infinity);
     * // => Infinity
     *
     * _.toNumber('3.2');
     * // => 3.2
     */
    function toNumber(value) {
      if (typeof value == 'number') {
        return value;
      }
      if (isSymbol(value)) {
        return NAN;
      }
      if (isObject(value)) {
        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
        value = isObject(other) ? (other + '') : other;
      }
      if (typeof value != 'string') {
        return value === 0 ? value : +value;
      }
      value = value.replace(reTrim, '');
      var isBinary = reIsBinary.test(value);
      return (isBinary || reIsOctal.test(value))
        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
        : (reIsBadHex.test(value) ? NAN : +value);
    }

    /**
     * Converts `value` to a plain object flattening inherited enumerable string
     * keyed properties of `value` to own properties of the plain object.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {Object} Returns the converted plain object.
     * @example
     *
     * function Foo() {
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.assign({ 'a': 1 }, new Foo);
     * // => { 'a': 1, 'b': 2 }
     *
     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
     * // => { 'a': 1, 'b': 2, 'c': 3 }
     */
    function toPlainObject(value) {
      return copyObject(value, keysIn(value));
    }

    /**
     * Converts `value` to a safe integer. A safe integer can be compared and
     * represented correctly.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.toSafeInteger(3.2);
     * // => 3
     *
     * _.toSafeInteger(Number.MIN_VALUE);
     * // => 0
     *
     * _.toSafeInteger(Infinity);
     * // => 9007199254740991
     *
     * _.toSafeInteger('3.2');
     * // => 3
     */
    function toSafeInteger(value) {
      return value
        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
        : (value === 0 ? value : 0);
    }

    /**
     * Converts `value` to a string. An empty string is returned for `null`
     * and `undefined` values. The sign of `-0` is preserved.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Lang
     * @param {*} value The value to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.toString(null);
     * // => ''
     *
     * _.toString(-0);
     * // => '-0'
     *
     * _.toString([1, 2, 3]);
     * // => '1,2,3'
     */
    function toString(value) {
      return value == null ? '' : baseToString(value);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Assigns own enumerable string keyed properties of source objects to the
     * destination object. Source objects are applied from left to right.
     * Subsequent sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object` and is loosely based on
     * [`Object.assign`](https://mdn.io/Object/assign).
     *
     * @static
     * @memberOf _
     * @since 0.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assignIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assign({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'c': 3 }
     */
    var assign = createAssigner(function(object, source) {
      if (isPrototype(source) || isArrayLike(source)) {
        copyObject(source, keys(source), object);
        return;
      }
      for (var key in source) {
        if (hasOwnProperty.call(source, key)) {
          assignValue(object, key, source[key]);
        }
      }
    });

    /**
     * This method is like `_.assign` except that it iterates over own and
     * inherited source properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extend
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.assign
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     * }
     *
     * function Bar() {
     *   this.c = 3;
     * }
     *
     * Foo.prototype.b = 2;
     * Bar.prototype.d = 4;
     *
     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
     */
    var assignIn = createAssigner(function(object, source) {
      copyObject(source, keysIn(source), object);
    });

    /**
     * This method is like `_.assignIn` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias extendWith
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignInWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keysIn(source), object, customizer);
    });

    /**
     * This method is like `_.assign` except that it accepts `customizer`
     * which is invoked to produce the assigned values. If `customizer` returns
     * `undefined`, assignment is handled by the method instead. The `customizer`
     * is invoked with five arguments: (objValue, srcValue, key, object, source).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @see _.assignInWith
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   return _.isUndefined(objValue) ? srcValue : objValue;
     * }
     *
     * var defaults = _.partialRight(_.assignWith, customizer);
     *
     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
      copyObject(source, keys(source), object, customizer);
    });

    /**
     * Creates an array of values corresponding to `paths` of `object`.
     *
     * @static
     * @memberOf _
     * @since 1.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Array} Returns the picked values.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
     *
     * _.at(object, ['a[0].b.c', 'a[1]']);
     * // => [3, 4]
     */
    var at = flatRest(baseAt);

    /**
     * Creates an object that inherits from the `prototype` object. If a
     * `properties` object is given, its own enumerable string keyed properties
     * are assigned to the created object.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Object
     * @param {Object} prototype The object to inherit from.
     * @param {Object} [properties] The properties to assign to the object.
     * @returns {Object} Returns the new object.
     * @example
     *
     * function Shape() {
     *   this.x = 0;
     *   this.y = 0;
     * }
     *
     * function Circle() {
     *   Shape.call(this);
     * }
     *
     * Circle.prototype = _.create(Shape.prototype, {
     *   'constructor': Circle
     * });
     *
     * var circle = new Circle;
     * circle instanceof Circle;
     * // => true
     *
     * circle instanceof Shape;
     * // => true
     */
    function create(prototype, properties) {
      var result = baseCreate(prototype);
      return properties == null ? result : baseAssign(result, properties);
    }

    /**
     * Assigns own and inherited enumerable string keyed properties of source
     * objects to the destination object for all destination properties that
     * resolve to `undefined`. Source objects are applied from left to right.
     * Once a property is set, additional values of the same property are ignored.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaultsDeep
     * @example
     *
     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
     * // => { 'a': 1, 'b': 2 }
     */
    var defaults = baseRest(function(object, sources) {
      object = Object(object);

      var index = -1;
      var length = sources.length;
      var guard = length > 2 ? sources[2] : undefined;

      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
        length = 1;
      }

      while (++index < length) {
        var source = sources[index];
        var props = keysIn(source);
        var propsIndex = -1;
        var propsLength = props.length;

        while (++propsIndex < propsLength) {
          var key = props[propsIndex];
          var value = object[key];

          if (value === undefined ||
              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
            object[key] = source[key];
          }
        }
      }

      return object;
    });

    /**
     * This method is like `_.defaults` except that it recursively assigns
     * default properties.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @see _.defaults
     * @example
     *
     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
     * // => { 'a': { 'b': 2, 'c': 3 } }
     */
    var defaultsDeep = baseRest(function(args) {
      args.push(undefined, customDefaultsMerge);
      return apply(mergeWith, undefined, args);
    });

    /**
     * This method is like `_.find` except that it returns the key of the first
     * element `predicate` returns truthy for instead of the element itself.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findKey(users, function(o) { return o.age < 40; });
     * // => 'barney' (iteration order is not guaranteed)
     *
     * // The `_.matches` iteratee shorthand.
     * _.findKey(users, { 'age': 1, 'active': true });
     * // => 'pebbles'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findKey(users, 'active');
     * // => 'barney'
     */
    function findKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
    }

    /**
     * This method is like `_.findKey` except that it iterates over elements of
     * a collection in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @param {Function} [predicate=_.identity] The function invoked per iteration.
     * @returns {string|undefined} Returns the key of the matched element,
     *  else `undefined`.
     * @example
     *
     * var users = {
     *   'barney':  { 'age': 36, 'active': true },
     *   'fred':    { 'age': 40, 'active': false },
     *   'pebbles': { 'age': 1,  'active': true }
     * };
     *
     * _.findLastKey(users, function(o) { return o.age < 40; });
     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
     *
     * // The `_.matches` iteratee shorthand.
     * _.findLastKey(users, { 'age': 36, 'active': true });
     * // => 'barney'
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.findLastKey(users, ['active', false]);
     * // => 'fred'
     *
     * // The `_.property` iteratee shorthand.
     * _.findLastKey(users, 'active');
     * // => 'pebbles'
     */
    function findLastKey(object, predicate) {
      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
    }

    /**
     * Iterates over own and inherited enumerable string keyed properties of an
     * object and invokes `iteratee` for each property. The iteratee is invoked
     * with three arguments: (value, key, object). Iteratee functions may exit
     * iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forInRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forIn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
     */
    function forIn(object, iteratee) {
      return object == null
        ? object
        : baseFor(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * This method is like `_.forIn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forIn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forInRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
     */
    function forInRight(object, iteratee) {
      return object == null
        ? object
        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
    }

    /**
     * Iterates over own enumerable string keyed properties of an object and
     * invokes `iteratee` for each property. The iteratee is invoked with three
     * arguments: (value, key, object). Iteratee functions may exit iteration
     * early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 0.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwnRight
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwn(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
     */
    function forOwn(object, iteratee) {
      return object && baseForOwn(object, getIteratee(iteratee, 3));
    }

    /**
     * This method is like `_.forOwn` except that it iterates over properties of
     * `object` in the opposite order.
     *
     * @static
     * @memberOf _
     * @since 2.0.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns `object`.
     * @see _.forOwn
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.forOwnRight(new Foo, function(value, key) {
     *   console.log(key);
     * });
     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
     */
    function forOwnRight(object, iteratee) {
      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
    }

    /**
     * Creates an array of function property names from own enumerable properties
     * of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functionsIn
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functions(new Foo);
     * // => ['a', 'b']
     */
    function functions(object) {
      return object == null ? [] : baseFunctions(object, keys(object));
    }

    /**
     * Creates an array of function property names from own and inherited
     * enumerable properties of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to inspect.
     * @returns {Array} Returns the function names.
     * @see _.functions
     * @example
     *
     * function Foo() {
     *   this.a = _.constant('a');
     *   this.b = _.constant('b');
     * }
     *
     * Foo.prototype.c = _.constant('c');
     *
     * _.functionsIn(new Foo);
     * // => ['a', 'b', 'c']
     */
    function functionsIn(object) {
      return object == null ? [] : baseFunctions(object, keysIn(object));
    }

    /**
     * Gets the value at `path` of `object`. If the resolved value is
     * `undefined`, the `defaultValue` is returned in its place.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to get.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.get(object, 'a[0].b.c');
     * // => 3
     *
     * _.get(object, ['a', '0', 'b', 'c']);
     * // => 3
     *
     * _.get(object, 'a.b.c', 'default');
     * // => 'default'
     */
    function get(object, path, defaultValue) {
      var result = object == null ? undefined : baseGet(object, path);
      return result === undefined ? defaultValue : result;
    }

    /**
     * Checks if `path` is a direct property of `object`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = { 'a': { 'b': 2 } };
     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.has(object, 'a');
     * // => true
     *
     * _.has(object, 'a.b');
     * // => true
     *
     * _.has(object, ['a', 'b']);
     * // => true
     *
     * _.has(other, 'a');
     * // => false
     */
    function has(object, path) {
      return object != null && hasPath(object, path, baseHas);
    }

    /**
     * Checks if `path` is a direct or inherited property of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path to check.
     * @returns {boolean} Returns `true` if `path` exists, else `false`.
     * @example
     *
     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
     *
     * _.hasIn(object, 'a');
     * // => true
     *
     * _.hasIn(object, 'a.b');
     * // => true
     *
     * _.hasIn(object, ['a', 'b']);
     * // => true
     *
     * _.hasIn(object, 'b');
     * // => false
     */
    function hasIn(object, path) {
      return object != null && hasPath(object, path, baseHasIn);
    }

    /**
     * Creates an object composed of the inverted keys and values of `object`.
     * If `object` contains duplicate values, subsequent values overwrite
     * property assignments of previous values.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Object
     * @param {Object} object The object to invert.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invert(object);
     * // => { '1': 'c', '2': 'b' }
     */
    var invert = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      result[value] = key;
    }, constant(identity));

    /**
     * This method is like `_.invert` except that the inverted object is generated
     * from the results of running each element of `object` thru `iteratee`. The
     * corresponding inverted value of each inverted key is an array of keys
     * responsible for generating the inverted value. The iteratee is invoked
     * with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.1.0
     * @category Object
     * @param {Object} object The object to invert.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {Object} Returns the new inverted object.
     * @example
     *
     * var object = { 'a': 1, 'b': 2, 'c': 1 };
     *
     * _.invertBy(object);
     * // => { '1': ['a', 'c'], '2': ['b'] }
     *
     * _.invertBy(object, function(value) {
     *   return 'group' + value;
     * });
     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
     */
    var invertBy = createInverter(function(result, value, key) {
      if (value != null &&
          typeof value.toString != 'function') {
        value = nativeObjectToString.call(value);
      }

      if (hasOwnProperty.call(result, value)) {
        result[value].push(key);
      } else {
        result[value] = [key];
      }
    }, getIteratee);

    /**
     * Invokes the method at `path` of `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {*} Returns the result of the invoked method.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
     *
     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
     * // => [2, 3]
     */
    var invoke = baseRest(baseInvoke);

    /**
     * Creates an array of the own enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects. See the
     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
     * for more details.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keys(new Foo);
     * // => ['a', 'b'] (iteration order is not guaranteed)
     *
     * _.keys('hi');
     * // => ['0', '1']
     */
    function keys(object) {
      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
    }

    /**
     * Creates an array of the own and inherited enumerable property names of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property names.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.keysIn(new Foo);
     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
     */
    function keysIn(object) {
      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
    }

    /**
     * The opposite of `_.mapValues`; this method creates an object with the
     * same values as `object` and keys generated by running each own enumerable
     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
     * with three arguments: (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 3.8.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapValues
     * @example
     *
     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
     *   return key + value;
     * });
     * // => { 'a1': 1, 'b2': 2 }
     */
    function mapKeys(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, iteratee(value, key, object), value);
      });
      return result;
    }

    /**
     * Creates an object with the same keys as `object` and values generated
     * by running each own enumerable string keyed property of `object` thru
     * `iteratee`. The iteratee is invoked with three arguments:
     * (value, key, object).
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Object} Returns the new mapped object.
     * @see _.mapKeys
     * @example
     *
     * var users = {
     *   'fred':    { 'user': 'fred',    'age': 40 },
     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
     * };
     *
     * _.mapValues(users, function(o) { return o.age; });
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     *
     * // The `_.property` iteratee shorthand.
     * _.mapValues(users, 'age');
     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
     */
    function mapValues(object, iteratee) {
      var result = {};
      iteratee = getIteratee(iteratee, 3);

      baseForOwn(object, function(value, key, object) {
        baseAssignValue(result, key, iteratee(value, key, object));
      });
      return result;
    }

    /**
     * This method is like `_.assign` except that it recursively merges own and
     * inherited enumerable string keyed properties of source objects into the
     * destination object. Source properties that resolve to `undefined` are
     * skipped if a destination value exists. Array and plain object properties
     * are merged recursively. Other objects and value types are overridden by
     * assignment. Source objects are applied from left to right. Subsequent
     * sources overwrite property assignments of previous sources.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 0.5.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} [sources] The source objects.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {
     *   'a': [{ 'b': 2 }, { 'd': 4 }]
     * };
     *
     * var other = {
     *   'a': [{ 'c': 3 }, { 'e': 5 }]
     * };
     *
     * _.merge(object, other);
     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
     */
    var merge = createAssigner(function(object, source, srcIndex) {
      baseMerge(object, source, srcIndex);
    });

    /**
     * This method is like `_.merge` except that it accepts `customizer` which
     * is invoked to produce the merged values of the destination and source
     * properties. If `customizer` returns `undefined`, merging is handled by the
     * method instead. The `customizer` is invoked with six arguments:
     * (objValue, srcValue, key, object, source, stack).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The destination object.
     * @param {...Object} sources The source objects.
     * @param {Function} customizer The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * function customizer(objValue, srcValue) {
     *   if (_.isArray(objValue)) {
     *     return objValue.concat(srcValue);
     *   }
     * }
     *
     * var object = { 'a': [1], 'b': [2] };
     * var other = { 'a': [3], 'b': [4] };
     *
     * _.mergeWith(object, other, customizer);
     * // => { 'a': [1, 3], 'b': [2, 4] }
     */
    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
      baseMerge(object, source, srcIndex, customizer);
    });

    /**
     * The opposite of `_.pick`; this method creates an object composed of the
     * own and inherited enumerable property paths of `object` that are not omitted.
     *
     * **Note:** This method is considerably slower than `_.pick`.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to omit.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omit(object, ['a', 'c']);
     * // => { 'b': '2' }
     */
    var omit = flatRest(function(object, paths) {
      var result = {};
      if (object == null) {
        return result;
      }
      var isDeep = false;
      paths = arrayMap(paths, function(path) {
        path = castPath(path, object);
        isDeep || (isDeep = path.length > 1);
        return path;
      });
      copyObject(object, getAllKeysIn(object), result);
      if (isDeep) {
        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
      }
      var length = paths.length;
      while (length--) {
        baseUnset(result, paths[length]);
      }
      return result;
    });

    /**
     * The opposite of `_.pickBy`; this method creates an object composed of
     * the own and inherited enumerable string keyed properties of `object` that
     * `predicate` doesn't return truthy for. The predicate is invoked with two
     * arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.omitBy(object, _.isNumber);
     * // => { 'b': '2' }
     */
    function omitBy(object, predicate) {
      return pickBy(object, negate(getIteratee(predicate)));
    }

    /**
     * Creates an object composed of the picked `object` properties.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The source object.
     * @param {...(string|string[])} [paths] The property paths to pick.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pick(object, ['a', 'c']);
     * // => { 'a': 1, 'c': 3 }
     */
    var pick = flatRest(function(object, paths) {
      return object == null ? {} : basePick(object, paths);
    });

    /**
     * Creates an object composed of the `object` properties `predicate` returns
     * truthy for. The predicate is invoked with two arguments: (value, key).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The source object.
     * @param {Function} [predicate=_.identity] The function invoked per property.
     * @returns {Object} Returns the new object.
     * @example
     *
     * var object = { 'a': 1, 'b': '2', 'c': 3 };
     *
     * _.pickBy(object, _.isNumber);
     * // => { 'a': 1, 'c': 3 }
     */
    function pickBy(object, predicate) {
      if (object == null) {
        return {};
      }
      var props = arrayMap(getAllKeysIn(object), function(prop) {
        return [prop];
      });
      predicate = getIteratee(predicate);
      return basePickBy(object, props, function(value, path) {
        return predicate(value, path[0]);
      });
    }

    /**
     * This method is like `_.get` except that if the resolved value is a
     * function it's invoked with the `this` binding of its parent object and
     * its result is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @param {Array|string} path The path of the property to resolve.
     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
     *
     * _.result(object, 'a[0].b.c1');
     * // => 3
     *
     * _.result(object, 'a[0].b.c2');
     * // => 4
     *
     * _.result(object, 'a[0].b.c3', 'default');
     * // => 'default'
     *
     * _.result(object, 'a[0].b.c3', _.constant('default'));
     * // => 'default'
     */
    function result(object, path, defaultValue) {
      path = castPath(path, object);

      var index = -1,
          length = path.length;

      // Ensure the loop is entered when path is empty.
      if (!length) {
        length = 1;
        object = undefined;
      }
      while (++index < length) {
        var value = object == null ? undefined : object[toKey(path[index])];
        if (value === undefined) {
          index = length;
          value = defaultValue;
        }
        object = isFunction(value) ? value.call(object) : value;
      }
      return object;
    }

    /**
     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
     * it's created. Arrays are created for missing index properties while objects
     * are created for all other missing properties. Use `_.setWith` to customize
     * `path` creation.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.set(object, 'a[0].b.c', 4);
     * console.log(object.a[0].b.c);
     * // => 4
     *
     * _.set(object, ['x', '0', 'y', 'z'], 5);
     * console.log(object.x[0].y.z);
     * // => 5
     */
    function set(object, path, value) {
      return object == null ? object : baseSet(object, path, value);
    }

    /**
     * This method is like `_.set` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {*} value The value to set.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.setWith(object, '[0][1]', 'a', Object);
     * // => { '0': { '1': 'a' } }
     */
    function setWith(object, path, value, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseSet(object, path, value, customizer);
    }

    /**
     * Creates an array of own enumerable string keyed-value pairs for `object`
     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
     * entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entries
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairs(new Foo);
     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
     */
    var toPairs = createToPairs(keys);

    /**
     * Creates an array of own and inherited enumerable string keyed-value pairs
     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
     * or set, its entries are returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @alias entriesIn
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the key-value pairs.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.toPairsIn(new Foo);
     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
     */
    var toPairsIn = createToPairs(keysIn);

    /**
     * An alternative to `_.reduce`; this method transforms `object` to a new
     * `accumulator` object which is the result of running each of its own
     * enumerable string keyed properties thru `iteratee`, with each invocation
     * potentially mutating the `accumulator` object. If `accumulator` is not
     * provided, a new object with the same `[[Prototype]]` will be used. The
     * iteratee is invoked with four arguments: (accumulator, value, key, object).
     * Iteratee functions may exit iteration early by explicitly returning `false`.
     *
     * @static
     * @memberOf _
     * @since 1.3.0
     * @category Object
     * @param {Object} object The object to iterate over.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @param {*} [accumulator] The custom accumulator value.
     * @returns {*} Returns the accumulated value.
     * @example
     *
     * _.transform([2, 3, 4], function(result, n) {
     *   result.push(n *= n);
     *   return n % 2 == 0;
     * }, []);
     * // => [4, 9]
     *
     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
     *   (result[value] || (result[value] = [])).push(key);
     * }, {});
     * // => { '1': ['a', 'c'], '2': ['b'] }
     */
    function transform(object, iteratee, accumulator) {
      var isArr = isArray(object),
          isArrLike = isArr || isBuffer(object) || isTypedArray(object);

      iteratee = getIteratee(iteratee, 4);
      if (accumulator == null) {
        var Ctor = object && object.constructor;
        if (isArrLike) {
          accumulator = isArr ? new Ctor : [];
        }
        else if (isObject(object)) {
          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
        }
        else {
          accumulator = {};
        }
      }
      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
        return iteratee(accumulator, value, index, object);
      });
      return accumulator;
    }

    /**
     * Removes the property at `path` of `object`.
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to unset.
     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
     * _.unset(object, 'a[0].b.c');
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     *
     * _.unset(object, ['a', '0', 'b', 'c']);
     * // => true
     *
     * console.log(object);
     * // => { 'a': [{ 'b': {} }] };
     */
    function unset(object, path) {
      return object == null ? true : baseUnset(object, path);
    }

    /**
     * This method is like `_.set` except that accepts `updater` to produce the
     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
     * is invoked with one argument: (value).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
     *
     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
     * console.log(object.a[0].b.c);
     * // => 9
     *
     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
     * console.log(object.x[0].y.z);
     * // => 0
     */
    function update(object, path, updater) {
      return object == null ? object : baseUpdate(object, path, castFunction(updater));
    }

    /**
     * This method is like `_.update` except that it accepts `customizer` which is
     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
     * path creation is handled by the method instead. The `customizer` is invoked
     * with three arguments: (nsValue, key, nsObject).
     *
     * **Note:** This method mutates `object`.
     *
     * @static
     * @memberOf _
     * @since 4.6.0
     * @category Object
     * @param {Object} object The object to modify.
     * @param {Array|string} path The path of the property to set.
     * @param {Function} updater The function to produce the updated value.
     * @param {Function} [customizer] The function to customize assigned values.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var object = {};
     *
     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
     * // => { '0': { '1': 'a' } }
     */
    function updateWith(object, path, updater, customizer) {
      customizer = typeof customizer == 'function' ? customizer : undefined;
      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
    }

    /**
     * Creates an array of the own enumerable string keyed property values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.values(new Foo);
     * // => [1, 2] (iteration order is not guaranteed)
     *
     * _.values('hi');
     * // => ['h', 'i']
     */
    function values(object) {
      return object == null ? [] : baseValues(object, keys(object));
    }

    /**
     * Creates an array of the own and inherited enumerable string keyed property
     * values of `object`.
     *
     * **Note:** Non-object values are coerced to objects.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Object
     * @param {Object} object The object to query.
     * @returns {Array} Returns the array of property values.
     * @example
     *
     * function Foo() {
     *   this.a = 1;
     *   this.b = 2;
     * }
     *
     * Foo.prototype.c = 3;
     *
     * _.valuesIn(new Foo);
     * // => [1, 2, 3] (iteration order is not guaranteed)
     */
    function valuesIn(object) {
      return object == null ? [] : baseValues(object, keysIn(object));
    }

    /*------------------------------------------------------------------------*/

    /**
     * Clamps `number` within the inclusive `lower` and `upper` bounds.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Number
     * @param {number} number The number to clamp.
     * @param {number} [lower] The lower bound.
     * @param {number} upper The upper bound.
     * @returns {number} Returns the clamped number.
     * @example
     *
     * _.clamp(-10, -5, 5);
     * // => -5
     *
     * _.clamp(10, -5, 5);
     * // => 5
     */
    function clamp(number, lower, upper) {
      if (upper === undefined) {
        upper = lower;
        lower = undefined;
      }
      if (upper !== undefined) {
        upper = toNumber(upper);
        upper = upper === upper ? upper : 0;
      }
      if (lower !== undefined) {
        lower = toNumber(lower);
        lower = lower === lower ? lower : 0;
      }
      return baseClamp(toNumber(number), lower, upper);
    }

    /**
     * Checks if `n` is between `start` and up to, but not including, `end`. If
     * `end` is not specified, it's set to `start` with `start` then set to `0`.
     * If `start` is greater than `end` the params are swapped to support
     * negative ranges.
     *
     * @static
     * @memberOf _
     * @since 3.3.0
     * @category Number
     * @param {number} number The number to check.
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
     * @see _.range, _.rangeRight
     * @example
     *
     * _.inRange(3, 2, 4);
     * // => true
     *
     * _.inRange(4, 8);
     * // => true
     *
     * _.inRange(4, 2);
     * // => false
     *
     * _.inRange(2, 2);
     * // => false
     *
     * _.inRange(1.2, 2);
     * // => true
     *
     * _.inRange(5.2, 4);
     * // => false
     *
     * _.inRange(-3, -2, -6);
     * // => true
     */
    function inRange(number, start, end) {
      start = toFinite(start);
      if (end === undefined) {
        end = start;
        start = 0;
      } else {
        end = toFinite(end);
      }
      number = toNumber(number);
      return baseInRange(number, start, end);
    }

    /**
     * Produces a random number between the inclusive `lower` and `upper` bounds.
     * If only one argument is provided a number between `0` and the given number
     * is returned. If `floating` is `true`, or either `lower` or `upper` are
     * floats, a floating-point number is returned instead of an integer.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @memberOf _
     * @since 0.7.0
     * @category Number
     * @param {number} [lower=0] The lower bound.
     * @param {number} [upper=1] The upper bound.
     * @param {boolean} [floating] Specify returning a floating-point number.
     * @returns {number} Returns the random number.
     * @example
     *
     * _.random(0, 5);
     * // => an integer between 0 and 5
     *
     * _.random(5);
     * // => also an integer between 0 and 5
     *
     * _.random(5, true);
     * // => a floating-point number between 0 and 5
     *
     * _.random(1.2, 5.2);
     * // => a floating-point number between 1.2 and 5.2
     */
    function random(lower, upper, floating) {
      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
        upper = floating = undefined;
      }
      if (floating === undefined) {
        if (typeof upper == 'boolean') {
          floating = upper;
          upper = undefined;
        }
        else if (typeof lower == 'boolean') {
          floating = lower;
          lower = undefined;
        }
      }
      if (lower === undefined && upper === undefined) {
        lower = 0;
        upper = 1;
      }
      else {
        lower = toFinite(lower);
        if (upper === undefined) {
          upper = lower;
          lower = 0;
        } else {
          upper = toFinite(upper);
        }
      }
      if (lower > upper) {
        var temp = lower;
        lower = upper;
        upper = temp;
      }
      if (floating || lower % 1 || upper % 1) {
        var rand = nativeRandom();
        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
      }
      return baseRandom(lower, upper);
    }

    /*------------------------------------------------------------------------*/

    /**
     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the camel cased string.
     * @example
     *
     * _.camelCase('Foo Bar');
     * // => 'fooBar'
     *
     * _.camelCase('--foo-bar--');
     * // => 'fooBar'
     *
     * _.camelCase('__FOO_BAR__');
     * // => 'fooBar'
     */
    var camelCase = createCompounder(function(result, word, index) {
      word = word.toLowerCase();
      return result + (index ? capitalize(word) : word);
    });

    /**
     * Converts the first character of `string` to upper case and the remaining
     * to lower case.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to capitalize.
     * @returns {string} Returns the capitalized string.
     * @example
     *
     * _.capitalize('FRED');
     * // => 'Fred'
     */
    function capitalize(string) {
      return upperFirst(toString(string).toLowerCase());
    }

    /**
     * Deburrs `string` by converting
     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
     * letters to basic Latin letters and removing
     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to deburr.
     * @returns {string} Returns the deburred string.
     * @example
     *
     * _.deburr('déjà vu');
     * // => 'deja vu'
     */
    function deburr(string) {
      string = toString(string);
      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
    }

    /**
     * Checks if `string` ends with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=string.length] The position to search up to.
     * @returns {boolean} Returns `true` if `string` ends with `target`,
     *  else `false`.
     * @example
     *
     * _.endsWith('abc', 'c');
     * // => true
     *
     * _.endsWith('abc', 'b');
     * // => false
     *
     * _.endsWith('abc', 'b', 2);
     * // => true
     */
    function endsWith(string, target, position) {
      string = toString(string);
      target = baseToString(target);

      var length = string.length;
      position = position === undefined
        ? length
        : baseClamp(toInteger(position), 0, length);

      var end = position;
      position -= target.length;
      return position >= 0 && string.slice(position, end) == target;
    }

    /**
     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
     * corresponding HTML entities.
     *
     * **Note:** No other characters are escaped. To escape additional
     * characters use a third-party library like [_he_](https://mths.be/he).
     *
     * Though the ">" character is escaped for symmetry, characters like
     * ">" and "/" don't need escaping in HTML and have no special meaning
     * unless they're part of a tag or unquoted attribute value. See
     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
     * (under "semi-related fun fact") for more details.
     *
     * When working with HTML you should always
     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
     * XSS vectors.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escape('fred, barney, & pebbles');
     * // => 'fred, barney, &amp; pebbles'
     */
    function escape(string) {
      string = toString(string);
      return (string && reHasUnescapedHtml.test(string))
        ? string.replace(reUnescapedHtml, escapeHtmlChar)
        : string;
    }

    /**
     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to escape.
     * @returns {string} Returns the escaped string.
     * @example
     *
     * _.escapeRegExp('[lodash](https://lodash.com/)');
     * // => '\[lodash\]\(https://lodash\.com/\)'
     */
    function escapeRegExp(string) {
      string = toString(string);
      return (string && reHasRegExpChar.test(string))
        ? string.replace(reRegExpChar, '\\$&')
        : string;
    }

    /**
     * Converts `string` to
     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the kebab cased string.
     * @example
     *
     * _.kebabCase('Foo Bar');
     * // => 'foo-bar'
     *
     * _.kebabCase('fooBar');
     * // => 'foo-bar'
     *
     * _.kebabCase('__FOO_BAR__');
     * // => 'foo-bar'
     */
    var kebabCase = createCompounder(function(result, word, index) {
      return result + (index ? '-' : '') + word.toLowerCase();
    });

    /**
     * Converts `string`, as space separated words, to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.lowerCase('--Foo-Bar--');
     * // => 'foo bar'
     *
     * _.lowerCase('fooBar');
     * // => 'foo bar'
     *
     * _.lowerCase('__FOO_BAR__');
     * // => 'foo bar'
     */
    var lowerCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toLowerCase();
    });

    /**
     * Converts the first character of `string` to lower case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.lowerFirst('Fred');
     * // => 'fred'
     *
     * _.lowerFirst('FRED');
     * // => 'fRED'
     */
    var lowerFirst = createCaseFirst('toLowerCase');

    /**
     * Pads `string` on the left and right sides if it's shorter than `length`.
     * Padding characters are truncated if they can't be evenly divided by `length`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.pad('abc', 8);
     * // => '  abc   '
     *
     * _.pad('abc', 8, '_-');
     * // => '_-abc_-_'
     *
     * _.pad('abc', 3);
     * // => 'abc'
     */
    function pad(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      if (!length || strLength >= length) {
        return string;
      }
      var mid = (length - strLength) / 2;
      return (
        createPadding(nativeFloor(mid), chars) +
        string +
        createPadding(nativeCeil(mid), chars)
      );
    }

    /**
     * Pads `string` on the right side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padEnd('abc', 6);
     * // => 'abc   '
     *
     * _.padEnd('abc', 6, '_-');
     * // => 'abc_-_'
     *
     * _.padEnd('abc', 3);
     * // => 'abc'
     */
    function padEnd(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (string + createPadding(length - strLength, chars))
        : string;
    }

    /**
     * Pads `string` on the left side if it's shorter than `length`. Padding
     * characters are truncated if they exceed `length`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to pad.
     * @param {number} [length=0] The padding length.
     * @param {string} [chars=' '] The string used as padding.
     * @returns {string} Returns the padded string.
     * @example
     *
     * _.padStart('abc', 6);
     * // => '   abc'
     *
     * _.padStart('abc', 6, '_-');
     * // => '_-_abc'
     *
     * _.padStart('abc', 3);
     * // => 'abc'
     */
    function padStart(string, length, chars) {
      string = toString(string);
      length = toInteger(length);

      var strLength = length ? stringSize(string) : 0;
      return (length && strLength < length)
        ? (createPadding(length - strLength, chars) + string)
        : string;
    }

    /**
     * Converts `string` to an integer of the specified radix. If `radix` is
     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
     * hexadecimal, in which case a `radix` of `16` is used.
     *
     * **Note:** This method aligns with the
     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
     *
     * @static
     * @memberOf _
     * @since 1.1.0
     * @category String
     * @param {string} string The string to convert.
     * @param {number} [radix=10] The radix to interpret `value` by.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {number} Returns the converted integer.
     * @example
     *
     * _.parseInt('08');
     * // => 8
     *
     * _.map(['6', '08', '10'], _.parseInt);
     * // => [6, 8, 10]
     */
    function parseInt(string, radix, guard) {
      if (guard || radix == null) {
        radix = 0;
      } else if (radix) {
        radix = +radix;
      }
      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
    }

    /**
     * Repeats the given string `n` times.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to repeat.
     * @param {number} [n=1] The number of times to repeat the string.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the repeated string.
     * @example
     *
     * _.repeat('*', 3);
     * // => '***'
     *
     * _.repeat('abc', 2);
     * // => 'abcabc'
     *
     * _.repeat('abc', 0);
     * // => ''
     */
    function repeat(string, n, guard) {
      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
        n = 1;
      } else {
        n = toInteger(n);
      }
      return baseRepeat(toString(string), n);
    }

    /**
     * Replaces matches for `pattern` in `string` with `replacement`.
     *
     * **Note:** This method is based on
     * [`String#replace`](https://mdn.io/String/replace).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to modify.
     * @param {RegExp|string} pattern The pattern to replace.
     * @param {Function|string} replacement The match replacement.
     * @returns {string} Returns the modified string.
     * @example
     *
     * _.replace('Hi Fred', 'Fred', 'Barney');
     * // => 'Hi Barney'
     */
    function replace() {
      var args = arguments,
          string = toString(args[0]);

      return args.length < 3 ? string : string.replace(args[1], args[2]);
    }

    /**
     * Converts `string` to
     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the snake cased string.
     * @example
     *
     * _.snakeCase('Foo Bar');
     * // => 'foo_bar'
     *
     * _.snakeCase('fooBar');
     * // => 'foo_bar'
     *
     * _.snakeCase('--FOO-BAR--');
     * // => 'foo_bar'
     */
    var snakeCase = createCompounder(function(result, word, index) {
      return result + (index ? '_' : '') + word.toLowerCase();
    });

    /**
     * Splits `string` by `separator`.
     *
     * **Note:** This method is based on
     * [`String#split`](https://mdn.io/String/split).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to split.
     * @param {RegExp|string} separator The separator pattern to split by.
     * @param {number} [limit] The length to truncate results to.
     * @returns {Array} Returns the string segments.
     * @example
     *
     * _.split('a-b-c', '-', 2);
     * // => ['a', 'b']
     */
    function split(string, separator, limit) {
      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
        separator = limit = undefined;
      }
      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
      if (!limit) {
        return [];
      }
      string = toString(string);
      if (string && (
            typeof separator == 'string' ||
            (separator != null && !isRegExp(separator))
          )) {
        separator = baseToString(separator);
        if (!separator && hasUnicode(string)) {
          return castSlice(stringToArray(string), 0, limit);
        }
      }
      return string.split(separator, limit);
    }

    /**
     * Converts `string` to
     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
     *
     * @static
     * @memberOf _
     * @since 3.1.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the start cased string.
     * @example
     *
     * _.startCase('--foo-bar--');
     * // => 'Foo Bar'
     *
     * _.startCase('fooBar');
     * // => 'Foo Bar'
     *
     * _.startCase('__FOO_BAR__');
     * // => 'FOO BAR'
     */
    var startCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + upperFirst(word);
    });

    /**
     * Checks if `string` starts with the given target string.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {string} [target] The string to search for.
     * @param {number} [position=0] The position to search from.
     * @returns {boolean} Returns `true` if `string` starts with `target`,
     *  else `false`.
     * @example
     *
     * _.startsWith('abc', 'a');
     * // => true
     *
     * _.startsWith('abc', 'b');
     * // => false
     *
     * _.startsWith('abc', 'b', 1);
     * // => true
     */
    function startsWith(string, target, position) {
      string = toString(string);
      position = position == null
        ? 0
        : baseClamp(toInteger(position), 0, string.length);

      target = baseToString(target);
      return string.slice(position, position + target.length) == target;
    }

    /**
     * Creates a compiled template function that can interpolate data properties
     * in "interpolate" delimiters, HTML-escape interpolated data properties in
     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
     * properties may be accessed as free variables in the template. If a setting
     * object is given, it takes precedence over `_.templateSettings` values.
     *
     * **Note:** In the development build `_.template` utilizes
     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
     * for easier debugging.
     *
     * For more information on precompiling templates see
     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
     *
     * For more information on Chrome extension sandboxes see
     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category String
     * @param {string} [string=''] The template string.
     * @param {Object} [options={}] The options object.
     * @param {RegExp} [options.escape=_.templateSettings.escape]
     *  The HTML "escape" delimiter.
     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
     *  The "evaluate" delimiter.
     * @param {Object} [options.imports=_.templateSettings.imports]
     *  An object to import into the template as free variables.
     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
     *  The "interpolate" delimiter.
     * @param {string} [options.sourceURL='lodash.templateSources[n]']
     *  The sourceURL of the compiled template.
     * @param {string} [options.variable='obj']
     *  The data object variable name.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Function} Returns the compiled template function.
     * @example
     *
     * // Use the "interpolate" delimiter to create a compiled template.
     * var compiled = _.template('hello <%= user %>!');
     * compiled({ 'user': 'fred' });
     * // => 'hello fred!'
     *
     * // Use the HTML "escape" delimiter to escape data property values.
     * var compiled = _.template('<b><%- value %></b>');
     * compiled({ 'value': '<script>' });
     * // => '<b>&lt;script&gt;</b>'
     *
     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the internal `print` function in "evaluate" delimiters.
     * var compiled = _.template('<% print("hello " + user); %>!');
     * compiled({ 'user': 'barney' });
     * // => 'hello barney!'
     *
     * // Use the ES template literal delimiter as an "interpolate" delimiter.
     * // Disable support by replacing the "interpolate" delimiter.
     * var compiled = _.template('hello ${ user }!');
     * compiled({ 'user': 'pebbles' });
     * // => 'hello pebbles!'
     *
     * // Use backslashes to treat delimiters as plain text.
     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
     * compiled({ 'value': 'ignored' });
     * // => '<%- value %>'
     *
     * // Use the `imports` option to import `jQuery` as `jq`.
     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
     * compiled({ 'users': ['fred', 'barney'] });
     * // => '<li>fred</li><li>barney</li>'
     *
     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
     * compiled(data);
     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
     *
     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
     * compiled.source;
     * // => function(data) {
     * //   var __t, __p = '';
     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
     * //   return __p;
     * // }
     *
     * // Use custom template delimiters.
     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
     * var compiled = _.template('hello {{ user }}!');
     * compiled({ 'user': 'mustache' });
     * // => 'hello mustache!'
     *
     * // Use the `source` property to inline compiled templates for meaningful
     * // line numbers in error messages and stack traces.
     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
     *   var JST = {\
     *     "main": ' + _.template(mainText).source + '\
     *   };\
     * ');
     */
    function template(string, options, guard) {
      // Based on John Resig's `tmpl` implementation
      // (http://ejohn.org/blog/javascript-micro-templating/)
      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
      var settings = lodash.templateSettings;

      if (guard && isIterateeCall(string, options, guard)) {
        options = undefined;
      }
      string = toString(string);
      options = assignInWith({}, options, settings, customDefaultsAssignIn);

      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
          importsKeys = keys(imports),
          importsValues = baseValues(imports, importsKeys);

      var isEscaping,
          isEvaluating,
          index = 0,
          interpolate = options.interpolate || reNoMatch,
          source = "__p += '";

      // Compile the regexp to match each delimiter.
      var reDelimiters = RegExp(
        (options.escape || reNoMatch).source + '|' +
        interpolate.source + '|' +
        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
        (options.evaluate || reNoMatch).source + '|$'
      , 'g');

      // Use a sourceURL for easier debugging.
      // The sourceURL gets injected into the source that's eval-ed, so be careful
      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
      // and escape the comment, thus injecting code that gets evaled.
      var sourceURL = '//# sourceURL=' +
        (hasOwnProperty.call(options, 'sourceURL')
          ? (options.sourceURL + '').replace(/\s/g, ' ')
          : ('lodash.templateSources[' + (++templateCounter) + ']')
        ) + '\n';

      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
        interpolateValue || (interpolateValue = esTemplateValue);

        // Escape characters that can't be included in string literals.
        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);

        // Replace delimiters with snippets.
        if (escapeValue) {
          isEscaping = true;
          source += "' +\n__e(" + escapeValue + ") +\n'";
        }
        if (evaluateValue) {
          isEvaluating = true;
          source += "';\n" + evaluateValue + ";\n__p += '";
        }
        if (interpolateValue) {
          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
        }
        index = offset + match.length;

        // The JS engine embedded in Adobe products needs `match` returned in
        // order to produce the correct `offset` value.
        return match;
      });

      source += "';\n";

      // If `variable` is not specified wrap a with-statement around the generated
      // code to add the data object to the top of the scope chain.
      var variable = hasOwnProperty.call(options, 'variable') && options.variable;
      if (!variable) {
        source = 'with (obj) {\n' + source + '\n}\n';
      }
      // Cleanup code by stripping empty strings.
      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
        .replace(reEmptyStringMiddle, '$1')
        .replace(reEmptyStringTrailing, '$1;');

      // Frame code as the function body.
      source = 'function(' + (variable || 'obj') + ') {\n' +
        (variable
          ? ''
          : 'obj || (obj = {});\n'
        ) +
        "var __t, __p = ''" +
        (isEscaping
           ? ', __e = _.escape'
           : ''
        ) +
        (isEvaluating
          ? ', __j = Array.prototype.join;\n' +
            "function print() { __p += __j.call(arguments, '') }\n"
          : ';\n'
        ) +
        source +
        'return __p\n}';

      var result = attempt(function() {
        return Function(importsKeys, sourceURL + 'return ' + source)
          .apply(undefined, importsValues);
      });

      // Provide the compiled function's source by its `toString` method or
      // the `source` property as a convenience for inlining compiled templates.
      result.source = source;
      if (isError(result)) {
        throw result;
      }
      return result;
    }

    /**
     * Converts `string`, as a whole, to lower case just like
     * [String#toLowerCase](https://mdn.io/toLowerCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the lower cased string.
     * @example
     *
     * _.toLower('--Foo-Bar--');
     * // => '--foo-bar--'
     *
     * _.toLower('fooBar');
     * // => 'foobar'
     *
     * _.toLower('__FOO_BAR__');
     * // => '__foo_bar__'
     */
    function toLower(value) {
      return toString(value).toLowerCase();
    }

    /**
     * Converts `string`, as a whole, to upper case just like
     * [String#toUpperCase](https://mdn.io/toUpperCase).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.toUpper('--foo-bar--');
     * // => '--FOO-BAR--'
     *
     * _.toUpper('fooBar');
     * // => 'FOOBAR'
     *
     * _.toUpper('__foo_bar__');
     * // => '__FOO_BAR__'
     */
    function toUpper(value) {
      return toString(value).toUpperCase();
    }

    /**
     * Removes leading and trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trim('  abc  ');
     * // => 'abc'
     *
     * _.trim('-_-abc-_-', '_-');
     * // => 'abc'
     *
     * _.map(['  foo  ', '  bar  '], _.trim);
     * // => ['foo', 'bar']
     */
    function trim(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrim, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          chrSymbols = stringToArray(chars),
          start = charsStartIndex(strSymbols, chrSymbols),
          end = charsEndIndex(strSymbols, chrSymbols) + 1;

      return castSlice(strSymbols, start, end).join('');
    }

    /**
     * Removes trailing whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimEnd('  abc  ');
     * // => '  abc'
     *
     * _.trimEnd('-_-abc-_-', '_-');
     * // => '-_-abc'
     */
    function trimEnd(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimEnd, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;

      return castSlice(strSymbols, 0, end).join('');
    }

    /**
     * Removes leading whitespace or specified characters from `string`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to trim.
     * @param {string} [chars=whitespace] The characters to trim.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {string} Returns the trimmed string.
     * @example
     *
     * _.trimStart('  abc  ');
     * // => 'abc  '
     *
     * _.trimStart('-_-abc-_-', '_-');
     * // => 'abc-_-'
     */
    function trimStart(string, chars, guard) {
      string = toString(string);
      if (string && (guard || chars === undefined)) {
        return string.replace(reTrimStart, '');
      }
      if (!string || !(chars = baseToString(chars))) {
        return string;
      }
      var strSymbols = stringToArray(string),
          start = charsStartIndex(strSymbols, stringToArray(chars));

      return castSlice(strSymbols, start).join('');
    }

    /**
     * Truncates `string` if it's longer than the given maximum string length.
     * The last characters of the truncated string are replaced with the omission
     * string which defaults to "...".
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to truncate.
     * @param {Object} [options={}] The options object.
     * @param {number} [options.length=30] The maximum string length.
     * @param {string} [options.omission='...'] The string to indicate text is omitted.
     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
     * @returns {string} Returns the truncated string.
     * @example
     *
     * _.truncate('hi-diddly-ho there, neighborino');
     * // => 'hi-diddly-ho there, neighbo...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': ' '
     * });
     * // => 'hi-diddly-ho there,...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'length': 24,
     *   'separator': /,? +/
     * });
     * // => 'hi-diddly-ho there...'
     *
     * _.truncate('hi-diddly-ho there, neighborino', {
     *   'omission': ' [...]'
     * });
     * // => 'hi-diddly-ho there, neig [...]'
     */
    function truncate(string, options) {
      var length = DEFAULT_TRUNC_LENGTH,
          omission = DEFAULT_TRUNC_OMISSION;

      if (isObject(options)) {
        var separator = 'separator' in options ? options.separator : separator;
        length = 'length' in options ? toInteger(options.length) : length;
        omission = 'omission' in options ? baseToString(options.omission) : omission;
      }
      string = toString(string);

      var strLength = string.length;
      if (hasUnicode(string)) {
        var strSymbols = stringToArray(string);
        strLength = strSymbols.length;
      }
      if (length >= strLength) {
        return string;
      }
      var end = length - stringSize(omission);
      if (end < 1) {
        return omission;
      }
      var result = strSymbols
        ? castSlice(strSymbols, 0, end).join('')
        : string.slice(0, end);

      if (separator === undefined) {
        return result + omission;
      }
      if (strSymbols) {
        end += (result.length - end);
      }
      if (isRegExp(separator)) {
        if (string.slice(end).search(separator)) {
          var match,
              substring = result;

          if (!separator.global) {
            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
          }
          separator.lastIndex = 0;
          while ((match = separator.exec(substring))) {
            var newEnd = match.index;
          }
          result = result.slice(0, newEnd === undefined ? end : newEnd);
        }
      } else if (string.indexOf(baseToString(separator), end) != end) {
        var index = result.lastIndexOf(separator);
        if (index > -1) {
          result = result.slice(0, index);
        }
      }
      return result + omission;
    }

    /**
     * The inverse of `_.escape`; this method converts the HTML entities
     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
     * their corresponding characters.
     *
     * **Note:** No other HTML entities are unescaped. To unescape additional
     * HTML entities use a third-party library like [_he_](https://mths.be/he).
     *
     * @static
     * @memberOf _
     * @since 0.6.0
     * @category String
     * @param {string} [string=''] The string to unescape.
     * @returns {string} Returns the unescaped string.
     * @example
     *
     * _.unescape('fred, barney, &amp; pebbles');
     * // => 'fred, barney, & pebbles'
     */
    function unescape(string) {
      string = toString(string);
      return (string && reHasEscapedHtml.test(string))
        ? string.replace(reEscapedHtml, unescapeHtmlChar)
        : string;
    }

    /**
     * Converts `string`, as space separated words, to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the upper cased string.
     * @example
     *
     * _.upperCase('--foo-bar');
     * // => 'FOO BAR'
     *
     * _.upperCase('fooBar');
     * // => 'FOO BAR'
     *
     * _.upperCase('__foo_bar__');
     * // => 'FOO BAR'
     */
    var upperCase = createCompounder(function(result, word, index) {
      return result + (index ? ' ' : '') + word.toUpperCase();
    });

    /**
     * Converts the first character of `string` to upper case.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category String
     * @param {string} [string=''] The string to convert.
     * @returns {string} Returns the converted string.
     * @example
     *
     * _.upperFirst('fred');
     * // => 'Fred'
     *
     * _.upperFirst('FRED');
     * // => 'FRED'
     */
    var upperFirst = createCaseFirst('toUpperCase');

    /**
     * Splits `string` into an array of its words.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category String
     * @param {string} [string=''] The string to inspect.
     * @param {RegExp|string} [pattern] The pattern to match words.
     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
     * @returns {Array} Returns the words of `string`.
     * @example
     *
     * _.words('fred, barney, & pebbles');
     * // => ['fred', 'barney', 'pebbles']
     *
     * _.words('fred, barney, & pebbles', /[^, ]+/g);
     * // => ['fred', 'barney', '&', 'pebbles']
     */
    function words(string, pattern, guard) {
      string = toString(string);
      pattern = guard ? undefined : pattern;

      if (pattern === undefined) {
        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
      }
      return string.match(pattern) || [];
    }

    /*------------------------------------------------------------------------*/

    /**
     * Attempts to invoke `func`, returning either the result or the caught error
     * object. Any additional arguments are provided to `func` when it's invoked.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Function} func The function to attempt.
     * @param {...*} [args] The arguments to invoke `func` with.
     * @returns {*} Returns the `func` result or error object.
     * @example
     *
     * // Avoid throwing errors for invalid selectors.
     * var elements = _.attempt(function(selector) {
     *   return document.querySelectorAll(selector);
     * }, '>_>');
     *
     * if (_.isError(elements)) {
     *   elements = [];
     * }
     */
    var attempt = baseRest(function(func, args) {
      try {
        return apply(func, undefined, args);
      } catch (e) {
        return isError(e) ? e : new Error(e);
      }
    });

    /**
     * Binds methods of an object to the object itself, overwriting the existing
     * method.
     *
     * **Note:** This method doesn't set the "length" property of bound functions.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Object} object The object to bind and assign the bound methods to.
     * @param {...(string|string[])} methodNames The object method names to bind.
     * @returns {Object} Returns `object`.
     * @example
     *
     * var view = {
     *   'label': 'docs',
     *   'click': function() {
     *     console.log('clicked ' + this.label);
     *   }
     * };
     *
     * _.bindAll(view, ['click']);
     * jQuery(element).on('click', view.click);
     * // => Logs 'clicked docs' when clicked.
     */
    var bindAll = flatRest(function(object, methodNames) {
      arrayEach(methodNames, function(key) {
        key = toKey(key);
        baseAssignValue(object, key, bind(object[key], object));
      });
      return object;
    });

    /**
     * Creates a function that iterates over `pairs` and invokes the corresponding
     * function of the first predicate to return truthy. The predicate-function
     * pairs are invoked with the `this` binding and arguments of the created
     * function.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Array} pairs The predicate-function pairs.
     * @returns {Function} Returns the new composite function.
     * @example
     *
     * var func = _.cond([
     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
     *   [_.stubTrue,                      _.constant('no match')]
     * ]);
     *
     * func({ 'a': 1, 'b': 2 });
     * // => 'matches A'
     *
     * func({ 'a': 0, 'b': 1 });
     * // => 'matches B'
     *
     * func({ 'a': '1', 'b': '2' });
     * // => 'no match'
     */
    function cond(pairs) {
      var length = pairs == null ? 0 : pairs.length,
          toIteratee = getIteratee();

      pairs = !length ? [] : arrayMap(pairs, function(pair) {
        if (typeof pair[1] != 'function') {
          throw new TypeError(FUNC_ERROR_TEXT);
        }
        return [toIteratee(pair[0]), pair[1]];
      });

      return baseRest(function(args) {
        var index = -1;
        while (++index < length) {
          var pair = pairs[index];
          if (apply(pair[0], this, args)) {
            return apply(pair[1], this, args);
          }
        }
      });
    }

    /**
     * Creates a function that invokes the predicate properties of `source` with
     * the corresponding property values of a given object, returning `true` if
     * all predicates return truthy, else `false`.
     *
     * **Note:** The created function is equivalent to `_.conformsTo` with
     * `source` partially applied.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {Object} source The object of property predicates to conform to.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 2, 'b': 1 },
     *   { 'a': 1, 'b': 2 }
     * ];
     *
     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
     * // => [{ 'a': 1, 'b': 2 }]
     */
    function conforms(source) {
      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that returns `value`.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {*} value The value to return from the new function.
     * @returns {Function} Returns the new constant function.
     * @example
     *
     * var objects = _.times(2, _.constant({ 'a': 1 }));
     *
     * console.log(objects);
     * // => [{ 'a': 1 }, { 'a': 1 }]
     *
     * console.log(objects[0] === objects[1]);
     * // => true
     */
    function constant(value) {
      return function() {
        return value;
      };
    }

    /**
     * Checks `value` to determine whether a default value should be returned in
     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
     * or `undefined`.
     *
     * @static
     * @memberOf _
     * @since 4.14.0
     * @category Util
     * @param {*} value The value to check.
     * @param {*} defaultValue The default value.
     * @returns {*} Returns the resolved value.
     * @example
     *
     * _.defaultTo(1, 10);
     * // => 1
     *
     * _.defaultTo(undefined, 10);
     * // => 10
     */
    function defaultTo(value, defaultValue) {
      return (value == null || value !== value) ? defaultValue : value;
    }

    /**
     * Creates a function that returns the result of invoking the given functions
     * with the `this` binding of the created function, where each successive
     * invocation is supplied the return value of the previous.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flowRight
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flow([_.add, square]);
     * addSquare(1, 2);
     * // => 9
     */
    var flow = createFlow();

    /**
     * This method is like `_.flow` except that it creates a function that
     * invokes the given functions from right to left.
     *
     * @static
     * @since 3.0.0
     * @memberOf _
     * @category Util
     * @param {...(Function|Function[])} [funcs] The functions to invoke.
     * @returns {Function} Returns the new composite function.
     * @see _.flow
     * @example
     *
     * function square(n) {
     *   return n * n;
     * }
     *
     * var addSquare = _.flowRight([square, _.add]);
     * addSquare(1, 2);
     * // => 9
     */
    var flowRight = createFlow(true);

    /**
     * This method returns the first argument it receives.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {*} value Any value.
     * @returns {*} Returns `value`.
     * @example
     *
     * var object = { 'a': 1 };
     *
     * console.log(_.identity(object) === object);
     * // => true
     */
    function identity(value) {
      return value;
    }

    /**
     * Creates a function that invokes `func` with the arguments of the created
     * function. If `func` is a property name, the created function returns the
     * property value for a given element. If `func` is an array or object, the
     * created function returns `true` for elements that contain the equivalent
     * source properties, otherwise it returns `false`.
     *
     * @static
     * @since 4.0.0
     * @memberOf _
     * @category Util
     * @param {*} [func=_.identity] The value to convert to a callback.
     * @returns {Function} Returns the callback.
     * @example
     *
     * var users = [
     *   { 'user': 'barney', 'age': 36, 'active': true },
     *   { 'user': 'fred',   'age': 40, 'active': false }
     * ];
     *
     * // The `_.matches` iteratee shorthand.
     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
     *
     * // The `_.matchesProperty` iteratee shorthand.
     * _.filter(users, _.iteratee(['user', 'fred']));
     * // => [{ 'user': 'fred', 'age': 40 }]
     *
     * // The `_.property` iteratee shorthand.
     * _.map(users, _.iteratee('user'));
     * // => ['barney', 'fred']
     *
     * // Create custom iteratee shorthands.
     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
     *     return func.test(string);
     *   };
     * });
     *
     * _.filter(['abc', 'def'], /ef/);
     * // => ['def']
     */
    function iteratee(func) {
      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between a given
     * object and `source`, returning `true` if the given object has equivalent
     * property values, else `false`.
     *
     * **Note:** The created function is equivalent to `_.isMatch` with `source`
     * partially applied.
     *
     * Partial comparisons will match empty array and empty object `source`
     * values against any array or object value, respectively. See `_.isEqual`
     * for a list of supported value comparisons.
     *
     * **Note:** Multiple values can be checked by combining several matchers
     * using `_.overSome`
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} source The object of property values to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
     *
     * // Checking for several possible values
     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matches(source) {
      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that performs a partial deep comparison between the
     * value at `path` of a given object to `srcValue`, returning `true` if the
     * object value is equivalent, else `false`.
     *
     * **Note:** Partial comparisons will match empty array and empty object
     * `srcValue` values against any array or object value, respectively. See
     * `_.isEqual` for a list of supported value comparisons.
     *
     * **Note:** Multiple values can be checked by combining several matchers
     * using `_.overSome`
     *
     * @static
     * @memberOf _
     * @since 3.2.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @param {*} srcValue The value to match.
     * @returns {Function} Returns the new spec function.
     * @example
     *
     * var objects = [
     *   { 'a': 1, 'b': 2, 'c': 3 },
     *   { 'a': 4, 'b': 5, 'c': 6 }
     * ];
     *
     * _.find(objects, _.matchesProperty('a', 4));
     * // => { 'a': 4, 'b': 5, 'c': 6 }
     *
     * // Checking for several possible values
     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
     */
    function matchesProperty(path, srcValue) {
      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
    }

    /**
     * Creates a function that invokes the method at `path` of a given object.
     * Any additional arguments are provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Array|string} path The path of the method to invoke.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': _.constant(2) } },
     *   { 'a': { 'b': _.constant(1) } }
     * ];
     *
     * _.map(objects, _.method('a.b'));
     * // => [2, 1]
     *
     * _.map(objects, _.method(['a', 'b']));
     * // => [2, 1]
     */
    var method = baseRest(function(path, args) {
      return function(object) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * The opposite of `_.method`; this method creates a function that invokes
     * the method at a given path of `object`. Any additional arguments are
     * provided to the invoked method.
     *
     * @static
     * @memberOf _
     * @since 3.7.0
     * @category Util
     * @param {Object} object The object to query.
     * @param {...*} [args] The arguments to invoke the method with.
     * @returns {Function} Returns the new invoker function.
     * @example
     *
     * var array = _.times(3, _.constant),
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
     * // => [2, 0]
     */
    var methodOf = baseRest(function(object, args) {
      return function(path) {
        return baseInvoke(object, path, args);
      };
    });

    /**
     * Adds all own enumerable string keyed function properties of a source
     * object to the destination object. If `object` is a function, then methods
     * are added to its prototype as well.
     *
     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
     * avoid conflicts caused by modifying the original.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {Function|Object} [object=lodash] The destination object.
     * @param {Object} source The object of functions to add.
     * @param {Object} [options={}] The options object.
     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
     * @returns {Function|Object} Returns `object`.
     * @example
     *
     * function vowels(string) {
     *   return _.filter(string, function(v) {
     *     return /[aeiou]/i.test(v);
     *   });
     * }
     *
     * _.mixin({ 'vowels': vowels });
     * _.vowels('fred');
     * // => ['e']
     *
     * _('fred').vowels().value();
     * // => ['e']
     *
     * _.mixin({ 'vowels': vowels }, { 'chain': false });
     * _('fred').vowels();
     * // => ['e']
     */
    function mixin(object, source, options) {
      var props = keys(source),
          methodNames = baseFunctions(source, props);

      if (options == null &&
          !(isObject(source) && (methodNames.length || !props.length))) {
        options = source;
        source = object;
        object = this;
        methodNames = baseFunctions(source, keys(source));
      }
      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
          isFunc = isFunction(object);

      arrayEach(methodNames, function(methodName) {
        var func = source[methodName];
        object[methodName] = func;
        if (isFunc) {
          object.prototype[methodName] = function() {
            var chainAll = this.__chain__;
            if (chain || chainAll) {
              var result = object(this.__wrapped__),
                  actions = result.__actions__ = copyArray(this.__actions__);

              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
              result.__chain__ = chainAll;
              return result;
            }
            return func.apply(object, arrayPush([this.value()], arguments));
          };
        }
      });

      return object;
    }

    /**
     * Reverts the `_` variable to its previous value and returns a reference to
     * the `lodash` function.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @returns {Function} Returns the `lodash` function.
     * @example
     *
     * var lodash = _.noConflict();
     */
    function noConflict() {
      if (root._ === this) {
        root._ = oldDash;
      }
      return this;
    }

    /**
     * This method returns `undefined`.
     *
     * @static
     * @memberOf _
     * @since 2.3.0
     * @category Util
     * @example
     *
     * _.times(2, _.noop);
     * // => [undefined, undefined]
     */
    function noop() {
      // No operation performed.
    }

    /**
     * Creates a function that gets the argument at index `n`. If `n` is negative,
     * the nth argument from the end is returned.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [n=0] The index of the argument to return.
     * @returns {Function} Returns the new pass-thru function.
     * @example
     *
     * var func = _.nthArg(1);
     * func('a', 'b', 'c', 'd');
     * // => 'b'
     *
     * var func = _.nthArg(-2);
     * func('a', 'b', 'c', 'd');
     * // => 'c'
     */
    function nthArg(n) {
      n = toInteger(n);
      return baseRest(function(args) {
        return baseNth(args, n);
      });
    }

    /**
     * Creates a function that invokes `iteratees` with the arguments it receives
     * and returns their results.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [iteratees=[_.identity]]
     *  The iteratees to invoke.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.over([Math.max, Math.min]);
     *
     * func(1, 2, 3, 4);
     * // => [4, 1]
     */
    var over = createOver(arrayMap);

    /**
     * Creates a function that checks if **all** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * Following shorthands are possible for providing predicates.
     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overEvery([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => false
     *
     * func(NaN);
     * // => false
     */
    var overEvery = createOver(arrayEvery);

    /**
     * Creates a function that checks if **any** of the `predicates` return
     * truthy when invoked with the arguments it receives.
     *
     * Following shorthands are possible for providing predicates.
     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {...(Function|Function[])} [predicates=[_.identity]]
     *  The predicates to check.
     * @returns {Function} Returns the new function.
     * @example
     *
     * var func = _.overSome([Boolean, isFinite]);
     *
     * func('1');
     * // => true
     *
     * func(null);
     * // => true
     *
     * func(NaN);
     * // => false
     *
     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
     */
    var overSome = createOver(arraySome);

    /**
     * Creates a function that returns the value at `path` of a given object.
     *
     * @static
     * @memberOf _
     * @since 2.4.0
     * @category Util
     * @param {Array|string} path The path of the property to get.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var objects = [
     *   { 'a': { 'b': 2 } },
     *   { 'a': { 'b': 1 } }
     * ];
     *
     * _.map(objects, _.property('a.b'));
     * // => [2, 1]
     *
     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
     * // => [1, 2]
     */
    function property(path) {
      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
    }

    /**
     * The opposite of `_.property`; this method creates a function that returns
     * the value at a given path of `object`.
     *
     * @static
     * @memberOf _
     * @since 3.0.0
     * @category Util
     * @param {Object} object The object to query.
     * @returns {Function} Returns the new accessor function.
     * @example
     *
     * var array = [0, 1, 2],
     *     object = { 'a': array, 'b': array, 'c': array };
     *
     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
     * // => [2, 0]
     *
     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
     * // => [2, 0]
     */
    function propertyOf(object) {
      return function(path) {
        return object == null ? undefined : baseGet(object, path);
      };
    }

    /**
     * Creates an array of numbers (positive and/or negative) progressing from
     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
     * `start` is specified without an `end` or `step`. If `end` is not specified,
     * it's set to `start` with `start` then set to `0`.
     *
     * **Note:** JavaScript follows the IEEE-754 standard for resolving
     * floating-point values which can produce unexpected results.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.rangeRight
     * @example
     *
     * _.range(4);
     * // => [0, 1, 2, 3]
     *
     * _.range(-4);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 5);
     * // => [1, 2, 3, 4]
     *
     * _.range(0, 20, 5);
     * // => [0, 5, 10, 15]
     *
     * _.range(0, -4, -1);
     * // => [0, -1, -2, -3]
     *
     * _.range(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.range(0);
     * // => []
     */
    var range = createRange();

    /**
     * This method is like `_.range` except that it populates values in
     * descending order.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {number} [start=0] The start of the range.
     * @param {number} end The end of the range.
     * @param {number} [step=1] The value to increment or decrement by.
     * @returns {Array} Returns the range of numbers.
     * @see _.inRange, _.range
     * @example
     *
     * _.rangeRight(4);
     * // => [3, 2, 1, 0]
     *
     * _.rangeRight(-4);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 5);
     * // => [4, 3, 2, 1]
     *
     * _.rangeRight(0, 20, 5);
     * // => [15, 10, 5, 0]
     *
     * _.rangeRight(0, -4, -1);
     * // => [-3, -2, -1, 0]
     *
     * _.rangeRight(1, 4, 0);
     * // => [1, 1, 1]
     *
     * _.rangeRight(0);
     * // => []
     */
    var rangeRight = createRange(true);

    /**
     * This method returns a new empty array.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Array} Returns the new empty array.
     * @example
     *
     * var arrays = _.times(2, _.stubArray);
     *
     * console.log(arrays);
     * // => [[], []]
     *
     * console.log(arrays[0] === arrays[1]);
     * // => false
     */
    function stubArray() {
      return [];
    }

    /**
     * This method returns `false`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `false`.
     * @example
     *
     * _.times(2, _.stubFalse);
     * // => [false, false]
     */
    function stubFalse() {
      return false;
    }

    /**
     * This method returns a new empty object.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {Object} Returns the new empty object.
     * @example
     *
     * var objects = _.times(2, _.stubObject);
     *
     * console.log(objects);
     * // => [{}, {}]
     *
     * console.log(objects[0] === objects[1]);
     * // => false
     */
    function stubObject() {
      return {};
    }

    /**
     * This method returns an empty string.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {string} Returns the empty string.
     * @example
     *
     * _.times(2, _.stubString);
     * // => ['', '']
     */
    function stubString() {
      return '';
    }

    /**
     * This method returns `true`.
     *
     * @static
     * @memberOf _
     * @since 4.13.0
     * @category Util
     * @returns {boolean} Returns `true`.
     * @example
     *
     * _.times(2, _.stubTrue);
     * // => [true, true]
     */
    function stubTrue() {
      return true;
    }

    /**
     * Invokes the iteratee `n` times, returning an array of the results of
     * each invocation. The iteratee is invoked with one argument; (index).
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {number} n The number of times to invoke `iteratee`.
     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
     * @returns {Array} Returns the array of results.
     * @example
     *
     * _.times(3, String);
     * // => ['0', '1', '2']
     *
     *  _.times(4, _.constant(0));
     * // => [0, 0, 0, 0]
     */
    function times(n, iteratee) {
      n = toInteger(n);
      if (n < 1 || n > MAX_SAFE_INTEGER) {
        return [];
      }
      var index = MAX_ARRAY_LENGTH,
          length = nativeMin(n, MAX_ARRAY_LENGTH);

      iteratee = getIteratee(iteratee);
      n -= MAX_ARRAY_LENGTH;

      var result = baseTimes(length, iteratee);
      while (++index < n) {
        iteratee(index);
      }
      return result;
    }

    /**
     * Converts `value` to a property path array.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Util
     * @param {*} value The value to convert.
     * @returns {Array} Returns the new property path array.
     * @example
     *
     * _.toPath('a.b.c');
     * // => ['a', 'b', 'c']
     *
     * _.toPath('a[0].b.c');
     * // => ['a', '0', 'b', 'c']
     */
    function toPath(value) {
      if (isArray(value)) {
        return arrayMap(value, toKey);
      }
      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
    }

    /**
     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Util
     * @param {string} [prefix=''] The value to prefix the ID with.
     * @returns {string} Returns the unique ID.
     * @example
     *
     * _.uniqueId('contact_');
     * // => 'contact_104'
     *
     * _.uniqueId();
     * // => '105'
     */
    function uniqueId(prefix) {
      var id = ++idCounter;
      return toString(prefix) + id;
    }

    /*------------------------------------------------------------------------*/

    /**
     * Adds two numbers.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {number} augend The first number in an addition.
     * @param {number} addend The second number in an addition.
     * @returns {number} Returns the total.
     * @example
     *
     * _.add(6, 4);
     * // => 10
     */
    var add = createMathOperation(function(augend, addend) {
      return augend + addend;
    }, 0);

    /**
     * Computes `number` rounded up to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round up.
     * @param {number} [precision=0] The precision to round up to.
     * @returns {number} Returns the rounded up number.
     * @example
     *
     * _.ceil(4.006);
     * // => 5
     *
     * _.ceil(6.004, 2);
     * // => 6.01
     *
     * _.ceil(6040, -2);
     * // => 6100
     */
    var ceil = createRound('ceil');

    /**
     * Divide two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} dividend The first number in a division.
     * @param {number} divisor The second number in a division.
     * @returns {number} Returns the quotient.
     * @example
     *
     * _.divide(6, 4);
     * // => 1.5
     */
    var divide = createMathOperation(function(dividend, divisor) {
      return dividend / divisor;
    }, 1);

    /**
     * Computes `number` rounded down to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round down.
     * @param {number} [precision=0] The precision to round down to.
     * @returns {number} Returns the rounded down number.
     * @example
     *
     * _.floor(4.006);
     * // => 4
     *
     * _.floor(0.046, 2);
     * // => 0.04
     *
     * _.floor(4060, -2);
     * // => 4000
     */
    var floor = createRound('floor');

    /**
     * Computes the maximum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * _.max([4, 2, 8, 6]);
     * // => 8
     *
     * _.max([]);
     * // => undefined
     */
    function max(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseGt)
        : undefined;
    }

    /**
     * This method is like `_.max` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the maximum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.maxBy(objects, function(o) { return o.n; });
     * // => { 'n': 2 }
     *
     * // The `_.property` iteratee shorthand.
     * _.maxBy(objects, 'n');
     * // => { 'n': 2 }
     */
    function maxBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
        : undefined;
    }

    /**
     * Computes the mean of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the mean.
     * @example
     *
     * _.mean([4, 2, 8, 6]);
     * // => 5
     */
    function mean(array) {
      return baseMean(array, identity);
    }

    /**
     * This method is like `_.mean` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be averaged.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the mean.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.meanBy(objects, function(o) { return o.n; });
     * // => 5
     *
     * // The `_.property` iteratee shorthand.
     * _.meanBy(objects, 'n');
     * // => 5
     */
    function meanBy(array, iteratee) {
      return baseMean(array, getIteratee(iteratee, 2));
    }

    /**
     * Computes the minimum value of `array`. If `array` is empty or falsey,
     * `undefined` is returned.
     *
     * @static
     * @since 0.1.0
     * @memberOf _
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * _.min([4, 2, 8, 6]);
     * // => 2
     *
     * _.min([]);
     * // => undefined
     */
    function min(array) {
      return (array && array.length)
        ? baseExtremum(array, identity, baseLt)
        : undefined;
    }

    /**
     * This method is like `_.min` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the criterion by which
     * the value is ranked. The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {*} Returns the minimum value.
     * @example
     *
     * var objects = [{ 'n': 1 }, { 'n': 2 }];
     *
     * _.minBy(objects, function(o) { return o.n; });
     * // => { 'n': 1 }
     *
     * // The `_.property` iteratee shorthand.
     * _.minBy(objects, 'n');
     * // => { 'n': 1 }
     */
    function minBy(array, iteratee) {
      return (array && array.length)
        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
        : undefined;
    }

    /**
     * Multiply two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.7.0
     * @category Math
     * @param {number} multiplier The first number in a multiplication.
     * @param {number} multiplicand The second number in a multiplication.
     * @returns {number} Returns the product.
     * @example
     *
     * _.multiply(6, 4);
     * // => 24
     */
    var multiply = createMathOperation(function(multiplier, multiplicand) {
      return multiplier * multiplicand;
    }, 1);

    /**
     * Computes `number` rounded to `precision`.
     *
     * @static
     * @memberOf _
     * @since 3.10.0
     * @category Math
     * @param {number} number The number to round.
     * @param {number} [precision=0] The precision to round to.
     * @returns {number} Returns the rounded number.
     * @example
     *
     * _.round(4.006);
     * // => 4
     *
     * _.round(4.006, 2);
     * // => 4.01
     *
     * _.round(4060, -2);
     * // => 4100
     */
    var round = createRound('round');

    /**
     * Subtract two numbers.
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {number} minuend The first number in a subtraction.
     * @param {number} subtrahend The second number in a subtraction.
     * @returns {number} Returns the difference.
     * @example
     *
     * _.subtract(6, 4);
     * // => 2
     */
    var subtract = createMathOperation(function(minuend, subtrahend) {
      return minuend - subtrahend;
    }, 0);

    /**
     * Computes the sum of the values in `array`.
     *
     * @static
     * @memberOf _
     * @since 3.4.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @returns {number} Returns the sum.
     * @example
     *
     * _.sum([4, 2, 8, 6]);
     * // => 20
     */
    function sum(array) {
      return (array && array.length)
        ? baseSum(array, identity)
        : 0;
    }

    /**
     * This method is like `_.sum` except that it accepts `iteratee` which is
     * invoked for each element in `array` to generate the value to be summed.
     * The iteratee is invoked with one argument: (value).
     *
     * @static
     * @memberOf _
     * @since 4.0.0
     * @category Math
     * @param {Array} array The array to iterate over.
     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
     * @returns {number} Returns the sum.
     * @example
     *
     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
     *
     * _.sumBy(objects, function(o) { return o.n; });
     * // => 20
     *
     * // The `_.property` iteratee shorthand.
     * _.sumBy(objects, 'n');
     * // => 20
     */
    function sumBy(array, iteratee) {
      return (array && array.length)
        ? baseSum(array, getIteratee(iteratee, 2))
        : 0;
    }

    /*------------------------------------------------------------------------*/

    // Add methods that return wrapped values in chain sequences.
    lodash.after = after;
    lodash.ary = ary;
    lodash.assign = assign;
    lodash.assignIn = assignIn;
    lodash.assignInWith = assignInWith;
    lodash.assignWith = assignWith;
    lodash.at = at;
    lodash.before = before;
    lodash.bind = bind;
    lodash.bindAll = bindAll;
    lodash.bindKey = bindKey;
    lodash.castArray = castArray;
    lodash.chain = chain;
    lodash.chunk = chunk;
    lodash.compact = compact;
    lodash.concat = concat;
    lodash.cond = cond;
    lodash.conforms = conforms;
    lodash.constant = constant;
    lodash.countBy = countBy;
    lodash.create = create;
    lodash.curry = curry;
    lodash.curryRight = curryRight;
    lodash.debounce = debounce;
    lodash.defaults = defaults;
    lodash.defaultsDeep = defaultsDeep;
    lodash.defer = defer;
    lodash.delay = delay;
    lodash.difference = difference;
    lodash.differenceBy = differenceBy;
    lodash.differenceWith = differenceWith;
    lodash.drop = drop;
    lodash.dropRight = dropRight;
    lodash.dropRightWhile = dropRightWhile;
    lodash.dropWhile = dropWhile;
    lodash.fill = fill;
    lodash.filter = filter;
    lodash.flatMap = flatMap;
    lodash.flatMapDeep = flatMapDeep;
    lodash.flatMapDepth = flatMapDepth;
    lodash.flatten = flatten;
    lodash.flattenDeep = flattenDeep;
    lodash.flattenDepth = flattenDepth;
    lodash.flip = flip;
    lodash.flow = flow;
    lodash.flowRight = flowRight;
    lodash.fromPairs = fromPairs;
    lodash.functions = functions;
    lodash.functionsIn = functionsIn;
    lodash.groupBy = groupBy;
    lodash.initial = initial;
    lodash.intersection = intersection;
    lodash.intersectionBy = intersectionBy;
    lodash.intersectionWith = intersectionWith;
    lodash.invert = invert;
    lodash.invertBy = invertBy;
    lodash.invokeMap = invokeMap;
    lodash.iteratee = iteratee;
    lodash.keyBy = keyBy;
    lodash.keys = keys;
    lodash.keysIn = keysIn;
    lodash.map = map;
    lodash.mapKeys = mapKeys;
    lodash.mapValues = mapValues;
    lodash.matches = matches;
    lodash.matchesProperty = matchesProperty;
    lodash.memoize = memoize;
    lodash.merge = merge;
    lodash.mergeWith = mergeWith;
    lodash.method = method;
    lodash.methodOf = methodOf;
    lodash.mixin = mixin;
    lodash.negate = negate;
    lodash.nthArg = nthArg;
    lodash.omit = omit;
    lodash.omitBy = omitBy;
    lodash.once = once;
    lodash.orderBy = orderBy;
    lodash.over = over;
    lodash.overArgs = overArgs;
    lodash.overEvery = overEvery;
    lodash.overSome = overSome;
    lodash.partial = partial;
    lodash.partialRight = partialRight;
    lodash.partition = partition;
    lodash.pick = pick;
    lodash.pickBy = pickBy;
    lodash.property = property;
    lodash.propertyOf = propertyOf;
    lodash.pull = pull;
    lodash.pullAll = pullAll;
    lodash.pullAllBy = pullAllBy;
    lodash.pullAllWith = pullAllWith;
    lodash.pullAt = pullAt;
    lodash.range = range;
    lodash.rangeRight = rangeRight;
    lodash.rearg = rearg;
    lodash.reject = reject;
    lodash.remove = remove;
    lodash.rest = rest;
    lodash.reverse = reverse;
    lodash.sampleSize = sampleSize;
    lodash.set = set;
    lodash.setWith = setWith;
    lodash.shuffle = shuffle;
    lodash.slice = slice;
    lodash.sortBy = sortBy;
    lodash.sortedUniq = sortedUniq;
    lodash.sortedUniqBy = sortedUniqBy;
    lodash.split = split;
    lodash.spread = spread;
    lodash.tail = tail;
    lodash.take = take;
    lodash.takeRight = takeRight;
    lodash.takeRightWhile = takeRightWhile;
    lodash.takeWhile = takeWhile;
    lodash.tap = tap;
    lodash.throttle = throttle;
    lodash.thru = thru;
    lodash.toArray = toArray;
    lodash.toPairs = toPairs;
    lodash.toPairsIn = toPairsIn;
    lodash.toPath = toPath;
    lodash.toPlainObject = toPlainObject;
    lodash.transform = transform;
    lodash.unary = unary;
    lodash.union = union;
    lodash.unionBy = unionBy;
    lodash.unionWith = unionWith;
    lodash.uniq = uniq;
    lodash.uniqBy = uniqBy;
    lodash.uniqWith = uniqWith;
    lodash.unset = unset;
    lodash.unzip = unzip;
    lodash.unzipWith = unzipWith;
    lodash.update = update;
    lodash.updateWith = updateWith;
    lodash.values = values;
    lodash.valuesIn = valuesIn;
    lodash.without = without;
    lodash.words = words;
    lodash.wrap = wrap;
    lodash.xor = xor;
    lodash.xorBy = xorBy;
    lodash.xorWith = xorWith;
    lodash.zip = zip;
    lodash.zipObject = zipObject;
    lodash.zipObjectDeep = zipObjectDeep;
    lodash.zipWith = zipWith;

    // Add aliases.
    lodash.entries = toPairs;
    lodash.entriesIn = toPairsIn;
    lodash.extend = assignIn;
    lodash.extendWith = assignInWith;

    // Add methods to `lodash.prototype`.
    mixin(lodash, lodash);

    /*------------------------------------------------------------------------*/

    // Add methods that return unwrapped values in chain sequences.
    lodash.add = add;
    lodash.attempt = attempt;
    lodash.camelCase = camelCase;
    lodash.capitalize = capitalize;
    lodash.ceil = ceil;
    lodash.clamp = clamp;
    lodash.clone = clone;
    lodash.cloneDeep = cloneDeep;
    lodash.cloneDeepWith = cloneDeepWith;
    lodash.cloneWith = cloneWith;
    lodash.conformsTo = conformsTo;
    lodash.deburr = deburr;
    lodash.defaultTo = defaultTo;
    lodash.divide = divide;
    lodash.endsWith = endsWith;
    lodash.eq = eq;
    lodash.escape = escape;
    lodash.escapeRegExp = escapeRegExp;
    lodash.every = every;
    lodash.find = find;
    lodash.findIndex = findIndex;
    lodash.findKey = findKey;
    lodash.findLast = findLast;
    lodash.findLastIndex = findLastIndex;
    lodash.findLastKey = findLastKey;
    lodash.floor = floor;
    lodash.forEach = forEach;
    lodash.forEachRight = forEachRight;
    lodash.forIn = forIn;
    lodash.forInRight = forInRight;
    lodash.forOwn = forOwn;
    lodash.forOwnRight = forOwnRight;
    lodash.get = get;
    lodash.gt = gt;
    lodash.gte = gte;
    lodash.has = has;
    lodash.hasIn = hasIn;
    lodash.head = head;
    lodash.identity = identity;
    lodash.includes = includes;
    lodash.indexOf = indexOf;
    lodash.inRange = inRange;
    lodash.invoke = invoke;
    lodash.isArguments = isArguments;
    lodash.isArray = isArray;
    lodash.isArrayBuffer = isArrayBuffer;
    lodash.isArrayLike = isArrayLike;
    lodash.isArrayLikeObject = isArrayLikeObject;
    lodash.isBoolean = isBoolean;
    lodash.isBuffer = isBuffer;
    lodash.isDate = isDate;
    lodash.isElement = isElement;
    lodash.isEmpty = isEmpty;
    lodash.isEqual = isEqual;
    lodash.isEqualWith = isEqualWith;
    lodash.isError = isError;
    lodash.isFinite = isFinite;
    lodash.isFunction = isFunction;
    lodash.isInteger = isInteger;
    lodash.isLength = isLength;
    lodash.isMap = isMap;
    lodash.isMatch = isMatch;
    lodash.isMatchWith = isMatchWith;
    lodash.isNaN = isNaN;
    lodash.isNative = isNative;
    lodash.isNil = isNil;
    lodash.isNull = isNull;
    lodash.isNumber = isNumber;
    lodash.isObject = isObject;
    lodash.isObjectLike = isObjectLike;
    lodash.isPlainObject = isPlainObject;
    lodash.isRegExp = isRegExp;
    lodash.isSafeInteger = isSafeInteger;
    lodash.isSet = isSet;
    lodash.isString = isString;
    lodash.isSymbol = isSymbol;
    lodash.isTypedArray = isTypedArray;
    lodash.isUndefined = isUndefined;
    lodash.isWeakMap = isWeakMap;
    lodash.isWeakSet = isWeakSet;
    lodash.join = join;
    lodash.kebabCase = kebabCase;
    lodash.last = last;
    lodash.lastIndexOf = lastIndexOf;
    lodash.lowerCase = lowerCase;
    lodash.lowerFirst = lowerFirst;
    lodash.lt = lt;
    lodash.lte = lte;
    lodash.max = max;
    lodash.maxBy = maxBy;
    lodash.mean = mean;
    lodash.meanBy = meanBy;
    lodash.min = min;
    lodash.minBy = minBy;
    lodash.stubArray = stubArray;
    lodash.stubFalse = stubFalse;
    lodash.stubObject = stubObject;
    lodash.stubString = stubString;
    lodash.stubTrue = stubTrue;
    lodash.multiply = multiply;
    lodash.nth = nth;
    lodash.noConflict = noConflict;
    lodash.noop = noop;
    lodash.now = now;
    lodash.pad = pad;
    lodash.padEnd = padEnd;
    lodash.padStart = padStart;
    lodash.parseInt = parseInt;
    lodash.random = random;
    lodash.reduce = reduce;
    lodash.reduceRight = reduceRight;
    lodash.repeat = repeat;
    lodash.replace = replace;
    lodash.result = result;
    lodash.round = round;
    lodash.runInContext = runInContext;
    lodash.sample = sample;
    lodash.size = size;
    lodash.snakeCase = snakeCase;
    lodash.some = some;
    lodash.sortedIndex = sortedIndex;
    lodash.sortedIndexBy = sortedIndexBy;
    lodash.sortedIndexOf = sortedIndexOf;
    lodash.sortedLastIndex = sortedLastIndex;
    lodash.sortedLastIndexBy = sortedLastIndexBy;
    lodash.sortedLastIndexOf = sortedLastIndexOf;
    lodash.startCase = startCase;
    lodash.startsWith = startsWith;
    lodash.subtract = subtract;
    lodash.sum = sum;
    lodash.sumBy = sumBy;
    lodash.template = template;
    lodash.times = times;
    lodash.toFinite = toFinite;
    lodash.toInteger = toInteger;
    lodash.toLength = toLength;
    lodash.toLower = toLower;
    lodash.toNumber = toNumber;
    lodash.toSafeInteger = toSafeInteger;
    lodash.toString = toString;
    lodash.toUpper = toUpper;
    lodash.trim = trim;
    lodash.trimEnd = trimEnd;
    lodash.trimStart = trimStart;
    lodash.truncate = truncate;
    lodash.unescape = unescape;
    lodash.uniqueId = uniqueId;
    lodash.upperCase = upperCase;
    lodash.upperFirst = upperFirst;

    // Add aliases.
    lodash.each = forEach;
    lodash.eachRight = forEachRight;
    lodash.first = head;

    mixin(lodash, (function() {
      var source = {};
      baseForOwn(lodash, function(func, methodName) {
        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
          source[methodName] = func;
        }
      });
      return source;
    }()), { 'chain': false });

    /*------------------------------------------------------------------------*/

    /**
     * The semantic version number.
     *
     * @static
     * @memberOf _
     * @type {string}
     */
    lodash.VERSION = VERSION;

    // Assign default placeholders.
    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
      lodash[methodName].placeholder = lodash;
    });

    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
    arrayEach(['drop', 'take'], function(methodName, index) {
      LazyWrapper.prototype[methodName] = function(n) {
        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);

        var result = (this.__filtered__ && !index)
          ? new LazyWrapper(this)
          : this.clone();

        if (result.__filtered__) {
          result.__takeCount__ = nativeMin(n, result.__takeCount__);
        } else {
          result.__views__.push({
            'size': nativeMin(n, MAX_ARRAY_LENGTH),
            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
          });
        }
        return result;
      };

      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
        return this.reverse()[methodName](n).reverse();
      };
    });

    // Add `LazyWrapper` methods that accept an `iteratee` value.
    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
      var type = index + 1,
          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;

      LazyWrapper.prototype[methodName] = function(iteratee) {
        var result = this.clone();
        result.__iteratees__.push({
          'iteratee': getIteratee(iteratee, 3),
          'type': type
        });
        result.__filtered__ = result.__filtered__ || isFilter;
        return result;
      };
    });

    // Add `LazyWrapper` methods for `_.head` and `_.last`.
    arrayEach(['head', 'last'], function(methodName, index) {
      var takeName = 'take' + (index ? 'Right' : '');

      LazyWrapper.prototype[methodName] = function() {
        return this[takeName](1).value()[0];
      };
    });

    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
    arrayEach(['initial', 'tail'], function(methodName, index) {
      var dropName = 'drop' + (index ? '' : 'Right');

      LazyWrapper.prototype[methodName] = function() {
        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
      };
    });

    LazyWrapper.prototype.compact = function() {
      return this.filter(identity);
    };

    LazyWrapper.prototype.find = function(predicate) {
      return this.filter(predicate).head();
    };

    LazyWrapper.prototype.findLast = function(predicate) {
      return this.reverse().find(predicate);
    };

    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
      if (typeof path == 'function') {
        return new LazyWrapper(this);
      }
      return this.map(function(value) {
        return baseInvoke(value, path, args);
      });
    });

    LazyWrapper.prototype.reject = function(predicate) {
      return this.filter(negate(getIteratee(predicate)));
    };

    LazyWrapper.prototype.slice = function(start, end) {
      start = toInteger(start);

      var result = this;
      if (result.__filtered__ && (start > 0 || end < 0)) {
        return new LazyWrapper(result);
      }
      if (start < 0) {
        result = result.takeRight(-start);
      } else if (start) {
        result = result.drop(start);
      }
      if (end !== undefined) {
        end = toInteger(end);
        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
      }
      return result;
    };

    LazyWrapper.prototype.takeRightWhile = function(predicate) {
      return this.reverse().takeWhile(predicate).reverse();
    };

    LazyWrapper.prototype.toArray = function() {
      return this.take(MAX_ARRAY_LENGTH);
    };

    // Add `LazyWrapper` methods to `lodash.prototype`.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
          isTaker = /^(?:head|last)$/.test(methodName),
          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
          retUnwrapped = isTaker || /^find/.test(methodName);

      if (!lodashFunc) {
        return;
      }
      lodash.prototype[methodName] = function() {
        var value = this.__wrapped__,
            args = isTaker ? [1] : arguments,
            isLazy = value instanceof LazyWrapper,
            iteratee = args[0],
            useLazy = isLazy || isArray(value);

        var interceptor = function(value) {
          var result = lodashFunc.apply(lodash, arrayPush([value], args));
          return (isTaker && chainAll) ? result[0] : result;
        };

        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
          // Avoid lazy use if the iteratee has a "length" value other than `1`.
          isLazy = useLazy = false;
        }
        var chainAll = this.__chain__,
            isHybrid = !!this.__actions__.length,
            isUnwrapped = retUnwrapped && !chainAll,
            onlyLazy = isLazy && !isHybrid;

        if (!retUnwrapped && useLazy) {
          value = onlyLazy ? value : new LazyWrapper(this);
          var result = func.apply(value, args);
          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
          return new LodashWrapper(result, chainAll);
        }
        if (isUnwrapped && onlyLazy) {
          return func.apply(this, args);
        }
        result = this.thru(interceptor);
        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
      };
    });

    // Add `Array` methods to `lodash.prototype`.
    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
      var func = arrayProto[methodName],
          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
          retUnwrapped = /^(?:pop|shift)$/.test(methodName);

      lodash.prototype[methodName] = function() {
        var args = arguments;
        if (retUnwrapped && !this.__chain__) {
          var value = this.value();
          return func.apply(isArray(value) ? value : [], args);
        }
        return this[chainName](function(value) {
          return func.apply(isArray(value) ? value : [], args);
        });
      };
    });

    // Map minified method names to their real names.
    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
      var lodashFunc = lodash[methodName];
      if (lodashFunc) {
        var key = lodashFunc.name + '';
        if (!hasOwnProperty.call(realNames, key)) {
          realNames[key] = [];
        }
        realNames[key].push({ 'name': methodName, 'func': lodashFunc });
      }
    });

    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
      'name': 'wrapper',
      'func': undefined
    }];

    // Add methods to `LazyWrapper`.
    LazyWrapper.prototype.clone = lazyClone;
    LazyWrapper.prototype.reverse = lazyReverse;
    LazyWrapper.prototype.value = lazyValue;

    // Add chain sequence methods to the `lodash` wrapper.
    lodash.prototype.at = wrapperAt;
    lodash.prototype.chain = wrapperChain;
    lodash.prototype.commit = wrapperCommit;
    lodash.prototype.next = wrapperNext;
    lodash.prototype.plant = wrapperPlant;
    lodash.prototype.reverse = wrapperReverse;
    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;

    // Add lazy aliases.
    lodash.prototype.first = lodash.prototype.head;

    if (symIterator) {
      lodash.prototype[symIterator] = wrapperToIterator;
    }
    return lodash;
  });

  /*--------------------------------------------------------------------------*/

  // Export lodash.
  var _ = runInContext();

  // Some AMD build optimizers, like r.js, check for condition patterns like:
  if (true) {
    // Expose Lodash on the global object to prevent errors when Lodash is
    // loaded by a script tag in the presence of an AMD loader.
    // See http://requirejs.org/docs/errors.html#mismatch for more details.
    // Use `_.noConflict` to remove Lodash from the global object.
    root._ = _;

    // Define as an anonymous module so, through path mapping, it can be
    // referenced as the "underscore" module.
    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
      return _;
    }).call(exports, __webpack_require__, exports, module),
		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
  }
  // Check for `exports` after `define` in case a build optimizer adds it.
  else {}
}.call(this));


/***/ }),

/***/ 938503:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";
// Copyright 2010-2012 Mikeal Rogers
//
//    Licensed under the Apache License, Version 2.0 (the "License");
//    you may not use this file except in compliance with the License.
//    You may obtain a copy of the License at
//
//        http://www.apache.org/licenses/LICENSE-2.0
//
//    Unless required by applicable law or agreed to in writing, software
//    distributed under the License is distributed on an "AS IS" BASIS,
//    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//    See the License for the specific language governing permissions and
//    limitations under the License.



var extend = __webpack_require__(494470)
var cookies = __webpack_require__(336947)
var helpers = __webpack_require__(318879)

var paramsHaveRequestBody = helpers.paramsHaveRequestBody

// organize params for patch, post, put, head, del
function initParams (uri, options, callback) {
  if (typeof options === 'function') {
    callback = options
  }

  var params = {}
  if (options !== null && typeof options === 'object') {
    extend(params, options, {uri: uri})
  } else if (typeof uri === 'string') {
    extend(params, {uri: uri})
  } else {
    extend(params, uri)
  }

  params.callback = callback || params.callback
  return params
}

function request (uri, options, callback) {
  if (typeof uri === 'undefined') {
    throw new Error('undefined is not a valid uri or options object.')
  }

  var params = initParams(uri, options, callback)

  if (params.method === 'HEAD' && paramsHaveRequestBody(params)) {
    throw new Error('HTTP HEAD requests MUST NOT include a request body.')
  }

  return new request.Request(params)
}

function verbFunc (verb) {
  var method = verb.toUpperCase()
  return function (uri, options, callback) {
    var params = initParams(uri, options, callback)
    params.method = method
    return request(params, params.callback)
  }
}

// define like this to please codeintel/intellisense IDEs
request.get = verbFunc('get')
request.head = verbFunc('head')
request.options = verbFunc('options')
request.post = verbFunc('post')
request.put = verbFunc('put')
request.patch = verbFunc('patch')
request.del = verbFunc('delete')
request['delete'] = verbFunc('delete')

request.jar = function (store) {
  return cookies.jar(store)
}

request.cookie = function (str) {
  return cookies.parse(str)
}

function wrapRequestMethod (method, options, requester, verb) {
  return function (uri, opts, callback) {
    var params = initParams(uri, opts, callback)

    var target = {}
    extend(true, target, options, params)

    target.pool = params.pool || options.pool

    if (verb) {
      target.method = verb.toUpperCase()
    }

    if (typeof requester === 'function') {
      method = requester
    }

    return method(target, target.callback)
  }
}

request.defaults = function (options, requester) {
  var self = this

  options = options || {}

  if (typeof options === 'function') {
    requester = options
    options = {}
  }

  var defaults = wrapRequestMethod(self, options, requester)

  var verbs = ['get', 'head', 'post', 'put', 'patch', 'del', 'delete']
  verbs.forEach(function (verb) {
    defaults[verb] = wrapRequestMethod(self[verb], options, requester, verb)
  })

  defaults.cookie = wrapRequestMethod(self.cookie, options, requester)
  defaults.jar = self.jar
  defaults.defaults = self.defaults
  return defaults
}

request.forever = function (agentOptions, optionsArg) {
  var options = {}
  if (optionsArg) {
    extend(options, optionsArg)
  }
  if (agentOptions) {
    options.agentOptions = agentOptions
  }

  options.forever = true
  return request.defaults(options)
}

// Exports

module.exports = request
request.Request = __webpack_require__(791155)
request.initParams = initParams

// Backwards compatibility for request.debug
Object.defineProperty(request, 'debug', {
  enumerable: true,
  get: function () {
    return request.Request.debug
  },
  set: function (debug) {
    request.Request.debug = debug
  }
})


/***/ }),

/***/ 268995:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var caseless = __webpack_require__(909894)
var uuid = __webpack_require__(171171)
var helpers = __webpack_require__(318879)

var md5 = helpers.md5
var toBase64 = helpers.toBase64

function Auth (request) {
  // define all public properties here
  this.request = request
  this.hasAuth = false
  this.sentAuth = false
  this.bearerToken = null
  this.user = null
  this.pass = null
}

Auth.prototype.basic = function (user, pass, sendImmediately) {
  var self = this
  if (typeof user !== 'string' || (pass !== undefined && typeof pass !== 'string')) {
    self.request.emit('error', new Error('auth() received invalid user or password'))
  }
  self.user = user
  self.pass = pass
  self.hasAuth = true
  var header = user + ':' + (pass || '')
  if (sendImmediately || typeof sendImmediately === 'undefined') {
    var authHeader = 'Basic ' + toBase64(header)
    self.sentAuth = true
    return authHeader
  }
}

Auth.prototype.bearer = function (bearer, sendImmediately) {
  var self = this
  self.bearerToken = bearer
  self.hasAuth = true
  if (sendImmediately || typeof sendImmediately === 'undefined') {
    if (typeof bearer === 'function') {
      bearer = bearer()
    }
    var authHeader = 'Bearer ' + (bearer || '')
    self.sentAuth = true
    return authHeader
  }
}

Auth.prototype.digest = function (method, path, authHeader) {
  // TODO: More complete implementation of RFC 2617.
  //   - handle challenge.domain
  //   - support qop="auth-int" only
  //   - handle Authentication-Info (not necessarily?)
  //   - check challenge.stale (not necessarily?)
  //   - increase nc (not necessarily?)
  // For reference:
  // http://tools.ietf.org/html/rfc2617#section-3
  // https://github.com/bagder/curl/blob/master/lib/http_digest.c

  var self = this

  var challenge = {}
  var re = /([a-z0-9_-]+)=(?:"([^"]+)"|([a-z0-9_-]+))/gi
  while (true) {
    var match = re.exec(authHeader)
    if (!match) {
      break
    }
    challenge[match[1]] = match[2] || match[3]
  }

  /**
   * RFC 2617: handle both MD5 and MD5-sess algorithms.
   *
   * If the algorithm directive's value is "MD5" or unspecified, then HA1 is
   *   HA1=MD5(username:realm:password)
   * If the algorithm directive's value is "MD5-sess", then HA1 is
   *   HA1=MD5(MD5(username:realm:password):nonce:cnonce)
   */
  var ha1Compute = function (algorithm, user, realm, pass, nonce, cnonce) {
    var ha1 = md5(user + ':' + realm + ':' + pass)
    if (algorithm && algorithm.toLowerCase() === 'md5-sess') {
      return md5(ha1 + ':' + nonce + ':' + cnonce)
    } else {
      return ha1
    }
  }

  var qop = /(^|,)\s*auth\s*($|,)/.test(challenge.qop) && 'auth'
  var nc = qop && '00000001'
  var cnonce = qop && uuid().replace(/-/g, '')
  var ha1 = ha1Compute(challenge.algorithm, self.user, challenge.realm, self.pass, challenge.nonce, cnonce)
  var ha2 = md5(method + ':' + path)
  var digestResponse = qop
    ? md5(ha1 + ':' + challenge.nonce + ':' + nc + ':' + cnonce + ':' + qop + ':' + ha2)
    : md5(ha1 + ':' + challenge.nonce + ':' + ha2)
  var authValues = {
    username: self.user,
    realm: challenge.realm,
    nonce: challenge.nonce,
    uri: path,
    qop: qop,
    response: digestResponse,
    nc: nc,
    cnonce: cnonce,
    algorithm: challenge.algorithm,
    opaque: challenge.opaque
  }

  authHeader = []
  for (var k in authValues) {
    if (authValues[k]) {
      if (k === 'qop' || k === 'nc' || k === 'algorithm') {
        authHeader.push(k + '=' + authValues[k])
      } else {
        authHeader.push(k + '="' + authValues[k] + '"')
      }
    }
  }
  authHeader = 'Digest ' + authHeader.join(', ')
  self.sentAuth = true
  return authHeader
}

Auth.prototype.onRequest = function (user, pass, sendImmediately, bearer) {
  var self = this
  var request = self.request

  var authHeader
  if (bearer === undefined && user === undefined) {
    self.request.emit('error', new Error('no auth mechanism defined'))
  } else if (bearer !== undefined) {
    authHeader = self.bearer(bearer, sendImmediately)
  } else {
    authHeader = self.basic(user, pass, sendImmediately)
  }
  if (authHeader) {
    request.setHeader('authorization', authHeader)
  }
}

Auth.prototype.onResponse = function (response) {
  var self = this
  var request = self.request

  if (!self.hasAuth || self.sentAuth) { return null }

  var c = caseless(response.headers)

  var authHeader = c.get('www-authenticate')
  var authVerb = authHeader && authHeader.split(' ')[0].toLowerCase()
  request.debug('reauth', authVerb)

  switch (authVerb) {
    case 'basic':
      return self.basic(self.user, self.pass, true)

    case 'bearer':
      return self.bearer(self.bearerToken, true)

    case 'digest':
      return self.digest(request.method, request.path, authHeader)
  }
}

exports.g = Auth


/***/ }),

/***/ 336947:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var tough = __webpack_require__(347857)

var Cookie = tough.Cookie
var CookieJar = tough.CookieJar

exports.parse = function (str) {
  if (str && str.uri) {
    str = str.uri
  }
  if (typeof str !== 'string') {
    throw new Error('The cookie function only accepts STRING as param')
  }
  return Cookie.parse(str, {loose: true})
}

// Adapt the sometimes-Async api of tough.CookieJar to our requirements
function RequestJar (store) {
  var self = this
  self._jar = new CookieJar(store, {looseMode: true})
}
RequestJar.prototype.setCookie = function (cookieOrStr, uri, options) {
  var self = this
  return self._jar.setCookieSync(cookieOrStr, uri, options || {})
}
RequestJar.prototype.getCookieString = function (uri) {
  var self = this
  return self._jar.getCookieStringSync(uri)
}
RequestJar.prototype.getCookies = function (uri) {
  var self = this
  return self._jar.getCookiesSync(uri)
}

exports.jar = function (store) {
  return new RequestJar(store)
}


/***/ }),

/***/ 759952:
/***/ ((module) => {

"use strict";


function formatHostname (hostname) {
  // canonicalize the hostname, so that 'oogle.com' won't match 'google.com'
  return hostname.replace(/^\.*/, '.').toLowerCase()
}

function parseNoProxyZone (zone) {
  zone = zone.trim().toLowerCase()

  var zoneParts = zone.split(':', 2)
  var zoneHost = formatHostname(zoneParts[0])
  var zonePort = zoneParts[1]
  var hasPort = zone.indexOf(':') > -1

  return {hostname: zoneHost, port: zonePort, hasPort: hasPort}
}

function uriInNoProxy (uri, noProxy) {
  var port = uri.port || (uri.protocol === 'https:' ? '443' : '80')
  var hostname = formatHostname(uri.hostname)
  var noProxyList = noProxy.split(',')

  // iterate through the noProxyList until it finds a match.
  return noProxyList.map(parseNoProxyZone).some(function (noProxyZone) {
    var isMatchedAt = hostname.indexOf(noProxyZone.hostname)
    var hostnameMatched = (
      isMatchedAt > -1 &&
        (isMatchedAt === hostname.length - noProxyZone.hostname.length)
    )

    if (noProxyZone.hasPort) {
      return (port === noProxyZone.port) && hostnameMatched
    }

    return hostnameMatched
  })
}

function getProxyFromURI (uri) {
  // Decide the proper request proxy to use based on the request URI object and the
  // environmental variables (NO_PROXY, HTTP_PROXY, etc.)
  // respect NO_PROXY environment variables (see: https://lynx.invisible-island.net/lynx2.8.7/breakout/lynx_help/keystrokes/environments.html)

  var noProxy = process.env.NO_PROXY || process.env.no_proxy || ''

  // if the noProxy is a wildcard then return null

  if (noProxy === '*') {
    return null
  }

  // if the noProxy is not empty and the uri is found return null

  if (noProxy !== '' && uriInNoProxy(uri, noProxy)) {
    return null
  }

  // Check for HTTP or HTTPS Proxy in environment Else default to null

  if (uri.protocol === 'http:') {
    return process.env.HTTP_PROXY ||
      process.env.http_proxy || null
  }

  if (uri.protocol === 'https:') {
    return process.env.HTTPS_PROXY ||
      process.env.https_proxy ||
      process.env.HTTP_PROXY ||
      process.env.http_proxy || null
  }

  // if none of that works, return null
  // (What uri protocol are you using then?)

  return null
}

module.exports = getProxyFromURI


/***/ }),

/***/ 664746:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var fs = __webpack_require__(935747)
var qs = __webpack_require__(571191)
var validate = __webpack_require__(224053)
var extend = __webpack_require__(494470)

function Har (request) {
  this.request = request
}

Har.prototype.reducer = function (obj, pair) {
  // new property ?
  if (obj[pair.name] === undefined) {
    obj[pair.name] = pair.value
    return obj
  }

  // existing? convert to array
  var arr = [
    obj[pair.name],
    pair.value
  ]

  obj[pair.name] = arr

  return obj
}

Har.prototype.prep = function (data) {
  // construct utility properties
  data.queryObj = {}
  data.headersObj = {}
  data.postData.jsonObj = false
  data.postData.paramsObj = false

  // construct query objects
  if (data.queryString && data.queryString.length) {
    data.queryObj = data.queryString.reduce(this.reducer, {})
  }

  // construct headers objects
  if (data.headers && data.headers.length) {
    // loweCase header keys
    data.headersObj = data.headers.reduceRight(function (headers, header) {
      headers[header.name] = header.value
      return headers
    }, {})
  }

  // construct Cookie header
  if (data.cookies && data.cookies.length) {
    var cookies = data.cookies.map(function (cookie) {
      return cookie.name + '=' + cookie.value
    })

    if (cookies.length) {
      data.headersObj.cookie = cookies.join('; ')
    }
  }

  // prep body
  function some (arr) {
    return arr.some(function (type) {
      return data.postData.mimeType.indexOf(type) === 0
    })
  }

  if (some([
    'multipart/mixed',
    'multipart/related',
    'multipart/form-data',
    'multipart/alternative'])) {
    // reset values
    data.postData.mimeType = 'multipart/form-data'
  } else if (some([
    'application/x-www-form-urlencoded'])) {
    if (!data.postData.params) {
      data.postData.text = ''
    } else {
      data.postData.paramsObj = data.postData.params.reduce(this.reducer, {})

      // always overwrite
      data.postData.text = qs.stringify(data.postData.paramsObj)
    }
  } else if (some([
    'text/json',
    'text/x-json',
    'application/json',
    'application/x-json'])) {
    data.postData.mimeType = 'application/json'

    if (data.postData.text) {
      try {
        data.postData.jsonObj = JSON.parse(data.postData.text)
      } catch (e) {
        this.request.debug(e)

        // force back to text/plain
        data.postData.mimeType = 'text/plain'
      }
    }
  }

  return data
}

Har.prototype.options = function (options) {
  // skip if no har property defined
  if (!options.har) {
    return options
  }

  var har = {}
  extend(har, options.har)

  // only process the first entry
  if (har.log && har.log.entries) {
    har = har.log.entries[0]
  }

  // add optional properties to make validation successful
  har.url = har.url || options.url || options.uri || options.baseUrl || '/'
  har.httpVersion = har.httpVersion || 'HTTP/1.1'
  har.queryString = har.queryString || []
  har.headers = har.headers || []
  har.cookies = har.cookies || []
  har.postData = har.postData || {}
  har.postData.mimeType = har.postData.mimeType || 'application/octet-stream'

  har.bodySize = 0
  har.headersSize = 0
  har.postData.size = 0

  if (!validate.request(har)) {
    return options
  }

  // clean up and get some utility properties
  var req = this.prep(har)

  // construct new options
  if (req.url) {
    options.url = req.url
  }

  if (req.method) {
    options.method = req.method
  }

  if (Object.keys(req.queryObj).length) {
    options.qs = req.queryObj
  }

  if (Object.keys(req.headersObj).length) {
    options.headers = req.headersObj
  }

  function test (type) {
    return req.postData.mimeType.indexOf(type) === 0
  }
  if (test('application/x-www-form-urlencoded')) {
    options.form = req.postData.paramsObj
  } else if (test('application/json')) {
    if (req.postData.jsonObj) {
      options.body = req.postData.jsonObj
      options.json = true
    }
  } else if (test('multipart/form-data')) {
    options.formData = {}

    req.postData.params.forEach(function (param) {
      var attachment = {}

      if (!param.fileName && !param.contentType) {
        options.formData[param.name] = param.value
        return
      }

      // attempt to read from disk!
      if (param.fileName && !param.value) {
        attachment.value = fs.createReadStream(param.fileName)
      } else if (param.value) {
        attachment.value = param.value
      }

      if (param.fileName) {
        attachment.options = {
          filename: param.fileName,
          contentType: param.contentType ? param.contentType : null
        }
      }

      options.formData[param.name] = attachment
    })
  } else {
    if (req.postData.text) {
      options.body = req.postData.text
    }
  }

  return options
}

exports.t = Har


/***/ }),

/***/ 924097:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var crypto = __webpack_require__(676417)

function randomString (size) {
  var bits = (size + 1) * 6
  var buffer = crypto.randomBytes(Math.ceil(bits / 8))
  var string = buffer.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '')
  return string.slice(0, size)
}

function calculatePayloadHash (payload, algorithm, contentType) {
  var hash = crypto.createHash(algorithm)
  hash.update('hawk.1.payload\n')
  hash.update((contentType ? contentType.split(';')[0].trim().toLowerCase() : '') + '\n')
  hash.update(payload || '')
  hash.update('\n')
  return hash.digest('base64')
}

exports.calculateMac = function (credentials, opts) {
  var normalized = 'hawk.1.header\n' +
    opts.ts + '\n' +
    opts.nonce + '\n' +
    (opts.method || '').toUpperCase() + '\n' +
    opts.resource + '\n' +
    opts.host.toLowerCase() + '\n' +
    opts.port + '\n' +
    (opts.hash || '') + '\n'

  if (opts.ext) {
    normalized = normalized + opts.ext.replace('\\', '\\\\').replace('\n', '\\n')
  }

  normalized = normalized + '\n'

  if (opts.app) {
    normalized = normalized + opts.app + '\n' + (opts.dlg || '') + '\n'
  }

  var hmac = crypto.createHmac(credentials.algorithm, credentials.key).update(normalized)
  var digest = hmac.digest('base64')
  return digest
}

exports.header = function (uri, method, opts) {
  var timestamp = opts.timestamp || Math.floor((Date.now() + (opts.localtimeOffsetMsec || 0)) / 1000)
  var credentials = opts.credentials
  if (!credentials || !credentials.id || !credentials.key || !credentials.algorithm) {
    return ''
  }

  if (['sha1', 'sha256'].indexOf(credentials.algorithm) === -1) {
    return ''
  }

  var artifacts = {
    ts: timestamp,
    nonce: opts.nonce || randomString(6),
    method: method,
    resource: uri.pathname + (uri.search || ''),
    host: uri.hostname,
    port: uri.port || (uri.protocol === 'http:' ? 80 : 443),
    hash: opts.hash,
    ext: opts.ext,
    app: opts.app,
    dlg: opts.dlg
  }

  if (!artifacts.hash && (opts.payload || opts.payload === '')) {
    artifacts.hash = calculatePayloadHash(opts.payload, credentials.algorithm, opts.contentType)
  }

  var mac = exports.calculateMac(credentials, artifacts)

  var hasExt = artifacts.ext !== null && artifacts.ext !== undefined && artifacts.ext !== ''
  var header = 'Hawk id="' + credentials.id +
    '", ts="' + artifacts.ts +
    '", nonce="' + artifacts.nonce +
    (artifacts.hash ? '", hash="' + artifacts.hash : '') +
    (hasExt ? '", ext="' + artifacts.ext.replace(/\\/g, '\\\\').replace(/"/g, '\\"') : '') +
    '", mac="' + mac + '"'

  if (artifacts.app) {
    header = header + ', app="' + artifacts.app + (artifacts.dlg ? '", dlg="' + artifacts.dlg : '') + '"'
  }

  return header
}


/***/ }),

/***/ 318879:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var jsonSafeStringify = __webpack_require__(364530)
var crypto = __webpack_require__(676417)
var Buffer = __webpack_require__(289509).Buffer

var defer = typeof setImmediate === 'undefined'
  ? process.nextTick
  : setImmediate

function paramsHaveRequestBody (params) {
  return (
    params.body ||
    params.requestBodyStream ||
    (params.json && typeof params.json !== 'boolean') ||
    params.multipart
  )
}

function safeStringify (obj, replacer) {
  var ret
  try {
    ret = JSON.stringify(obj, replacer)
  } catch (e) {
    ret = jsonSafeStringify(obj, replacer)
  }
  return ret
}

function md5 (str) {
  return crypto.createHash('md5').update(str).digest('hex')
}

function isReadStream (rs) {
  return rs.readable && rs.path && rs.mode
}

function toBase64 (str) {
  return Buffer.from(str || '', 'utf8').toString('base64')
}

function copy (obj) {
  var o = {}
  Object.keys(obj).forEach(function (i) {
    o[i] = obj[i]
  })
  return o
}

function version () {
  var numbers = process.version.replace('v', '').split('.')
  return {
    major: parseInt(numbers[0], 10),
    minor: parseInt(numbers[1], 10),
    patch: parseInt(numbers[2], 10)
  }
}

exports.paramsHaveRequestBody = paramsHaveRequestBody
exports.safeStringify = safeStringify
exports.md5 = md5
exports.isReadStream = isReadStream
exports.toBase64 = toBase64
exports.copy = copy
exports.version = version
exports.defer = defer


/***/ }),

/***/ 90479:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var uuid = __webpack_require__(171171)
var CombinedStream = __webpack_require__(809779)
var isstream = __webpack_require__(197356)
var Buffer = __webpack_require__(289509).Buffer

function Multipart (request) {
  this.request = request
  this.boundary = uuid()
  this.chunked = false
  this.body = null
}

Multipart.prototype.isChunked = function (options) {
  var self = this
  var chunked = false
  var parts = options.data || options

  if (!parts.forEach) {
    self.request.emit('error', new Error('Argument error, options.multipart.'))
  }

  if (options.chunked !== undefined) {
    chunked = options.chunked
  }

  if (self.request.getHeader('transfer-encoding') === 'chunked') {
    chunked = true
  }

  if (!chunked) {
    parts.forEach(function (part) {
      if (typeof part.body === 'undefined') {
        self.request.emit('error', new Error('Body attribute missing in multipart.'))
      }
      if (isstream(part.body)) {
        chunked = true
      }
    })
  }

  return chunked
}

Multipart.prototype.setHeaders = function (chunked) {
  var self = this

  if (chunked && !self.request.hasHeader('transfer-encoding')) {
    self.request.setHeader('transfer-encoding', 'chunked')
  }

  var header = self.request.getHeader('content-type')

  if (!header || header.indexOf('multipart') === -1) {
    self.request.setHeader('content-type', 'multipart/related; boundary=' + self.boundary)
  } else {
    if (header.indexOf('boundary') !== -1) {
      self.boundary = header.replace(/.*boundary=([^\s;]+).*/, '$1')
    } else {
      self.request.setHeader('content-type', header + '; boundary=' + self.boundary)
    }
  }
}

Multipart.prototype.build = function (parts, chunked) {
  var self = this
  var body = chunked ? new CombinedStream() : []

  function add (part) {
    if (typeof part === 'number') {
      part = part.toString()
    }
    return chunked ? body.append(part) : body.push(Buffer.from(part))
  }

  if (self.request.preambleCRLF) {
    add('\r\n')
  }

  parts.forEach(function (part) {
    var preamble = '--' + self.boundary + '\r\n'
    Object.keys(part).forEach(function (key) {
      if (key === 'body') { return }
      preamble += key + ': ' + part[key] + '\r\n'
    })
    preamble += '\r\n'
    add(preamble)
    add(part.body)
    add('\r\n')
  })
  add('--' + self.boundary + '--')

  if (self.request.postambleCRLF) {
    add('\r\n')
  }

  return body
}

Multipart.prototype.onRequest = function (options) {
  var self = this

  var chunked = self.isChunked(options)
  var parts = options.data || options

  self.setHeaders(chunked)
  self.chunked = chunked
  self.body = self.build(parts, chunked)
}

exports.$ = Multipart


/***/ }),

/***/ 170304:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var url = __webpack_require__(978835)
var qs = __webpack_require__(280129)
var caseless = __webpack_require__(909894)
var uuid = __webpack_require__(171171)
var oauth = __webpack_require__(54586)
var crypto = __webpack_require__(676417)
var Buffer = __webpack_require__(289509).Buffer

function OAuth (request) {
  this.request = request
  this.params = null
}

OAuth.prototype.buildParams = function (_oauth, uri, method, query, form, qsLib) {
  var oa = {}
  for (var i in _oauth) {
    oa['oauth_' + i] = _oauth[i]
  }
  if (!oa.oauth_version) {
    oa.oauth_version = '1.0'
  }
  if (!oa.oauth_timestamp) {
    oa.oauth_timestamp = Math.floor(Date.now() / 1000).toString()
  }
  if (!oa.oauth_nonce) {
    oa.oauth_nonce = uuid().replace(/-/g, '')
  }
  if (!oa.oauth_signature_method) {
    oa.oauth_signature_method = 'HMAC-SHA1'
  }

  var consumer_secret_or_private_key = oa.oauth_consumer_secret || oa.oauth_private_key // eslint-disable-line camelcase
  delete oa.oauth_consumer_secret
  delete oa.oauth_private_key

  var token_secret = oa.oauth_token_secret // eslint-disable-line camelcase
  delete oa.oauth_token_secret

  var realm = oa.oauth_realm
  delete oa.oauth_realm
  delete oa.oauth_transport_method

  var baseurl = uri.protocol + '//' + uri.host + uri.pathname
  var params = qsLib.parse([].concat(query, form, qsLib.stringify(oa)).join('&'))

  oa.oauth_signature = oauth.sign(
    oa.oauth_signature_method,
    method,
    baseurl,
    params,
    consumer_secret_or_private_key, // eslint-disable-line camelcase
    token_secret // eslint-disable-line camelcase
  )

  if (realm) {
    oa.realm = realm
  }

  return oa
}

OAuth.prototype.buildBodyHash = function (_oauth, body) {
  if (['HMAC-SHA1', 'RSA-SHA1'].indexOf(_oauth.signature_method || 'HMAC-SHA1') < 0) {
    this.request.emit('error', new Error('oauth: ' + _oauth.signature_method +
      ' signature_method not supported with body_hash signing.'))
  }

  var shasum = crypto.createHash('sha1')
  shasum.update(body || '')
  var sha1 = shasum.digest('hex')

  return Buffer.from(sha1, 'hex').toString('base64')
}

OAuth.prototype.concatParams = function (oa, sep, wrap) {
  wrap = wrap || ''

  var params = Object.keys(oa).filter(function (i) {
    return i !== 'realm' && i !== 'oauth_signature'
  }).sort()

  if (oa.realm) {
    params.splice(0, 0, 'realm')
  }
  params.push('oauth_signature')

  return params.map(function (i) {
    return i + '=' + wrap + oauth.rfc3986(oa[i]) + wrap
  }).join(sep)
}

OAuth.prototype.onRequest = function (_oauth) {
  var self = this
  self.params = _oauth

  var uri = self.request.uri || {}
  var method = self.request.method || ''
  var headers = caseless(self.request.headers)
  var body = self.request.body || ''
  var qsLib = self.request.qsLib || qs

  var form
  var query
  var contentType = headers.get('content-type') || ''
  var formContentType = 'application/x-www-form-urlencoded'
  var transport = _oauth.transport_method || 'header'

  if (contentType.slice(0, formContentType.length) === formContentType) {
    contentType = formContentType
    form = body
  }
  if (uri.query) {
    query = uri.query
  }
  if (transport === 'body' && (method !== 'POST' || contentType !== formContentType)) {
    self.request.emit('error', new Error('oauth: transport_method of body requires POST ' +
      'and content-type ' + formContentType))
  }

  if (!form && typeof _oauth.body_hash === 'boolean') {
    _oauth.body_hash = self.buildBodyHash(_oauth, self.request.body.toString())
  }

  var oa = self.buildParams(_oauth, uri, method, query, form, qsLib)

  switch (transport) {
    case 'header':
      self.request.setHeader('Authorization', 'OAuth ' + self.concatParams(oa, ',', '"'))
      break

    case 'query':
      var href = self.request.uri.href += (query ? '&' : '?') + self.concatParams(oa, '&')
      self.request.uri = url.parse(href)
      self.request.path = self.request.uri.path
      break

    case 'body':
      self.request.body = (form ? form + '&' : '') + self.concatParams(oa, '&')
      break

    default:
      self.request.emit('error', new Error('oauth: transport_method invalid'))
  }
}

exports.f = OAuth


/***/ }),

/***/ 567879:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var qs = __webpack_require__(280129)
var querystring = __webpack_require__(571191)

function Querystring (request) {
  this.request = request
  this.lib = null
  this.useQuerystring = null
  this.parseOptions = null
  this.stringifyOptions = null
}

Querystring.prototype.init = function (options) {
  if (this.lib) { return }

  this.useQuerystring = options.useQuerystring
  this.lib = (this.useQuerystring ? querystring : qs)

  this.parseOptions = options.qsParseOptions || {}
  this.stringifyOptions = options.qsStringifyOptions || {}
}

Querystring.prototype.stringify = function (obj) {
  return (this.useQuerystring)
    ? this.rfc3986(this.lib.stringify(obj,
      this.stringifyOptions.sep || null,
      this.stringifyOptions.eq || null,
      this.stringifyOptions))
    : this.lib.stringify(obj, this.stringifyOptions)
}

Querystring.prototype.parse = function (str) {
  return (this.useQuerystring)
    ? this.lib.parse(str,
      this.parseOptions.sep || null,
      this.parseOptions.eq || null,
      this.parseOptions)
    : this.lib.parse(str, this.parseOptions)
}

Querystring.prototype.rfc3986 = function (str) {
  return str.replace(/[!'()*]/g, function (c) {
    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
  })
}

Querystring.prototype.unescape = querystring.unescape

exports.h = Querystring


/***/ }),

/***/ 554328:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var url = __webpack_require__(978835)
var isUrl = /^https?:/

function Redirect (request) {
  this.request = request
  this.followRedirect = true
  this.followRedirects = true
  this.followAllRedirects = false
  this.followOriginalHttpMethod = false
  this.allowRedirect = function () { return true }
  this.maxRedirects = 10
  this.redirects = []
  this.redirectsFollowed = 0
  this.removeRefererHeader = false
}

Redirect.prototype.onRequest = function (options) {
  var self = this

  if (options.maxRedirects !== undefined) {
    self.maxRedirects = options.maxRedirects
  }
  if (typeof options.followRedirect === 'function') {
    self.allowRedirect = options.followRedirect
  }
  if (options.followRedirect !== undefined) {
    self.followRedirects = !!options.followRedirect
  }
  if (options.followAllRedirects !== undefined) {
    self.followAllRedirects = options.followAllRedirects
  }
  if (self.followRedirects || self.followAllRedirects) {
    self.redirects = self.redirects || []
  }
  if (options.removeRefererHeader !== undefined) {
    self.removeRefererHeader = options.removeRefererHeader
  }
  if (options.followOriginalHttpMethod !== undefined) {
    self.followOriginalHttpMethod = options.followOriginalHttpMethod
  }
}

Redirect.prototype.redirectTo = function (response) {
  var self = this
  var request = self.request

  var redirectTo = null
  if (response.statusCode >= 300 && response.statusCode < 400 && response.caseless.has('location')) {
    var location = response.caseless.get('location')
    request.debug('redirect', location)

    if (self.followAllRedirects) {
      redirectTo = location
    } else if (self.followRedirects) {
      switch (request.method) {
        case 'PATCH':
        case 'PUT':
        case 'POST':
        case 'DELETE':
          // Do not follow redirects
          break
        default:
          redirectTo = location
          break
      }
    }
  } else if (response.statusCode === 401) {
    var authHeader = request._auth.onResponse(response)
    if (authHeader) {
      request.setHeader('authorization', authHeader)
      redirectTo = request.uri
    }
  }
  return redirectTo
}

Redirect.prototype.onResponse = function (response) {
  var self = this
  var request = self.request

  var redirectTo = self.redirectTo(response)
  if (!redirectTo || !self.allowRedirect.call(request, response)) {
    return false
  }

  request.debug('redirect to', redirectTo)

  // ignore any potential response body.  it cannot possibly be useful
  // to us at this point.
  // response.resume should be defined, but check anyway before calling. Workaround for browserify.
  if (response.resume) {
    response.resume()
  }

  if (self.redirectsFollowed >= self.maxRedirects) {
    request.emit('error', new Error('Exceeded maxRedirects. Probably stuck in a redirect loop ' + request.uri.href))
    return false
  }
  self.redirectsFollowed += 1

  if (!isUrl.test(redirectTo)) {
    redirectTo = url.resolve(request.uri.href, redirectTo)
  }

  var uriPrev = request.uri
  request.uri = url.parse(redirectTo)

  // handle the case where we change protocol from https to http or vice versa
  if (request.uri.protocol !== uriPrev.protocol) {
    delete request.agent
  }

  self.redirects.push({ statusCode: response.statusCode, redirectUri: redirectTo })

  if (self.followAllRedirects && request.method !== 'HEAD' &&
    response.statusCode !== 401 && response.statusCode !== 307) {
    request.method = self.followOriginalHttpMethod ? request.method : 'GET'
  }
  // request.method = 'GET' // Force all redirects to use GET || commented out fixes #215
  delete request.src
  delete request.req
  delete request._started
  if (response.statusCode !== 401 && response.statusCode !== 307) {
    // Remove parameters from the previous response, unless this is the second request
    // for a server that requires digest authentication.
    delete request.body
    delete request._form
    if (request.headers) {
      request.removeHeader('host')
      request.removeHeader('content-type')
      request.removeHeader('content-length')
      if (request.uri.hostname !== request.originalHost.split(':')[0]) {
        // Remove authorization if changing hostnames (but not if just
        // changing ports or protocols).  This matches the behavior of curl:
        // https://github.com/bagder/curl/blob/6beb0eee/lib/http.c#L710
        request.removeHeader('authorization')
      }
    }
  }

  if (!self.removeRefererHeader) {
    request.setHeader('referer', uriPrev.href)
  }

  request.emit('redirect')

  request.init()

  return true
}

exports.l = Redirect


/***/ }),

/***/ 658024:
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {

"use strict";


var url = __webpack_require__(978835)
var tunnel = __webpack_require__(437437)

var defaultProxyHeaderWhiteList = [
  'accept',
  'accept-charset',
  'accept-encoding',
  'accept-language',
  'accept-ranges',
  'cache-control',
  'content-encoding',
  'content-language',
  'content-location',
  'content-md5',
  'content-range',
  'content-type',
  'connection',
  'date',
  'expect',
  'max-forwards',
  'pragma',
  'referer',
  'te',
  'user-agent',
  'via'
]

var defaultProxyHeaderExclusiveList = [
  'proxy-authorization'
]

function constructProxyHost (uriObject) {
  var port = uriObject.port
  var protocol = uriObject.protocol
  var proxyHost = uriObject.hostname + ':'

  if (port) {
    proxyHost += port
  } else if (protocol === 'https:') {
    proxyHost += '443'
  } else {
    proxyHost += '80'
  }

  return proxyHost
}

function constructProxyHeaderWhiteList (headers, proxyHeaderWhiteList) {
  var whiteList = proxyHeaderWhiteList
    .reduce(function (set, header) {
      set[header.toLowerCase()] = true
      return set
    }, {})

  return Object.keys(headers)
    .filter(function (header) {
      return whiteList[header.toLowerCase()]
    })
    .reduce(function (set, header) {
      set[header] = headers[header]
      return set
    }, {})
}

function constructTunnelOptions (request, proxyHeaders) {
  var proxy = request.proxy

  var tunnelOptions = {
    proxy: {
      host: proxy.hostname,
      port: +proxy.port,
      proxyAuth: proxy.auth,
      headers: proxyHeaders
    },
    headers: request.headers,
    ca: request.ca,
    cert: request.cert,
    key: request.key,
    passphrase: request.passphrase,
    pfx: request.pfx,
    ciphers: request.ciphers,
    rejectUnauthorized: request.rejectUnauthorized,
    secureOptions: request.secureOptions,
    secureProtocol: request.secureProtocol
  }

  return tunnelOptions
}

function constructTunnelFnName (uri, proxy) {
  var uriProtocol = (uri.protocol === 'https:' ? 'https' : 'http')
  var proxyProtocol = (proxy.protocol === 'https:' ? 'Https' : 'Http')
  return [uriProtocol, proxyProtocol].join('Over')
}

function getTunnelFn (request) {
  var uri = request.uri
  var proxy = request.proxy
  var tunnelFnName = constructTunnelFnName(uri, proxy)
  return tunnel[tunnelFnName]
}

function Tunnel (request) {
  this.request = request
  this.proxyHeaderWhiteList = defaultProxyHeaderWhiteList
  this.proxyHeaderExclusiveList = []
  if (typeof request.tunnel !== 'undefined') {
    this.tunnelOverride = request.tunnel
  }
}

Tunnel.prototype.isEnabled = function () {
  var self = this
  var request = self.request
    // Tunnel HTTPS by default. Allow the user to override this setting.

  // If self.tunnelOverride is set (the user specified a value), use it.
  if (typeof self.tunnelOverride !== 'undefined') {
    return self.tunnelOverride
  }

  // If the destination is HTTPS, tunnel.
  if (request.uri.protocol === 'https:') {
    return true
  }

  // Otherwise, do not use tunnel.
  return false
}

Tunnel.prototype.setup = function (options) {
  var self = this
  var request = self.request

  options = options || {}

  if (typeof request.proxy === 'string') {
    request.proxy = url.parse(request.proxy)
  }

  if (!request.proxy || !request.tunnel) {
    return false
  }

  // Setup Proxy Header Exclusive List and White List
  if (options.proxyHeaderWhiteList) {
    self.proxyHeaderWhiteList = options.proxyHeaderWhiteList
  }
  if (options.proxyHeaderExclusiveList) {
    self.proxyHeaderExclusiveList = options.proxyHeaderExclusiveList
  }

  var proxyHeaderExclusiveList = self.proxyHeaderExclusiveList.concat(defaultProxyHeaderExclusiveList)
  var proxyHeaderWhiteList = self.proxyHeaderWhiteList.concat(proxyHeaderExclusiveList)

  // Setup Proxy Headers and Proxy Headers Host
  // Only send the Proxy White Listed Header names
  var proxyHeaders = constructProxyHeaderWhiteList(request.headers, proxyHeaderWhiteList)
  proxyHeaders.host = constructProxyHost(request.uri)

  proxyHeaderExclusiveList.forEach(request.removeHeader, request)

  // Set Agent from Tunnel Data
  var tunnelFn = getTunnelFn(request)
  var tunnelOptions = constructTunnelOptions(request, proxyHeaders)
  request.agent = tunnelFn(tunnelOptions)

  return true
}

Tunnel.defaultProxyHeaderWhiteList = defaultProxyHeaderWhiteList
Tunnel.defaultProxyHeaderExclusiveList = defaultProxyHeaderExclusiveList
exports.n = Tunnel


/***/ }),

/***/ 791155:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


var http = __webpack_require__(298605)
var https = __webpack_require__(957211)
var url = __webpack_require__(978835)
var util = __webpack_require__(431669)
var stream = __webpack_require__(92413)
var zlib = __webpack_require__(678761)
var aws2 = __webpack_require__(517555)
var aws4 = __webpack_require__(95195)
var httpSignature = __webpack_require__(468007)
var mime = __webpack_require__(580983)
var caseless = __webpack_require__(909894)
var ForeverAgent = __webpack_require__(443281)
var FormData = __webpack_require__(287385)
var extend = __webpack_require__(494470)
var isstream = __webpack_require__(197356)
var isTypedArray = __webpack_require__(804501).strict
var helpers = __webpack_require__(318879)
var cookies = __webpack_require__(336947)
var getProxyFromURI = __webpack_require__(759952)
var Querystring = __webpack_require__(567879)/* .Querystring */ .h
var Har = __webpack_require__(664746)/* .Har */ .t
var Auth = __webpack_require__(268995)/* .Auth */ .g
var OAuth = __webpack_require__(170304)/* .OAuth */ .f
var hawk = __webpack_require__(924097)
var Multipart = __webpack_require__(90479)/* .Multipart */ .$
var Redirect = __webpack_require__(554328)/* .Redirect */ .l
var Tunnel = __webpack_require__(658024)/* .Tunnel */ .n
var now = __webpack_require__(75)
var Buffer = __webpack_require__(289509).Buffer

var safeStringify = helpers.safeStringify
var isReadStream = helpers.isReadStream
var toBase64 = helpers.toBase64
var defer = helpers.defer
var copy = helpers.copy
var version = helpers.version
var globalCookieJar = cookies.jar()

var globalPool = {}

function filterForNonReserved (reserved, options) {
  // Filter out properties that are not reserved.
  // Reserved values are passed in at call site.

  var object = {}
  for (var i in options) {
    var notReserved = (reserved.indexOf(i) === -1)
    if (notReserved) {
      object[i] = options[i]
    }
  }
  return object
}

function filterOutReservedFunctions (reserved, options) {
  // Filter out properties that are functions and are reserved.
  // Reserved values are passed in at call site.

  var object = {}
  for (var i in options) {
    var isReserved = !(reserved.indexOf(i) === -1)
    var isFunction = (typeof options[i] === 'function')
    if (!(isReserved && isFunction)) {
      object[i] = options[i]
    }
  }
  return object
}

// Return a simpler request object to allow serialization
function requestToJSON () {
  var self = this
  return {
    uri: self.uri,
    method: self.method,
    headers: self.headers
  }
}

// Return a simpler response object to allow serialization
function responseToJSON () {
  var self = this
  return {
    statusCode: self.statusCode,
    body: self.body,
    headers: self.headers,
    request: requestToJSON.call(self.request)
  }
}

function Request (options) {
  // if given the method property in options, set property explicitMethod to true

  // extend the Request instance with any non-reserved properties
  // remove any reserved functions from the options object
  // set Request instance to be readable and writable
  // call init

  var self = this

  // start with HAR, then override with additional options
  if (options.har) {
    self._har = new Har(self)
    options = self._har.options(options)
  }

  stream.Stream.call(self)
  var reserved = Object.keys(Request.prototype)
  var nonReserved = filterForNonReserved(reserved, options)

  extend(self, nonReserved)
  options = filterOutReservedFunctions(reserved, options)

  self.readable = true
  self.writable = true
  if (options.method) {
    self.explicitMethod = true
  }
  self._qs = new Querystring(self)
  self._auth = new Auth(self)
  self._oauth = new OAuth(self)
  self._multipart = new Multipart(self)
  self._redirect = new Redirect(self)
  self._tunnel = new Tunnel(self)
  self.init(options)
}

util.inherits(Request, stream.Stream)

// Debugging
Request.debug = process.env.NODE_DEBUG && /\brequest\b/.test(process.env.NODE_DEBUG)
function debug () {
  if (Request.debug) {
    console.error('REQUEST %s', util.format.apply(util, arguments))
  }
}
Request.prototype.debug = debug

Request.prototype.init = function (options) {
  // init() contains all the code to setup the request object.
  // the actual outgoing request is not started until start() is called
  // this function is called from both the constructor and on redirect.
  var self = this
  if (!options) {
    options = {}
  }
  self.headers = self.headers ? copy(self.headers) : {}

  // Delete headers with value undefined since they break
  // ClientRequest.OutgoingMessage.setHeader in node 0.12
  for (var headerName in self.headers) {
    if (typeof self.headers[headerName] === 'undefined') {
      delete self.headers[headerName]
    }
  }

  caseless.httpify(self, self.headers)

  if (!self.method) {
    self.method = options.method || 'GET'
  }
  if (!self.localAddress) {
    self.localAddress = options.localAddress
  }

  self._qs.init(options)

  debug(options)
  if (!self.pool && self.pool !== false) {
    self.pool = globalPool
  }
  self.dests = self.dests || []
  self.__isRequestRequest = true

  // Protect against double callback
  if (!self._callback && self.callback) {
    self._callback = self.callback
    self.callback = function () {
      if (self._callbackCalled) {
        return // Print a warning maybe?
      }
      self._callbackCalled = true
      self._callback.apply(self, arguments)
    }
    self.on('error', self.callback.bind())
    self.on('complete', self.callback.bind(self, null))
  }

  // People use this property instead all the time, so support it
  if (!self.uri && self.url) {
    self.uri = self.url
    delete self.url
  }

  // If there's a baseUrl, then use it as the base URL (i.e. uri must be
  // specified as a relative path and is appended to baseUrl).
  if (self.baseUrl) {
    if (typeof self.baseUrl !== 'string') {
      return self.emit('error', new Error('options.baseUrl must be a string'))
    }

    if (typeof self.uri !== 'string') {
      return self.emit('error', new Error('options.uri must be a string when using options.baseUrl'))
    }

    if (self.uri.indexOf('//') === 0 || self.uri.indexOf('://') !== -1) {
      return self.emit('error', new Error('options.uri must be a path when using options.baseUrl'))
    }

    // Handle all cases to make sure that there's only one slash between
    // baseUrl and uri.
    var baseUrlEndsWithSlash = self.baseUrl.lastIndexOf('/') === self.baseUrl.length - 1
    var uriStartsWithSlash = self.uri.indexOf('/') === 0

    if (baseUrlEndsWithSlash && uriStartsWithSlash) {
      self.uri = self.baseUrl + self.uri.slice(1)
    } else if (baseUrlEndsWithSlash || uriStartsWithSlash) {
      self.uri = self.baseUrl + self.uri
    } else if (self.uri === '') {
      self.uri = self.baseUrl
    } else {
      self.uri = self.baseUrl + '/' + self.uri
    }
    delete self.baseUrl
  }

  // A URI is needed by this point, emit error if we haven't been able to get one
  if (!self.uri) {
    return self.emit('error', new Error('options.uri is a required argument'))
  }

  // If a string URI/URL was given, parse it into a URL object
  if (typeof self.uri === 'string') {
    self.uri = url.parse(self.uri)
  }

  // Some URL objects are not from a URL parsed string and need href added
  if (!self.uri.href) {
    self.uri.href = url.format(self.uri)
  }

  // DEPRECATED: Warning for users of the old Unix Sockets URL Scheme
  if (self.uri.protocol === 'unix:') {
    return self.emit('error', new Error('`unix://` URL scheme is no longer supported. Please use the format `http://unix:SOCKET:PATH`'))
  }

  // Support Unix Sockets
  if (self.uri.host === 'unix') {
    self.enableUnixSocket()
  }

  if (self.strictSSL === false) {
    self.rejectUnauthorized = false
  }

  if (!self.uri.pathname) { self.uri.pathname = '/' }

  if (!(self.uri.host || (self.uri.hostname && self.uri.port)) && !self.uri.isUnix) {
    // Invalid URI: it may generate lot of bad errors, like 'TypeError: Cannot call method `indexOf` of undefined' in CookieJar
    // Detect and reject it as soon as possible
    var faultyUri = url.format(self.uri)
    var message = 'Invalid URI "' + faultyUri + '"'
    if (Object.keys(options).length === 0) {
      // No option ? This can be the sign of a redirect
      // As this is a case where the user cannot do anything (they didn't call request directly with this URL)
      // they should be warned that it can be caused by a redirection (can save some hair)
      message += '. This can be caused by a crappy redirection.'
    }
    // This error was fatal
    self.abort()
    return self.emit('error', new Error(message))
  }

  if (!self.hasOwnProperty('proxy')) {
    self.proxy = getProxyFromURI(self.uri)
  }

  self.tunnel = self._tunnel.isEnabled()
  if (self.proxy) {
    self._tunnel.setup(options)
  }

  self._redirect.onRequest(options)

  self.setHost = false
  if (!self.hasHeader('host')) {
    var hostHeaderName = self.originalHostHeaderName || 'host'
    self.setHeader(hostHeaderName, self.uri.host)
    // Drop :port suffix from Host header if known protocol.
    if (self.uri.port) {
      if ((self.uri.port === '80' && self.uri.protocol === 'http:') ||
          (self.uri.port === '443' && self.uri.protocol === 'https:')) {
        self.setHeader(hostHeaderName, self.uri.hostname)
      }
    }
    self.setHost = true
  }

  self.jar(self._jar || options.jar)

  if (!self.uri.port) {
    if (self.uri.protocol === 'http:') { self.uri.port = 80 } else if (self.uri.protocol === 'https:') { self.uri.port = 443 }
  }

  if (self.proxy && !self.tunnel) {
    self.port = self.proxy.port
    self.host = self.proxy.hostname
  } else {
    self.port = self.uri.port
    self.host = self.uri.hostname
  }

  if (options.form) {
    self.form(options.form)
  }

  if (options.formData) {
    var formData = options.formData
    var requestForm = self.form()
    var appendFormValue = function (key, value) {
      if (value && value.hasOwnProperty('value') && value.hasOwnProperty('options')) {
        requestForm.append(key, value.value, value.options)
      } else {
        requestForm.append(key, value)
      }
    }
    for (var formKey in formData) {
      if (formData.hasOwnProperty(formKey)) {
        var formValue = formData[formKey]
        if (formValue instanceof Array) {
          for (var j = 0; j < formValue.length; j++) {
            appendFormValue(formKey, formValue[j])
          }
        } else {
          appendFormValue(formKey, formValue)
        }
      }
    }
  }

  if (options.qs) {
    self.qs(options.qs)
  }

  if (self.uri.path) {
    self.path = self.uri.path
  } else {
    self.path = self.uri.pathname + (self.uri.search || '')
  }

  if (self.path.length === 0) {
    self.path = '/'
  }

  // Auth must happen last in case signing is dependent on other headers
  if (options.aws) {
    self.aws(options.aws)
  }

  if (options.hawk) {
    self.hawk(options.hawk)
  }

  if (options.httpSignature) {
    self.httpSignature(options.httpSignature)
  }

  if (options.auth) {
    if (Object.prototype.hasOwnProperty.call(options.auth, 'username')) {
      options.auth.user = options.auth.username
    }
    if (Object.prototype.hasOwnProperty.call(options.auth, 'password')) {
      options.auth.pass = options.auth.password
    }

    self.auth(
      options.auth.user,
      options.auth.pass,
      options.auth.sendImmediately,
      options.auth.bearer
    )
  }

  if (self.gzip && !self.hasHeader('accept-encoding')) {
    self.setHeader('accept-encoding', 'gzip, deflate')
  }

  if (self.uri.auth && !self.hasHeader('authorization')) {
    var uriAuthPieces = self.uri.auth.split(':').map(function (item) { return self._qs.unescape(item) })
    self.auth(uriAuthPieces[0], uriAuthPieces.slice(1).join(':'), true)
  }

  if (!self.tunnel && self.proxy && self.proxy.auth && !self.hasHeader('proxy-authorization')) {
    var proxyAuthPieces = self.proxy.auth.split(':').map(function (item) { return self._qs.unescape(item) })
    var authHeader = 'Basic ' + toBase64(proxyAuthPieces.join(':'))
    self.setHeader('proxy-authorization', authHeader)
  }

  if (self.proxy && !self.tunnel) {
    self.path = (self.uri.protocol + '//' + self.uri.host + self.path)
  }

  if (options.json) {
    self.json(options.json)
  }
  if (options.multipart) {
    self.multipart(options.multipart)
  }

  if (options.time) {
    self.timing = true

    // NOTE: elapsedTime is deprecated in favor of .timings
    self.elapsedTime = self.elapsedTime || 0
  }

  function setContentLength () {
    if (isTypedArray(self.body)) {
      self.body = Buffer.from(self.body)
    }

    if (!self.hasHeader('content-length')) {
      var length
      if (typeof self.body === 'string') {
        length = Buffer.byteLength(self.body)
      } else if (Array.isArray(self.body)) {
        length = self.body.reduce(function (a, b) { return a + b.length }, 0)
      } else {
        length = self.body.length
      }

      if (length) {
        self.setHeader('content-length', length)
      } else {
        self.emit('error', new Error('Argument error, options.body.'))
      }
    }
  }
  if (self.body && !isstream(self.body)) {
    setContentLength()
  }

  if (options.oauth) {
    self.oauth(options.oauth)
  } else if (self._oauth.params && self.hasHeader('authorization')) {
    self.oauth(self._oauth.params)
  }

  var protocol = self.proxy && !self.tunnel ? self.proxy.protocol : self.uri.protocol
  var defaultModules = {'http:': http, 'https:': https}
  var httpModules = self.httpModules || {}

  self.httpModule = httpModules[protocol] || defaultModules[protocol]

  if (!self.httpModule) {
    return self.emit('error', new Error('Invalid protocol: ' + protocol))
  }

  if (options.ca) {
    self.ca = options.ca
  }

  if (!self.agent) {
    if (options.agentOptions) {
      self.agentOptions = options.agentOptions
    }

    if (options.agentClass) {
      self.agentClass = options.agentClass
    } else if (options.forever) {
      var v = version()
      // use ForeverAgent in node 0.10- only
      if (v.major === 0 && v.minor <= 10) {
        self.agentClass = protocol === 'http:' ? ForeverAgent : ForeverAgent.SSL
      } else {
        self.agentClass = self.httpModule.Agent
        self.agentOptions = self.agentOptions || {}
        self.agentOptions.keepAlive = true
      }
    } else {
      self.agentClass = self.httpModule.Agent
    }
  }

  if (self.pool === false) {
    self.agent = false
  } else {
    self.agent = self.agent || self.getNewAgent()
  }

  self.on('pipe', function (src) {
    if (self.ntick && self._started) {
      self.emit('error', new Error('You cannot pipe to this stream after the outbound request has started.'))
    }
    self.src = src
    if (isReadStream(src)) {
      if (!self.hasHeader('content-type')) {
        self.setHeader('content-type', mime.lookup(src.path))
      }
    } else {
      if (src.headers) {
        for (var i in src.headers) {
          if (!self.hasHeader(i)) {
            self.setHeader(i, src.headers[i])
          }
        }
      }
      if (self._json && !self.hasHeader('content-type')) {
        self.setHeader('content-type', 'application/json')
      }
      if (src.method && !self.explicitMethod) {
        self.method = src.method
      }
    }

  // self.on('pipe', function () {
  //   console.error('You have already piped to this stream. Pipeing twice is likely to break the request.')
  // })
  })

  defer(function () {
    if (self._aborted) {
      return
    }

    var end = function () {
      if (self._form) {
        if (!self._auth.hasAuth) {
          self._form.pipe(self)
        } else if (self._auth.hasAuth && self._auth.sentAuth) {
          self._form.pipe(self)
        }
      }
      if (self._multipart && self._multipart.chunked) {
        self._multipart.body.pipe(self)
      }
      if (self.body) {
        if (isstream(self.body)) {
          self.body.pipe(self)
        } else {
          setContentLength()
          if (Array.isArray(self.body)) {
            self.body.forEach(function (part) {
              self.write(part)
            })
          } else {
            self.write(self.body)
          }
          self.end()
        }
      } else if (self.requestBodyStream) {
        console.warn('options.requestBodyStream is deprecated, please pass the request object to stream.pipe.')
        self.requestBodyStream.pipe(self)
      } else if (!self.src) {
        if (self._auth.hasAuth && !self._auth.sentAuth) {
          self.end()
          return
        }
        if (self.method !== 'GET' && typeof self.method !== 'undefined') {
          self.setHeader('content-length', 0)
        }
        self.end()
      }
    }

    if (self._form && !self.hasHeader('content-length')) {
      // Before ending the request, we had to compute the length of the whole form, asyncly
      self.setHeader(self._form.getHeaders(), true)
      self._form.getLength(function (err, length) {
        if (!err && !isNaN(length)) {
          self.setHeader('content-length', length)
        }
        end()
      })
    } else {
      end()
    }

    self.ntick = true
  })
}

Request.prototype.getNewAgent = function () {
  var self = this
  var Agent = self.agentClass
  var options = {}
  if (self.agentOptions) {
    for (var i in self.agentOptions) {
      options[i] = self.agentOptions[i]
    }
  }
  if (self.ca) {
    options.ca = self.ca
  }
  if (self.ciphers) {
    options.ciphers = self.ciphers
  }
  if (self.secureProtocol) {
    options.secureProtocol = self.secureProtocol
  }
  if (self.secureOptions) {
    options.secureOptions = self.secureOptions
  }
  if (typeof self.rejectUnauthorized !== 'undefined') {
    options.rejectUnauthorized = self.rejectUnauthorized
  }

  if (self.cert && self.key) {
    options.key = self.key
    options.cert = self.cert
  }

  if (self.pfx) {
    options.pfx = self.pfx
  }

  if (self.passphrase) {
    options.passphrase = self.passphrase
  }

  var poolKey = ''

  // different types of agents are in different pools
  if (Agent !== self.httpModule.Agent) {
    poolKey += Agent.name
  }

  // ca option is only relevant if proxy or destination are https
  var proxy = self.proxy
  if (typeof proxy === 'string') {
    proxy = url.parse(proxy)
  }
  var isHttps = (proxy && proxy.protocol === 'https:') || this.uri.protocol === 'https:'

  if (isHttps) {
    if (options.ca) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.ca
    }

    if (typeof options.rejectUnauthorized !== 'undefined') {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.rejectUnauthorized
    }

    if (options.cert) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.cert.toString('ascii') + options.key.toString('ascii')
    }

    if (options.pfx) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.pfx.toString('ascii')
    }

    if (options.ciphers) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.ciphers
    }

    if (options.secureProtocol) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.secureProtocol
    }

    if (options.secureOptions) {
      if (poolKey) {
        poolKey += ':'
      }
      poolKey += options.secureOptions
    }
  }

  if (self.pool === globalPool && !poolKey && Object.keys(options).length === 0 && self.httpModule.globalAgent) {
    // not doing anything special.  Use the globalAgent
    return self.httpModule.globalAgent
  }

  // we're using a stored agent.  Make sure it's protocol-specific
  poolKey = self.uri.protocol + poolKey

  // generate a new agent for this setting if none yet exists
  if (!self.pool[poolKey]) {
    self.pool[poolKey] = new Agent(options)
    // properly set maxSockets on new agents
    if (self.pool.maxSockets) {
      self.pool[poolKey].maxSockets = self.pool.maxSockets
    }
  }

  return self.pool[poolKey]
}

Request.prototype.start = function () {
  // start() is called once we are ready to send the outgoing HTTP request.
  // this is usually called on the first write(), end() or on nextTick()
  var self = this

  if (self.timing) {
    // All timings will be relative to this request's startTime.  In order to do this,
    // we need to capture the wall-clock start time (via Date), immediately followed
    // by the high-resolution timer (via now()).  While these two won't be set
    // at the _exact_ same time, they should be close enough to be able to calculate
    // high-resolution, monotonically non-decreasing timestamps relative to startTime.
    var startTime = new Date().getTime()
    var startTimeNow = now()
  }

  if (self._aborted) {
    return
  }

  self._started = true
  self.method = self.method || 'GET'
  self.href = self.uri.href

  if (self.src && self.src.stat && self.src.stat.size && !self.hasHeader('content-length')) {
    self.setHeader('content-length', self.src.stat.size)
  }
  if (self._aws) {
    self.aws(self._aws, true)
  }

  // We have a method named auth, which is completely different from the http.request
  // auth option.  If we don't remove it, we're gonna have a bad time.
  var reqOptions = copy(self)
  delete reqOptions.auth

  debug('make request', self.uri.href)

  // node v6.8.0 now supports a `timeout` value in `http.request()`, but we
  // should delete it for now since we handle timeouts manually for better
  // consistency with node versions before v6.8.0
  delete reqOptions.timeout

  try {
    self.req = self.httpModule.request(reqOptions)
  } catch (err) {
    self.emit('error', err)
    return
  }

  if (self.timing) {
    self.startTime = startTime
    self.startTimeNow = startTimeNow

    // Timing values will all be relative to startTime (by comparing to startTimeNow
    // so we have an accurate clock)
    self.timings = {}
  }

  var timeout
  if (self.timeout && !self.timeoutTimer) {
    if (self.timeout < 0) {
      timeout = 0
    } else if (typeof self.timeout === 'number' && isFinite(self.timeout)) {
      timeout = self.timeout
    }
  }

  self.req.on('response', self.onRequestResponse.bind(self))
  self.req.on('error', self.onRequestError.bind(self))
  self.req.on('drain', function () {
    self.emit('drain')
  })

  self.req.on('socket', function (socket) {
    // `._connecting` was the old property which was made public in node v6.1.0
    var isConnecting = socket._connecting || socket.connecting
    if (self.timing) {
      self.timings.socket = now() - self.startTimeNow

      if (isConnecting) {
        var onLookupTiming = function () {
          self.timings.lookup = now() - self.startTimeNow
        }

        var onConnectTiming = function () {
          self.timings.connect = now() - self.startTimeNow
        }

        socket.once('lookup', onLookupTiming)
        socket.once('connect', onConnectTiming)

        // clean up timing event listeners if needed on error
        self.req.once('error', function () {
          socket.removeListener('lookup', onLookupTiming)
          socket.removeListener('connect', onConnectTiming)
        })
      }
    }

    var setReqTimeout = function () {
      // This timeout sets the amount of time to wait *between* bytes sent
      // from the server once connected.
      //
      // In particular, it's useful for erroring if the server fails to send
      // data halfway through streaming a response.
      self.req.setTimeout(timeout, function () {
        if (self.req) {
          self.abort()
          var e = new Error('ESOCKETTIMEDOUT')
          e.code = 'ESOCKETTIMEDOUT'
          e.connect = false
          self.emit('error', e)
        }
      })
    }
    if (timeout !== undefined) {
      // Only start the connection timer if we're actually connecting a new
      // socket, otherwise if we're already connected (because this is a
      // keep-alive connection) do not bother. This is important since we won't
      // get a 'connect' event for an already connected socket.
      if (isConnecting) {
        var onReqSockConnect = function () {
          socket.removeListener('connect', onReqSockConnect)
          self.clearTimeout()
          setReqTimeout()
        }

        socket.on('connect', onReqSockConnect)

        self.req.on('error', function (err) { // eslint-disable-line handle-callback-err
          socket.removeListener('connect', onReqSockConnect)
        })

        // Set a timeout in memory - this block will throw if the server takes more
        // than `timeout` to write the HTTP status and headers (corresponding to
        // the on('response') event on the client). NB: this measures wall-clock
        // time, not the time between bytes sent by the server.
        self.timeoutTimer = setTimeout(function () {
          socket.removeListener('connect', onReqSockConnect)
          self.abort()
          var e = new Error('ETIMEDOUT')
          e.code = 'ETIMEDOUT'
          e.connect = true
          self.emit('error', e)
        }, timeout)
      } else {
        // We're already connected
        setReqTimeout()
      }
    }
    self.emit('socket', socket)
  })

  self.emit('request', self.req)
}

Request.prototype.onRequestError = function (error) {
  var self = this
  if (self._aborted) {
    return
  }
  if (self.req && self.req._reusedSocket && error.code === 'ECONNRESET' &&
    self.agent.addRequestNoreuse) {
    self.agent = { addRequest: self.agent.addRequestNoreuse.bind(self.agent) }
    self.start()
    self.req.end()
    return
  }
  self.clearTimeout()
  self.emit('error', error)
}

Request.prototype.onRequestResponse = function (response) {
  var self = this

  if (self.timing) {
    self.timings.response = now() - self.startTimeNow
  }

  debug('onRequestResponse', self.uri.href, response.statusCode, response.headers)
  response.on('end', function () {
    if (self.timing) {
      self.timings.end = now() - self.startTimeNow
      response.timingStart = self.startTime

      // fill in the blanks for any periods that didn't trigger, such as
      // no lookup or connect due to keep alive
      if (!self.timings.socket) {
        self.timings.socket = 0
      }
      if (!self.timings.lookup) {
        self.timings.lookup = self.timings.socket
      }
      if (!self.timings.connect) {
        self.timings.connect = self.timings.lookup
      }
      if (!self.timings.response) {
        self.timings.response = self.timings.connect
      }

      debug('elapsed time', self.timings.end)

      // elapsedTime includes all redirects
      self.elapsedTime += Math.round(self.timings.end)

      // NOTE: elapsedTime is deprecated in favor of .timings
      response.elapsedTime = self.elapsedTime

      // timings is just for the final fetch
      response.timings = self.timings

      // pre-calculate phase timings as well
      response.timingPhases = {
        wait: self.timings.socket,
        dns: self.timings.lookup - self.timings.socket,
        tcp: self.timings.connect - self.timings.lookup,
        firstByte: self.timings.response - self.timings.connect,
        download: self.timings.end - self.timings.response,
        total: self.timings.end
      }
    }
    debug('response end', self.uri.href, response.statusCode, response.headers)
  })

  if (self._aborted) {
    debug('aborted', self.uri.href)
    response.resume()
    return
  }

  self.response = response
  response.request = self
  response.toJSON = responseToJSON

  // XXX This is different on 0.10, because SSL is strict by default
  if (self.httpModule === https &&
    self.strictSSL && (!response.hasOwnProperty('socket') ||
    !response.socket.authorized)) {
    debug('strict ssl error', self.uri.href)
    var sslErr = response.hasOwnProperty('socket') ? response.socket.authorizationError : self.uri.href + ' does not support SSL'
    self.emit('error', new Error('SSL Error: ' + sslErr))
    return
  }

  // Save the original host before any redirect (if it changes, we need to
  // remove any authorization headers).  Also remember the case of the header
  // name because lots of broken servers expect Host instead of host and we
  // want the caller to be able to specify this.
  self.originalHost = self.getHeader('host')
  if (!self.originalHostHeaderName) {
    self.originalHostHeaderName = self.hasHeader('host')
  }
  if (self.setHost) {
    self.removeHeader('host')
  }
  self.clearTimeout()

  var targetCookieJar = (self._jar && self._jar.setCookie) ? self._jar : globalCookieJar
  var addCookie = function (cookie) {
    // set the cookie if it's domain in the href's domain.
    try {
      targetCookieJar.setCookie(cookie, self.uri.href, {ignoreError: true})
    } catch (e) {
      self.emit('error', e)
    }
  }

  response.caseless = caseless(response.headers)

  if (response.caseless.has('set-cookie') && (!self._disableCookies)) {
    var headerName = response.caseless.has('set-cookie')
    if (Array.isArray(response.headers[headerName])) {
      response.headers[headerName].forEach(addCookie)
    } else {
      addCookie(response.headers[headerName])
    }
  }

  if (self._redirect.onResponse(response)) {
    return // Ignore the rest of the response
  } else {
    // Be a good stream and emit end when the response is finished.
    // Hack to emit end on close because of a core bug that never fires end
    response.on('close', function () {
      if (!self._ended) {
        self.response.emit('end')
      }
    })

    response.once('end', function () {
      self._ended = true
    })

    var noBody = function (code) {
      return (
        self.method === 'HEAD' ||
        // Informational
        (code >= 100 && code < 200) ||
        // No Content
        code === 204 ||
        // Not Modified
        code === 304
      )
    }

    var responseContent
    if (self.gzip && !noBody(response.statusCode)) {
      var contentEncoding = response.headers['content-encoding'] || 'identity'
      contentEncoding = contentEncoding.trim().toLowerCase()

      // Be more lenient with decoding compressed responses, since (very rarely)
      // servers send slightly invalid gzip responses that are still accepted
      // by common browsers.
      // Always using Z_SYNC_FLUSH is what cURL does.
      var zlibOptions = {
        flush: zlib.Z_SYNC_FLUSH,
        finishFlush: zlib.Z_SYNC_FLUSH
      }

      if (contentEncoding === 'gzip') {
        responseContent = zlib.createGunzip(zlibOptions)
        response.pipe(responseContent)
      } else if (contentEncoding === 'deflate') {
        responseContent = zlib.createInflate(zlibOptions)
        response.pipe(responseContent)
      } else {
        // Since previous versions didn't check for Content-Encoding header,
        // ignore any invalid values to preserve backwards-compatibility
        if (contentEncoding !== 'identity') {
          debug('ignoring unrecognized Content-Encoding ' + contentEncoding)
        }
        responseContent = response
      }
    } else {
      responseContent = response
    }

    if (self.encoding) {
      if (self.dests.length !== 0) {
        console.error('Ignoring encoding parameter as this stream is being piped to another stream which makes the encoding option invalid.')
      } else {
        responseContent.setEncoding(self.encoding)
      }
    }

    if (self._paused) {
      responseContent.pause()
    }

    self.responseContent = responseContent

    self.emit('response', response)

    self.dests.forEach(function (dest) {
      self.pipeDest(dest)
    })

    responseContent.on('data', function (chunk) {
      if (self.timing && !self.responseStarted) {
        self.responseStartTime = (new Date()).getTime()

        // NOTE: responseStartTime is deprecated in favor of .timings
        response.responseStartTime = self.responseStartTime
      }
      self._destdata = true
      self.emit('data', chunk)
    })
    responseContent.once('end', function (chunk) {
      self.emit('end', chunk)
    })
    responseContent.on('error', function (error) {
      self.emit('error', error)
    })
    responseContent.on('close', function () { self.emit('close') })

    if (self.callback) {
      self.readResponseBody(response)
    } else { // if no callback
      self.on('end', function () {
        if (self._aborted) {
          debug('aborted', self.uri.href)
          return
        }
        self.emit('complete', response)
      })
    }
  }
  debug('finish init function', self.uri.href)
}

Request.prototype.readResponseBody = function (response) {
  var self = this
  debug("reading response's body")
  var buffers = []
  var bufferLength = 0
  var strings = []

  self.on('data', function (chunk) {
    if (!Buffer.isBuffer(chunk)) {
      strings.push(chunk)
    } else if (chunk.length) {
      bufferLength += chunk.length
      buffers.push(chunk)
    }
  })
  self.on('end', function () {
    debug('end event', self.uri.href)
    if (self._aborted) {
      debug('aborted', self.uri.href)
      // `buffer` is defined in the parent scope and used in a closure it exists for the life of the request.
      // This can lead to leaky behavior if the user retains a reference to the request object.
      buffers = []
      bufferLength = 0
      return
    }

    if (bufferLength) {
      debug('has body', self.uri.href, bufferLength)
      response.body = Buffer.concat(buffers, bufferLength)
      if (self.encoding !== null) {
        response.body = response.body.toString(self.encoding)
      }
      // `buffer` is defined in the parent scope and used in a closure it exists for the life of the Request.
      // This can lead to leaky behavior if the user retains a reference to the request object.
      buffers = []
      bufferLength = 0
    } else if (strings.length) {
      // The UTF8 BOM [0xEF,0xBB,0xBF] is converted to [0xFE,0xFF] in the JS UTC16/UCS2 representation.
      // Strip this value out when the encoding is set to 'utf8', as upstream consumers won't expect it and it breaks JSON.parse().
      if (self.encoding === 'utf8' && strings[0].length > 0 && strings[0][0] === '\uFEFF') {
        strings[0] = strings[0].substring(1)
      }
      response.body = strings.join('')
    }

    if (self._json) {
      try {
        response.body = JSON.parse(response.body, self._jsonReviver)
      } catch (e) {
        debug('invalid JSON received', self.uri.href)
      }
    }
    debug('emitting complete', self.uri.href)
    if (typeof response.body === 'undefined' && !self._json) {
      response.body = self.encoding === null ? Buffer.alloc(0) : ''
    }
    self.emit('complete', response, response.body)
  })
}

Request.prototype.abort = function () {
  var self = this
  self._aborted = true

  if (self.req) {
    self.req.abort()
  } else if (self.response) {
    self.response.destroy()
  }

  self.clearTimeout()
  self.emit('abort')
}

Request.prototype.pipeDest = function (dest) {
  var self = this
  var response = self.response
  // Called after the response is received
  if (dest.headers && !dest.headersSent) {
    if (response.caseless.has('content-type')) {
      var ctname = response.caseless.has('content-type')
      if (dest.setHeader) {
        dest.setHeader(ctname, response.headers[ctname])
      } else {
        dest.headers[ctname] = response.headers[ctname]
      }
    }

    if (response.caseless.has('content-length')) {
      var clname = response.caseless.has('content-length')
      if (dest.setHeader) {
        dest.setHeader(clname, response.headers[clname])
      } else {
        dest.headers[clname] = response.headers[clname]
      }
    }
  }
  if (dest.setHeader && !dest.headersSent) {
    for (var i in response.headers) {
      // If the response content is being decoded, the Content-Encoding header
      // of the response doesn't represent the piped content, so don't pass it.
      if (!self.gzip || i !== 'content-encoding') {
        dest.setHeader(i, response.headers[i])
      }
    }
    dest.statusCode = response.statusCode
  }
  if (self.pipefilter) {
    self.pipefilter(response, dest)
  }
}

Request.prototype.qs = function (q, clobber) {
  var self = this
  var base
  if (!clobber && self.uri.query) {
    base = self._qs.parse(self.uri.query)
  } else {
    base = {}
  }

  for (var i in q) {
    base[i] = q[i]
  }

  var qs = self._qs.stringify(base)

  if (qs === '') {
    return self
  }

  self.uri = url.parse(self.uri.href.split('?')[0] + '?' + qs)
  self.url = self.uri
  self.path = self.uri.path

  if (self.uri.host === 'unix') {
    self.enableUnixSocket()
  }

  return self
}
Request.prototype.form = function (form) {
  var self = this
  if (form) {
    if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) {
      self.setHeader('content-type', 'application/x-www-form-urlencoded')
    }
    self.body = (typeof form === 'string')
      ? self._qs.rfc3986(form.toString('utf8'))
      : self._qs.stringify(form).toString('utf8')
    return self
  }
  // create form-data object
  self._form = new FormData()
  self._form.on('error', function (err) {
    err.message = 'form-data: ' + err.message
    self.emit('error', err)
    self.abort()
  })
  return self._form
}
Request.prototype.multipart = function (multipart) {
  var self = this

  self._multipart.onRequest(multipart)

  if (!self._multipart.chunked) {
    self.body = self._multipart.body
  }

  return self
}
Request.prototype.json = function (val) {
  var self = this

  if (!self.hasHeader('accept')) {
    self.setHeader('accept', 'application/json')
  }

  if (typeof self.jsonReplacer === 'function') {
    self._jsonReplacer = self.jsonReplacer
  }

  self._json = true
  if (typeof val === 'boolean') {
    if (self.body !== undefined) {
      if (!/^application\/x-www-form-urlencoded\b/.test(self.getHeader('content-type'))) {
        self.body = safeStringify(self.body, self._jsonReplacer)
      } else {
        self.body = self._qs.rfc3986(self.body)
      }
      if (!self.hasHeader('content-type')) {
        self.setHeader('content-type', 'application/json')
      }
    }
  } else {
    self.body = safeStringify(val, self._jsonReplacer)
    if (!self.hasHeader('content-type')) {
      self.setHeader('content-type', 'application/json')
    }
  }

  if (typeof self.jsonReviver === 'function') {
    self._jsonReviver = self.jsonReviver
  }

  return self
}
Request.prototype.getHeader = function (name, headers) {
  var self = this
  var result, re, match
  if (!headers) {
    headers = self.headers
  }
  Object.keys(headers).forEach(function (key) {
    if (key.length !== name.length) {
      return
    }
    re = new RegExp(name, 'i')
    match = key.match(re)
    if (match) {
      result = headers[key]
    }
  })
  return result
}
Request.prototype.enableUnixSocket = function () {
  // Get the socket & request paths from the URL
  var unixParts = this.uri.path.split(':')
  var host = unixParts[0]
  var path = unixParts[1]
  // Apply unix properties to request
  this.socketPath = host
  this.uri.pathname = path
  this.uri.path = path
  this.uri.host = host
  this.uri.hostname = host
  this.uri.isUnix = true
}

Request.prototype.auth = function (user, pass, sendImmediately, bearer) {
  var self = this

  self._auth.onRequest(user, pass, sendImmediately, bearer)

  return self
}
Request.prototype.aws = function (opts, now) {
  var self = this

  if (!now) {
    self._aws = opts
    return self
  }

  if (opts.sign_version === 4 || opts.sign_version === '4') {
    // use aws4
    var options = {
      host: self.uri.host,
      path: self.uri.path,
      method: self.method,
      headers: self.headers,
      body: self.body
    }
    if (opts.service) {
      options.service = opts.service
    }
    var signRes = aws4.sign(options, {
      accessKeyId: opts.key,
      secretAccessKey: opts.secret,
      sessionToken: opts.session
    })
    self.setHeader('authorization', signRes.headers.Authorization)
    self.setHeader('x-amz-date', signRes.headers['X-Amz-Date'])
    if (signRes.headers['X-Amz-Security-Token']) {
      self.setHeader('x-amz-security-token', signRes.headers['X-Amz-Security-Token'])
    }
  } else {
    // default: use aws-sign2
    var date = new Date()
    self.setHeader('date', date.toUTCString())
    var auth = {
      key: opts.key,
      secret: opts.secret,
      verb: self.method.toUpperCase(),
      date: date,
      contentType: self.getHeader('content-type') || '',
      md5: self.getHeader('content-md5') || '',
      amazonHeaders: aws2.canonicalizeHeaders(self.headers)
    }
    var path = self.uri.path
    if (opts.bucket && path) {
      auth.resource = '/' + opts.bucket + path
    } else if (opts.bucket && !path) {
      auth.resource = '/' + opts.bucket
    } else if (!opts.bucket && path) {
      auth.resource = path
    } else if (!opts.bucket && !path) {
      auth.resource = '/'
    }
    auth.resource = aws2.canonicalizeResource(auth.resource)
    self.setHeader('authorization', aws2.authorization(auth))
  }

  return self
}
Request.prototype.httpSignature = function (opts) {
  var self = this
  httpSignature.signRequest({
    getHeader: function (header) {
      return self.getHeader(header, self.headers)
    },
    setHeader: function (header, value) {
      self.setHeader(header, value)
    },
    method: self.method,
    path: self.path
  }, opts)
  debug('httpSignature authorization', self.getHeader('authorization'))

  return self
}
Request.prototype.hawk = function (opts) {
  var self = this
  self.setHeader('Authorization', hawk.header(self.uri, self.method, opts))
}
Request.prototype.oauth = function (_oauth) {
  var self = this

  self._oauth.onRequest(_oauth)

  return self
}

Request.prototype.jar = function (jar) {
  var self = this
  var cookies

  if (self._redirect.redirectsFollowed === 0) {
    self.originalCookieHeader = self.getHeader('cookie')
  }

  if (!jar) {
    // disable cookies
    cookies = false
    self._disableCookies = true
  } else {
    var targetCookieJar = jar.getCookieString ? jar : globalCookieJar
    var urihref = self.uri.href
    // fetch cookie in the Specified host
    if (targetCookieJar) {
      cookies = targetCookieJar.getCookieString(urihref)
    }
  }

  // if need cookie and cookie is not empty
  if (cookies && cookies.length) {
    if (self.originalCookieHeader) {
      // Don't overwrite existing Cookie header
      self.setHeader('cookie', self.originalCookieHeader + '; ' + cookies)
    } else {
      self.setHeader('cookie', cookies)
    }
  }
  self._jar = jar
  return self
}

// Stream API
Request.prototype.pipe = function (dest, opts) {
  var self = this

  if (self.response) {
    if (self._destdata) {
      self.emit('error', new Error('You cannot pipe after data has been emitted from the response.'))
    } else if (self._ended) {
      self.emit('error', new Error('You cannot pipe after the response has been ended.'))
    } else {
      stream.Stream.prototype.pipe.call(self, dest, opts)
      self.pipeDest(dest)
      return dest
    }
  } else {
    self.dests.push(dest)
    stream.Stream.prototype.pipe.call(self, dest, opts)
    return dest
  }
}
Request.prototype.write = function () {
  var self = this
  if (self._aborted) { return }

  if (!self._started) {
    self.start()
  }
  if (self.req) {
    return self.req.write.apply(self.req, arguments)
  }
}
Request.prototype.end = function (chunk) {
  var self = this
  if (self._aborted) { return }

  if (chunk) {
    self.write(chunk)
  }
  if (!self._started) {
    self.start()
  }
  if (self.req) {
    self.req.end()
  }
}
Request.prototype.pause = function () {
  var self = this
  if (!self.responseContent) {
    self._paused = true
  } else {
    self.responseContent.pause.apply(self.responseContent, arguments)
  }
}
Request.prototype.resume = function () {
  var self = this
  if (!self.responseContent) {
    self._paused = false
  } else {
    self.responseContent.resume.apply(self.responseContent, arguments)
  }
}
Request.prototype.destroy = function () {
  var self = this
  this.clearTimeout()
  if (!self._ended) {
    self.end()
  } else if (self.response) {
    self.response.destroy()
  }
}

Request.prototype.clearTimeout = function () {
  if (this.timeoutTimer) {
    clearTimeout(this.timeoutTimer)
    this.timeoutTimer = null
  }
}

Request.defaultProxyHeaderWhiteList =
  Tunnel.defaultProxyHeaderWhiteList.slice()

Request.defaultProxyHeaderExclusiveList =
  Tunnel.defaultProxyHeaderExclusiveList.slice()

// Exports

Request.prototype.toJSON = requestToJSON
module.exports = Request


/***/ }),

/***/ 126567:
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

/*!
 * expand-tilde <https://github.com/jonschlinkert/expand-tilde>
 *
 * Copyright (c) 2015 Jon Schlinkert.
 * Licensed under the MIT license.
 */

var homedir = __webpack_require__(301084);
var path = __webpack_require__(385622);

module.exports = function expandTilde(filepath) {
  var home = homedir();

  if (filepath.charCodeAt(0) === 126 /* ~ */) {
    if (filepath.charCodeAt(1) === 43 /* + */) {
      return path.join(process.cwd(), filepath.slice(2));
    }
    return home ? path.join(home, filepath.slice(1)) : filepath;
  }

  return filepath;
};


/***/ })

};
;
//# sourceMappingURL=131.bundled.js.map