ERC-721
Overview
Max Total Supply
74 TOLDAO
Holders
30
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
5 TOLDAOLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TOLNINJADAO
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-27 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; _status = _NOT_ENTERED; } } pragma solidity ^0.8.0; library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; function toString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } pragma solidity ^0.8.0; library EnumerableSet { struct Set { // Storage of set values bytes32[] _values; mapping(bytes32 => uint256) _indexes; } function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); set._indexes[value] = set._values.length; return true; } else { return false; } } function _remove(Set storage set, bytes32 value) private returns (bool) { uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; set._values[toDeleteIndex] = lastValue; set._indexes[lastValue] = valueIndex; } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } function _length(Set storage set) private view returns (uint256) { return set._values.length; } function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } struct Bytes32Set { Set _inner; } function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } struct AddressSet { Set _inner; } function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; assembly { result := store } return result; } struct UintSet { Set _inner; } function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } } pragma solidity ^0.8.4; interface IERC721A { error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); error MintERC2309QuantityExceedsLimit(); error OwnershipNotInitializedForExtraData(); struct TokenOwnership { address addr; uint64 startTimestamp; bool burned; uint24 extraData; } function totalSupply() external view returns (uint256); function supportsInterface(bytes4 interfaceId) external view returns (bool); event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved); function balanceOf(address owner) external view returns (uint256 balance); function ownerOf(uint256 tokenId) external view returns (address owner); function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external payable; function safeTransferFrom( address from, address to, uint256 tokenId ) external payable; function transferFrom( address from, address to, uint256 tokenId ) external payable; function approve(address to, uint256 tokenId) external payable; function setApprovalForAll(address operator, bool _approved) external; function getApproved(uint256 tokenId) external view returns (address operator); function isApprovedForAll(address owner, address operator) external view returns (bool); function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); } pragma solidity ^0.8.4; interface ERC721A__IERC721Receiver { function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } contract ERC721A is IERC721A { struct TokenApprovalRef { address value; } uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1; uint256 private constant _BITPOS_NUMBER_MINTED = 64; uint256 private constant _BITPOS_NUMBER_BURNED = 128; uint256 private constant _BITPOS_AUX = 192; uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1; uint256 private constant _BITPOS_START_TIMESTAMP = 160; uint256 private constant _BITMASK_BURNED = 1 << 224; uint256 private constant _BITPOS_NEXT_INITIALIZED = 225; uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225; uint256 private constant _BITPOS_EXTRA_DATA = 232; uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1; uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1; uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000; bytes32 private constant _TRANSFER_EVENT_SIGNATURE = 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef; uint256 private _currentIndex; uint256 private _burnCounter; string private _name; string private _symbol; mapping(uint256 => uint256) private _packedOwnerships; mapping(address => uint256) private _packedAddressData; mapping(uint256 => TokenApprovalRef) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } function _startTokenId() internal view virtual returns (uint256) { return 0; } function _nextTokenId() internal view virtual returns (uint256) { return _currentIndex; } function totalSupply() public view virtual override returns (uint256) { unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } function _totalMinted() internal view virtual returns (uint256) { unchecked { return _currentIndex - _startTokenId(); } } function _totalBurned() internal view virtual returns (uint256) { return _burnCounter; } function balanceOf(address owner) public view virtual override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberMinted(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _numberBurned(address owner) internal view returns (uint256) { return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY; } function _getAux(address owner) internal view returns (uint64) { return uint64(_packedAddressData[owner] >> _BITPOS_AUX); } function _setAux(address owner, uint64 aux) internal virtual { uint256 packed = _packedAddressData[owner]; uint256 auxCasted; // Cast `aux` with assembly to avoid redundant masking. assembly { auxCasted := aux } packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX); _packedAddressData[owner] = packed; } function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : ''; } function _baseURI() internal view virtual returns (string memory) { return ''; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { return address(uint160(_packedOwnershipOf(tokenId))); } function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnershipOf(tokenId)); } function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) { return _unpackedOwnership(_packedOwnerships[index]); } function _initializeOwnershipAt(uint256 index) internal virtual { if (_packedOwnerships[index] == 0) { _packedOwnerships[index] = _packedOwnershipOf(index); } } function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr) if (curr < _currentIndex) { uint256 packed = _packedOwnerships[curr]; if (packed & _BITMASK_BURNED == 0) { while (packed == 0) { packed = _packedOwnerships[--curr]; } return packed; } } } revert OwnerQueryForNonexistentToken(); } function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) { ownership.addr = address(uint160(packed)); ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP); ownership.burned = packed & _BITMASK_BURNED != 0; ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA); } function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) { assembly { // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean. owner := and(owner, _BITMASK_ADDRESS) // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`. result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags)) } } function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) { // For branchless setting of the `nextInitialized` flag. assembly { // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`. result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1)) } } function approve(address to, uint256 tokenId) public payable virtual override { address owner = ownerOf(tokenId); if (_msgSenderERC721A() != owner) if (!isApprovedForAll(owner, _msgSenderERC721A())) { revert ApprovalCallerNotOwnerNorApproved(); } _tokenApprovals[tokenId].value = to; emit Approval(owner, to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId].value; } function setApprovalForAll(address operator, bool approved) public virtual override { _operatorApprovals[_msgSenderERC721A()][operator] = approved; emit ApprovalForAll(_msgSenderERC721A(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function _exists(uint256 tokenId) internal view virtual returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && // If within bounds, _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned. } function _isSenderApprovedOrOwner( address approvedAddress, address owner, address msgSender ) private pure returns (bool result) { assembly { owner := and(owner, _BITMASK_ADDRESS) msgSender := and(msgSender, _BITMASK_ADDRESS) result := or(eq(msgSender, owner), eq(msgSender, approvedAddress)) } } function _getApprovedSlotAndAddress(uint256 tokenId) private view returns (uint256 approvedAddressSlot, address approvedAddress) { TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId]; assembly { approvedAddressSlot := tokenApproval.slot approvedAddress := sload(approvedAddressSlot) } } function transferFrom( address from, address to, uint256 tokenId ) public payable virtual override { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner(); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { --_packedAddressData[from]; ++_packedAddressData[to]; _packedOwnerships[tokenId] = _packOwnershipData( to, _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } function safeTransferFrom( address from, address to, uint256 tokenId ) public payable virtual override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public payable virtual override { transferFrom(from, to, tokenId); if (to.code.length != 0) if (!_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns ( bytes4 retval ) { return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } function _mint(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); uint256 toMasked; uint256 end = startTokenId + quantity; assembly { toMasked := and(to, _BITMASK_ADDRESS) log4( 0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, startTokenId ) for { let tokenId := add(startTokenId, 1) } iszero(eq(tokenId, end)) { tokenId := add(tokenId, 1) } { log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId) } } if (toMasked == 0) revert MintToZeroAddress(); _currentIndex = end; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _mintERC2309(address to, uint256 quantity) internal virtual { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); unchecked { _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1); _packedOwnerships[startTokenId] = _packOwnershipData( to, _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0) ); emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to); _currentIndex = startTokenId + quantity; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } function _safeMint( address to, uint256 quantity, bytes memory _data ) internal virtual { _mint(to, quantity); unchecked { if (to.code.length != 0) { uint256 end = _currentIndex; uint256 index = end - quantity; do { if (!_checkContractOnERC721Received(address(0), to, index++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (index < end); // Reentrancy protection. if (_currentIndex != end) revert(); } } } function _safeMint(address to, uint256 quantity) internal virtual { _safeMint(to, quantity, ''); } function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } function _burn(uint256 tokenId, bool approvalCheck) internal virtual { uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId); address from = address(uint160(prevOwnershipPacked)); (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId); if (approvalCheck) { if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A())) if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); assembly { if approvedAddress { sstore(approvedAddressSlot, 0) } } unchecked { _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1; _packedOwnerships[tokenId] = _packOwnershipData( from, (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked) ); if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) { uint256 nextTokenId = tokenId + 1; if (_packedOwnerships[nextTokenId] == 0) { if (nextTokenId != _currentIndex) { _packedOwnerships[nextTokenId] = prevOwnershipPacked; } } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); unchecked { _burnCounter++; } } function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual { uint256 packed = _packedOwnerships[index]; if (packed == 0) revert OwnershipNotInitializedForExtraData(); uint256 extraDataCasted; assembly { extraDataCasted := extraData } packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA); _packedOwnerships[index] = packed; } function _extraData( address from, address to, uint24 previousExtraData ) internal view virtual returns (uint24) {} function _nextExtraData( address from, address to, uint256 prevOwnershipPacked ) private view returns (uint256) { uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA); return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA; } function _msgSenderERC721A() internal view virtual returns (address) { return msg.sender; } function _toString(uint256 value) internal pure virtual returns (string memory str) { assembly { let m := add(mload(0x40), 0xa0) mstore(0x40, m) str := sub(m, 0x20) mstore(str, 0) let end := str for { let temp := value } 1 {} { str := sub(str, 1) mstore8(str, add(48, mod(temp, 10))) temp := div(temp, 10) if iszero(temp) { break } } let length := sub(end, str) str := sub(str, 0x20) mstore(str, length) } } } pragma solidity ^0.8.13; contract OperatorFilterer { error OperatorNotAllowed(address operator); IOperatorFilterRegistry constant operatorFilterRegistry = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E); constructor(address subscriptionOrRegistrantToCopy, bool subscribe) { if (address(operatorFilterRegistry).code.length > 0) { if (subscribe) { operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy); } else { if (subscriptionOrRegistrantToCopy != address(0)) { operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy); } else { operatorFilterRegistry.register(address(this)); } } } } modifier onlyAllowedOperator() virtual { if (address(operatorFilterRegistry).code.length > 0) { if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) { revert OperatorNotAllowed(msg.sender); } } _; } } pragma solidity ^0.8.13; contract DefaultOperatorFilterer is OperatorFilterer { address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6); constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {} } pragma solidity ^0.8.13; interface IOperatorFilterRegistry { function isOperatorAllowed(address registrant, address operator) external returns (bool); function register(address registrant) external; function registerAndSubscribe(address registrant, address subscription) external; function registerAndCopyEntries(address registrant, address registrantToCopy) external; function updateOperator(address registrant, address operator, bool filtered) external; function updateOperators(address registrant, address[] calldata operators, bool filtered) external; function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external; function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external; function subscribe(address registrant, address registrantToSubscribe) external; function unsubscribe(address registrant, bool copyExistingEntries) external; function subscriptionOf(address addr) external returns (address registrant); function subscribers(address registrant) external returns (address[] memory); function subscriberAt(address registrant, uint256 index) external returns (address); function copyEntriesOf(address registrant, address registrantToCopy) external; function isOperatorFiltered(address registrant, address operator) external returns (bool); function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool); function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool); function filteredOperators(address addr) external returns (address[] memory); function filteredCodeHashes(address addr) external returns (bytes32[] memory); function filteredOperatorAt(address registrant, uint256 index) external returns (address); function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32); function isRegistered(address addr) external returns (bool); function codeHashOf(address addr) external returns (bytes32); } pragma solidity ^0.8.4; interface IERC721ABurnable is IERC721A { function burn(uint256 tokenId) external; } pragma solidity ^0.8.4; abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable { function burn(uint256 tokenId) public virtual override { _burn(tokenId, true); } } pragma solidity ^0.8.16; contract TOLNINJADAO is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{ string public CONTRACT_URI = ""; mapping(address => uint) public userHasMinted; bool public REVEALED; string public UNREVEALED_URI = ""; string public BASE_URI = "ipfs://QmcJvG377EKQ2S6usgTd3tY2zKQTjSEba5SjYR8XxStQRX/hidden.json"; bool public isPublicMintEnabled = true; uint public COLLECTION_SIZE = 111; uint public MINT_PRICE = 0.003 ether; uint public MAX_BATCH_SIZE = 25; uint public SUPPLY_PER_WALLET = 25; uint public FREE_SUPPLY_PER_WALLET = 1; constructor() ERC721A("TOL NINJA DAO", "TOLDAO") {} function MintWL(uint256 quantity, address receiver) public onlyOwner { require( totalSupply() + quantity <= COLLECTION_SIZE, "No more TOL NINJA DAO in stock!" ); _safeMint(receiver, quantity); } modifier callerIsUser() { require(tx.origin == msg.sender, "The caller is another contract"); _; } function getPrice(uint quantity) public view returns(uint){ uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); } else { price = 0; } return price; } function mint(uint quantity) external payable callerIsUser nonReentrant { uint price; uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender]; if (quantity >= free) { price = (MINT_PRICE) * (quantity - free); userHasMinted[msg.sender] = userHasMinted[msg.sender] + free; } else { price = 0; userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity; } require(isPublicMintEnabled, "TOL NINJAS not ready yet!"); require(totalSupply() + quantity <= COLLECTION_SIZE, "No more TOL NINJAS!"); require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to total mint TOL NINJAS per wallet over limit"); require(quantity <= MAX_BATCH_SIZE, "Tried to mint TOL NINJAS over limit, retry with reduced quantity"); require(msg.value >= price, "Must send enough eth"); _safeMint(msg.sender, quantity); if (msg.value > price) { payable(msg.sender).transfer(msg.value - price); } } function withdrawFunds() external onlyOwner nonReentrant { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "Transfer failed."); } function setPublicMintEnabled() public onlyOwner { isPublicMintEnabled = !isPublicMintEnabled; } function setBaseURI(bool _revealed, string memory _baseURI) public onlyOwner { BASE_URI = _baseURI; REVEALED = _revealed; } function contractURI() public view returns (string memory) { return CONTRACT_URI; } function setContractURI(string memory _contractURI) public onlyOwner { CONTRACT_URI = _contractURI; } function setCOLLECTIONsIZE(uint256 _new) external onlyOwner { COLLECTION_SIZE = _new; } function setPrice(uint256 _newPrice) external onlyOwner { MINT_PRICE = _newPrice; } function set_FREE_SUPPLY_PER_WALLET(uint256 _new) external onlyOwner { FREE_SUPPLY_PER_WALLET = _new; } function set_SUPPLY_PER_WALLET(uint256 _new) external onlyOwner { SUPPLY_PER_WALLET = _new; } function set_MAX_BATCH_SIZE(uint256 _new) external onlyOwner { MAX_BATCH_SIZE = _new; } function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public payable override (ERC721A, IERC721A) onlyAllowedOperator { super.safeTransferFrom(from, to, tokenId, data); } function tokenURI(uint256 _tokenId) public view override (ERC721A, IERC721A) returns (string memory) { if (REVEALED) { return string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId))); } else { return UNREVEALED_URI; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"MintWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"setCOLLECTIONsIZE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_FREE_SUPPLY_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_MAX_BATCH_SIZE","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"set_SUPPLY_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60a06040525f6080908152600a9062000019908262000371565b5060408051602081019091525f8152600d9062000037908262000371565b506040518060800160405280604181526020016200262c60419139600e9062000061908262000371565b50600f805460ff19166001908117909155606f601055660aa87bee538000601155601960128190556013556014553480156200009b575f80fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600d81526020016c544f4c204e494e4a412044414f60981b81525060405180604001604052806006815260200165544f4c44414f60d01b815250620001126200010c6200027e60201b60201c565b62000282565b600362000120838262000371565b5060046200012f828262000371565b505f600190815560095550506daaeb6d7670e522a718067333cd4e3b1562000276578015620001c957604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b5f604051808303815f87803b158015620001ac575f80fd5b505af1158015620001bf573d5f803e3d5ffd5b5050505062000276565b6001600160a01b038216156200021a5760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000194565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e486906024015f604051808303815f87803b1580156200025e575f80fd5b505af115801562000271573d5f803e3d5ffd5b505050505b505062000439565b3390565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620002fa57607f821691505b6020821081036200031957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200036c575f81815260208120601f850160051c81016020861015620003475750805b601f850160051c820191505b81811015620003685782815560010162000353565b5050505b505050565b81516001600160401b038111156200038d576200038d620002d1565b620003a5816200039e8454620002e5565b846200031f565b602080601f831160018114620003db575f8415620003c35750858301515b5f19600386901b1c1916600185901b17855562000368565b5f85815260208120601f198616915b828110156200040b57888601518255948401946001909101908401620003ea565b50858210156200042957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b6121e580620004475f395ff3fe608060405260043610610249575f3560e01c8063938e3d7b11610134578063c002d23d116100b3578063e113ad9511610078578063e113ad9514610623578063e757223014610642578063e8a3d48514610661578063e985e9c514610675578063e9d541b014610694578063f2fde38b146106b3575f80fd5b8063c002d23d146105b1578063c87b56dd146105c6578063cfdbf254146105e5578063d8258d95146105fa578063dbddb26a1461060f575f80fd5b8063a4cdd719116100f9578063a4cdd71914610533578063a76a958714610547578063a9527e8214610560578063a9b2d10d1461057f578063b88d4fde1461059e575f80fd5b8063938e3d7b146104af57806395d89b41146104ce5780639e1f39d6146104e2578063a0712d6814610501578063a22cb46514610514575f80fd5b8063336f5ec3116101cb5780635fe75587116101905780635fe755871461040d5780636352211e1461042257806370a0823114610441578063715018a6146104605780638da5cb5b1461047457806391b7f5ed14610490575f80fd5b8063336f5ec31461039457806342842e0e146103b357806342966c68146103c6578063507862d1146103e557806356b4f673146103f9575f80fd5b80631422374f116102115780631422374f1461030757806318160ddd1461032a5780631d9857781461034257806323b872dd1461036d57806324600fc314610380575f80fd5b80630116bc2d1461024d57806301ffc9a71461027b57806306fdde031461029a578063081812fc146102bb578063095ea7b3146102f2575b5f80fd5b348015610258575f80fd5b50600f546102669060ff1681565b60405190151581526020015b60405180910390f35b348015610286575f80fd5b50610266610295366004611b5a565b6106d2565b3480156102a5575f80fd5b506102ae610723565b6040516102729190611bc2565b3480156102c6575f80fd5b506102da6102d5366004611bd4565b6107b3565b6040516001600160a01b039091168152602001610272565b610305610300366004611c01565b6107f5565b005b348015610312575f80fd5b5061031c60145481565b604051908152602001610272565b348015610335575f80fd5b506002546001540361031c565b34801561034d575f80fd5b5061031c61035c366004611c29565b600b6020525f908152604090205481565b61030561037b366004611c42565b610893565b34801561038b575f80fd5b5061030561094e565b34801561039f575f80fd5b506103056103ae366004611bd4565b610a3d565b6103056103c1366004611c42565b610a4a565b3480156103d1575f80fd5b506103056103e0366004611bd4565b610afb565b3480156103f0575f80fd5b506102ae610b09565b348015610404575f80fd5b506102ae610b95565b348015610418575f80fd5b5061031c60135481565b34801561042d575f80fd5b506102da61043c366004611bd4565b610ba2565b34801561044c575f80fd5b5061031c61045b366004611c29565b610bac565b34801561046b575f80fd5b50610305610bf9565b34801561047f575f80fd5b505f546001600160a01b03166102da565b34801561049b575f80fd5b506103056104aa366004611bd4565b610c0c565b3480156104ba575f80fd5b506103056104c9366004611d20565b610c19565b3480156104d9575f80fd5b506102ae610c31565b3480156104ed575f80fd5b506103056104fc366004611d5f565b610c40565b61030561050f366004611bd4565b610c69565b34801561051f575f80fd5b5061030561052e366004611dac565b610fef565b34801561053e575f80fd5b5061030561105a565b348015610552575f80fd5b50600c546102669060ff1681565b34801561056b575f80fd5b5061030561057a366004611bd4565b611076565b34801561058a575f80fd5b50610305610599366004611de1565b611083565b6103056105ac366004611e0b565b6110fe565b3480156105bc575f80fd5b5061031c60115481565b3480156105d1575f80fd5b506102ae6105e0366004611bd4565b6111b6565b3480156105f0575f80fd5b5061031c60125481565b348015610605575f80fd5b5061031c60105481565b34801561061a575f80fd5b506102ae61128b565b34801561062e575f80fd5b5061030561063d366004611bd4565b611298565b34801561064d575f80fd5b5061031c61065c366004611bd4565b6112a5565b34801561066c575f80fd5b506102ae6112f7565b348015610680575f80fd5b5061026661068f366004611e82565b611306565b34801561069f575f80fd5b506103056106ae366004611bd4565b611333565b3480156106be575f80fd5b506103056106cd366004611c29565b611340565b5f6301ffc9a760e01b6001600160e01b03198316148061070257506380ac58cd60e01b6001600160e01b03198316145b8061071d5750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606003805461073290611eaa565b80601f016020809104026020016040519081016040528092919081815260200182805461075e90611eaa565b80156107a95780601f10610780576101008083540402835291602001916107a9565b820191905f5260205f20905b81548152906001019060200180831161078c57829003601f168201915b5050505050905090565b5f6107bd826113b6565b6107da576040516333d1c03960e21b815260040160405180910390fd5b505f908152600760205260409020546001600160a01b031690565b5f6107ff82610ba2565b9050336001600160a01b038216146108385761081b8133611306565b610838576040516367d9dca160e11b815260040160405180910390fd5b5f8281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6daaeb6d7670e522a718067333cd4e3b1561093e57604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303815f875af11580156108f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091a9190611ee2565b61093e57604051633b79c77360e21b81523360048201526024015b60405180910390fd5b6109498383836113dc565b505050565b610956611564565b6002600954036109a85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610935565b60026009556040515f90339047908381818185875af1925050503d805f81146109ec576040519150601f19603f3d011682016040523d82523d5f602084013e6109f1565b606091505b5050905080610a355760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610935565b506001600955565b610a45611564565b601255565b6daaeb6d7670e522a718067333cd4e3b15610af057604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303815f875af1158015610aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad19190611ee2565b610af057604051633b79c77360e21b8152336004820152602401610935565b6109498383836115bd565b610b068160016115d7565b50565b600d8054610b1690611eaa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4290611eaa565b8015610b8d5780601f10610b6457610100808354040283529160200191610b8d565b820191905f5260205f20905b815481529060010190602001808311610b7057829003601f168201915b505050505081565b600a8054610b1690611eaa565b5f61071d82611706565b5f6001600160a01b038216610bd4576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03165f9081526006602052604090205467ffffffffffffffff1690565b610c01611564565b610c0a5f61176f565b565b610c14611564565b601155565b610c21611564565b600a610c2d8282611f42565b5050565b60606004805461073290611eaa565b610c48611564565b600e610c548282611f42565b5050600c805460ff1916911515919091179055565b323314610cb85760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610935565b600260095403610d0a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610935565b6002600955335f908152600b60205260408120546014548291610d2c91612012565b9050808310610d7d57610d3f8184612012565b601154610d4c9190612025565b335f908152600b6020526040902054909250610d6990829061203c565b335f908152600b6020526040902055610daa565b335f908152600b6020526040812054909250610d9a90849061203c565b335f908152600b60205260409020555b600f5460ff16610dfc5760405162461bcd60e51b815260206004820152601960248201527f544f4c204e494e4a4153206e6f742072656164792079657421000000000000006044820152606401610935565b60105483610e0d6002546001540390565b610e17919061203c565b1115610e5b5760405162461bcd60e51b81526020600482015260136024820152724e6f206d6f726520544f4c204e494e4a41532160681b6044820152606401610935565b60135483610e6833610bac565b610e72919061203c565b1115610edd5760405162461bcd60e51b815260206004820152603460248201527f547269656420746f20746f74616c206d696e7420544f4c204e494e4a41532070604482015273195c881dd85b1b195d081bdd995c881b1a5b5a5d60621b6064820152608401610935565b601254831115610f57576040805162461bcd60e51b81526020600482015260248101919091527f547269656420746f206d696e7420544f4c204e494e4a4153206f766572206c6960448201527f6d69742c20726574727920776974682072656475636564207175616e746974796064820152608401610935565b81341015610f9e5760405162461bcd60e51b815260206004820152601460248201527309aeae6e840e6cadcc840cadcdeeaced040cae8d60631b6044820152606401610935565b610fa833846117be565b81341115610fe557336108fc610fbe8434612012565b6040518115909202915f818181858888f19350505050158015610fe3573d5f803e3d5ffd5b505b5050600160095550565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611062611564565b600f805460ff19811660ff90911615179055565b61107e611564565b601455565b61108b611564565b6010548261109c6002546001540390565b6110a6919061203c565b11156110f45760405162461bcd60e51b815260206004820152601f60248201527f4e6f206d6f726520544f4c204e494e4a412044414f20696e2073746f636b21006044820152606401610935565b610c2d81836117be565b6daaeb6d7670e522a718067333cd4e3b156111a457604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303815f875af1158015611161573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111859190611ee2565b6111a457604051633b79c77360e21b8152336004820152602401610935565b6111b0848484846117d7565b50505050565b600c5460609060ff16156111f657600e6111cf8361181b565b6040516020016111e092919061204f565b6040516020818303038152906040529050919050565b600d805461120390611eaa565b80601f016020809104026020016040519081016040528092919081815260200182805461122f90611eaa565b801561127a5780601f106112515761010080835404028352916020019161127a565b820191905f5260205f20905b81548152906001019060200180831161125d57829003601f168201915b50505050509050919050565b919050565b600e8054610b1690611eaa565b6112a0611564565b601355565b335f908152600b6020526040812054601454829182916112c59190612012565b90508084106112ec576112d88185612012565b6011546112e59190612025565b91506112f0565b5f91505b5092915050565b6060600a805461073290611eaa565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205460ff1690565b61133b611564565b601055565b611348611564565b6001600160a01b0381166113ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610935565b610b068161176f565b5f6001548210801561071d5750505f90815260056020526040902054600160e01b161590565b5f6113e682611706565b9050836001600160a01b0316816001600160a01b0316146114195760405162a1148160e81b815260040160405180910390fd5b5f82815260076020526040902080546114448187335b6001600160a01b039081169116811491141790565b61146f576114528633611306565b61146f57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661149657604051633a954ecd60e21b815260040160405180910390fd5b80156114a0575f82555b6001600160a01b038681165f9081526006602052604080822080545f19019055918716808252919020805460010190554260a01b17600160e11b175f85815260056020526040812091909155600160e11b8416900361152d57600184015f81815260056020526040812054900361152b57600154811461152b575f8181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b03165f8051602061219083398151915260405160405180910390a45b505050505050565b5f546001600160a01b03163314610c0a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610935565b61094983838360405180602001604052805f8152506110fe565b5f6115e183611706565b9050805f806115fd865f90815260076020526040902080549091565b91509150841561163d5761161281843361142f565b61163d576116208333611306565b61163d57604051632ce44b5f60e11b815260040160405180910390fd5b8015611647575f82555b6001600160a01b0383165f81815260066020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b175f87815260056020526040812091909155600160e11b851690036116d157600186015f8181526005602052604081205490036116cf5760015481146116cf575f8181526005602052604090208590555b505b60405186905f906001600160a01b038616905f80516020612190833981519152908390a4505060028054600101905550505050565b5f81600154811015611756575f8181526005602052604081205490600160e01b82169003611754575b805f0361174d57505f19015f8181526005602052604090205461172f565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c2d828260405180602001604052805f815250611920565b6117e2848484610893565b6001600160a01b0383163b156111b0576117fe8484848461198b565b6111b0576040516368d2bf6b60e11b815260040160405180910390fd5b6060815f036118415750506040805180820190915260018152600360fc1b602082015290565b815f5b811561186a5780611854816120d2565b91506118639050600a836120fe565b9150611844565b5f8167ffffffffffffffff81111561188457611884611c7b565b6040519080825280601f01601f1916602001820160405280156118ae576020820181803683370190505b5090505b8415611918576118c3600183612012565b91506118d0600a86612111565b6118db90603061203c565b60f81b8183815181106118f0576118f0612124565b60200101906001600160f81b03191690815f1a905350611911600a866120fe565b94506118b2565b949350505050565b61192a8383611a72565b6001600160a01b0383163b15610949576001548281035b6119535f86838060010194508661198b565b611970576040516368d2bf6b60e11b815260040160405180910390fd5b818110611941578160015414611984575f80fd5b5050505050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a02906119bf903390899088908890600401612138565b6020604051808303815f875af19250505080156119f9575060408051601f3d908101601f191682019092526119f691810190612174565b60015b611a55573d808015611a26576040519150601f19603f3d011682016040523d82523d5f602084013e611a2b565b606091505b5080515f03611a4d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001545f829003611a965760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0383165f8181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083905f805160206121908339815191528180a4600183015b818114611b1c5780835f5f805160206121908339815191525f80a4600101611af9565b50815f03611b3c57604051622e076360e81b815260040160405180910390fd5b60015550505050565b6001600160e01b031981168114610b06575f80fd5b5f60208284031215611b6a575f80fd5b813561174d81611b45565b5f5b83811015611b8f578181015183820152602001611b77565b50505f910152565b5f8151808452611bae816020860160208601611b75565b601f01601f19169290920160200192915050565b602081525f61174d6020830184611b97565b5f60208284031215611be4575f80fd5b5035919050565b80356001600160a01b0381168114611286575f80fd5b5f8060408385031215611c12575f80fd5b611c1b83611beb565b946020939093013593505050565b5f60208284031215611c39575f80fd5b61174d82611beb565b5f805f60608486031215611c54575f80fd5b611c5d84611beb565b9250611c6b60208501611beb565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611ca957611ca9611c7b565b604051601f8501601f19908116603f01168101908282118183101715611cd157611cd1611c7b565b81604052809350858152868686011115611ce9575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f830112611d11575f80fd5b61174d83833560208501611c8f565b5f60208284031215611d30575f80fd5b813567ffffffffffffffff811115611d46575f80fd5b61191884828501611d02565b8015158114610b06575f80fd5b5f8060408385031215611d70575f80fd5b8235611d7b81611d52565b9150602083013567ffffffffffffffff811115611d96575f80fd5b611da285828601611d02565b9150509250929050565b5f8060408385031215611dbd575f80fd5b611dc683611beb565b91506020830135611dd681611d52565b809150509250929050565b5f8060408385031215611df2575f80fd5b82359150611e0260208401611beb565b90509250929050565b5f805f8060808587031215611e1e575f80fd5b611e2785611beb565b9350611e3560208601611beb565b925060408501359150606085013567ffffffffffffffff811115611e57575f80fd5b8501601f81018713611e67575f80fd5b611e7687823560208401611c8f565b91505092959194509250565b5f8060408385031215611e93575f80fd5b611e9c83611beb565b9150611e0260208401611beb565b600181811c90821680611ebe57607f821691505b602082108103611edc57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611ef2575f80fd5b815161174d81611d52565b601f821115610949575f81815260208120601f850160051c81016020861015611f235750805b601f850160051c820191505b8181101561155c57828155600101611f2f565b815167ffffffffffffffff811115611f5c57611f5c611c7b565b611f7081611f6a8454611eaa565b84611efd565b602080601f831160018114611fa3575f8415611f8c5750858301515b5f19600386901b1c1916600185901b17855561155c565b5f85815260208120601f198616915b82811015611fd157888601518255948401946001909101908401611fb2565b5085821015611fee57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561071d5761071d611ffe565b808202811582820484141761071d5761071d611ffe565b8082018082111561071d5761071d611ffe565b5f80845461205c81611eaa565b600182811680156120745760018114612089576120b5565b60ff19841687528215158302870194506120b5565b885f526020805f205f5b858110156120ac5781548a820152908401908201612093565b50505082870194505b5050505083516120c9818360208801611b75565b01949350505050565b5f600182016120e3576120e3611ffe565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f8261210c5761210c6120ea565b500490565b5f8261211f5761211f6120ea565b500690565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061216a90830184611b97565b9695505050505050565b5f60208284031215612184575f80fd5b815161174d81611b4556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122002988cfb932fff435244ff2b7193244ea4413688ec290e444a3c31572936ddea64736f6c63430008140033697066733a2f2f516d634a7647333737454b513253367573675464337459327a4b51546a5345626135536a595238587853745152582f68696464656e2e6a736f6e
Deployed Bytecode
0x608060405260043610610249575f3560e01c8063938e3d7b11610134578063c002d23d116100b3578063e113ad9511610078578063e113ad9514610623578063e757223014610642578063e8a3d48514610661578063e985e9c514610675578063e9d541b014610694578063f2fde38b146106b3575f80fd5b8063c002d23d146105b1578063c87b56dd146105c6578063cfdbf254146105e5578063d8258d95146105fa578063dbddb26a1461060f575f80fd5b8063a4cdd719116100f9578063a4cdd71914610533578063a76a958714610547578063a9527e8214610560578063a9b2d10d1461057f578063b88d4fde1461059e575f80fd5b8063938e3d7b146104af57806395d89b41146104ce5780639e1f39d6146104e2578063a0712d6814610501578063a22cb46514610514575f80fd5b8063336f5ec3116101cb5780635fe75587116101905780635fe755871461040d5780636352211e1461042257806370a0823114610441578063715018a6146104605780638da5cb5b1461047457806391b7f5ed14610490575f80fd5b8063336f5ec31461039457806342842e0e146103b357806342966c68146103c6578063507862d1146103e557806356b4f673146103f9575f80fd5b80631422374f116102115780631422374f1461030757806318160ddd1461032a5780631d9857781461034257806323b872dd1461036d57806324600fc314610380575f80fd5b80630116bc2d1461024d57806301ffc9a71461027b57806306fdde031461029a578063081812fc146102bb578063095ea7b3146102f2575b5f80fd5b348015610258575f80fd5b50600f546102669060ff1681565b60405190151581526020015b60405180910390f35b348015610286575f80fd5b50610266610295366004611b5a565b6106d2565b3480156102a5575f80fd5b506102ae610723565b6040516102729190611bc2565b3480156102c6575f80fd5b506102da6102d5366004611bd4565b6107b3565b6040516001600160a01b039091168152602001610272565b610305610300366004611c01565b6107f5565b005b348015610312575f80fd5b5061031c60145481565b604051908152602001610272565b348015610335575f80fd5b506002546001540361031c565b34801561034d575f80fd5b5061031c61035c366004611c29565b600b6020525f908152604090205481565b61030561037b366004611c42565b610893565b34801561038b575f80fd5b5061030561094e565b34801561039f575f80fd5b506103056103ae366004611bd4565b610a3d565b6103056103c1366004611c42565b610a4a565b3480156103d1575f80fd5b506103056103e0366004611bd4565b610afb565b3480156103f0575f80fd5b506102ae610b09565b348015610404575f80fd5b506102ae610b95565b348015610418575f80fd5b5061031c60135481565b34801561042d575f80fd5b506102da61043c366004611bd4565b610ba2565b34801561044c575f80fd5b5061031c61045b366004611c29565b610bac565b34801561046b575f80fd5b50610305610bf9565b34801561047f575f80fd5b505f546001600160a01b03166102da565b34801561049b575f80fd5b506103056104aa366004611bd4565b610c0c565b3480156104ba575f80fd5b506103056104c9366004611d20565b610c19565b3480156104d9575f80fd5b506102ae610c31565b3480156104ed575f80fd5b506103056104fc366004611d5f565b610c40565b61030561050f366004611bd4565b610c69565b34801561051f575f80fd5b5061030561052e366004611dac565b610fef565b34801561053e575f80fd5b5061030561105a565b348015610552575f80fd5b50600c546102669060ff1681565b34801561056b575f80fd5b5061030561057a366004611bd4565b611076565b34801561058a575f80fd5b50610305610599366004611de1565b611083565b6103056105ac366004611e0b565b6110fe565b3480156105bc575f80fd5b5061031c60115481565b3480156105d1575f80fd5b506102ae6105e0366004611bd4565b6111b6565b3480156105f0575f80fd5b5061031c60125481565b348015610605575f80fd5b5061031c60105481565b34801561061a575f80fd5b506102ae61128b565b34801561062e575f80fd5b5061030561063d366004611bd4565b611298565b34801561064d575f80fd5b5061031c61065c366004611bd4565b6112a5565b34801561066c575f80fd5b506102ae6112f7565b348015610680575f80fd5b5061026661068f366004611e82565b611306565b34801561069f575f80fd5b506103056106ae366004611bd4565b611333565b3480156106be575f80fd5b506103056106cd366004611c29565b611340565b5f6301ffc9a760e01b6001600160e01b03198316148061070257506380ac58cd60e01b6001600160e01b03198316145b8061071d5750635b5e139f60e01b6001600160e01b03198316145b92915050565b60606003805461073290611eaa565b80601f016020809104026020016040519081016040528092919081815260200182805461075e90611eaa565b80156107a95780601f10610780576101008083540402835291602001916107a9565b820191905f5260205f20905b81548152906001019060200180831161078c57829003601f168201915b5050505050905090565b5f6107bd826113b6565b6107da576040516333d1c03960e21b815260040160405180910390fd5b505f908152600760205260409020546001600160a01b031690565b5f6107ff82610ba2565b9050336001600160a01b038216146108385761081b8133611306565b610838576040516367d9dca160e11b815260040160405180910390fd5b5f8281526007602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6daaeb6d7670e522a718067333cd4e3b1561093e57604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303815f875af11580156108f6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061091a9190611ee2565b61093e57604051633b79c77360e21b81523360048201526024015b60405180910390fd5b6109498383836113dc565b505050565b610956611564565b6002600954036109a85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610935565b60026009556040515f90339047908381818185875af1925050503d805f81146109ec576040519150601f19603f3d011682016040523d82523d5f602084013e6109f1565b606091505b5050905080610a355760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610935565b506001600955565b610a45611564565b601255565b6daaeb6d7670e522a718067333cd4e3b15610af057604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303815f875af1158015610aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ad19190611ee2565b610af057604051633b79c77360e21b8152336004820152602401610935565b6109498383836115bd565b610b068160016115d7565b50565b600d8054610b1690611eaa565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4290611eaa565b8015610b8d5780601f10610b6457610100808354040283529160200191610b8d565b820191905f5260205f20905b815481529060010190602001808311610b7057829003601f168201915b505050505081565b600a8054610b1690611eaa565b5f61071d82611706565b5f6001600160a01b038216610bd4576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03165f9081526006602052604090205467ffffffffffffffff1690565b610c01611564565b610c0a5f61176f565b565b610c14611564565b601155565b610c21611564565b600a610c2d8282611f42565b5050565b60606004805461073290611eaa565b610c48611564565b600e610c548282611f42565b5050600c805460ff1916911515919091179055565b323314610cb85760405162461bcd60e51b815260206004820152601e60248201527f5468652063616c6c657220697320616e6f7468657220636f6e747261637400006044820152606401610935565b600260095403610d0a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610935565b6002600955335f908152600b60205260408120546014548291610d2c91612012565b9050808310610d7d57610d3f8184612012565b601154610d4c9190612025565b335f908152600b6020526040902054909250610d6990829061203c565b335f908152600b6020526040902055610daa565b335f908152600b6020526040812054909250610d9a90849061203c565b335f908152600b60205260409020555b600f5460ff16610dfc5760405162461bcd60e51b815260206004820152601960248201527f544f4c204e494e4a4153206e6f742072656164792079657421000000000000006044820152606401610935565b60105483610e0d6002546001540390565b610e17919061203c565b1115610e5b5760405162461bcd60e51b81526020600482015260136024820152724e6f206d6f726520544f4c204e494e4a41532160681b6044820152606401610935565b60135483610e6833610bac565b610e72919061203c565b1115610edd5760405162461bcd60e51b815260206004820152603460248201527f547269656420746f20746f74616c206d696e7420544f4c204e494e4a41532070604482015273195c881dd85b1b195d081bdd995c881b1a5b5a5d60621b6064820152608401610935565b601254831115610f57576040805162461bcd60e51b81526020600482015260248101919091527f547269656420746f206d696e7420544f4c204e494e4a4153206f766572206c6960448201527f6d69742c20726574727920776974682072656475636564207175616e746974796064820152608401610935565b81341015610f9e5760405162461bcd60e51b815260206004820152601460248201527309aeae6e840e6cadcc840cadcdeeaced040cae8d60631b6044820152606401610935565b610fa833846117be565b81341115610fe557336108fc610fbe8434612012565b6040518115909202915f818181858888f19350505050158015610fe3573d5f803e3d5ffd5b505b5050600160095550565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611062611564565b600f805460ff19811660ff90911615179055565b61107e611564565b601455565b61108b611564565b6010548261109c6002546001540390565b6110a6919061203c565b11156110f45760405162461bcd60e51b815260206004820152601f60248201527f4e6f206d6f726520544f4c204e494e4a412044414f20696e2073746f636b21006044820152606401610935565b610c2d81836117be565b6daaeb6d7670e522a718067333cd4e3b156111a457604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c6171134906044016020604051808303815f875af1158015611161573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111859190611ee2565b6111a457604051633b79c77360e21b8152336004820152602401610935565b6111b0848484846117d7565b50505050565b600c5460609060ff16156111f657600e6111cf8361181b565b6040516020016111e092919061204f565b6040516020818303038152906040529050919050565b600d805461120390611eaa565b80601f016020809104026020016040519081016040528092919081815260200182805461122f90611eaa565b801561127a5780601f106112515761010080835404028352916020019161127a565b820191905f5260205f20905b81548152906001019060200180831161125d57829003601f168201915b50505050509050919050565b919050565b600e8054610b1690611eaa565b6112a0611564565b601355565b335f908152600b6020526040812054601454829182916112c59190612012565b90508084106112ec576112d88185612012565b6011546112e59190612025565b91506112f0565b5f91505b5092915050565b6060600a805461073290611eaa565b6001600160a01b039182165f90815260086020908152604080832093909416825291909152205460ff1690565b61133b611564565b601055565b611348611564565b6001600160a01b0381166113ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610935565b610b068161176f565b5f6001548210801561071d5750505f90815260056020526040902054600160e01b161590565b5f6113e682611706565b9050836001600160a01b0316816001600160a01b0316146114195760405162a1148160e81b815260040160405180910390fd5b5f82815260076020526040902080546114448187335b6001600160a01b039081169116811491141790565b61146f576114528633611306565b61146f57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661149657604051633a954ecd60e21b815260040160405180910390fd5b80156114a0575f82555b6001600160a01b038681165f9081526006602052604080822080545f19019055918716808252919020805460010190554260a01b17600160e11b175f85815260056020526040812091909155600160e11b8416900361152d57600184015f81815260056020526040812054900361152b57600154811461152b575f8181526005602052604090208490555b505b83856001600160a01b0316876001600160a01b03165f8051602061219083398151915260405160405180910390a45b505050505050565b5f546001600160a01b03163314610c0a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610935565b61094983838360405180602001604052805f8152506110fe565b5f6115e183611706565b9050805f806115fd865f90815260076020526040902080549091565b91509150841561163d5761161281843361142f565b61163d576116208333611306565b61163d57604051632ce44b5f60e11b815260040160405180910390fd5b8015611647575f82555b6001600160a01b0383165f81815260066020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b175f87815260056020526040812091909155600160e11b851690036116d157600186015f8181526005602052604081205490036116cf5760015481146116cf575f8181526005602052604090208590555b505b60405186905f906001600160a01b038616905f80516020612190833981519152908390a4505060028054600101905550505050565b5f81600154811015611756575f8181526005602052604081205490600160e01b82169003611754575b805f0361174d57505f19015f8181526005602052604090205461172f565b9392505050565b505b604051636f96cda160e11b815260040160405180910390fd5b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610c2d828260405180602001604052805f815250611920565b6117e2848484610893565b6001600160a01b0383163b156111b0576117fe8484848461198b565b6111b0576040516368d2bf6b60e11b815260040160405180910390fd5b6060815f036118415750506040805180820190915260018152600360fc1b602082015290565b815f5b811561186a5780611854816120d2565b91506118639050600a836120fe565b9150611844565b5f8167ffffffffffffffff81111561188457611884611c7b565b6040519080825280601f01601f1916602001820160405280156118ae576020820181803683370190505b5090505b8415611918576118c3600183612012565b91506118d0600a86612111565b6118db90603061203c565b60f81b8183815181106118f0576118f0612124565b60200101906001600160f81b03191690815f1a905350611911600a866120fe565b94506118b2565b949350505050565b61192a8383611a72565b6001600160a01b0383163b15610949576001548281035b6119535f86838060010194508661198b565b611970576040516368d2bf6b60e11b815260040160405180910390fd5b818110611941578160015414611984575f80fd5b5050505050565b604051630a85bd0160e11b81525f906001600160a01b0385169063150b7a02906119bf903390899088908890600401612138565b6020604051808303815f875af19250505080156119f9575060408051601f3d908101601f191682019092526119f691810190612174565b60015b611a55573d808015611a26576040519150601f19603f3d011682016040523d82523d5f602084013e611a2b565b606091505b5080515f03611a4d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b6001545f829003611a965760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b0383165f8181526006602090815260408083208054680100000000000000018802019055848352600590915281206001851460e11b4260a01b178317905582840190839083905f805160206121908339815191528180a4600183015b818114611b1c5780835f5f805160206121908339815191525f80a4600101611af9565b50815f03611b3c57604051622e076360e81b815260040160405180910390fd5b60015550505050565b6001600160e01b031981168114610b06575f80fd5b5f60208284031215611b6a575f80fd5b813561174d81611b45565b5f5b83811015611b8f578181015183820152602001611b77565b50505f910152565b5f8151808452611bae816020860160208601611b75565b601f01601f19169290920160200192915050565b602081525f61174d6020830184611b97565b5f60208284031215611be4575f80fd5b5035919050565b80356001600160a01b0381168114611286575f80fd5b5f8060408385031215611c12575f80fd5b611c1b83611beb565b946020939093013593505050565b5f60208284031215611c39575f80fd5b61174d82611beb565b5f805f60608486031215611c54575f80fd5b611c5d84611beb565b9250611c6b60208501611beb565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f67ffffffffffffffff80841115611ca957611ca9611c7b565b604051601f8501601f19908116603f01168101908282118183101715611cd157611cd1611c7b565b81604052809350858152868686011115611ce9575f80fd5b858560208301375f602087830101525050509392505050565b5f82601f830112611d11575f80fd5b61174d83833560208501611c8f565b5f60208284031215611d30575f80fd5b813567ffffffffffffffff811115611d46575f80fd5b61191884828501611d02565b8015158114610b06575f80fd5b5f8060408385031215611d70575f80fd5b8235611d7b81611d52565b9150602083013567ffffffffffffffff811115611d96575f80fd5b611da285828601611d02565b9150509250929050565b5f8060408385031215611dbd575f80fd5b611dc683611beb565b91506020830135611dd681611d52565b809150509250929050565b5f8060408385031215611df2575f80fd5b82359150611e0260208401611beb565b90509250929050565b5f805f8060808587031215611e1e575f80fd5b611e2785611beb565b9350611e3560208601611beb565b925060408501359150606085013567ffffffffffffffff811115611e57575f80fd5b8501601f81018713611e67575f80fd5b611e7687823560208401611c8f565b91505092959194509250565b5f8060408385031215611e93575f80fd5b611e9c83611beb565b9150611e0260208401611beb565b600181811c90821680611ebe57607f821691505b602082108103611edc57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215611ef2575f80fd5b815161174d81611d52565b601f821115610949575f81815260208120601f850160051c81016020861015611f235750805b601f850160051c820191505b8181101561155c57828155600101611f2f565b815167ffffffffffffffff811115611f5c57611f5c611c7b565b611f7081611f6a8454611eaa565b84611efd565b602080601f831160018114611fa3575f8415611f8c5750858301515b5f19600386901b1c1916600185901b17855561155c565b5f85815260208120601f198616915b82811015611fd157888601518255948401946001909101908401611fb2565b5085821015611fee57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561071d5761071d611ffe565b808202811582820484141761071d5761071d611ffe565b8082018082111561071d5761071d611ffe565b5f80845461205c81611eaa565b600182811680156120745760018114612089576120b5565b60ff19841687528215158302870194506120b5565b885f526020805f205f5b858110156120ac5781548a820152908401908201612093565b50505082870194505b5050505083516120c9818360208801611b75565b01949350505050565b5f600182016120e3576120e3611ffe565b5060010190565b634e487b7160e01b5f52601260045260245ffd5b5f8261210c5761210c6120ea565b500490565b5f8261211f5761211f6120ea565b500690565b634e487b7160e01b5f52603260045260245ffd5b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061216a90830184611b97565b9695505050505050565b5f60208284031215612184575f80fd5b815161174d81611b4556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122002988cfb932fff435244ff2b7193244ea4413688ec290e444a3c31572936ddea64736f6c63430008140033
Deployed Bytecode Sourcemap
34315:4755:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34653:38;;;;;;;;;;-1:-1:-1;34653:38:0;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;34653:38:0;;;;;;;;14812:244;;;;;;;;;;-1:-1:-1;14812:244:0;;;;;:::i;:::-;;:::i;15064:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18640:218::-;;;;;;;;;;-1:-1:-1;18640:218:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1697:32:1;;;1679:51;;1667:2;1652:18;18640:218:0;1533:203:1;18224:408:0;;;;;;:::i;:::-;;:::i;:::-;;34840:38;;;;;;;;;;;;;;;;;;;2324:25:1;;;2312:2;2297:18;34840:38:0;2178:177:1;13175:180:0;;;;;;;;;;-1:-1:-1;13306:12:0;;13290:13;;:28;13175:180;;34451:45;;;;;;;;;;-1:-1:-1;34451:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;38072:185;;;;;;:::i;:::-;;:::i;36810:191::-;;;;;;;;;;;;;:::i;37963:101::-;;;;;;;;;;-1:-1:-1;37963:101:0;;;;;:::i;:::-;;:::i;38265:193::-;;;;;;:::i;:::-;;:::i;34188:94::-;;;;;;;;;;-1:-1:-1;34188:94:0;;;;;:::i;:::-;;:::i;34522:33::-;;;;;;;;;;;;;:::i;34417:31::-;;;;;;;;;;;;;:::i;34803:34::-;;;;;;;;;;;;;;;;15712:152;;;;;;;;;;-1:-1:-1;15712:152:0;;;;;:::i;:::-;;:::i;13640:233::-;;;;;;;;;;-1:-1:-1;13640:233:0;;;;;:::i;:::-;;:::i;924:103::-;;;;;;;;;;;;;:::i;689:87::-;;;;;;;;;;-1:-1:-1;735:7:0;762:6;-1:-1:-1;;;;;762:6:0;689:87;;37618:97;;;;;;;;;;-1:-1:-1;37618:97:0;;;;;:::i;:::-;;:::i;37386:115::-;;;;;;;;;;-1:-1:-1;37386:115:0;;;;;:::i;:::-;;:::i;15172:104::-;;;;;;;;;;;;;:::i;37127:146::-;;;;;;;;;;-1:-1:-1;37127:146:0;;;;;:::i;:::-;;:::i;35673:1129::-;;;;;;:::i;:::-;;:::i;18866:234::-;;;;;;;;;;-1:-1:-1;18866:234:0;;;;;:::i;:::-;;:::i;37009:110::-;;;;;;;;;;;;;:::i;34499:20::-;;;;;;;;;;-1:-1:-1;34499:20:0;;;;;;;;37723:117;;;;;;;;;;-1:-1:-1;37723:117:0;;;;;:::i;:::-;;:::i;34942:262::-;;;;;;;;;;-1:-1:-1;34942:262:0;;;;;:::i;:::-;;:::i;38466:250::-;;;;;;:::i;:::-;;:::i;34730:36::-;;;;;;;;;;;;;;;;38724:341;;;;;;;;;;-1:-1:-1;38724:341:0;;;;;:::i;:::-;;:::i;34769:31::-;;;;;;;;;;;;;;;;34694:33;;;;;;;;;;;;;;;;34558:92;;;;;;;;;;;;;:::i;37848:107::-;;;;;;;;;;-1:-1:-1;37848:107:0;;;;;:::i;:::-;;:::i;35341:324::-;;;;;;;;;;-1:-1:-1;35341:324:0;;;;;:::i;:::-;;:::i;37281:97::-;;;;;;;;;;;;;:::i;19108:164::-;;;;;;;;;;-1:-1:-1;19108:164:0;;;;;:::i;:::-;;:::i;37509:101::-;;;;;;;;;;-1:-1:-1;37509:101:0;;;;;:::i;:::-;;:::i;1037:201::-;;;;;;;;;;-1:-1:-1;1037:201:0;;;;;:::i;:::-;;:::i;14812:244::-;14897:4;-1:-1:-1;;;;;;;;;14936:25:0;;;;:68;;-1:-1:-1;;;;;;;;;;14979:25:0;;;14936:68;:111;;;-1:-1:-1;;;;;;;;;;15022:25:0;;;14936:111;14916:131;14812:244;-1:-1:-1;;14812:244:0:o;15064:100::-;15118:13;15151:5;15144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15064:100;:::o;18640:218::-;18716:7;18741:16;18749:7;18741;:16::i;:::-;18736:64;;18766:34;;-1:-1:-1;;;18766:34:0;;;;;;;;;;;18736:64;-1:-1:-1;18820:24:0;;;;:15;:24;;;;;:30;-1:-1:-1;;;;;18820:30:0;;18640:218::o;18224:408::-;18313:13;18329:16;18337:7;18329;:16::i;:::-;18313:32;-1:-1:-1;29747:10:0;-1:-1:-1;;;;;18362:28:0;;;18358:175;;18410:44;18427:5;29747:10;19108:164;:::i;18410:44::-;18405:128;;18482:35;;-1:-1:-1;;;18482:35:0;;;;;;;;;;;18405:128;18545:24;;;;:15;:24;;;;;;:35;;-1:-1:-1;;;;;;18545:35:0;-1:-1:-1;;;;;18545:35:0;;;;;;;;;18596:28;;18545:24;;18596:28;;;;;;;18302:330;18224:408;;:::o;38072:185::-;30635:42;31378:43;:47;31374:225;;31447:67;;-1:-1:-1;;;31447:67:0;;31496:4;31447:67;;;6899:34:1;31503:10:0;6949:18:1;;;6942:43;30635:42:0;;31447:40;;6834:18:1;;31447:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31442:146;;31542:30;;-1:-1:-1;;;31542:30:0;;31561:10;31542:30;;;1679:51:1;1652:18;;31542:30:0;;;;;;;;31442:146;38212:37:::1;38231:4;38237:2;38241:7;38212:18;:37::i;:::-;38072:185:::0;;;:::o;36810:191::-;648:13;:11;:13::i;:::-;1598:1:::1;1818:7;;:19:::0;1810:63:::1;;;::::0;-1:-1:-1;;;1810:63:0;;7448:2:1;1810:63:0::1;::::0;::::1;7430:21:1::0;7487:2;7467:18;;;7460:30;7526:33;7506:18;;;7499:61;7577:18;;1810:63:0::1;7246:355:1::0;1810:63:0::1;1598:1;1951:7;:18:::0;36897:49:::2;::::0;36879:12:::2;::::0;36897:10:::2;::::0;36920:21:::2;::::0;36879:12;36897:49;36879:12;36897:49;36920:21;36897:10;:49:::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36878:68;;;36965:7;36957:36;;;::::0;-1:-1:-1;;;36957:36:0;;8018:2:1;36957:36:0::2;::::0;::::2;8000:21:1::0;8057:2;8037:18;;;8030:30;-1:-1:-1;;;8076:18:1;;;8069:46;8132:18;;36957:36:0::2;7816:340:1::0;36957:36:0::2;-1:-1:-1::0;1554:1:0::1;1996:7;:22:::0;36810:191::o;37963:101::-;648:13;:11;:13::i;:::-;38035:14:::1;:21:::0;37963:101::o;38265:193::-;30635:42;31378:43;:47;31374:225;;31447:67;;-1:-1:-1;;;31447:67:0;;31496:4;31447:67;;;6899:34:1;31503:10:0;6949:18:1;;;6942:43;30635:42:0;;31447:40;;6834:18:1;;31447:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31442:146;;31542:30;;-1:-1:-1;;;31542:30:0;;31561:10;31542:30;;;1679:51:1;1652:18;;31542:30:0;1533:203:1;31442:146:0;38409:41:::1;38432:4;38438:2;38442:7;38409:22;:41::i;34188:94::-:0;34254:20;34260:7;34269:4;34254:5;:20::i;:::-;34188:94;:::o;34522:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34417:31::-;;;;;;;:::i;15712:152::-;15784:7;15827:27;15846:7;15827:18;:27::i;13640:233::-;13712:7;-1:-1:-1;;;;;13736:19:0;;13732:60;;13764:28;;-1:-1:-1;;;13764:28:0;;;;;;;;;;;13732:60;-1:-1:-1;;;;;;13810:25:0;;;;;:18;:25;;;;;;11448:13;13810:55;;13640:233::o;924:103::-;648:13;:11;:13::i;:::-;989:30:::1;1016:1;989:18;:30::i;:::-;924:103::o:0;37618:97::-;648:13;:11;:13::i;:::-;37685:10:::1;:22:::0;37618:97::o;37386:115::-;648:13;:11;:13::i;:::-;37466:12:::1;:27;37481:12:::0;37466;:27:::1;:::i;:::-;;37386:115:::0;:::o;15172:104::-;15228:13;15261:7;15254:14;;;;;:::i;37127:146::-;648:13;:11;:13::i;:::-;37215:8:::1;:19;37226:8:::0;37215;:19:::1;:::i;:::-;-1:-1:-1::0;;37245:8:0::1;:20:::0;;-1:-1:-1;;37245:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37127:146::o;35673:1129::-;35255:9;35268:10;35255:23;35247:66;;;;-1:-1:-1;;;35247:66:0;;10567:2:1;35247:66:0;;;10549:21:1;10606:2;10586:18;;;10579:30;10645:32;10625:18;;;10618:60;10695:18;;35247:66:0;10365:354:1;35247:66:0;1598:1:::1;1818:7;;:19:::0;1810:63:::1;;;::::0;-1:-1:-1;;;1810:63:0;;7448:2:1;1810:63:0::1;::::0;::::1;7430:21:1::0;7487:2;7467:18;;;7460:30;7526:33;7506:18;;;7499:61;7577:18;;1810:63:0::1;7246:355:1::0;1810:63:0::1;1598:1;1951:7;:18:::0;35870:10:::2;35798;35856:25:::0;;;:13:::2;:25;::::0;;;;;35831:22:::2;::::0;35798:10;;35831:50:::2;::::0;::::2;:::i;:::-;35819:62;;35908:4;35896:8;:16;35892:285;;35953:15;35964:4:::0;35953:8;:15:::2;:::i;:::-;35938:10;;35937:32;;;;:::i;:::-;36026:10;36012:25;::::0;;;:13:::2;:25;::::0;;;;;35929:40;;-1:-1:-1;36012:32:0::2;::::0;36040:4;;36012:32:::2;:::i;:::-;35998:10;35984:25;::::0;;;:13:::2;:25;::::0;;;;:60;35892:285:::2;;;36143:10;36085:1;36129:25:::0;;;:13:::2;:25;::::0;;;;;36085:1;;-1:-1:-1;36129:36:0::2;::::0;36157:8;;36129:36:::2;:::i;:::-;36115:10;36101:25;::::0;;;:13:::2;:25;::::0;;;;:64;35892:285:::2;36197:19;::::0;::::2;;36189:57;;;::::0;-1:-1:-1;;;36189:57:0;;11494:2:1;36189:57:0::2;::::0;::::2;11476:21:1::0;11533:2;11513:18;;;11506:30;11572:27;11552:18;;;11545:55;11617:18;;36189:57:0::2;11292:349:1::0;36189:57:0::2;36293:15;;36281:8;36265:13;13306:12:::0;;13290:13;;:28;;13175:180;36265:13:::2;:24;;;;:::i;:::-;:43;;36257:75;;;::::0;-1:-1:-1;;;36257:75:0;;11848:2:1;36257:75:0::2;::::0;::::2;11830:21:1::0;11887:2;11867:18;;;11860:30;-1:-1:-1;;;11906:18:1;;;11899:49;11965:18;;36257:75:0::2;11646:343:1::0;36257:75:0::2;36389:17;;36377:8;36353:21;36363:10;36353:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;36345:118;;;::::0;-1:-1:-1;;;36345:118:0;;12196:2:1;36345:118:0::2;::::0;::::2;12178:21:1::0;12235:2;12215:18;;;12208:30;12274:34;12254:18;;;12247:62;-1:-1:-1;;;12325:18:1;;;12318:50;12385:19;;36345:118:0::2;11994:416:1::0;36345:118:0::2;36496:14;;36484:8;:26;;36476:103;;;::::0;;-1:-1:-1;;;36476:103:0;;12617:2:1;36476:103:0::2;::::0;::::2;12599:21:1::0;12636:18;;;12629:30;;;;12695:34;12675:18;;;12668:62;12766:34;12746:18;;;12739:62;12818:19;;36476:103:0::2;12415:428:1::0;36476:103:0::2;36611:5;36598:9;:18;;36590:51;;;::::0;-1:-1:-1;;;36590:51:0;;13050:2:1;36590:51:0::2;::::0;::::2;13032:21:1::0;13089:2;13069:18;;;13062:30;-1:-1:-1;;;13108:18:1;;;13101:50;13168:18;;36590:51:0::2;12848:344:1::0;36590:51:0::2;36654:31;36664:10;36676:8;36654:9;:31::i;:::-;36714:5;36702:9;:17;36698:97;;;36744:10;36736:47;36765:17;36777:5:::0;36765:9:::2;:17;:::i;:::-;36736:47;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;36698:97;-1:-1:-1::0;;1554:1:0::1;1996:7;:22:::0;-1:-1:-1;35673:1129:0:o;18866:234::-;29747:10;18961:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;18961:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;18961:60:0;;;;;;;;;;19037:55;;154:41:1;;;18961:49:0;;29747:10;19037:55;;127:18:1;19037:55:0;;;;;;;18866:234;;:::o;37009:110::-;648:13;:11;:13::i;:::-;37092:19:::1;::::0;;-1:-1:-1;;37069:42:0;::::1;37092:19;::::0;;::::1;37091:20;37069:42;::::0;;37009:110::o;37723:117::-;648:13;:11;:13::i;:::-;37803:22:::1;:29:::0;37723:117::o;34942:262::-;648:13;:11;:13::i;:::-;35072:15:::1;;35060:8;35044:13;13306:12:::0;;13290:13;;:28;;13175:180;35044:13:::1;:24;;;;:::i;:::-;:43;;35022:124;;;::::0;-1:-1:-1;;;35022:124:0;;13399:2:1;35022:124:0::1;::::0;::::1;13381:21:1::0;13438:2;13418:18;;;13411:30;13477:33;13457:18;;;13450:61;13528:18;;35022:124:0::1;13197:355:1::0;35022:124:0::1;35167:29;35177:8;35187;35167:9;:29::i;38466:250::-:0;30635:42;31378:43;:47;31374:225;;31447:67;;-1:-1:-1;;;31447:67:0;;31496:4;31447:67;;;6899:34:1;31503:10:0;6949:18:1;;;6942:43;30635:42:0;;31447:40;;6834:18:1;;31447:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31442:146;;31542:30;;-1:-1:-1;;;31542:30:0;;31561:10;31542:30;;;1679:51:1;1652:18;;31542:30:0;1533:203:1;31442:146:0;38661:47:::1;38684:4;38690:2;38694:7;38703:4;38661:22;:47::i;:::-;38466:250:::0;;;;:::o;38724:341::-;38881:8;;38846:13;;38881:8;;38877:181;;;38954:8;38964:26;38981:8;38964:16;:26::i;:::-;38937:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;38906:86;;38724:341;;;:::o;38877:181::-;39032:14;39025:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38724:341;;;:::o;38877:181::-;38724:341;;;:::o;34558:92::-;;;;;;;:::i;37848:107::-;648:13;:11;:13::i;:::-;37923:17:::1;:24:::0;37848:107::o;35341:324::-;35482:10;35394:4;35468:25;;;:13;:25;;;;;;35443:22;;35394:4;;;;35443:50;;35468:25;35443:50;:::i;:::-;35431:62;;35520:4;35508:8;:16;35504:131;;35565:15;35576:4;35565:8;:15;:::i;:::-;35550:10;;35549:32;;;;:::i;:::-;35541:40;;35504:131;;;35622:1;35614:9;;35504:131;-1:-1:-1;35652:5:0;35341:324;-1:-1:-1;;35341:324:0:o;37281:97::-;37325:13;37358:12;37351:19;;;;;:::i;19108:164::-;-1:-1:-1;;;;;19229:25:0;;;19205:4;19229:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;19108:164::o;37509:101::-;648:13;:11;:13::i;:::-;37580:15:::1;:22:::0;37509:101::o;1037:201::-;648:13;:11;:13::i;:::-;-1:-1:-1;;;;;1126:22:0;::::1;1118:73;;;::::0;-1:-1:-1;;;1118:73:0;;14784:2:1;1118:73:0::1;::::0;::::1;14766:21:1::0;14823:2;14803:18;;;14796:30;14862:34;14842:18;;;14835:62;-1:-1:-1;;;14913:18:1;;;14906:36;14959:19;;1118:73:0::1;14582:402:1::0;1118:73:0::1;1202:28;1221:8;1202:18;:28::i;19280:282::-:0;19345:4;19435:13;;19425:7;:23;19382:153;;;;-1:-1:-1;;19486:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;19486:44:0;:49;;19280:282::o;20375:1651::-;20517:27;20547;20566:7;20547:18;:27::i;:::-;20517:57;;20632:4;-1:-1:-1;;;;;20591:45:0;20607:19;-1:-1:-1;;;;;20591:45:0;;20587:86;;20645:28;;-1:-1:-1;;;20645:28:0;;;;;;;;;;;20587:86;20687:27;20188:24;;;:15;:24;;;;;20323:26;;20796:68;20323:26;20838:4;29747:10;20844:19;-1:-1:-1;;;;;19835:32:0;;;19778:28;;19896:20;;19918:30;;19893:56;;19570:397;20796:68;20791:180;;20884:43;20901:4;29747:10;19108:164;:::i;20884:43::-;20879:92;;20936:35;;-1:-1:-1;;;20936:35:0;;;;;;;;;;;20879:92;-1:-1:-1;;;;;20988:16:0;;20984:52;;21013:23;;-1:-1:-1;;;21013:23:0;;;;;;;;;;;20984:52;21132:15;21129:85;;;21197:1;21176:19;21169:30;21129:85;-1:-1:-1;;;;;21266:24:0;;;;;;;:18;:24;;;;;;21264:26;;-1:-1:-1;;21264:26:0;;;21308:22;;;;;;;;;21306:24;;-1:-1:-1;21306:24:0;;;17845:11;17820:23;17816:41;17803:63;-1:-1:-1;;;17803:63:0;21348:26;;;;:17;:26;;;;;:175;;;;-1:-1:-1;;;21544:47:0;;:52;;21540:370;;21649:1;21639:11;;21617:19;21675:30;;;:17;:30;;;;;;:35;;21671:224;;21756:13;;21741:11;:28;21737:139;;21800:30;;;;:17;:30;;;;;:52;;;21737:139;21598:312;21540:370;21957:7;21953:2;-1:-1:-1;;;;;21938:27:0;21947:4;-1:-1:-1;;;;;21938:27:0;-1:-1:-1;;;;;;;;;;;21938:27:0;;;;;;;;;21976:42;20506:1520;;;20375:1651;;;:::o;784:132::-;735:7;762:6;-1:-1:-1;;;;;762:6:0;29747:10;848:23;840:68;;;;-1:-1:-1;;;840:68:0;;15191:2:1;840:68:0;;;15173:21:1;;;15210:18;;;15203:30;15269:34;15249:18;;;15242:62;15321:18;;840:68:0;14989:356:1;22034:193:0;22180:39;22197:4;22203:2;22207:7;22180:39;;;;;;;;;;;;:16;:39::i;27030:1679::-;27110:27;27140;27159:7;27140:18;:27::i;:::-;27110:57;-1:-1:-1;27110:57:0;27180:12;;27302:35;27329:7;20077:27;20188:24;;;:15;:24;;;;;20323:26;;20188:24;;19975:392;27302:35;27245:92;;;;27354:13;27350:244;;;27403:68;27428:15;27445:4;29747:10;27451:19;29660:105;27403:68;27398:184;;27495:43;27512:4;29747:10;19108:164;:::i;27495:43::-;27490:92;;27547:35;;-1:-1:-1;;;27547:35:0;;;;;;;;;;;27490:92;27697:15;27694:101;;;27778:1;27757:19;27750:30;27694:101;-1:-1:-1;;;;;27845:24:0;;;;;;:18;:24;;;;;:60;;27873:32;27845:60;;;17845:11;17820:23;17816:41;17803:63;-1:-1:-1;;;17803:63:0;27922:26;;;;:17;:26;;;;;:205;;;;-1:-1:-1;;;28148:47:0;;:52;;28144:370;;28253:1;28243:11;;28221:19;28279:30;;;:17;:30;;;;;;:35;;28275:224;;28360:13;;28345:11;:28;28341:139;;28404:30;;;;:17;:30;;;;;:52;;;28341:139;28202:312;28144:370;28542:35;;28569:7;;28565:1;;-1:-1:-1;;;;;28542:35:0;;;-1:-1:-1;;;;;;;;;;;28542:35:0;28565:1;;28542:35;-1:-1:-1;;28676:12:0;:14;;;;;;-1:-1:-1;;;;27030:1679:0:o;16419:633::-;16486:7;16521;16623:13;;16616:4;:20;16612:373;;;16661:14;16678:23;;;:17;:23;;;;;;;-1:-1:-1;;;16730:24:0;;:29;;16726:240;;16790:113;16797:6;16807:1;16797:11;16790:113;;-1:-1:-1;;;16868:6:0;16850:25;;;;:17;:25;;;;;;16790:113;;;16936:6;16419:633;-1:-1:-1;;;16419:633:0:o;16726:240::-;16638:347;16612:373;17013:31;;-1:-1:-1;;;17013:31:0;;;;;;;;;;;1246:191;1320:16;1339:6;;-1:-1:-1;;;;;1356:17:0;;;-1:-1:-1;;;;;;1356:17:0;;;;;;1389:40;;1339:6;;;;;;;1389:40;;1320:16;1389:40;1309:128;1246:191;:::o;26813:112::-;26890:27;26900:2;26904:8;26890:27;;;;;;;;;;;;:9;:27::i;22235:407::-;22410:31;22423:4;22429:2;22433:7;22410:12;:31::i;:::-;-1:-1:-1;;;;;22456:14:0;;;:19;22452:183;;22495:56;22526:4;22532:2;22536:7;22545:5;22495:30;:56::i;:::-;22490:145;;22579:40;;-1:-1:-1;;;22579:40:0;;;;;;;;;;;2200:534;2256:13;2288:5;2297:1;2288:10;2284:53;;-1:-1:-1;;2315:10:0;;;;;;;;;;;;-1:-1:-1;;;2315:10:0;;;;;2200:534::o;2284:53::-;2362:5;2347:12;2403:78;2410:9;;2403:78;;2436:8;;;;:::i;:::-;;-1:-1:-1;2459:10:0;;-1:-1:-1;2467:2:0;2459:10;;:::i;:::-;;;2403:78;;;2491:19;2523:6;2513:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2513:17:0;;2491:39;;2541:154;2548:10;;2541:154;;2575:11;2585:1;2575:11;;:::i;:::-;;-1:-1:-1;2644:10:0;2652:2;2644:5;:10;:::i;:::-;2631:24;;:2;:24;:::i;:::-;2618:39;;2601:6;2608;2601:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;2601:56:0;;;;;;;;-1:-1:-1;2672:11:0;2681:2;2672:11;;:::i;:::-;;;2541:154;;;2719:6;2200:534;-1:-1:-1;;;;2200:534:0:o;26116:689::-;26247:19;26253:2;26257:8;26247:5;:19::i;:::-;-1:-1:-1;;;;;26308:14:0;;;:19;26304:483;;26362:13;;26410:14;;;26443:233;26474:62;26513:1;26517:2;26521:7;;;;;;26530:5;26474:30;:62::i;:::-;26469:167;;26572:40;;-1:-1:-1;;;26572:40:0;;;;;;;;;;;26469:167;26671:3;26663:5;:11;26443:233;;26758:3;26741:13;;:20;26737:34;;26763:8;;;26737:34;26329:458;;26116:689;;;:::o;22983:716::-;23167:88;;-1:-1:-1;;;23167:88:0;;23146:4;;-1:-1:-1;;;;;23167:45:0;;;;;:88;;29747:10;;23234:4;;23240:7;;23249:5;;23167:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23167:88:0;;;;;;;;-1:-1:-1;;23167:88:0;;;;;;;;;;;;:::i;:::-;;;23163:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23450:6;:13;23467:1;23450:18;23446:235;;23496:40;;-1:-1:-1;;;23496:40:0;;;;;;;;;;;23446:235;23639:6;23633:13;23624:6;23620:2;23616:15;23609:38;23163:529;-1:-1:-1;;;;;;23326:64:0;-1:-1:-1;;;23326:64:0;;-1:-1:-1;22983:716:0;;;;;;:::o;23707:1442::-;23803:13;;23780:20;23831:13;;;23827:44;;23853:18;;-1:-1:-1;;;23853:18:0;;;;;;;;;;;23827:44;-1:-1:-1;;;;;23985:22:0;;;;;;:18;:22;;;;11519:2;23985:22;;;:71;;24023:32;24011:45;;23985:71;;;24073:31;;;:17;:31;;;;;-1:-1:-1;18182:15:0;;18156:24;18152:46;17845:11;17820:23;17816:41;17813:52;17803:63;;24073:173;;24308:23;;;;24073:31;;23985:22;;-1:-1:-1;;;;;;;;;;;23985:22:0;;24435:215;24730:1;24716:12;24712:20;24670:279;24771:3;24762:7;24759:16;24670:279;;24922:7;24912:8;24909:1;-1:-1:-1;;;;;;;;;;;24879:1:0;24876;24871:59;24824:1;24811:15;24670:279;;;24674:77;24982:8;24994:1;24982:13;24978:45;;25004:19;;-1:-1:-1;;;25004:19:0;;;;;;;;;;;24978:45;25040:13;:19;-1:-1:-1;38072:185:0;;;:::o;206:131:1:-;-1:-1:-1;;;;;;280:32:1;;270:43;;260:71;;327:1;324;317:12;342:245;400:6;453:2;441:9;432:7;428:23;424:32;421:52;;;469:1;466;459:12;421:52;508:9;495:23;527:30;551:5;527:30;:::i;592:250::-;677:1;687:113;701:6;698:1;695:13;687:113;;;777:11;;;771:18;758:11;;;751:39;723:2;716:10;687:113;;;-1:-1:-1;;834:1:1;816:16;;809:27;592:250::o;847:271::-;889:3;927:5;921:12;954:6;949:3;942:19;970:76;1039:6;1032:4;1027:3;1023:14;1016:4;1009:5;1005:16;970:76;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:1;1066:39;;;;1107:4;1062:50;;847:271;-1:-1:-1;;847:271:1:o;1123:220::-;1272:2;1261:9;1254:21;1235:4;1292:45;1333:2;1322:9;1318:18;1310:6;1292:45;:::i;1348:180::-;1407:6;1460:2;1448:9;1439:7;1435:23;1431:32;1428:52;;;1476:1;1473;1466:12;1428:52;-1:-1:-1;1499:23:1;;1348:180;-1:-1:-1;1348:180:1:o;1741:173::-;1809:20;;-1:-1:-1;;;;;1858:31:1;;1848:42;;1838:70;;1904:1;1901;1894:12;1919:254;1987:6;1995;2048:2;2036:9;2027:7;2023:23;2019:32;2016:52;;;2064:1;2061;2054:12;2016:52;2087:29;2106:9;2087:29;:::i;:::-;2077:39;2163:2;2148:18;;;;2135:32;;-1:-1:-1;;;1919:254:1:o;2360:186::-;2419:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:52;;;2488:1;2485;2478:12;2440:52;2511:29;2530:9;2511:29;:::i;2551:328::-;2628:6;2636;2644;2697:2;2685:9;2676:7;2672:23;2668:32;2665:52;;;2713:1;2710;2703:12;2665:52;2736:29;2755:9;2736:29;:::i;:::-;2726:39;;2784:38;2818:2;2807:9;2803:18;2784:38;:::i;:::-;2774:48;;2869:2;2858:9;2854:18;2841:32;2831:42;;2551:328;;;;;:::o;2884:127::-;2945:10;2940:3;2936:20;2933:1;2926:31;2976:4;2973:1;2966:15;3000:4;2997:1;2990:15;3016:632;3081:5;3111:18;3152:2;3144:6;3141:14;3138:40;;;3158:18;;:::i;:::-;3233:2;3227:9;3201:2;3287:15;;-1:-1:-1;;3283:24:1;;;3309:2;3279:33;3275:42;3263:55;;;3333:18;;;3353:22;;;3330:46;3327:72;;;3379:18;;:::i;:::-;3419:10;3415:2;3408:22;3448:6;3439:15;;3478:6;3470;3463:22;3518:3;3509:6;3504:3;3500:16;3497:25;3494:45;;;3535:1;3532;3525:12;3494:45;3585:6;3580:3;3573:4;3565:6;3561:17;3548:44;3640:1;3633:4;3624:6;3616;3612:19;3608:30;3601:41;;;;3016:632;;;;;:::o;3653:222::-;3696:5;3749:3;3742:4;3734:6;3730:17;3726:27;3716:55;;3767:1;3764;3757:12;3716:55;3789:80;3865:3;3856:6;3843:20;3836:4;3828:6;3824:17;3789:80;:::i;3880:322::-;3949:6;4002:2;3990:9;3981:7;3977:23;3973:32;3970:52;;;4018:1;4015;4008:12;3970:52;4058:9;4045:23;4091:18;4083:6;4080:30;4077:50;;;4123:1;4120;4113:12;4077:50;4146;4188:7;4179:6;4168:9;4164:22;4146:50;:::i;4207:118::-;4293:5;4286:13;4279:21;4272:5;4269:32;4259:60;;4315:1;4312;4305:12;4330:451;4405:6;4413;4466:2;4454:9;4445:7;4441:23;4437:32;4434:52;;;4482:1;4479;4472:12;4434:52;4521:9;4508:23;4540:28;4562:5;4540:28;:::i;:::-;4587:5;-1:-1:-1;4643:2:1;4628:18;;4615:32;4670:18;4659:30;;4656:50;;;4702:1;4699;4692:12;4656:50;4725;4767:7;4758:6;4747:9;4743:22;4725:50;:::i;:::-;4715:60;;;4330:451;;;;;:::o;4786:315::-;4851:6;4859;4912:2;4900:9;4891:7;4887:23;4883:32;4880:52;;;4928:1;4925;4918:12;4880:52;4951:29;4970:9;4951:29;:::i;:::-;4941:39;;5030:2;5019:9;5015:18;5002:32;5043:28;5065:5;5043:28;:::i;:::-;5090:5;5080:15;;;4786:315;;;;;:::o;5106:254::-;5174:6;5182;5235:2;5223:9;5214:7;5210:23;5206:32;5203:52;;;5251:1;5248;5241:12;5203:52;5287:9;5274:23;5264:33;;5316:38;5350:2;5339:9;5335:18;5316:38;:::i;:::-;5306:48;;5106:254;;;;;:::o;5365:667::-;5460:6;5468;5476;5484;5537:3;5525:9;5516:7;5512:23;5508:33;5505:53;;;5554:1;5551;5544:12;5505:53;5577:29;5596:9;5577:29;:::i;:::-;5567:39;;5625:38;5659:2;5648:9;5644:18;5625:38;:::i;:::-;5615:48;;5710:2;5699:9;5695:18;5682:32;5672:42;;5765:2;5754:9;5750:18;5737:32;5792:18;5784:6;5781:30;5778:50;;;5824:1;5821;5814:12;5778:50;5847:22;;5900:4;5892:13;;5888:27;-1:-1:-1;5878:55:1;;5929:1;5926;5919:12;5878:55;5952:74;6018:7;6013:2;6000:16;5995:2;5991;5987:11;5952:74;:::i;:::-;5942:84;;;5365:667;;;;;;;:::o;6037:260::-;6105:6;6113;6166:2;6154:9;6145:7;6141:23;6137:32;6134:52;;;6182:1;6179;6172:12;6134:52;6205:29;6224:9;6205:29;:::i;:::-;6195:39;;6253:38;6287:2;6276:9;6272:18;6253:38;:::i;6302:380::-;6381:1;6377:12;;;;6424;;;6445:61;;6499:4;6491:6;6487:17;6477:27;;6445:61;6552:2;6544:6;6541:14;6521:18;6518:38;6515:161;;6598:10;6593:3;6589:20;6586:1;6579:31;6633:4;6630:1;6623:15;6661:4;6658:1;6651:15;6515:161;;6302:380;;;:::o;6996:245::-;7063:6;7116:2;7104:9;7095:7;7091:23;7087:32;7084:52;;;7132:1;7129;7122:12;7084:52;7164:9;7158:16;7183:28;7205:5;7183:28;:::i;8287:545::-;8389:2;8384:3;8381:11;8378:448;;;8425:1;8450:5;8446:2;8439:17;8495:4;8491:2;8481:19;8565:2;8553:10;8549:19;8546:1;8542:27;8536:4;8532:38;8601:4;8589:10;8586:20;8583:47;;;-1:-1:-1;8624:4:1;8583:47;8679:2;8674:3;8670:12;8667:1;8663:20;8657:4;8653:31;8643:41;;8734:82;8752:2;8745:5;8742:13;8734:82;;;8797:17;;;8778:1;8767:13;8734:82;;9008:1352;9134:3;9128:10;9161:18;9153:6;9150:30;9147:56;;;9183:18;;:::i;:::-;9212:97;9302:6;9262:38;9294:4;9288:11;9262:38;:::i;:::-;9256:4;9212:97;:::i;:::-;9364:4;;9428:2;9417:14;;9445:1;9440:663;;;;10147:1;10164:6;10161:89;;;-1:-1:-1;10216:19:1;;;10210:26;10161:89;-1:-1:-1;;8965:1:1;8961:11;;;8957:24;8953:29;8943:40;8989:1;8985:11;;;8940:57;10263:81;;9410:944;;9440:663;8234:1;8227:14;;;8271:4;8258:18;;-1:-1:-1;;9476:20:1;;;9594:236;9608:7;9605:1;9602:14;9594:236;;;9697:19;;;9691:26;9676:42;;9789:27;;;;9757:1;9745:14;;;;9624:19;;9594:236;;;9598:3;9858:6;9849:7;9846:19;9843:201;;;9919:19;;;9913:26;-1:-1:-1;;10002:1:1;9998:14;;;10014:3;9994:24;9990:37;9986:42;9971:58;9956:74;;9843:201;-1:-1:-1;;;;;10090:1:1;10074:14;;;10070:22;10057:36;;-1:-1:-1;9008:1352:1:o;10724:127::-;10785:10;10780:3;10776:20;10773:1;10766:31;10816:4;10813:1;10806:15;10840:4;10837:1;10830:15;10856:128;10923:9;;;10944:11;;;10941:37;;;10958:18;;:::i;10989:168::-;11062:9;;;11093;;11110:15;;;11104:22;;11090:37;11080:71;;11131:18;;:::i;11162:125::-;11227:9;;;11248:10;;;11245:36;;;11261:18;;:::i;13557:1020::-;13733:3;13762:1;13795:6;13789:13;13825:36;13851:9;13825:36;:::i;:::-;13880:1;13897:18;;;13924:133;;;;14071:1;14066:356;;;;13890:532;;13924:133;-1:-1:-1;;13957:24:1;;13945:37;;14030:14;;14023:22;14011:35;;14002:45;;;-1:-1:-1;13924:133:1;;14066:356;14097:6;14094:1;14087:17;14127:4;14172:2;14169:1;14159:16;14197:1;14211:165;14225:6;14222:1;14219:13;14211:165;;;14303:14;;14290:11;;;14283:35;14346:16;;;;14240:10;;14211:165;;;14215:3;;;14405:6;14400:3;14396:16;14389:23;;13890:532;;;;;14453:6;14447:13;14469:68;14528:8;14523:3;14516:4;14508:6;14504:17;14469:68;:::i;:::-;14553:18;;13557:1020;-1:-1:-1;;;;13557:1020:1:o;15350:135::-;15389:3;15410:17;;;15407:43;;15430:18;;:::i;:::-;-1:-1:-1;15477:1:1;15466:13;;15350:135::o;15490:127::-;15551:10;15546:3;15542:20;15539:1;15532:31;15582:4;15579:1;15572:15;15606:4;15603:1;15596:15;15622:120;15662:1;15688;15678:35;;15693:18;;:::i;:::-;-1:-1:-1;15727:9:1;;15622:120::o;15747:112::-;15779:1;15805;15795:35;;15810:18;;:::i;:::-;-1:-1:-1;15844:9:1;;15747:112::o;15864:127::-;15925:10;15920:3;15916:20;15913:1;15906:31;15956:4;15953:1;15946:15;15980:4;15977:1;15970:15;15996:489;-1:-1:-1;;;;;16265:15:1;;;16247:34;;16317:15;;16312:2;16297:18;;16290:43;16364:2;16349:18;;16342:34;;;16412:3;16407:2;16392:18;;16385:31;;;16190:4;;16433:46;;16459:19;;16451:6;16433:46;:::i;:::-;16425:54;15996:489;-1:-1:-1;;;;;;15996:489:1:o;16490:249::-;16559:6;16612:2;16600:9;16591:7;16587:23;16583:32;16580:52;;;16628:1;16625;16618:12;16580:52;16660:9;16654:16;16679:30;16703:5;16679:30;:::i
Swarm Source
ipfs://02988cfb932fff435244ff2b7193244ea4413688ec290e444a3c31572936ddea
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.