Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 1,751 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Contenthash | 24550193 | 7 days ago | IN | 0 ETH | 0.00000465 | ||||
| Set Contenthash | 24549898 | 7 days ago | IN | 0 ETH | 0.00001301 | ||||
| Set Addr | 24471249 | 18 days ago | IN | 0 ETH | 0.00004234 | ||||
| Set Addr | 24225158 | 52 days ago | IN | 0 ETH | 0.00004258 | ||||
| Set Addr | 23982796 | 86 days ago | IN | 0 ETH | 0.00000982 | ||||
| Set Addr | 21735358 | 400 days ago | IN | 0 ETH | 0.00007894 | ||||
| Set Addr | 20690574 | 546 days ago | IN | 0 ETH | 0.00012257 | ||||
| Set Addr | 20026653 | 639 days ago | IN | 0 ETH | 0.00129004 | ||||
| Set Addr | 19764977 | 675 days ago | IN | 0 ETH | 0.00039137 | ||||
| Set Text | 19719928 | 682 days ago | IN | 0 ETH | 0.00105375 | ||||
| Set Addr | 18752521 | 817 days ago | IN | 0 ETH | 0.00134573 | ||||
| Set Addr | 18744790 | 819 days ago | IN | 0 ETH | 0.00237538 | ||||
| Set Addr | 17626759 | 975 days ago | IN | 0 ETH | 0.00274231 | ||||
| Set Addr | 17346537 | 1015 days ago | IN | 0 ETH | 0.00193151 | ||||
| Set Contenthash | 12519649 | 1743 days ago | IN | 0 ETH | 0.00132372 | ||||
| Set Contenthash | 12450047 | 1754 days ago | IN | 0 ETH | 0.00300846 | ||||
| Set Contenthash | 12431102 | 1757 days ago | IN | 0 ETH | 0.00416514 | ||||
| Set Contenthash | 12430384 | 1757 days ago | IN | 0 ETH | 0.00384157 | ||||
| Set Contenthash | 12429876 | 1757 days ago | IN | 0 ETH | 0.00370272 | ||||
| Set Contenthash | 12427035 | 1758 days ago | IN | 0 ETH | 0.0053199 | ||||
| Set Contenthash | 12416407 | 1759 days ago | IN | 0 ETH | 0.00892901 | ||||
| Set Contenthash | 12411075 | 1760 days ago | IN | 0 ETH | 0.01147843 | ||||
| Set Contenthash | 12410866 | 1760 days ago | IN | 0 ETH | 0.01245039 | ||||
| Set Contenthash | 12410065 | 1760 days ago | IN | 0 ETH | 0.01277438 | ||||
| Set Contenthash | 12405295 | 1761 days ago | IN | 0 ETH | 0.00393414 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PublicResolver
Compiler Version
v0.5.16+commit.9c3226ce
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-01-30
*/
// File: @ensdomains/ens/contracts/ENS.sol
pragma solidity >=0.4.24;
interface ENS {
// Logged when the owner of a node assigns a new owner to a subnode.
event NewOwner(bytes32 indexed node, bytes32 indexed label, address owner);
// Logged when the owner of a node transfers ownership to a new account.
event Transfer(bytes32 indexed node, address owner);
// Logged when the resolver for a node changes.
event NewResolver(bytes32 indexed node, address resolver);
// Logged when the TTL of a node changes
event NewTTL(bytes32 indexed node, uint64 ttl);
// Logged when an operator is added or removed.
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function setRecord(bytes32 node, address owner, address resolver, uint64 ttl) external;
function setSubnodeRecord(bytes32 node, bytes32 label, address owner, address resolver, uint64 ttl) external;
function setSubnodeOwner(bytes32 node, bytes32 label, address owner) external returns(bytes32);
function setResolver(bytes32 node, address resolver) external;
function setOwner(bytes32 node, address owner) external;
function setTTL(bytes32 node, uint64 ttl) external;
function setApprovalForAll(address operator, bool approved) external;
function owner(bytes32 node) external view returns (address);
function resolver(bytes32 node) external view returns (address);
function ttl(bytes32 node) external view returns (uint64);
function recordExists(bytes32 node) external view returns (bool);
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// File: @ensdomains/resolver/contracts/ResolverBase.sol
pragma solidity ^0.5.0;
contract ResolverBase {
bytes4 private constant INTERFACE_META_ID = 0x01ffc9a7;
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == INTERFACE_META_ID;
}
function isAuthorised(bytes32 node) internal view returns(bool);
modifier authorised(bytes32 node) {
require(isAuthorised(node));
_;
}
function bytesToAddress(bytes memory b) internal pure returns(address payable a) {
require(b.length == 20);
assembly {
a := div(mload(add(b, 32)), exp(256, 12))
}
}
function addressToBytes(address a) internal pure returns(bytes memory b) {
b = new bytes(20);
assembly {
mstore(add(b, 32), mul(a, exp(256, 12)))
}
}
}
// File: @ensdomains/resolver/contracts/profiles/ABIResolver.sol
pragma solidity ^0.5.0;
contract ABIResolver is ResolverBase {
bytes4 constant private ABI_INTERFACE_ID = 0x2203ab56;
event ABIChanged(bytes32 indexed node, uint256 indexed contentType);
mapping(bytes32=>mapping(uint256=>bytes)) abis;
/**
* 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.
* @param node The node to update.
* @param contentType The content type of the ABI
* @param data The ABI data.
*/
function setABI(bytes32 node, uint256 contentType, bytes calldata data) external authorised(node) {
// Content types must be powers of 2
require(((contentType - 1) & contentType) == 0);
abis[node][contentType] = data;
emit ABIChanged(node, contentType);
}
/**
* Returns the ABI associated with an ENS node.
* Defined in EIP205.
* @param node The ENS node to query
* @param contentTypes A bitwise OR of the ABI formats accepted by the caller.
* @return contentType The content type of the return value
* @return data The ABI data
*/
function ABI(bytes32 node, uint256 contentTypes) external view returns (uint256, bytes memory) {
mapping(uint256=>bytes) storage abiset = abis[node];
for (uint256 contentType = 1; contentType <= contentTypes; contentType <<= 1) {
if ((contentType & contentTypes) != 0 && abiset[contentType].length > 0) {
return (contentType, abiset[contentType]);
}
}
return (0, bytes(""));
}
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == ABI_INTERFACE_ID || super.supportsInterface(interfaceID);
}
}
// File: @ensdomains/resolver/contracts/profiles/AddrResolver.sol
pragma solidity ^0.5.0;
contract AddrResolver is ResolverBase {
bytes4 constant private ADDR_INTERFACE_ID = 0x3b3b57de;
bytes4 constant private ADDRESS_INTERFACE_ID = 0xf1cb7e06;
uint constant private COIN_TYPE_ETH = 60;
event AddrChanged(bytes32 indexed node, address a);
event AddressChanged(bytes32 indexed node, uint coinType, bytes newAddress);
mapping(bytes32=>mapping(uint=>bytes)) _addresses;
/**
* Sets the address associated with an ENS node.
* May only be called by the owner of that node in the ENS registry.
* @param node The node to update.
* @param a The address to set.
*/
function setAddr(bytes32 node, address a) external authorised(node) {
setAddr(node, COIN_TYPE_ETH, addressToBytes(a));
}
/**
* Returns the address associated with an ENS node.
* @param node The ENS node to query.
* @return The associated address.
*/
function addr(bytes32 node) public view returns (address payable) {
bytes memory a = addr(node, COIN_TYPE_ETH);
if(a.length == 0) {
return address(0);
}
return bytesToAddress(a);
}
function setAddr(bytes32 node, uint coinType, bytes memory a) public authorised(node) {
emit AddressChanged(node, coinType, a);
if(coinType == COIN_TYPE_ETH) {
emit AddrChanged(node, bytesToAddress(a));
}
_addresses[node][coinType] = a;
}
function addr(bytes32 node, uint coinType) public view returns(bytes memory) {
return _addresses[node][coinType];
}
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == ADDR_INTERFACE_ID || interfaceID == ADDRESS_INTERFACE_ID || super.supportsInterface(interfaceID);
}
}
// File: @ensdomains/resolver/contracts/profiles/ContentHashResolver.sol
pragma solidity ^0.5.0;
contract ContentHashResolver is ResolverBase {
bytes4 constant private CONTENT_HASH_INTERFACE_ID = 0xbc1c58d1;
event ContenthashChanged(bytes32 indexed node, bytes hash);
mapping(bytes32=>bytes) hashes;
/**
* Sets the contenthash associated with an ENS node.
* May only be called by the owner of that node in the ENS registry.
* @param node The node to update.
* @param hash The contenthash to set
*/
function setContenthash(bytes32 node, bytes calldata hash) external authorised(node) {
hashes[node] = hash;
emit ContenthashChanged(node, hash);
}
/**
* Returns the contenthash associated with an ENS node.
* @param node The ENS node to query.
* @return The associated contenthash.
*/
function contenthash(bytes32 node) external view returns (bytes memory) {
return hashes[node];
}
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == CONTENT_HASH_INTERFACE_ID || super.supportsInterface(interfaceID);
}
}
// File: @ensdomains/dnssec-oracle/contracts/BytesUtils.sol
pragma solidity >0.4.23;
library BytesUtils {
/*
* @dev Returns the keccak-256 hash of a byte range.
* @param self The byte string to hash.
* @param offset The position to start hashing at.
* @param len The number of bytes to hash.
* @return The hash of the byte range.
*/
function keccak(bytes memory self, uint offset, uint len) internal pure returns (bytes32 ret) {
require(offset + len <= self.length);
assembly {
ret := keccak256(add(add(self, 32), offset), len)
}
}
/*
* @dev Returns a positive number if `other` comes lexicographically after
* `self`, a negative number if it comes before, or zero if the
* contents of the two bytes are equal.
* @param self The first bytes to compare.
* @param other The second bytes to compare.
* @return The result of the comparison.
*/
function compare(bytes memory self, bytes memory other) internal pure returns (int) {
return compare(self, 0, self.length, other, 0, other.length);
}
/*
* @dev Returns a positive number if `other` comes lexicographically after
* `self`, a negative number if it comes before, or zero if the
* contents of the two bytes are equal. Comparison is done per-rune,
* on unicode codepoints.
* @param self The first bytes to compare.
* @param offset The offset of self.
* @param len The length of self.
* @param other The second bytes to compare.
* @param otheroffset The offset of the other string.
* @param otherlen The length of the other string.
* @return The result of the comparison.
*/
function compare(bytes memory self, uint offset, uint len, bytes memory other, uint otheroffset, uint otherlen) internal pure returns (int) {
uint shortest = len;
if (otherlen < len)
shortest = otherlen;
uint selfptr;
uint otherptr;
assembly {
selfptr := add(self, add(offset, 32))
otherptr := add(other, add(otheroffset, 32))
}
for (uint idx = 0; idx < shortest; idx += 32) {
uint a;
uint b;
assembly {
a := mload(selfptr)
b := mload(otherptr)
}
if (a != b) {
// Mask out irrelevant bytes and check again
uint mask;
if (shortest > 32) {
mask = uint256(- 1); // aka 0xffffff....
} else {
mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);
}
uint diff = (a & mask) - (b & mask);
if (diff != 0)
return int(diff);
}
selfptr += 32;
otherptr += 32;
}
return int(len) - int(otherlen);
}
/*
* @dev Returns true if the two byte ranges are equal.
* @param self The first byte range to compare.
* @param offset The offset into the first byte range.
* @param other The second byte range to compare.
* @param otherOffset The offset into the second byte range.
* @param len The number of bytes to compare
* @return True if the byte ranges are equal, false otherwise.
*/
function equals(bytes memory self, uint offset, bytes memory other, uint otherOffset, uint len) internal pure returns (bool) {
return keccak(self, offset, len) == keccak(other, otherOffset, len);
}
/*
* @dev Returns true if the two byte ranges are equal with offsets.
* @param self The first byte range to compare.
* @param offset The offset into the first byte range.
* @param other The second byte range to compare.
* @param otherOffset The offset into the second byte range.
* @return True if the byte ranges are equal, false otherwise.
*/
function equals(bytes memory self, uint offset, bytes memory other, uint otherOffset) internal pure returns (bool) {
return keccak(self, offset, self.length - offset) == keccak(other, otherOffset, other.length - otherOffset);
}
/*
* @dev Compares a range of 'self' to all of 'other' and returns True iff
* they are equal.
* @param self The first byte range to compare.
* @param offset The offset into the first byte range.
* @param other The second byte range to compare.
* @return True if the byte ranges are equal, false otherwise.
*/
function equals(bytes memory self, uint offset, bytes memory other) internal pure returns (bool) {
return self.length >= offset + other.length && equals(self, offset, other, 0, other.length);
}
/*
* @dev Returns true if the two byte ranges are equal.
* @param self The first byte range to compare.
* @param other The second byte range to compare.
* @return True if the byte ranges are equal, false otherwise.
*/
function equals(bytes memory self, bytes memory other) internal pure returns(bool) {
return self.length == other.length && equals(self, 0, other, 0, self.length);
}
/*
* @dev Returns the 8-bit number at the specified index of self.
* @param self The byte string.
* @param idx The index into the bytes
* @return The specified 8 bits of the string, interpreted as an integer.
*/
function readUint8(bytes memory self, uint idx) internal pure returns (uint8 ret) {
return uint8(self[idx]);
}
/*
* @dev Returns the 16-bit number at the specified index of self.
* @param self The byte string.
* @param idx The index into the bytes
* @return The specified 16 bits of the string, interpreted as an integer.
*/
function readUint16(bytes memory self, uint idx) internal pure returns (uint16 ret) {
require(idx + 2 <= self.length);
assembly {
ret := and(mload(add(add(self, 2), idx)), 0xFFFF)
}
}
/*
* @dev Returns the 32-bit number at the specified index of self.
* @param self The byte string.
* @param idx The index into the bytes
* @return The specified 32 bits of the string, interpreted as an integer.
*/
function readUint32(bytes memory self, uint idx) internal pure returns (uint32 ret) {
require(idx + 4 <= self.length);
assembly {
ret := and(mload(add(add(self, 4), idx)), 0xFFFFFFFF)
}
}
/*
* @dev Returns the 32 byte value at the specified index of self.
* @param self The byte string.
* @param idx The index into the bytes
* @return The specified 32 bytes of the string.
*/
function readBytes32(bytes memory self, uint idx) internal pure returns (bytes32 ret) {
require(idx + 32 <= self.length);
assembly {
ret := mload(add(add(self, 32), idx))
}
}
/*
* @dev Returns the 32 byte value at the specified index of self.
* @param self The byte string.
* @param idx The index into the bytes
* @return The specified 32 bytes of the string.
*/
function readBytes20(bytes memory self, uint idx) internal pure returns (bytes20 ret) {
require(idx + 20 <= self.length);
assembly {
ret := and(mload(add(add(self, 32), idx)), 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000)
}
}
/*
* @dev Returns the n byte value at the specified index of self.
* @param self The byte string.
* @param idx The index into the bytes.
* @param len The number of bytes.
* @return The specified 32 bytes of the string.
*/
function readBytesN(bytes memory self, uint idx, uint len) internal pure returns (bytes32 ret) {
require(len <= 32);
require(idx + len <= self.length);
assembly {
let mask := not(sub(exp(256, sub(32, len)), 1))
ret := and(mload(add(add(self, 32), idx)), mask)
}
}
function memcpy(uint dest, uint src, uint len) private pure {
// Copy word-length chunks while possible
for (; len >= 32; len -= 32) {
assembly {
mstore(dest, mload(src))
}
dest += 32;
src += 32;
}
// Copy remaining bytes
uint mask = 256 ** (32 - len) - 1;
assembly {
let srcpart := and(mload(src), not(mask))
let destpart := and(mload(dest), mask)
mstore(dest, or(destpart, srcpart))
}
}
/*
* @dev Copies a substring into a new byte string.
* @param self The byte string to copy from.
* @param offset The offset to start copying at.
* @param len The number of bytes to copy.
*/
function substring(bytes memory self, uint offset, uint len) internal pure returns(bytes memory) {
require(offset + len <= self.length);
bytes memory ret = new bytes(len);
uint dest;
uint src;
assembly {
dest := add(ret, 32)
src := add(add(self, 32), offset)
}
memcpy(dest, src, len);
return ret;
}
// Maps characters from 0x30 to 0x7A to their base32 values.
// 0xFF represents invalid characters in that range.
bytes constant base32HexTable = hex'00010203040506070809FFFFFFFFFFFFFF0A0B0C0D0E0F101112131415161718191A1B1C1D1E1FFFFFFFFFFFFFFFFFFFFF0A0B0C0D0E0F101112131415161718191A1B1C1D1E1F';
/**
* @dev Decodes unpadded base32 data of up to one word in length.
* @param self The data to decode.
* @param off Offset into the string to start at.
* @param len Number of characters to decode.
* @return The decoded data, left aligned.
*/
function base32HexDecodeWord(bytes memory self, uint off, uint len) internal pure returns(bytes32) {
require(len <= 52);
uint ret = 0;
uint8 decoded;
for(uint i = 0; i < len; i++) {
bytes1 char = self[off + i];
require(char >= 0x30 && char <= 0x7A);
decoded = uint8(base32HexTable[uint(uint8(char)) - 0x30]);
require(decoded <= 0x20);
if(i == len - 1) {
break;
}
ret = (ret << 5) | decoded;
}
uint bitlen = len * 5;
if(len % 8 == 0) {
// Multiple of 8 characters, no padding
ret = (ret << 5) | decoded;
} else if(len % 8 == 2) {
// Two extra characters - 1 byte
ret = (ret << 3) | (decoded >> 2);
bitlen -= 2;
} else if(len % 8 == 4) {
// Four extra characters - 2 bytes
ret = (ret << 1) | (decoded >> 4);
bitlen -= 4;
} else if(len % 8 == 5) {
// Five extra characters - 3 bytes
ret = (ret << 4) | (decoded >> 1);
bitlen -= 1;
} else if(len % 8 == 7) {
// Seven extra characters - 4 bytes
ret = (ret << 2) | (decoded >> 3);
bitlen -= 3;
} else {
revert();
}
return bytes32(ret << (256 - bitlen));
}
}
// File: @ensdomains/buffer/contracts/Buffer.sol
pragma solidity >0.4.18;
/**
* @dev A library for working with mutable byte buffers in Solidity.
*
* Byte buffers are mutable and expandable, and provide a variety of primitives
* for writing to them. At any time you can fetch a bytes object containing the
* current contents of the buffer. The bytes object should not be stored between
* operations, as it may change due to resizing of the buffer.
*/
library Buffer {
/**
* @dev Represents a mutable buffer. Buffers have a current value (buf) and
* a capacity. The capacity may be longer than the current value, in
* which case it can be extended without the need to allocate more memory.
*/
struct buffer {
bytes buf;
uint capacity;
}
/**
* @dev Initializes a buffer with an initial capacity.
* @param buf The buffer to initialize.
* @param capacity The number of bytes of space to allocate the buffer.
* @return The buffer, for chaining.
*/
function init(buffer memory buf, uint capacity) internal pure returns(buffer memory) {
if (capacity % 32 != 0) {
capacity += 32 - (capacity % 32);
}
// Allocate space for the buffer data
buf.capacity = capacity;
assembly {
let ptr := mload(0x40)
mstore(buf, ptr)
mstore(ptr, 0)
mstore(0x40, add(32, add(ptr, capacity)))
}
return buf;
}
/**
* @dev Initializes a new buffer from an existing bytes object.
* Changes to the buffer may mutate the original value.
* @param b The bytes object to initialize the buffer with.
* @return A new buffer.
*/
function fromBytes(bytes memory b) internal pure returns(buffer memory) {
buffer memory buf;
buf.buf = b;
buf.capacity = b.length;
return buf;
}
function resize(buffer memory buf, uint capacity) private pure {
bytes memory oldbuf = buf.buf;
init(buf, capacity);
append(buf, oldbuf);
}
function max(uint a, uint b) private pure returns(uint) {
if (a > b) {
return a;
}
return b;
}
/**
* @dev Sets buffer length to 0.
* @param buf The buffer to truncate.
* @return The original buffer, for chaining..
*/
function truncate(buffer memory buf) internal pure returns (buffer memory) {
assembly {
let bufptr := mload(buf)
mstore(bufptr, 0)
}
return buf;
}
/**
* @dev Writes a byte string to a buffer. Resizes if doing so would exceed
* the capacity of the buffer.
* @param buf The buffer to append to.
* @param off The start offset to write to.
* @param data The data to append.
* @param len The number of bytes to copy.
* @return The original buffer, for chaining.
*/
function write(buffer memory buf, uint off, bytes memory data, uint len) internal pure returns(buffer memory) {
require(len <= data.length);
if (off + len > buf.capacity) {
resize(buf, max(buf.capacity, len + off) * 2);
}
uint dest;
uint src;
assembly {
// Memory address of the buffer data
let bufptr := mload(buf)
// Length of existing buffer data
let buflen := mload(bufptr)
// Start address = buffer address + offset + sizeof(buffer length)
dest := add(add(bufptr, 32), off)
// Update buffer length if we're extending it
if gt(add(len, off), buflen) {
mstore(bufptr, add(len, off))
}
src := add(data, 32)
}
// Copy word-length chunks while possible
for (; len >= 32; len -= 32) {
assembly {
mstore(dest, mload(src))
}
dest += 32;
src += 32;
}
// Copy remaining bytes
uint mask = 256 ** (32 - len) - 1;
assembly {
let srcpart := and(mload(src), not(mask))
let destpart := and(mload(dest), mask)
mstore(dest, or(destpart, srcpart))
}
return buf;
}
/**
* @dev Appends a byte string to a buffer. Resizes if doing so would exceed
* the capacity of the buffer.
* @param buf The buffer to append to.
* @param data The data to append.
* @param len The number of bytes to copy.
* @return The original buffer, for chaining.
*/
function append(buffer memory buf, bytes memory data, uint len) internal pure returns (buffer memory) {
return write(buf, buf.buf.length, data, len);
}
/**
* @dev Appends a byte string to a buffer. Resizes if doing so would exceed
* the capacity of the buffer.
* @param buf The buffer to append to.
* @param data The data to append.
* @return The original buffer, for chaining.
*/
function append(buffer memory buf, bytes memory data) internal pure returns (buffer memory) {
return write(buf, buf.buf.length, data, data.length);
}
/**
* @dev Writes a byte to the buffer. Resizes if doing so would exceed the
* capacity of the buffer.
* @param buf The buffer to append to.
* @param off The offset to write the byte at.
* @param data The data to append.
* @return The original buffer, for chaining.
*/
function writeUint8(buffer memory buf, uint off, uint8 data) internal pure returns(buffer memory) {
if (off >= buf.capacity) {
resize(buf, buf.capacity * 2);
}
assembly {
// Memory address of the buffer data
let bufptr := mload(buf)
// Length of existing buffer data
let buflen := mload(bufptr)
// Address = buffer address + sizeof(buffer length) + off
let dest := add(add(bufptr, off), 32)
mstore8(dest, data)
// Update buffer length if we extended it
if eq(off, buflen) {
mstore(bufptr, add(buflen, 1))
}
}
return buf;
}
/**
* @dev Appends a byte to the buffer. Resizes if doing so would exceed the
* capacity of the buffer.
* @param buf The buffer to append to.
* @param data The data to append.
* @return The original buffer, for chaining.
*/
function appendUint8(buffer memory buf, uint8 data) internal pure returns(buffer memory) {
return writeUint8(buf, buf.buf.length, data);
}
/**
* @dev Writes up to 32 bytes to the buffer. Resizes if doing so would
* exceed the capacity of the buffer.
* @param buf The buffer to append to.
* @param off The offset to write at.
* @param data The data to append.
* @param len The number of bytes to write (left-aligned).
* @return The original buffer, for chaining.
*/
function write(buffer memory buf, uint off, bytes32 data, uint len) private pure returns(buffer memory) {
if (len + off > buf.capacity) {
resize(buf, (len + off) * 2);
}
uint mask = 256 ** len - 1;
// Right-align data
data = data >> (8 * (32 - len));
assembly {
// Memory address of the buffer data
let bufptr := mload(buf)
// Address = buffer address + sizeof(buffer length) + off + len
let dest := add(add(bufptr, off), len)
mstore(dest, or(and(mload(dest), not(mask)), data))
// Update buffer length if we extended it
if gt(add(off, len), mload(bufptr)) {
mstore(bufptr, add(off, len))
}
}
return buf;
}
/**
* @dev Writes a bytes20 to the buffer. Resizes if doing so would exceed the
* capacity of the buffer.
* @param buf The buffer to append to.
* @param off The offset to write at.
* @param data The data to append.
* @return The original buffer, for chaining.
*/
function writeBytes20(buffer memory buf, uint off, bytes20 data) internal pure returns (buffer memory) {
return write(buf, off, bytes32(data), 20);
}
/**
* @dev Appends a bytes20 to the buffer. Resizes if doing so would exceed
* the capacity of the buffer.
* @param buf The buffer to append to.
* @param data The data to append.
* @return The original buffer, for chhaining.
*/
function appendBytes20(buffer memory buf, bytes20 data) internal pure returns (buffer memory) {
return write(buf, buf.buf.length, bytes32(data), 20);
}
/**
* @dev Appends a bytes32 to the buffer. Resizes if doing so would exceed
* the capacity of the buffer.
* @param buf The buffer to append to.
* @param data The data to append.
* @return The original buffer, for chaining.
*/
function appendBytes32(buffer memory buf, bytes32 data) internal pure returns (buffer memory) {
return write(buf, buf.buf.length, data, 32);
}
/**
* @dev Writes an integer to the buffer. Resizes if doing so would exceed
* the capacity of the buffer.
* @param buf The buffer to append to.
* @param off The offset to write at.
* @param data The data to append.
* @param len The number of bytes to write (right-aligned).
* @return The original buffer, for chaining.
*/
function writeInt(buffer memory buf, uint off, uint data, uint len) private pure returns(buffer memory) {
if (len + off > buf.capacity) {
resize(buf, (len + off) * 2);
}
uint mask = 256 ** len - 1;
assembly {
// Memory address of the buffer data
let bufptr := mload(buf)
// Address = buffer address + off + sizeof(buffer length) + len
let dest := add(add(bufptr, off), len)
mstore(dest, or(and(mload(dest), not(mask)), data))
// Update buffer length if we extended it
if gt(add(off, len), mload(bufptr)) {
mstore(bufptr, add(off, len))
}
}
return buf;
}
/**
* @dev Appends a byte to the end of the buffer. Resizes if doing so would
* exceed the capacity of the buffer.
* @param buf The buffer to append to.
* @param data The data to append.
* @return The original buffer.
*/
function appendInt(buffer memory buf, uint data, uint len) internal pure returns(buffer memory) {
return writeInt(buf, buf.buf.length, data, len);
}
}
// File: @ensdomains/dnssec-oracle/contracts/RRUtils.sol
pragma solidity >0.4.23;
/**
* @dev RRUtils is a library that provides utilities for parsing DNS resource records.
*/
library RRUtils {
using BytesUtils for *;
using Buffer for *;
/**
* @dev Returns the number of bytes in the DNS name at 'offset' in 'self'.
* @param self The byte array to read a name from.
* @param offset The offset to start reading at.
* @return The length of the DNS name at 'offset', in bytes.
*/
function nameLength(bytes memory self, uint offset) internal pure returns(uint) {
uint idx = offset;
while (true) {
assert(idx < self.length);
uint labelLen = self.readUint8(idx);
idx += labelLen + 1;
if (labelLen == 0) {
break;
}
}
return idx - offset;
}
/**
* @dev Returns a DNS format name at the specified offset of self.
* @param self The byte array to read a name from.
* @param offset The offset to start reading at.
* @return The name.
*/
function readName(bytes memory self, uint offset) internal pure returns(bytes memory ret) {
uint len = nameLength(self, offset);
return self.substring(offset, len);
}
/**
* @dev Returns the number of labels in the DNS name at 'offset' in 'self'.
* @param self The byte array to read a name from.
* @param offset The offset to start reading at.
* @return The number of labels in the DNS name at 'offset', in bytes.
*/
function labelCount(bytes memory self, uint offset) internal pure returns(uint) {
uint count = 0;
while (true) {
assert(offset < self.length);
uint labelLen = self.readUint8(offset);
offset += labelLen + 1;
if (labelLen == 0) {
break;
}
count += 1;
}
return count;
}
/**
* @dev An iterator over resource records.
*/
struct RRIterator {
bytes data;
uint offset;
uint16 dnstype;
uint16 class;
uint32 ttl;
uint rdataOffset;
uint nextOffset;
}
/**
* @dev Begins iterating over resource records.
* @param self The byte string to read from.
* @param offset The offset to start reading at.
* @return An iterator object.
*/
function iterateRRs(bytes memory self, uint offset) internal pure returns (RRIterator memory ret) {
ret.data = self;
ret.nextOffset = offset;
next(ret);
}
/**
* @dev Returns true iff there are more RRs to iterate.
* @param iter The iterator to check.
* @return True iff the iterator has finished.
*/
function done(RRIterator memory iter) internal pure returns(bool) {
return iter.offset >= iter.data.length;
}
/**
* @dev Moves the iterator to the next resource record.
* @param iter The iterator to advance.
*/
function next(RRIterator memory iter) internal pure {
iter.offset = iter.nextOffset;
if (iter.offset >= iter.data.length) {
return;
}
// Skip the name
uint off = iter.offset + nameLength(iter.data, iter.offset);
// Read type, class, and ttl
iter.dnstype = iter.data.readUint16(off);
off += 2;
iter.class = iter.data.readUint16(off);
off += 2;
iter.ttl = iter.data.readUint32(off);
off += 4;
// Read the rdata
uint rdataLength = iter.data.readUint16(off);
off += 2;
iter.rdataOffset = off;
iter.nextOffset = off + rdataLength;
}
/**
* @dev Returns the name of the current record.
* @param iter The iterator.
* @return A new bytes object containing the owner name from the RR.
*/
function name(RRIterator memory iter) internal pure returns(bytes memory) {
return iter.data.substring(iter.offset, nameLength(iter.data, iter.offset));
}
/**
* @dev Returns the rdata portion of the current record.
* @param iter The iterator.
* @return A new bytes object containing the RR's RDATA.
*/
function rdata(RRIterator memory iter) internal pure returns(bytes memory) {
return iter.data.substring(iter.rdataOffset, iter.nextOffset - iter.rdataOffset);
}
/**
* @dev Checks if a given RR type exists in a type bitmap.
* @param self The byte string to read the type bitmap from.
* @param offset The offset to start reading at.
* @param rrtype The RR type to check for.
* @return True if the type is found in the bitmap, false otherwise.
*/
function checkTypeBitmap(bytes memory self, uint offset, uint16 rrtype) internal pure returns (bool) {
uint8 typeWindow = uint8(rrtype >> 8);
uint8 windowByte = uint8((rrtype & 0xff) / 8);
uint8 windowBitmask = uint8(uint8(1) << (uint8(7) - uint8(rrtype & 0x7)));
for (uint off = offset; off < self.length;) {
uint8 window = self.readUint8(off);
uint8 len = self.readUint8(off + 1);
if (typeWindow < window) {
// We've gone past our window; it's not here.
return false;
} else if (typeWindow == window) {
// Check this type bitmap
if (len * 8 <= windowByte) {
// Our type is past the end of the bitmap
return false;
}
return (self.readUint8(off + windowByte + 2) & windowBitmask) != 0;
} else {
// Skip this type bitmap
off += len + 2;
}
}
return false;
}
function compareNames(bytes memory self, bytes memory other) internal pure returns (int) {
if (self.equals(other)) {
return 0;
}
uint off;
uint otheroff;
uint prevoff;
uint otherprevoff;
uint counts = labelCount(self, 0);
uint othercounts = labelCount(other, 0);
// Keep removing labels from the front of the name until both names are equal length
while (counts > othercounts) {
prevoff = off;
off = progress(self, off);
counts--;
}
while (othercounts > counts) {
otherprevoff = otheroff;
otheroff = progress(other, otheroff);
othercounts--;
}
// Compare the last nonequal labels to each other
while (counts > 0 && !self.equals(off, other, otheroff)) {
prevoff = off;
off = progress(self, off);
otherprevoff = otheroff;
otheroff = progress(other, otheroff);
counts -= 1;
}
if (off == 0) {
return -1;
}
if(otheroff == 0) {
return 1;
}
return self.compare(prevoff + 1, self.readUint8(prevoff), other, otherprevoff + 1, other.readUint8(otherprevoff));
}
function progress(bytes memory body, uint off) internal pure returns(uint) {
return off + 1 + body.readUint8(off);
}
}
// File: @ensdomains/resolver/contracts/profiles/DNSResolver.sol
pragma solidity ^0.5.0;
contract DNSResolver is ResolverBase {
using RRUtils for *;
using BytesUtils for bytes;
bytes4 constant private DNS_RECORD_INTERFACE_ID = 0xa8fa5682;
// DNSRecordChanged is emitted whenever a given node/name/resource's RRSET is updated.
event DNSRecordChanged(bytes32 indexed node, bytes name, uint16 resource, bytes record);
// DNSRecordDeleted is emitted whenever a given node/name/resource's RRSET is deleted.
event DNSRecordDeleted(bytes32 indexed node, bytes name, uint16 resource);
// DNSZoneCleared is emitted whenever a given node's zone information is cleared.
event DNSZoneCleared(bytes32 indexed node);
// Version the mapping for each zone. This allows users who have lost
// track of their entries to effectively delete an entire zone by bumping
// the version number.
// node => version
mapping(bytes32=>uint256) private versions;
// The records themselves. Stored as binary RRSETs
// node => version => name => resource => data
mapping(bytes32=>mapping(uint256=>mapping(bytes32=>mapping(uint16=>bytes)))) private records;
// Count of number of entries for a given name. Required for DNS resolvers
// when resolving wildcards.
// node => version => name => number of records
mapping(bytes32=>mapping(uint256=>mapping(bytes32=>uint16))) private nameEntriesCount;
/**
* 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.
*
* @param node the namehash of the node for which to set the records
* @param data the DNS wire format records to set
*/
function setDNSRecords(bytes32 node, bytes calldata data) external authorised(node) {
uint16 resource = 0;
uint256 offset = 0;
bytes memory name;
bytes memory value;
bytes32 nameHash;
// Iterate over the data to add the resource records
for (RRUtils.RRIterator memory iter = data.iterateRRs(0); !iter.done(); iter.next()) {
if (resource == 0) {
resource = iter.dnstype;
name = iter.name();
nameHash = keccak256(abi.encodePacked(name));
value = bytes(iter.rdata());
} else {
bytes memory newName = iter.name();
if (resource != iter.dnstype || !name.equals(newName)) {
setDNSRRSet(node, name, resource, data, offset, iter.offset - offset, value.length == 0);
resource = iter.dnstype;
offset = iter.offset;
name = newName;
nameHash = keccak256(name);
value = bytes(iter.rdata());
}
}
}
if (name.length > 0) {
setDNSRRSet(node, name, resource, data, offset, data.length - offset, value.length == 0);
}
}
/**
* Obtain a DNS record.
* @param node the namehash of the node for which to fetch the record
* @param name the keccak-256 hash of the fully-qualified name for which to fetch the record
* @param 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
*/
function dnsRecord(bytes32 node, bytes32 name, uint16 resource) public view returns (bytes memory) {
return records[node][versions[node]][name][resource];
}
/**
* Check if a given node has records.
* @param node the namehash of the node for which to check the records
* @param name the namehash of the node for which to check the records
*/
function hasDNSRecords(bytes32 node, bytes32 name) public view returns (bool) {
return (nameEntriesCount[node][versions[node]][name] != 0);
}
/**
* Clear all information for a DNS zone.
* @param node the namehash of the node for which to clear the zone
*/
function clearDNSZone(bytes32 node) public authorised(node) {
versions[node]++;
emit DNSZoneCleared(node);
}
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == DNS_RECORD_INTERFACE_ID || super.supportsInterface(interfaceID);
}
function setDNSRRSet(
bytes32 node,
bytes memory name,
uint16 resource,
bytes memory data,
uint256 offset,
uint256 size,
bool deleteRecord) private
{
uint256 version = versions[node];
bytes32 nameHash = keccak256(name);
bytes memory rrData = data.substring(offset, size);
if (deleteRecord) {
if (records[node][version][nameHash][resource].length != 0) {
nameEntriesCount[node][version][nameHash]--;
}
delete(records[node][version][nameHash][resource]);
emit DNSRecordDeleted(node, name, resource);
} else {
if (records[node][version][nameHash][resource].length == 0) {
nameEntriesCount[node][version][nameHash]++;
}
records[node][version][nameHash][resource] = rrData;
emit DNSRecordChanged(node, name, resource, rrData);
}
}
}
// File: @ensdomains/resolver/contracts/profiles/InterfaceResolver.sol
pragma solidity ^0.5.0;
contract InterfaceResolver is ResolverBase, AddrResolver {
bytes4 constant private INTERFACE_INTERFACE_ID = bytes4(keccak256("interfaceImplementer(bytes32,bytes4)"));
bytes4 private constant INTERFACE_META_ID = 0x01ffc9a7;
event InterfaceChanged(bytes32 indexed node, bytes4 indexed interfaceID, address implementer);
mapping(bytes32=>mapping(bytes4=>address)) interfaces;
/**
* 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.
* @param node The node to update.
* @param interfaceID The EIP 168 interface ID.
* @param implementer The address of a contract that implements this interface for this node.
*/
function setInterface(bytes32 node, bytes4 interfaceID, address implementer) external authorised(node) {
interfaces[node][interfaceID] = implementer;
emit InterfaceChanged(node, interfaceID, implementer);
}
/**
* 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.
* @param node The ENS node to query.
* @param interfaceID The EIP 168 interface ID to check for.
* @return The address that implements this interface, or 0 if the interface is unsupported.
*/
function interfaceImplementer(bytes32 node, bytes4 interfaceID) external view returns (address) {
address implementer = interfaces[node][interfaceID];
if(implementer != address(0)) {
return implementer;
}
address a = addr(node);
if(a == address(0)) {
return address(0);
}
(bool success, bytes memory returnData) = a.staticcall(abi.encodeWithSignature("supportsInterface(bytes4)", INTERFACE_META_ID));
if(!success || returnData.length < 32 || returnData[31] == 0) {
// EIP 168 not supported by target
return address(0);
}
(success, returnData) = a.staticcall(abi.encodeWithSignature("supportsInterface(bytes4)", interfaceID));
if(!success || returnData.length < 32 || returnData[31] == 0) {
// Specified interface not supported by target
return address(0);
}
return a;
}
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == INTERFACE_INTERFACE_ID || super.supportsInterface(interfaceID);
}
}
// File: @ensdomains/resolver/contracts/profiles/NameResolver.sol
pragma solidity ^0.5.0;
contract NameResolver is ResolverBase {
bytes4 constant private NAME_INTERFACE_ID = 0x691f3431;
event NameChanged(bytes32 indexed node, string name);
mapping(bytes32=>string) names;
/**
* 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.
* @param node The node to update.
* @param name The name to set.
*/
function setName(bytes32 node, string calldata name) external authorised(node) {
names[node] = name;
emit NameChanged(node, name);
}
/**
* Returns the name associated with an ENS node, for reverse records.
* Defined in EIP181.
* @param node The ENS node to query.
* @return The associated name.
*/
function name(bytes32 node) external view returns (string memory) {
return names[node];
}
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == NAME_INTERFACE_ID || super.supportsInterface(interfaceID);
}
}
// File: @ensdomains/resolver/contracts/profiles/PubkeyResolver.sol
pragma solidity ^0.5.0;
contract PubkeyResolver is ResolverBase {
bytes4 constant private PUBKEY_INTERFACE_ID = 0xc8690233;
event PubkeyChanged(bytes32 indexed node, bytes32 x, bytes32 y);
struct PublicKey {
bytes32 x;
bytes32 y;
}
mapping(bytes32=>PublicKey) pubkeys;
/**
* Sets the SECP256k1 public key associated with an ENS node.
* @param node The ENS node to query
* @param x the X coordinate of the curve point for the public key.
* @param y the Y coordinate of the curve point for the public key.
*/
function setPubkey(bytes32 node, bytes32 x, bytes32 y) external authorised(node) {
pubkeys[node] = PublicKey(x, y);
emit PubkeyChanged(node, x, y);
}
/**
* Returns the SECP256k1 public key associated with an ENS node.
* Defined in EIP 619.
* @param node The ENS node to query
* @return x, y the X and Y coordinates of the curve point for the public key.
*/
function pubkey(bytes32 node) external view returns (bytes32 x, bytes32 y) {
return (pubkeys[node].x, pubkeys[node].y);
}
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == PUBKEY_INTERFACE_ID || super.supportsInterface(interfaceID);
}
}
// File: @ensdomains/resolver/contracts/profiles/TextResolver.sol
pragma solidity ^0.5.0;
contract TextResolver is ResolverBase {
bytes4 constant private TEXT_INTERFACE_ID = 0x59d1d43c;
event TextChanged(bytes32 indexed node, string indexed indexedKey, string key);
mapping(bytes32=>mapping(string=>string)) texts;
/**
* 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.
* @param node The node to update.
* @param key The key to set.
* @param value The text data value to set.
*/
function setText(bytes32 node, string calldata key, string calldata value) external authorised(node) {
texts[node][key] = value;
emit TextChanged(node, key, key);
}
/**
* Returns the text data associated with an ENS node and key.
* @param node The ENS node to query.
* @param key The text data key to query.
* @return The associated text data.
*/
function text(bytes32 node, string calldata key) external view returns (string memory) {
return texts[node][key];
}
function supportsInterface(bytes4 interfaceID) public pure returns(bool) {
return interfaceID == TEXT_INTERFACE_ID || super.supportsInterface(interfaceID);
}
}
// File: @ensdomains/resolver/contracts/PublicResolver.sol
pragma solidity ^0.5.0;
/**
* A simple resolver anyone can use; only allows the owner of a node to set its
* address.
*/
contract PublicResolver is ABIResolver, AddrResolver, ContentHashResolver, DNSResolver, InterfaceResolver, NameResolver, PubkeyResolver, TextResolver {
ENS ens;
/**
* A mapping of authorisations. An address that is authorised for a name
* may make any changes to the name that the owner could, but may not update
* the set of authorisations.
* (node, owner, caller) => isAuthorised
*/
mapping(bytes32=>mapping(address=>mapping(address=>bool))) public authorisations;
event AuthorisationChanged(bytes32 indexed node, address indexed owner, address indexed target, bool isAuthorised);
constructor(ENS _ens) public {
ens = _ens;
}
/**
* @dev 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.
*
* @param node The name to change the authorisation on.
* @param target The address that is to be authorised or deauthorised.
* @param isAuthorised True if the address should be authorised, or false if it should be deauthorised.
*/
function setAuthorisation(bytes32 node, address target, bool isAuthorised) external {
authorisations[node][msg.sender][target] = isAuthorised;
emit AuthorisationChanged(node, msg.sender, target, isAuthorised);
}
function isAuthorised(bytes32 node) internal view returns(bool) {
address owner = ens.owner(node);
return owner == msg.sender || authorisations[node][owner][msg.sender];
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"DNSZoneCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"string","name":"indexedKey","type":"string"},{"indexed":false,"internalType":"string","name":"key","type":"string"}],"name":"TextChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearDNSZone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b5060405161342e38038061342e8339818101604052602081101561003357600080fd5b810190808051906020019092919050505080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050613399806100956000396000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c8063623195b0116100c3578063bc1c58d11161007c578063bc1c58d114610aad578063c869023314610b54578063d5fa2b0014610b9d578063e59d895d14610beb578063f1cb7e0614610c62578063f86bc87914610d135761014d565b8063623195b01461073a578063691f3431146107c7578063773722131461086e5780638b95dd71146108f1578063a8fa5682146109c0578063ad5780af14610a7f5761014d565b806329cd62ea1161011557806329cd62ea14610461578063304e6ade146104a35780633b3b57de146105265780633e9ce794146105945780634cbf6ba4146105ee57806359d1d43c1461063e5761014d565b806301ffc9a7146101525780630af179d7146101b757806310f13a8c1461023a578063124a319c146103125780632203ab56146103a9575b600080fd5b61019d6004803603602081101561016857600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610d99565b604051808215151515815260200191505060405180910390f35b610238600480360360408110156101cd57600080fd5b8101908080359060200190929190803590602001906401000000008111156101f457600080fd5b82018360208201111561020657600080fd5b8035906020019184600183028401116401000000008311171561022857600080fd5b9091929391929390505050610dfa565b005b6103106004803603606081101561025057600080fd5b81019080803590602001909291908035906020019064010000000081111561027757600080fd5b82018360208201111561028957600080fd5b803590602001918460018302840111640100000000831117156102ab57600080fd5b9091929391929390803590602001906401000000008111156102cc57600080fd5b8201836020820111156102de57600080fd5b8035906020019184600183028401116401000000008311171561030057600080fd5b9091929391929390505050611073565b005b6103676004803603604081101561032857600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611159565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103df600480360360408110156103bf57600080fd5b810190808035906020019092919080359060200190929190505050611656565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042557808201518184015260208101905061040a565b50505050905090810190601f1680156104525780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6104a16004803603606081101561047757600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506117a5565b005b610524600480360360408110156104b957600080fd5b8101908080359060200190929190803590602001906401000000008111156104e057600080fd5b8201836020820111156104f257600080fd5b8035906020019184600183028401116401000000008311171561051457600080fd5b909192939192939050505061183d565b005b6105526004803603602081101561053c57600080fd5b81019080803590602001909291905050506118dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ec600480360360608110156105aa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611914565b005b6106246004803603604081101561060457600080fd5b810190808035906020019092919080359060200190929190505050611a28565b604051808215151515815260200191505060405180910390f35b6106bf6004803603604081101561065457600080fd5b81019080803590602001909291908035906020019064010000000081111561067b57600080fd5b82018360208201111561068d57600080fd5b803590602001918460018302840111640100000000831117156106af57600080fd5b9091929391929390505050611a90565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106ff5780820151818401526020810190506106e4565b50505050905090810190601f16801561072c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c56004803603606081101561075057600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460018302840111640100000000831117156107b557600080fd5b9091929391929390505050611b6c565b005b6107f3600480360360208110156107dd57600080fd5b8101908080359060200190929190505050611bf9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610833578082015181840152602081019050610818565b50505050905090810190601f1680156108605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108ef6004803603604081101561088457600080fd5b8101908080359060200190929190803590602001906401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b9091929391929390505050611cae565b005b6109be6004803603606081101561090757600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561093857600080fd5b82018360208201111561094a57600080fd5b8035906020019184600183028401116401000000008311171561096c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4e565b005b610a04600480360360608110156109d657600080fd5b810190808035906020019092919080359060200190929190803561ffff169060200190929190505050611ebb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a44578082015181840152602081019050610a29565b50505050905090810190601f168015610a715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aab60048036036020811015610a9557600080fd5b8101908080359060200190929190505050611fc0565b005b610ad960048036036020811015610ac357600080fd5b8101908080359060200190929190505050612027565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b19578082015181840152602081019050610afe565b50505050905090810190601f168015610b465780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b8060048036036020811015610b6a57600080fd5b81019080803590602001909291905050506120dc565b604051808381526020018281526020019250505060405180910390f35b610be960048036036040811015610bb357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612116565b005b610c6060048036036060811015610c0157600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612142565b005b610c9860048036036040811015610c7857600080fd5b810190808035906020019092919080359060200190929190505050612280565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd8578082015181840152602081019050610cbd565b50505050905090810190601f168015610d055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d7f60048036036060811015610d2957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612347565b604051808215151515815260200191505060405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610df35750610df282612383565b5b9050919050565b82610e04816123e4565b610e0d57600080fd5b600080905060008090506060806000610e24613108565b610e7c60008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061257090919063ffffffff16565b90505b610e888161259a565b6110005760008661ffff161415610f2f5780604001519550610ea9816125b0565b9350836040516020018082805190602001908083835b60208310610ee25780518252602082019150602081019050602083039250610ebf565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209150610f28816125e7565b9250610ff2565b6060610f3a826125b0565b9050816040015161ffff168761ffff16141580610f675750610f65818661261790919063ffffffff16565b155b15610ff057610fc98b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b511461263e565b816040015196508160200151955080945084805190602001209250610fed826125e7565b93505b505b610ffb81612abf565b610e7f565b50600083511115611068576110678984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e905003600089511461263e565b5b505050505050505050565b8461107d816123e4565b61108657600080fd5b8282600960008981526020019081526020016000208787604051808383808284378083019250505092505050908152602001604051809103902091906110cd929190613153565b5084846040518083838082843780830192505050925050506040518091039020867fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550878760405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a3505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461121e5780915050611650565b6000611229856118dd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126b57600092505050611650565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b60405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061138c5780518252602082019150602081019050602083039250611369565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146113ec576040519150601f19603f3d011682016040523d82523d6000602084013e6113f1565b606091505b5091509150811580611404575060208151105b8061144b5750600060f81b81601f8151811061141c57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561145d576000945050505050611650565b8273ffffffffffffffffffffffffffffffffffffffff168660405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106115735780518252602082019150602081019050602083039250611550565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146115d3576040519150601f19603f3d011682016040523d82523d6000602084013e6115d8565b606091505b5080925081935050508115806115ef575060208151105b806116365750600060f81b81601f8151811061160757fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15611648576000945050505050611650565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111611782576000858216141580156116b757506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156117765780826000838152602001908152602001600020808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117645780601f1061173957610100808354040283529160200191611764565b820191906000526020600020905b81548152906001019060200180831161174757829003601f168201915b5050505050905093509350505061179e565b600181901b9050611677565b5060006040518060200160405280600081525081915092509250505b9250929050565b826117af816123e4565b6117b857600080fd5b604051806040016040528084815260200183815250600860008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051808381526020018281526020019250505060405180910390a250505050565b82611847816123e4565b61185057600080fd5b82826002600087815260200190815260200160002091906118729291906131d3565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b600060606118ec83603c612280565b905060008151141561190257600091505061190f565b61190b81612bd3565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051808215151515815260200191505060405180910390a4505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b5e5780601f10611b3357610100808354040283529160200191611b5e565b820191906000526020600020905b815481529060010190602001808311611b4157829003601f168201915b505050505090509392505050565b83611b76816123e4565b611b7f57600080fd5b600084600186031614611b9157600080fd5b828260008088815260200190815260200160002060008781526020019081526020016000209190611bc39291906131d3565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b50505050509050919050565b82611cb8816123e4565b611cc157600080fd5b8282600760008781526020019081526020016000209190611ce3929190613153565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b82611d58816123e4565b611d6157600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611dcb578082015181840152602081019050611db0565b50505050905090810190601f168015611df85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2603c831415611e7c57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2611e3a84612bd3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b816001600086815260200190815260200160002060008581526020019081526020016000209080519060200190611eb4929190613253565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fb25780601f10611f8757610100808354040283529160200191611fb2565b820191906000526020600020905b815481529060010190602001808311611f9557829003601f168201915b505050505090509392505050565b80611fca816123e4565b611fd357600080fd5b6003600083815260200190815260200160002060008154809291906001019190505550817fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a198360405160405180910390a25050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b81612120816123e4565b61212957600080fd5b61213d83603c61213885612bf6565b611d4e565b505050565b8261214c816123e4565b61215557600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561233a5780601f1061230f5761010080835404028352916020019161233a565b820191906000526020600020905b81548152906001019060200180831161231d57829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123dd57506123dc82612c41565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561245a57600080fd5b505afa15801561246e573d6000803e3d6000fd5b505050506040513d602081101561248457600080fd5b810190808051906020019092919050505090503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806125685750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b612578613108565b828160000181905250818160c001818152505061259481612abf565b92915050565b6000816000015151826020015110159050919050565b60606125e082602001516125cc84600001518560200151612ca2565b8460000151612cfd9092919063ffffffff16565b9050919050565b60606126108260a001518360a001518460c00151038460000151612cfd9092919063ffffffff16565b9050919050565b60008151835114801561263657506126358360008460008751612d70565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060612679868689612cfd9092919063ffffffff16565b90508315612861576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490501461275557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff16815260200190815260200160002060006127af91906132d3565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a60405180806020018361ffff1661ffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612821578082015181840152602081019050612806565b50505050905090810190601f16801561284e5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2612ab3565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141561293557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000209080519060200190612997929190613253565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a8460405180806020018461ffff1661ffff16815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612a0f5780820151818401526020810190506129f4565b50505050905090810190601f168015612a3c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015612a75578082015181840152602081019050612a5a565b50505050905090810190601f168015612aa25780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a25b50505050505050505050565b8060c00151816020018181525050806000015151816020015110612ae257612bd0565b6000612af682600001518360200151612ca2565b8260200151019050612b15818360000151612d9490919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050612b45818360000151612d9490919063ffffffff16565b826060019061ffff16908161ffff1681525050600281019050612b75818360000151612dba90919063ffffffff16565b826080019063ffffffff16908163ffffffff16815250506004810190506000612bab828460000151612d9490919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60006014825114612be357600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f191660200182016040528015612c2c5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c9b5750612c9a82612de2565b5b9050919050565b6000808290505b600115612cf15783518110612cba57fe5b6000612ccf8286612e5490919063ffffffff16565b60ff16905060018101820191506000811415612ceb5750612cf1565b50612ca9565b82810391505092915050565b606083518284011115612d0f57600080fd5b6060826040519080825280601f01601f191660200182016040528015612d445781602001600182028038833980820191505090505b5090506000806020830191508560208801019050612d63828287612e78565b8293505050509392505050565b6000612d7d848484612ec1565b612d88878785612ec1565b14905095945050505050565b60008251600283011115612da757600080fd5b61ffff8260028501015116905092915050565b60008251600483011115612dcd57600080fd5b63ffffffff8260048501015116905092915050565b6000604051808061334160249139602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e4d5750612e4c82612ee4565b5b9050919050565b6000828281518110612e6257fe5b602001015160f81c60f81b60f81c905092915050565b5b60208110612e9c5781518352602083019250602082019150602081039050612e79565b60006001826020036101000a0390508019835116818551168181178652505050505050565b600083518284011115612ed357600080fd5b818360208601012090509392505050565b600063a8fa568260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f3e5750612f3d82612f45565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f9f5750612f9e82612fa6565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061303f575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061304f575061304e82613056565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130b057506130af826130b7565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061319457803560ff19168380011785556131c2565b828001600101855582156131c2579182015b828111156131c15782358255916020019190600101906131a6565b5b5090506131cf919061331b565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061321457803560ff1916838001178555613242565b82800160010185558215613242579182015b82811115613241578235825591602001919060010190613226565b5b50905061324f919061331b565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061329457805160ff19168380011785556132c2565b828001600101855582156132c2579182015b828111156132c15782518255916020019190600101906132a6565b5b5090506132cf919061331b565b5090565b50805460018160011615610100020316600290046000825580601f106132f95750613318565b601f016020900490600052602060002090810190613317919061331b565b5b50565b61333d91905b80821115613339576000816000905550600101613321565b5090565b9056fe696e74657266616365496d706c656d656e74657228627974657333322c62797465733429a265627a7a72315820e37e49339c407f277a18b1276335d80f06f86465250ddd0bb061d5fb5f0892b264736f6c6343000510003200000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061014d5760003560e01c8063623195b0116100c3578063bc1c58d11161007c578063bc1c58d114610aad578063c869023314610b54578063d5fa2b0014610b9d578063e59d895d14610beb578063f1cb7e0614610c62578063f86bc87914610d135761014d565b8063623195b01461073a578063691f3431146107c7578063773722131461086e5780638b95dd71146108f1578063a8fa5682146109c0578063ad5780af14610a7f5761014d565b806329cd62ea1161011557806329cd62ea14610461578063304e6ade146104a35780633b3b57de146105265780633e9ce794146105945780634cbf6ba4146105ee57806359d1d43c1461063e5761014d565b806301ffc9a7146101525780630af179d7146101b757806310f13a8c1461023a578063124a319c146103125780632203ab56146103a9575b600080fd5b61019d6004803603602081101561016857600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610d99565b604051808215151515815260200191505060405180910390f35b610238600480360360408110156101cd57600080fd5b8101908080359060200190929190803590602001906401000000008111156101f457600080fd5b82018360208201111561020657600080fd5b8035906020019184600183028401116401000000008311171561022857600080fd5b9091929391929390505050610dfa565b005b6103106004803603606081101561025057600080fd5b81019080803590602001909291908035906020019064010000000081111561027757600080fd5b82018360208201111561028957600080fd5b803590602001918460018302840111640100000000831117156102ab57600080fd5b9091929391929390803590602001906401000000008111156102cc57600080fd5b8201836020820111156102de57600080fd5b8035906020019184600183028401116401000000008311171561030057600080fd5b9091929391929390505050611073565b005b6103676004803603604081101561032857600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050611159565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103df600480360360408110156103bf57600080fd5b810190808035906020019092919080359060200190929190505050611656565b6040518083815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561042557808201518184015260208101905061040a565b50505050905090810190601f1680156104525780820380516001836020036101000a031916815260200191505b50935050505060405180910390f35b6104a16004803603606081101561047757600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506117a5565b005b610524600480360360408110156104b957600080fd5b8101908080359060200190929190803590602001906401000000008111156104e057600080fd5b8201836020820111156104f257600080fd5b8035906020019184600183028401116401000000008311171561051457600080fd5b909192939192939050505061183d565b005b6105526004803603602081101561053c57600080fd5b81019080803590602001909291905050506118dd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105ec600480360360608110156105aa57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611914565b005b6106246004803603604081101561060457600080fd5b810190808035906020019092919080359060200190929190505050611a28565b604051808215151515815260200191505060405180910390f35b6106bf6004803603604081101561065457600080fd5b81019080803590602001909291908035906020019064010000000081111561067b57600080fd5b82018360208201111561068d57600080fd5b803590602001918460018302840111640100000000831117156106af57600080fd5b9091929391929390505050611a90565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106ff5780820151818401526020810190506106e4565b50505050905090810190601f16801561072c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107c56004803603606081101561075057600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561078157600080fd5b82018360208201111561079357600080fd5b803590602001918460018302840111640100000000831117156107b557600080fd5b9091929391929390505050611b6c565b005b6107f3600480360360208110156107dd57600080fd5b8101908080359060200190929190505050611bf9565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610833578082015181840152602081019050610818565b50505050905090810190601f1680156108605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108ef6004803603604081101561088457600080fd5b8101908080359060200190929190803590602001906401000000008111156108ab57600080fd5b8201836020820111156108bd57600080fd5b803590602001918460018302840111640100000000831117156108df57600080fd5b9091929391929390505050611cae565b005b6109be6004803603606081101561090757600080fd5b8101908080359060200190929190803590602001909291908035906020019064010000000081111561093857600080fd5b82018360208201111561094a57600080fd5b8035906020019184600183028401116401000000008311171561096c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d4e565b005b610a04600480360360608110156109d657600080fd5b810190808035906020019092919080359060200190929190803561ffff169060200190929190505050611ebb565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a44578082015181840152602081019050610a29565b50505050905090810190601f168015610a715780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610aab60048036036020811015610a9557600080fd5b8101908080359060200190929190505050611fc0565b005b610ad960048036036020811015610ac357600080fd5b8101908080359060200190929190505050612027565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b19578082015181840152602081019050610afe565b50505050905090810190601f168015610b465780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610b8060048036036020811015610b6a57600080fd5b81019080803590602001909291905050506120dc565b604051808381526020018281526020019250505060405180910390f35b610be960048036036040811015610bb357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612116565b005b610c6060048036036060811015610c0157600080fd5b810190808035906020019092919080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612142565b005b610c9860048036036040811015610c7857600080fd5b810190808035906020019092919080359060200190929190505050612280565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610cd8578082015181840152602081019050610cbd565b50505050905090810190601f168015610d055780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d7f60048036036060811015610d2957600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612347565b604051808215151515815260200191505060405180910390f35b60006359d1d43c60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610df35750610df282612383565b5b9050919050565b82610e04816123e4565b610e0d57600080fd5b600080905060008090506060806000610e24613108565b610e7c60008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505061257090919063ffffffff16565b90505b610e888161259a565b6110005760008661ffff161415610f2f5780604001519550610ea9816125b0565b9350836040516020018082805190602001908083835b60208310610ee25780518252602082019150602081019050602083039250610ebf565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052805190602001209150610f28816125e7565b9250610ff2565b6060610f3a826125b0565b9050816040015161ffff168761ffff16141580610f675750610f65818661261790919063ffffffff16565b155b15610ff057610fc98b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b511461263e565b816040015196508160200151955080945084805190602001209250610fed826125e7565b93505b505b610ffb81612abf565b610e7f565b50600083511115611068576110678984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e905003600089511461263e565b5b505050505050505050565b8461107d816123e4565b61108657600080fd5b8282600960008981526020019081526020016000208787604051808383808284378083019250505092505050908152602001604051809103902091906110cd929190613153565b5084846040518083838082843780830192505050925050506040518091039020867fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550878760405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a3505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461121e5780915050611650565b6000611229856118dd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561126b57600092505050611650565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b60405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b6020831061138c5780518252602082019150602081019050602083039250611369565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146113ec576040519150601f19603f3d011682016040523d82523d6000602084013e6113f1565b606091505b5091509150811580611404575060208151105b8061144b5750600060f81b81601f8151811061141c57fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b1561145d576000945050505050611650565b8273ffffffffffffffffffffffffffffffffffffffff168660405160240180827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019150506040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083106115735780518252602082019150602081019050602083039250611550565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d80600081146115d3576040519150601f19603f3d011682016040523d82523d6000602084013e6115d8565b606091505b5080925081935050508115806115ef575060208151105b806116365750600060f81b81601f8151811061160757fe5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15611648576000945050505050611650565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111611782576000858216141580156116b757506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156117765780826000838152602001908152602001600020808054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156117645780601f1061173957610100808354040283529160200191611764565b820191906000526020600020905b81548152906001019060200180831161174757829003601f168201915b5050505050905093509350505061179e565b600181901b9050611677565b5060006040518060200160405280600081525081915092509250505b9250929050565b826117af816123e4565b6117b857600080fd5b604051806040016040528084815260200183815250600860008681526020019081526020016000206000820151816000015560208201518160010155905050837f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484604051808381526020018281526020019250505060405180910390a250505050565b82611847816123e4565b61185057600080fd5b82826002600087815260200190815260200160002091906118729291906131d3565b50837fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d7578848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b600060606118ec83603c612280565b905060008151141561190257600091505061190f565b61190b81612bd3565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16847fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df84604051808215151515815260200191505060405180910390a4505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b5e5780601f10611b3357610100808354040283529160200191611b5e565b820191906000526020600020905b815481529060010190602001808311611b4157829003601f168201915b505050505090509392505050565b83611b76816123e4565b611b7f57600080fd5b600084600186031614611b9157600080fd5b828260008088815260200190815260200160002060008781526020019081526020016000209190611bc39291906131d3565b5083857faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe360405160405180910390a35050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b50505050509050919050565b82611cb8816123e4565b611cc157600080fd5b8282600760008781526020019081526020016000209190611ce3929190613153565b50837fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f7848460405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a250505050565b82611d58816123e4565b611d6157600080fd5b837f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af75284846040518083815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611dcb578082015181840152602081019050611db0565b50505050905090810190601f168015611df85780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2603c831415611e7c57837f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2611e3a84612bd3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a25b816001600086815260200190815260200160002060008581526020019081526020016000209080519060200190611eb4929190613253565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fb25780601f10611f8757610100808354040283529160200191611fb2565b820191906000526020600020905b815481529060010190602001808311611f9557829003601f168201915b505050505090509392505050565b80611fca816123e4565b611fd357600080fd5b6003600083815260200190815260200160002060008154809291906001019190505550817fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a198360405160405180910390a25050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156120d05780601f106120a5576101008083540402835291602001916120d0565b820191906000526020600020905b8154815290600101906020018083116120b357829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b81612120816123e4565b61212957600080fd5b61213d83603c61213885612bf6565b611d4e565b505050565b8261214c816123e4565b61215557600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916847f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa84604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a350505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561233a5780601f1061230f5761010080835404028352916020019161233a565b820191906000526020600020905b81548152906001019060200180831161231d57829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c869023360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806123dd57506123dc82612c41565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b15801561245a57600080fd5b505afa15801561246e573d6000803e3d6000fd5b505050506040513d602081101561248457600080fd5b810190808051906020019092919050505090503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806125685750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b612578613108565b828160000181905250818160c001818152505061259481612abf565b92915050565b6000816000015151826020015110159050919050565b60606125e082602001516125cc84600001518560200151612ca2565b8460000151612cfd9092919063ffffffff16565b9050919050565b60606126108260a001518360a001518460c00151038460000151612cfd9092919063ffffffff16565b9050919050565b60008151835114801561263657506126358360008460008751612d70565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060612679868689612cfd9092919063ffffffff16565b90508315612861576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900490501461275557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff16815260200190815260200160002060006127af91906132d3565b897f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a60405180806020018361ffff1661ffff168152602001828103825284818151815260200191508051906020019080838360005b83811015612821578082015181840152602081019050612806565b50505050905090810190601f16801561284e5780820380516001836020036101000a031916815260200191505b50935050505060405180910390a2612ab3565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141561293557600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff1681526020019081526020016000209080519060200190612997929190613253565b50897f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a8460405180806020018461ffff1661ffff16815260200180602001838103835286818151815260200191508051906020019080838360005b83811015612a0f5780820151818401526020810190506129f4565b50505050905090810190601f168015612a3c5780820380516001836020036101000a031916815260200191505b50838103825284818151815260200191508051906020019080838360005b83811015612a75578082015181840152602081019050612a5a565b50505050905090810190601f168015612aa25780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a25b50505050505050505050565b8060c00151816020018181525050806000015151816020015110612ae257612bd0565b6000612af682600001518360200151612ca2565b8260200151019050612b15818360000151612d9490919063ffffffff16565b826040019061ffff16908161ffff1681525050600281019050612b45818360000151612d9490919063ffffffff16565b826060019061ffff16908161ffff1681525050600281019050612b75818360000151612dba90919063ffffffff16565b826080019063ffffffff16908163ffffffff16815250506004810190506000612bab828460000151612d9490919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60006014825114612be357600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f191660200182016040528015612c2c5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f343160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c9b5750612c9a82612de2565b5b9050919050565b6000808290505b600115612cf15783518110612cba57fe5b6000612ccf8286612e5490919063ffffffff16565b60ff16905060018101820191506000811415612ceb5750612cf1565b50612ca9565b82810391505092915050565b606083518284011115612d0f57600080fd5b6060826040519080825280601f01601f191660200182016040528015612d445781602001600182028038833980820191505090505b5090506000806020830191508560208801019050612d63828287612e78565b8293505050509392505050565b6000612d7d848484612ec1565b612d88878785612ec1565b14905095945050505050565b60008251600283011115612da757600080fd5b61ffff8260028501015116905092915050565b60008251600483011115612dcd57600080fd5b63ffffffff8260048501015116905092915050565b6000604051808061334160249139602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e4d5750612e4c82612ee4565b5b9050919050565b6000828281518110612e6257fe5b602001015160f81c60f81b60f81c905092915050565b5b60208110612e9c5781518352602083019250602082019150602081039050612e79565b60006001826020036101000a0390508019835116818551168181178652505050505050565b600083518284011115612ed357600080fd5b818360208601012090509392505050565b600063a8fa568260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f3e5750612f3d82612f45565b5b9050919050565b600063bc1c58d160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612f9f5750612f9e82612fa6565b5b9050919050565b6000633b3b57de60e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061303f575063f1cb7e0660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061304f575061304e82613056565b5b9050919050565b6000632203ab5660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130b057506130af826130b7565b5b9050919050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6040518060e001604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061319457803560ff19168380011785556131c2565b828001600101855582156131c2579182015b828111156131c15782358255916020019190600101906131a6565b5b5090506131cf919061331b565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061321457803560ff1916838001178555613242565b82800160010185558215613242579182015b82811115613241578235825591602001919060010190613226565b5b50905061324f919061331b565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061329457805160ff19168380011785556132c2565b828001600101855582156132c2579182015b828111156132c15782518255916020019190600101906132a6565b5b5090506132cf919061331b565b5090565b50805460018160011615610100020316600290046000825580601f106132f95750613318565b601f016020900490600052602060002090810190613317919061331b565b5b50565b61333d91905b80821115613339576000816000905550600101613321565b5090565b9056fe696e74657266616365496d706c656d656e74657228627974657333322c62797465733429a265627a7a72315820e37e49339c407f277a18b1276335d80f06f86465250ddd0bb061d5fb5f0892b264736f6c63430005100032
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e
-----Decoded View---------------
Arg [0] : _ens (address): 0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000c2e074ec69a0dfb2997ba6c7d2e1e
Deployed Bytecode Sourcemap
50704:1840:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50704:1840:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50315:171;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;50315:171:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39866:1291;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39866:1291:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;39866:1291:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;39866:1291: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;39866:1291:0;;;;;;;;;;;;:::i;:::-;;49766:187;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;49766:187:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;49766:187:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;49766:187: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;49766:187:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;49766:187:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;49766:187: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;49766:187:0;;;;;;;;;;;;:::i;:::-;;45351:977;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45351:977:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3872:464;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3872:464: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;3872:464:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48392:172;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;48392:172:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7023:169;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7023:169:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;7023:169:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;7023:169: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;7023:169:0;;;;;;;;;;;;:::i;:::-;;5560:234;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5560:234:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;52105;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52105:234:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41959:155;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41959:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;50178:129;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;50178:129:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;50178:129:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;50178:129: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;50178:129: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;50178:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3243:298;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3243:298:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;3243:298:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;3243:298: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;3243:298:0;;;;;;;;;;;;:::i;:::-;;47429:103;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47429:103: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;47429:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47066:155;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47066:155:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;47066:155:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;47066:155: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;47066:155:0;;;;;;;;;;;;:::i;:::-;;5802:292;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5802:292:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5802:292:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5802:292: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;5802:292: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;;5802:292:0;;;;;;;;;;;;;;;:::i;:::-;;41568:170;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;41568:170: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;41568:170:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42259:131;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;42259:131:0;;;;;;;;;;;;;;;;;:::i;:::-;;7366:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7366:110: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;7366:110:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48814:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;48814:135:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5260:134;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5260:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44473:229;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44473:229:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6102:129;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6102:129: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;6102:129:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51136:80;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51136:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;50315:171;50382:4;49324:10;50421:17;;50406:32;;;:11;:32;;;;:72;;;;50442:36;50466:11;50442:23;:36::i;:::-;50406:72;50399:79;;50315:171;;;:::o;39866:1291::-;39944:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;39961:15;39979:1;39961:19;;39991:14;40008:1;39991:18;;40020:17;40048:18;40077:16;40171:30;;:::i;:::-;40204:18;40220:1;40204: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;;40204:15:0;;;;;;;;:18;;;;:::i;:::-;40171:51;;40166:838;40225:11;:4;:9;:11::i;:::-;40166:838;;40282:1;40270:8;:13;;;40266:727;;;40315:4;:12;;;40304:23;;40353:11;:4;:9;:11::i;:::-;40346:18;;40421:4;40404:22;;;;;;;;;;;;;;;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;;;40404:22:0;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;40404:22:0;;;40394:33;;;;;;40383:44;;40460:12;:4;:10;:12::i;:::-;40446:27;;40266:727;;;40514:20;40537:11;:4;:9;:11::i;:::-;40514:34;;40583:4;:12;;;40571:24;;:8;:24;;;;:49;;;;40600:20;40612:7;40600:4;:11;;:20;;;;:::i;:::-;40599:21;40571:49;40567:411;;;40645:88;40657:4;40663;40669:8;40679:4;;40645: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;;40645:88:0;;;;;;40685:6;40707;40693:4;:11;;;:20;40731:1;40715:5;:12;:17;40645:11;:88::i;:::-;40767:4;:12;;;40756:23;;40811:4;:11;;;40802:20;;40852:7;40845:14;;40903:4;40893:15;;;;;;40882:26;;40945:12;:4;:10;:12::i;:::-;40931:27;;40567:411;40266:727;;40238:11;:4;:9;:11::i;:::-;40166:838;;;;41032:1;41018:4;:11;:15;41014:136;;;41050:88;41062:4;41068;41074:8;41084:4;;41050: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;;41050:88:0;;;;;;41090:6;41112;41098:4;;:11;;:20;41136:1;41120:5;:12;:17;41050:11;:88::i;:::-;41014:136;2170:1;;;;;39866:1291;;;;:::o;49766:187::-;49861:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;49897:5;;49878;:11;49884:4;49878:11;;;;;;;;;;;49890:3;;49878:16;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;49878:16:0;;;;;;;;;;;;;;;;;;:24;;;;;;;:::i;:::-;;49936:3;;49918:27;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;49918:27:0;;;;;;;;;;;;;49930:4;49918:27;49941:3;;49918: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;;49918:27:0;;;;;;;;;;;;;;49766:187;;;;;;:::o;45351:977::-;45438:7;45458:19;45480:10;:16;45491:4;45480:16;;;;;;;;;;;:29;45497:11;45480:29;;;;;;;;;;;;;;;;;;;;;;;;;;;45458:51;;45546:1;45523:25;;:11;:25;;;45520:75;;45572:11;45565:18;;;;;45520:75;45607:9;45619:10;45624:4;45619;:10::i;:::-;45607:22;;45656:1;45643:15;;:1;:15;;;45640:64;;;45690:1;45675:17;;;;;;45640:64;45717:12;45731:23;45758:1;:12;;43906:10;45824:17;;45771:71;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;45771:71:0;;;;;;;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;;;45771:71:0;45758: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;;;45758:85:0;;;;;;;;;;;;;;;;;;;;;;;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;;45716:127:0;;;;45858:7;45857:8;:34;;;;45889:2;45869:10;:17;:22;45857:34;:57;;;;45913:1;45895:19;;:10;45906:2;45895:14;;;;;;;;;;;;;;;;:19;;;;45857:57;45854:154;;;45994:1;45979:17;;;;;;;;45854:154;46044:1;:12;;46110:11;46057:65;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;46057:65:0;;;;;;;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;;;46057:65:0;46044: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;;;46044:79:0;;;;;;;;;;;;;;;;;;;;;;;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;;46020:103:0;;;;;;;;46138:7;46137:8;:34;;;;46169:2;46149:10;:17;:22;46137:34;:57;;;;46193:1;46175:19;;:10;46186:2;46175:14;;;;;;;;;;;;;;;;:19;;;;46137:57;46134:166;;;46286:1;46271:17;;;;;;;;46134:166;46319:1;46312:8;;;;;;45351:977;;;;;:::o;3872:464::-;3944:7;3953:12;3978:38;4019:4;:10;4024:4;4019:10;;;;;;;;;;;3978:51;;4047:19;4069:1;4047:23;;4042:253;4087:12;4072:11;:27;4042:253;;4171:1;4154:12;4140:11;:26;4139:33;;:67;;;;;4205:1;4176:6;:19;4183:11;4176:19;;;;;;;;;;;:26;;;;;;;;;;;;;;;;:30;4139:67;4135:149;;;4235:11;4248:6;:19;4255:11;4248:19;;;;;;;;;;;4227:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4135:149;4117:1;4101:17;;;;;4042:253;;;;4315:1;4318:9;;;;;;;;;;;;4307:21;;;;;;;;3872:464;;;;;;:::o;48392:172::-;48467:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;48500:15;;;;;;;;48510:1;48500:15;;;;48513:1;48500:15;;;48484:7;:13;48492:4;48484:13;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;48545:4;48531:25;48551:1;48554;48531:25;;;;;;;;;;;;;;;;;;;;;;;;48392:172;;;;:::o;7023:169::-;7102:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;7134:4;;7119:6;:12;7126:4;7119:12;;;;;;;;;;;:19;;;;;;;:::i;:::-;;7173:4;7154:30;7179:4;;7154: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;;7154:30:0;;;;;;;;;;;;;;7023:169;;;;:::o;5560:234::-;5609:15;5637:14;5654:25;5659:4;4827:2;5654:4;:25::i;:::-;5637:42;;5705:1;5693;:8;:13;5690:62;;;5738:1;5723:17;;;;;5690:62;5769:17;5784:1;5769:14;:17::i;:::-;5762:24;;;5560:234;;;;:::o;52105:::-;52243:12;52200:14;:20;52215:4;52200:20;;;;;;;;;;;:32;52221:10;52200:32;;;;;;;;;;;;;;;:40;52233:6;52200:40;;;;;;;;;;;;;;;;:55;;;;;;;;;;;;;;;;;;52310:6;52271:60;;52298:10;52271:60;;52292:4;52271:60;52318:12;52271:60;;;;;;;;;;;;;;;;;;;;;;52105:234;;;:::o;41959:155::-;42031:4;42104:1;42056:16;:22;42073:4;42056:22;;;;;;;;;;;:38;42079:8;:14;42088:4;42079:14;;;;;;;;;;;;42056:38;;;;;;;;;;;:44;42095:4;42056:44;;;;;;;;;;;;;;;;;;;;;:49;;;;42048:58;;41959:155;;;;:::o;50178:129::-;50250:13;50283:5;:11;50289:4;50283:11;;;;;;;;;;;50295:3;;50283:16;;;;;30:3:-1;22:6;14;1:33;57:3;49:6;45:16;35:26;;50283:16:0;;;;;;;;;;;;;;;;;;50276:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50178:129;;;;;:::o;3243:298::-;3335:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;3443:1;3427:11;3422:1;3408:11;:15;3407:31;3406:38;3398:47;;;;;;3484:4;;3458;:10;3463:4;3458:10;;;;;;;;;;;:23;3469:11;3458:23;;;;;;;;;;;:30;;;;;;;:::i;:::-;;3521:11;3515:4;3504:29;;;;;;;;;;3243:298;;;;;:::o;47429:103::-;47480:13;47513:5;:11;47519:4;47513:11;;;;;;;;;;;47506:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47429:103;;;:::o;47066:155::-;47139:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;47170:4;;47156:5;:11;47162:4;47156:11;;;;;;;;;;;:18;;;;;;;:::i;:::-;;47202:4;47190:23;47208:4;;47190: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;;47190:23:0;;;;;;;;;;;;;;47066:155;;;;:::o;5802:292::-;5882:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;5919:4;5904:33;5925:8;5935:1;5904: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;5904:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4827:2;5951:8;:25;5948:98;;;6010:4;5998:36;6016:17;6031:1;6016:14;:17::i;:::-;5998:36;;;;;;;;;;;;;;;;;;;;;;5948:98;6085:1;6056:10;:16;6067:4;6056:16;;;;;;;;;;;:26;6073:8;6056:26;;;;;;;;;;;:30;;;;;;;;;;;;:::i;:::-;;5802:292;;;;:::o;41568:170::-;41653:12;41685:7;:13;41693:4;41685:13;;;;;;;;;;;:29;41699:8;:14;41708:4;41699:14;;;;;;;;;;;;41685:29;;;;;;;;;;;:35;41715:4;41685:35;;;;;;;;;;;:45;41721:8;41685:45;;;;;;;;;;;;;;;41678:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41568:170;;;;;:::o;42259:131::-;42313:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;42330:8;:14;42339:4;42330:14;;;;;;;;;;;;:16;;;;;;;;;;;;;42377:4;42362:20;;;;;;;;;;42259:131;;:::o;7366:110::-;7424:12;7456:6;:12;7463:4;7456:12;;;;;;;;;;;7449:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7366:110;;;:::o;48814:135::-;48867:9;48878;48908:7;:13;48916:4;48908:13;;;;;;;;;;;:15;;;48925:7;:13;48933:4;48925:13;;;;;;;;;;;:15;;;48900:41;;;;48814:135;;;:::o;5260:134::-;5322:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;5339:47;5347:4;4827:2;5368:17;5383:1;5368:14;:17::i;:::-;5339:7;:47::i;:::-;5260:134;;;:::o;44473:229::-;44570:4;2140:18;2153:4;2140:12;:18::i;:::-;2132:27;;;;;;44619:11;44587:10;:16;44598:4;44587:16;;;;;;;;;;;:29;44604:11;44587:29;;;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;44669:11;44646:48;;;44663:4;44646:48;44682:11;44646:48;;;;;;;;;;;;;;;;;;;;;;44473:229;;;;:::o;6102:129::-;6165:12;6197:10;:16;6208:4;6197:16;;;;;;;;;;;:26;6214:8;6197:26;;;;;;;;;;;6190:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6102:129;;;;:::o;51136:80::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48957:173::-;49024:4;47911:10;49063:19;;49048:34;;;:11;:34;;;;:74;;;;49086:36;49110:11;49086:23;:36::i;:::-;49048:74;49041:81;;48957:173;;;:::o;52347:194::-;52405:4;52422:13;52438:3;;;;;;;;;;;:9;;;52448:4;52438:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;52438:15:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;52438:15:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52438:15:0;;;;;;;;;;;;;;;;52422:31;;52480:10;52471:19;;:5;:19;;;:62;;;;52494:14;:20;52509:4;52494:20;;;;;;;;;;;:27;52515:5;52494:27;;;;;;;;;;;;;;;:39;52522:10;52494:39;;;;;;;;;;;;;;;;;;;;;;;;;52471:62;52464:69;;;52347:194;;;:::o;32517:186::-;32592:21;;:::i;:::-;32637:4;32626:3;:8;;:15;;;;32669:6;32652:3;:14;;:23;;;;;32686:9;32691:3;32686:4;:9::i;:::-;32517:186;;;;:::o;32881:123::-;32941:4;32980;:9;;;:16;32965:4;:11;;;:31;;32958:38;;32881:123;;;:::o;34020:168::-;34080:12;34112:68;34132:4;:11;;;34145:34;34156:4;:9;;;34167:4;:11;;;34145:10;:34::i;:::-;34112:4;:9;;;:19;;:68;;;;;:::i;:::-;34105:75;;34020:168;;;:::o;34368:174::-;34429:12;34461:73;34481:4;:16;;;34517:4;:16;;;34499:4;:15;;;:34;34461:4;:9;;;:19;;:73;;;;;:::i;:::-;34454:80;;34368:174;;;:::o;12770:178::-;12847:4;12886:5;:12;12871:4;:11;:27;:69;;;;;12902:38;12909:4;12915:1;12918:5;12925:1;12928:4;:11;12902:6;:38::i;:::-;12871:69;12864:76;;12770:178;;;;:::o;42583:990::-;42810:15;42828:8;:14;42837:4;42828:14;;;;;;;;;;;;42810:32;;42853:16;42882:4;42872:15;;;;;;42853:34;;42898:19;42920:28;42935:6;42943:4;42920;:14;;:28;;;;;:::i;:::-;42898:50;;42963:12;42959:607;;;43049:1;42996:7;:13;43004:4;42996:13;;;;;;;;;;;:22;43010:7;42996:22;;;;;;;;;;;:32;43019:8;42996:32;;;;;;;;;;;:42;43029:8;42996:42;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:54;42992:138;;43071:16;:22;43088:4;43071:22;;;;;;;;;;;:31;43094:7;43071:31;;;;;;;;;;;:41;43103:8;43071:41;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42992:138;43151:7;:13;43159:4;43151:13;;;;;;;;;;;:22;43165:7;43151:22;;;;;;;;;;;:32;43174:8;43151:32;;;;;;;;;;;:42;43184:8;43151:42;;;;;;;;;;;;;;;;43144:50;;;;:::i;:::-;43231:4;43214:38;43237:4;43243:8;43214:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;43214:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42959:607;;;43342:1;43289:7;:13;43297:4;43289:13;;;;;;;;;;;:22;43303:7;43289:22;;;;;;;;;;;:32;43312:8;43289:32;;;;;;;;;;;:42;43322:8;43289:42;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;:54;43285:138;;;43364:16;:22;43381:4;43364:22;;;;;;;;;;;:31;43387:7;43364:31;;;;;;;;;;;:41;43396:8;43364:41;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43285:138;43482:6;43437:7;:13;43445:4;43437:13;;;;;;;;;;;:22;43451:7;43437:22;;;;;;;;;;;:32;43460:8;43437:32;;;;;;;;;;;:42;43470:8;43437:42;;;;;;;;;;;;;;;:51;;;;;;;;;;;;:::i;:::-;;43525:4;43508:46;43531:4;43537:8;43547:6;43508:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;43508:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;43508:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42959:607;42583:990;;;;;;;;;;:::o;33133:704::-;33210:4;:15;;;33196:4;:11;;:29;;;;;33255:4;:9;;;:16;33240:4;:11;;;:31;33236:70;;33288:7;;33236:70;33344:8;33369:34;33380:4;:9;;;33391:4;:11;;;33369:10;:34::i;:::-;33355:4;:11;;;:48;33344:59;;33469:25;33490:3;33469:4;:9;;;:20;;:25;;;;:::i;:::-;33454:4;:12;;:40;;;;;;;;;;;33512:1;33505:8;;;;33537:25;33558:3;33537:4;:9;;;:20;;:25;;;;:::i;:::-;33524:4;:10;;:38;;;;;;;;;;;33580:1;33573:8;;;;33603:25;33624:3;33603:4;:9;;;:20;;:25;;;;:::i;:::-;33592:4;:8;;:36;;;;;;;;;;;33646:1;33639:8;;;;33687:16;33706:25;33727:3;33706:4;:9;;;:20;;:25;;;;:::i;:::-;33687:44;;;;33749:1;33742:8;;;;33780:3;33761:4;:16;;:22;;;;;33818:11;33812:3;:17;33794:4;:15;;:35;;;;;33133:704;;;;:::o;2187:209::-;2249:17;2299:2;2287:1;:8;:14;2279:23;;;;;;2374:2;2369:3;2365:12;2359:2;2356:1;2352:10;2346:17;2342:36;2337:41;;2322:67;;;:::o;2404:194::-;2461:14;2502:2;2492: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;2492:13:0;;;;2488:17;;2575:2;2570:3;2566:12;2563:1;2559:20;2554:2;2551:1;2547:10;2540:40;2525:66;;;:::o;47540:171::-;47607:4;46706:10;47646:17;;47631:32;;;:11;:32;;;;:72;;;;47667:36;47691:11;47667:23;:36::i;:::-;47631:72;47624:79;;47540:171;;;:::o;30554:378::-;30628:4;30645:8;30656:6;30645:17;;30673:222;30680:4;30673:222;;;30714:4;:11;30708:3;:17;30701:25;;;;30741:13;30757:19;30772:3;30757:4;:14;;:19;;;;:::i;:::-;30741:35;;;;30809:1;30798:8;:12;30791:19;;;;30841:1;30829:8;:13;30825:59;;;30863:5;;;30825:59;30673:222;;;;30918:6;30912:3;:12;30905:19;;;30554:378;;;;:::o;16647:407::-;16730:12;16779:4;:11;16772:3;16763:6;:12;:27;;16755:36;;;;;;16804:16;16833:3;16823: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;16823:14:0;;;;16804:33;;16848:9;16868:8;16930:2;16925:3;16921:12;16913:20;;16973:6;16968:2;16962:4;16958:13;16954:26;16947:33;;17001:22;17008:4;17014:3;17019;17001:6;:22::i;:::-;17043:3;17036:10;;;;;16647:407;;;;;:::o;11100:211::-;11219:4;11272:31;11279:5;11286:11;11299:3;11272:6;:31::i;:::-;11243:25;11250:4;11256:6;11264:3;11243:6;:25::i;:::-;:60;11236:67;;11100:211;;;;;;;:::o;13574:228::-;13646:10;13688:4;:11;13683:1;13677:3;:7;:22;;13669:31;;;;;;13777:6;13770:3;13766:1;13760:4;13756:12;13752:22;13746:29;13742:42;13735:49;;13720:75;;;;:::o;14054:232::-;14126:10;14168:4;:11;14163:1;14157:3;:7;:22;;14149:31;;;;;;14257:10;14250:3;14246:1;14240:4;14236:12;14232:22;14226:29;14222:46;14215:53;;14200:79;;;;:::o;46336:176::-;46403:4;43805:49;;;;;;;;;;;;;;;;;;;46427:37;;;:11;:37;;;;:77;;;;46468:36;46492:11;46468:23;:36::i;:::-;46427:77;46420:84;;46336:176;;;:::o;13198:124::-;13269:9;13304:4;13309:3;13304:9;;;;;;;;;;;;;;;;13298:16;;13291:23;;13198:124;;;;:::o;15853:566::-;15975:171;15989:2;15982:3;:9;15975:171;;16066:3;16060:10;16054:4;16047:24;16108:2;16100:10;;;;16132:2;16125:9;;;;16000:2;15993:9;;;;15975:171;;;16191:9;16223:1;16216:3;16211:2;:8;16203:3;:17;:21;16191:33;;16294:4;16290:9;16284:3;16278:10;16274:26;16347:4;16340;16334:11;16330:22;16392:7;16382:8;16379:21;16373:4;16366:35;16244:168;;;;;;:::o;8049:243::-;8130:11;8178:4;:11;8171:3;8162:6;:12;:27;;8154:36;;;;;;8270:3;8261:6;8256:2;8250:4;8246:13;8242:26;8232:42;8225:49;;8210:75;;;;;:::o;42398:177::-;42465:4;37685:10;42504:23;;42489:38;;;:11;:38;;;;:78;;;;42531:36;42555:11;42531:23;:36::i;:::-;42489:78;42482:85;;42398:177;;;:::o;7484:179::-;7551:4;6665:10;7590:25;;7575:40;;;:11;:40;;;;:80;;;;7619:36;7643:11;7619:23;:36::i;:::-;7575:80;7568:87;;7484:179;;;:::o;6239:210::-;6306:4;4708:10;6345:17;;6330:32;;;:11;:32;;;;:71;;;;4772:10;6381:20;;6366:35;;;:11;:35;;;;6330:71;:111;;;;6405:36;6429:11;6405:23;:36::i;:::-;6330:111;6323:118;;6239:210;;;:::o;4344:170::-;4411:4;2789:10;4450:16;;4435:31;;;:11;:31;;;;:71;;;;4470:36;4494:11;4470:23;:36::i;:::-;4435:71;4428:78;;4344:170;;;:::o;1876:131::-;1943:4;1857:10;1982:17;;1967:32;;;:11;:32;;;;1960:39;;1876:131;;;:::o;50704:1840::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
bzzr://e37e49339c407f277a18b1276335d80f06f86465250ddd0bb061d5fb5f0892b2
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.