ETH Price: $3,287.75 (+0.65%)

Token

GoblinCNP (GCNP)
 

Overview

Max Total Supply

459 GCNP

Holders

103

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
aradio.eth
Balance
1 GCNP
0xe01dddfb490726df1fc3a62ab627f05ce673c586
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GoblinCNP

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-19
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        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);
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC2981 is IERC165 {
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

interface IERC721A {
    error ApprovalCallerNotOwnerNorApproved();
    error ApprovalQueryForNonexistentToken();
    error ApproveToCaller();
    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;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    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);
}

interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721A is IERC721A {
    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;
    uint256 private _currentIndex;
    uint256 private _burnCounter;
    string private _name;
    string private _symbol;
    mapping(uint256 => uint256) private _packedOwnerships;
    mapping(address => uint256) private _packedAddressData;
    mapping(uint256 => address) 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 returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view override returns (uint256) {
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view returns (uint256) {
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f;
    }

    function balanceOf(address owner) public view 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 {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly {
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    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 _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            owner := and(owner, BITMASK_ADDRESS)
            result := or(owner, or(shl(BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    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 _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        assembly {
            result := shl(BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public override {
        address owner = ownerOf(tokenId);
        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();
        _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 safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId && tokenId < _currentIndex && _packedOwnerships[tokenId] & BITMASK_BURNED == 0;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _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);
                if (_currentIndex != end) revert();
            }
        }
    }

    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        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 tokenId = startTokenId;
            uint256 end = startTokenId + quantity;
            do {
                emit Transfer(address(0), to, tokenId++);
            } while (tokenId < end);
            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _mintERC2309(address to, uint256 quantity) internal {
        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 _getApprovedAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals;
        assembly {
            mstore(0x00, tokenId)
            mstore(0x20, tokenApprovalsPtr.slot)
            approvedAddressSlot := keccak256(0x00, 0x40)
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function _isOwnerOrApproved(
        address approvedAddress,
        address from,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            from := and(from, BITMASK_ADDRESS)
            msgSender := and(msgSender, BITMASK_ADDRESS)
            result := or(eq(msgSender, from), eq(msgSender, approvedAddress))
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();
        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);
        if (!_isOwnerOrApproved(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 _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) = _getApprovedAddress(tokenId);
        if (approvalCheck) {
            if (!_isOwnerOrApproved(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 _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 _setExtraDataAt(uint256 index, uint24 extraData) internal {
        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 _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 _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    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 _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            ptr := add(mload(0x40), 128)
            mstore(0x40, ptr)
            let end := ptr
            for {
                let temp := value
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp {
                temp := div(temp, 10)
            } {
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }
            let length := sub(end, ptr)
            ptr := sub(ptr, 32)
            mstore(ptr, length)
        }
    }
}

interface IERC721ABurnable is IERC721A {
    function burn(uint256 tokenId) external;
}

abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
    function burn(uint256 tokenId) public virtual override {
        _burn(tokenId, true);
    }
}

interface IERC721AQueryable is IERC721A {
    error InvalidQueryRange();

    function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory);

    function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory);

    function tokensOfOwnerIn(
        address owner,
        uint256 start,
        uint256 stop
    ) external view returns (uint256[] memory);

    function tokensOfOwner(address owner) external view returns (uint256[] memory);
}

abstract contract ERC721AQueryable is ERC721A, IERC721AQueryable {
    function explicitOwnershipOf(uint256 tokenId) public view override returns (TokenOwnership memory) {
        TokenOwnership memory ownership;
        if (tokenId < _startTokenId() || tokenId >= _nextTokenId()) {
            return ownership;
        }
        ownership = _ownershipAt(tokenId);
        if (ownership.burned) {
            return ownership;
        }
        return _ownershipOf(tokenId);
    }

    function explicitOwnershipsOf(uint256[] memory tokenIds) external view override returns (TokenOwnership[] memory) {
        unchecked {
            uint256 tokenIdsLength = tokenIds.length;
            TokenOwnership[] memory ownerships = new TokenOwnership[](tokenIdsLength);
            for (uint256 i; i != tokenIdsLength; ++i) {
                ownerships[i] = explicitOwnershipOf(tokenIds[i]);
            }
            return ownerships;
        }
    }

    function tokensOfOwnerIn(
        address owner,
        uint256 start,
        uint256 stop
    ) external view override returns (uint256[] memory) {
        unchecked {
            if (start >= stop) revert InvalidQueryRange();
            uint256 tokenIdsIdx;
            uint256 stopLimit = _nextTokenId();
            if (start < _startTokenId()) {
                start = _startTokenId();
            }
            if (stop > stopLimit) {
                stop = stopLimit;
            }
            uint256 tokenIdsMaxLength = balanceOf(owner);
            if (start < stop) {
                uint256 rangeLength = stop - start;
                if (rangeLength < tokenIdsMaxLength) {
                    tokenIdsMaxLength = rangeLength;
                }
            } else {
                tokenIdsMaxLength = 0;
            }
            uint256[] memory tokenIds = new uint256[](tokenIdsMaxLength);
            if (tokenIdsMaxLength == 0) {
                return tokenIds;
            }
            TokenOwnership memory ownership = explicitOwnershipOf(start);
            address currOwnershipAddr;
            if (!ownership.burned) {
                currOwnershipAddr = ownership.addr;
            }
            for (uint256 i = start; i != stop && tokenIdsIdx != tokenIdsMaxLength; ++i) {
                ownership = _ownershipAt(i);
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    tokenIds[tokenIdsIdx++] = i;
                }
            }
            assembly {
                mstore(tokenIds, tokenIdsIdx)
            }
            return tokenIds;
        }
    }

    function tokensOfOwner(address owner) external view override returns (uint256[] memory) {
        unchecked {
            uint256 tokenIdsIdx;
            address currOwnershipAddr;
            uint256 tokenIdsLength = balanceOf(owner);
            uint256[] memory tokenIds = new uint256[](tokenIdsLength);
            TokenOwnership memory ownership;
            for (uint256 i = _startTokenId(); tokenIdsIdx != tokenIdsLength; ++i) {
                ownership = _ownershipAt(i);
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    tokenIds[tokenIdsIdx++] = i;
                }
            }
            return tokenIds;
        }
    }
}

contract GoblinCNP is ERC721A, ERC721ABurnable, ERC721AQueryable, IERC2981, Ownable {
    string public baseURI;
    uint256 public maxSupply;
    uint256 public cost;
    mapping(address => bool) public claimed;
    bytes32 public giveaway;
    struct Proof {
        uint256 index;
        address account;
        uint256 quantity;
        bytes32[] merkleProof;
    }

    constructor(
        string memory url_,
        uint256 maxSupply_,
        uint256 cost_,
        bytes32 giveaway_
    ) ERC721A("GoblinCNP", "GCNP") {
        baseURI = url_;
        maxSupply = maxSupply_;
        cost = cost_;
        giveaway = giveaway_;
        _mint(msg.sender, 1);
    }

    function airdrop(address to, uint256 quantity) external onlyOwner {
        require(totalSupply() + quantity <= maxSupply, "NO_GOBLIN");
        _mint(to, quantity);
    }

    function mint(uint256 quantity) external payable {
        require(totalSupply() + quantity <= maxSupply, "NO_GOBLIN");
        require(msg.value >= cost * quantity, "INSUFFICIENT_VALUE");
        payable(owner()).transfer(address(this).balance);
        _mint(msg.sender, quantity);
    }

    function claim(Proof memory proof) external {
        require(totalSupply() + proof.quantity <= maxSupply, "NO_GOBLIN");
        bytes32 node = keccak256(abi.encodePacked(proof.index, proof.account, proof.quantity));
        require(MerkleProof.verify(proof.merkleProof, giveaway, node), "INVALID_PROOF");
        require(!claimed[proof.account], "CLAIMED");
        claimed[proof.account] = true;
        _mint(proof.account, proof.quantity);
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        baseURI = baseURI_;
    }

    function setMaxSupply(uint256 maxSupply_) external onlyOwner {
        maxSupply = maxSupply_;
    }

    function setCost(uint256 cost_) external onlyOwner {
        cost = cost_;
    }

    function setGiveaway(bytes32 giveaway_) external onlyOwner {
        giveaway = giveaway_;
    }

    function _baseURI() internal view override returns (string memory) {
        return baseURI;
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC721A, IERC721A, IERC165)
        returns (bool)
    {
        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
    }

    function royaltyInfo(uint256, uint256 price) external view override returns (address, uint256) {
        return (owner(), (price * 10) / 100);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"url_","type":"string"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"},{"internalType":"uint256","name":"cost_","type":"uint256"},{"internalType":"bytes32","name":"giveaway_","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","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":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"internalType":"struct GoblinCNP.Proof","name":"proof","type":"tuple"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveaway","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost_","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"giveaway_","type":"bytes32"}],"name":"setGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"setMaxSupply","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200277e3803806200277e8339810160408190526200003491620002d6565b60408051808201825260098152680476f626c696e434e560bc1b602080830191825283518085019094526004845263047434e560e41b90840152815191929162000081916002916200021a565b508051620000979060039060208401906200021a565b50506000805550620000a933620000e5565b8351620000be9060099060208701906200021a565b50600a839055600b829055600d819055620000db33600162000137565b505050506200040a565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000546001600160a01b0383166200016157604051622e076360e81b815260040160405180910390fd5b81600003620001835760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038316600081815260056020526040902080546801000000000000000185020190554260a01b6001841460e11b1717600082815260046020526040902055808281015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210620001cd5760005550505050565b8280546200022890620003ce565b90600052602060002090601f0160209004810192826200024c576000855562000297565b82601f106200026757805160ff191683800117855562000297565b8280016001018555821562000297579182015b82811115620002975782518255916020019190600101906200027a565b50620002a5929150620002a9565b5090565b5b80821115620002a55760008155600101620002aa565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215620002ed57600080fd5b84516001600160401b03808211156200030557600080fd5b818701915087601f8301126200031a57600080fd5b8151818111156200032f576200032f620002c0565b604051601f8201601f19908116603f011681019083821181831017156200035a576200035a620002c0565b81604052828152602093508a848487010111156200037757600080fd5b600091505b828210156200039b57848201840151818301850152908301906200037c565b82821115620003ad5760008484830101525b9289015160408a01516060909a0151939b909a509297509195505050505050565b600181811c90821680620003e357607f821691505b6020821081036200040457634e487b7160e01b600052602260045260246000fd5b50919050565b612364806200041a6000396000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610628578063e14b150c1461063e578063e985e9c51461065e578063f2fde38b1461067e578063f9850b721461069e57600080fd5b8063b88d4fde1461058b578063c23dc68f146105ab578063c87b56dd146105d8578063c884ef83146105f857600080fd5b80638da5cb5b116100e75780638da5cb5b1461050557806395d89b411461052357806399a2557a14610538578063a0712d6814610558578063a22cb4651461056b57600080fd5b806370a0823114610483578063715018a6146104a35780638462151c146104b85780638ba4cc3c146104e557600080fd5b80633d995ada1161019b57806355f804b31161016a57806355f804b3146103e15780635bbb2177146104015780636352211e1461042e5780636c0360eb1461044e5780636f8b44b01461046357600080fd5b80633d995ada1461036157806342842e0e1461038157806342966c68146103a157806344a0d68a146103c157600080fd5b806313faede6116101d757806313faede6146102c557806318160ddd146102e957806323b872dd146103025780632a55205a1461032257600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a357600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061023461022f366004611b88565b6106b4565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106df565b6040516102409190611bfd565b34801561027757600080fd5b5061028b610286366004611c10565b610771565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611c45565b6107b5565b005b3480156102d157600080fd5b506102db600b5481565b604051908152602001610240565b3480156102f557600080fd5b50600154600054036102db565b34801561030e57600080fd5b506102c361031d366004611c6f565b610855565b34801561032e57600080fd5b5061034261033d366004611cab565b6109f7565b604080516001600160a01b039093168352602083019190915201610240565b34801561036d57600080fd5b506102c361037c366004611d5e565b610a2e565b34801561038d57600080fd5b506102c361039c366004611c6f565b610baf565b3480156103ad57600080fd5b506102c36103bc366004611c10565b610bcf565b3480156103cd57600080fd5b506102c36103dc366004611c10565b610bdd565b3480156103ed57600080fd5b506102c36103fc366004611ea1565b610c0c565b34801561040d57600080fd5b5061042161041c366004611ee9565b610c49565b6040516102409190611fb5565b34801561043a57600080fd5b5061028b610449366004611c10565b610d16565b34801561045a57600080fd5b5061025e610d21565b34801561046f57600080fd5b506102c361047e366004611c10565b610daf565b34801561048f57600080fd5b506102db61049e366004611ff7565b610dde565b3480156104af57600080fd5b506102c3610e2c565b3480156104c457600080fd5b506104d86104d3366004611ff7565b610e62565b6040516102409190612012565b3480156104f157600080fd5b506102c3610500366004611c45565b610f6a565b34801561051157600080fd5b506008546001600160a01b031661028b565b34801561052f57600080fd5b5061025e610fd7565b34801561054457600080fd5b506104d861055336600461204a565b610fe6565b6102c3610566366004611c10565b61115f565b34801561057757600080fd5b506102c361058636600461207d565b61122e565b34801561059757600080fd5b506102c36105a63660046120b9565b6112c3565b3480156105b757600080fd5b506105cb6105c6366004611c10565b61130d565b6040516102409190612134565b3480156105e457600080fd5b5061025e6105f3366004611c10565b611385565b34801561060457600080fd5b50610234610613366004611ff7565b600c6020526000908152604090205460ff1681565b34801561063457600080fd5b506102db600a5481565b34801561064a57600080fd5b506102c3610659366004611c10565b611408565b34801561066a57600080fd5b50610234610679366004612142565b611437565b34801561068a57600080fd5b506102c3610699366004611ff7565b611465565b3480156106aa57600080fd5b506102db600d5481565b60006001600160e01b0319821663152a902d60e11b14806106d957506106d9826114fd565b92915050565b6060600280546106ee90612175565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90612175565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b600061077c8261154b565b610799576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107c082610d16565b9050336001600160a01b038216146107f9576107dc8133611437565b6107f9576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061086082611572565b9050836001600160a01b0316816001600160a01b0316146108935760405162a1148160e81b815260040160405180910390fd5b600082815260066020526040902080546108bf8187335b6001600160a01b039081169116811491141790565b6108ea576108cd8633611437565b6108ea57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661091157604051633a954ecd60e21b815260040160405180910390fd5b801561091c57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b841690036109ae576001840160008181526004602052604081205490036109ac5760005481146109ac5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b600080610a0c6008546001600160a01b031690565b6064610a1985600a6121c5565b610a2391906121e4565b915091509250929050565b600a54604082015160015460005403610a479190612206565b1115610a6e5760405162461bcd60e51b8152600401610a659061221e565b60405180910390fd5b6000816000015182602001518360400151604051602001610ab49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b604051602081830303815290604052805190602001209050610add8260600151600d54836115d9565b610b195760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa82927a7a360991b6044820152606401610a65565b6020808301516001600160a01b03166000908152600c909152604090205460ff1615610b715760405162461bcd60e51b815260206004820152600760248201526610d3105253515160ca1b6044820152606401610a65565b602080830180516001600160a01b03166000908152600c909252604091829020805460ff191660011790555190830151610bab91906115ef565b5050565b610bca838383604051806020016040528060008152506112c3565b505050565b610bda8160016116cf565b50565b6008546001600160a01b03163314610c075760405162461bcd60e51b8152600401610a6590612241565b600b55565b6008546001600160a01b03163314610c365760405162461bcd60e51b8152600401610a6590612241565b8051610bab906009906020840190611ad9565b80516060906000816001600160401b03811115610c6857610c68611ccd565b604051908082528060200260200182016040528015610cba57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c865790505b50905060005b828114610d0e57610ce9858281518110610cdc57610cdc612276565b602002602001015161130d565b828281518110610cfb57610cfb612276565b6020908102919091010152600101610cc0565b509392505050565b60006106d982611572565b60098054610d2e90612175565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a90612175565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081565b6008546001600160a01b03163314610dd95760405162461bcd60e51b8152600401610a6590612241565b600a55565b60006001600160a01b038216610e07576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b03163314610e565760405162461bcd60e51b8152600401610a6590612241565b610e606000611819565b565b60606000806000610e7285610dde565b90506000816001600160401b03811115610e8e57610e8e611ccd565b604051908082528060200260200182016040528015610eb7578160200160208202803683370190505b509050610ee460408051608081018252600080825260208201819052918101829052606081019190915290565b60005b838614610f5e57610ef78161186b565b91508160400151610f565781516001600160a01b031615610f1757815194505b876001600160a01b0316856001600160a01b031603610f565780838780600101985081518110610f4957610f49612276565b6020026020010181815250505b600101610ee7565b50909695505050505050565b6008546001600160a01b03163314610f945760405162461bcd60e51b8152600401610a6590612241565b600a5481610fa56001546000540390565b610faf9190612206565b1115610fcd5760405162461bcd60e51b8152600401610a659061221e565b610bab82826115ef565b6060600380546106ee90612175565b606081831061100857604051631960ccad60e11b815260040160405180910390fd5b60008061101460005490565b905080841115611022578093505b600061102d87610dde565b90508486101561104c5785850381811015611046578091505b50611050565b5060005b6000816001600160401b0381111561106a5761106a611ccd565b604051908082528060200260200182016040528015611093578160200160208202803683370190505b509050816000036110a957935061115892505050565b60006110b48861130d565b9050600081604001516110c5575080515b885b8881141580156110d75750848714155b1561114c576110e58161186b565b925082604001516111445782516001600160a01b03161561110557825191505b8a6001600160a01b0316826001600160a01b031603611144578084888060010199508151811061113757611137612276565b6020026020010181815250505b6001016110c7565b50505092835250909150505b9392505050565b600a54816111706001546000540390565b61117a9190612206565b11156111985760405162461bcd60e51b8152600401610a659061221e565b80600b546111a691906121c5565b3410156111ea5760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b6044820152606401610a65565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611223573d6000803e3d6000fd5b50610bda33826115ef565b336001600160a01b038316036112575760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112ce848484610855565b6001600160a01b0383163b15611307576112ea848484846118a7565b611307576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60408051608080820183526000808352602080840182905283850182905260608085018390528551938401865282845290830182905293820181905292810183905290915060005483106113615792915050565b61136a8361186b565b905080604001511561137c5792915050565b61115883611993565b60606113908261154b565b6113ad57604051630a14c4b560e41b815260040160405180910390fd5b60006113b76119c8565b905080516000036113d75760405180602001604052806000815250611158565b806113e1846119d7565b6040516020016113f292919061228c565b6040516020818303038152906040529392505050565b6008546001600160a01b031633146114325760405162461bcd60e51b8152600401610a6590612241565b600d55565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b0316331461148f5760405162461bcd60e51b8152600401610a6590612241565b6001600160a01b0381166114f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a65565b610bda81611819565b60006301ffc9a760e01b6001600160e01b03198316148061152e57506380ac58cd60e01b6001600160e01b03198316145b806106d95750506001600160e01b031916635b5e139f60e01b1490565b60008054821080156106d9575050600090815260046020526040902054600160e01b161590565b6000816000548110156115c05760008181526004602052604081205490600160e01b821690036115be575b8060000361115857506000190160008181526004602052604090205461159d565b505b604051636f96cda160e11b815260040160405180910390fd5b6000826115e68584611a26565b14949350505050565b6000546001600160a01b03831661161857604051622e076360e81b815260040160405180910390fd5b816000036116395760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038316600081815260056020526040902080546801000000000000000185020190554260a01b6001841460e11b1717600082815260046020526040902055808281015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082106116835760005550505050565b60006116da83611572565b9050806000806116f886600090815260066020526040902080549091565b9150915084156117385761170d8184336108aa565b6117385761171b8333611437565b61173857604051632ce44b5f60e11b815260040160405180910390fd5b801561174357600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260046020526040812091909155600160e11b851690036117d1576001860160008181526004602052604081205490036117cf5760005481146117cf5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050600180548101905550505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600460205260409020546106d990611a92565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906118dc9033908990889088906004016122bb565b6020604051808303816000875af1925050508015611917575060408051601f3d908101601f19168201909252611914918101906122f8565b60015b611975573d808015611945576040519150601f19603f3d011682016040523d82523d6000602084013e61194a565b606091505b50805160000361196d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6040805160808101825260008082526020820181905291810182905260608101919091526106d96119c383611572565b611a92565b6060600980546106ee90612175565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611a1457600183039250600a81066030018353600a90046119f6565b50819003601f19909101908152919050565b600081815b8451811015610d0e576000858281518110611a4857611a48612276565b60200260200101519050808311611a6e5760008381526020829052604090209250611a7f565b600081815260208490526040902092505b5080611a8a81612315565b915050611a2b565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b828054611ae590612175565b90600052602060002090601f016020900481019282611b075760008555611b4d565b82601f10611b2057805160ff1916838001178555611b4d565b82800160010185558215611b4d579182015b82811115611b4d578251825591602001919060010190611b32565b50611b59929150611b5d565b5090565b5b80821115611b595760008155600101611b5e565b6001600160e01b031981168114610bda57600080fd5b600060208284031215611b9a57600080fd5b813561115881611b72565b60005b83811015611bc0578181015183820152602001611ba8565b838111156113075750506000910152565b60008151808452611be9816020860160208601611ba5565b601f01601f19169290920160200192915050565b6020815260006111586020830184611bd1565b600060208284031215611c2257600080fd5b5035919050565b80356001600160a01b0381168114611c4057600080fd5b919050565b60008060408385031215611c5857600080fd5b611c6183611c29565b946020939093013593505050565b600080600060608486031215611c8457600080fd5b611c8d84611c29565b9250611c9b60208501611c29565b9150604084013590509250925092565b60008060408385031215611cbe57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715611d0557611d05611ccd565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611d3357611d33611ccd565b604052919050565b60006001600160401b03821115611d5457611d54611ccd565b5060051b60200190565b60006020808385031215611d7157600080fd5b82356001600160401b0380821115611d8857600080fd5b9084019060808287031215611d9c57600080fd5b611da4611ce3565b82358152611db3848401611c29565b8482015260408301356040820152606083013582811115611dd357600080fd5b80840193505086601f840112611de857600080fd5b82359150611dfd611df883611d3b565b611d0b565b82815260059290921b83018401918481019088841115611e1c57600080fd5b938501935b83851015611e3a57843582529385019390850190611e21565b6060830152509695505050505050565b60006001600160401b03831115611e6357611e63611ccd565b611e76601f8401601f1916602001611d0b565b9050828152838383011115611e8a57600080fd5b828260208301376000602084830101529392505050565b600060208284031215611eb357600080fd5b81356001600160401b03811115611ec957600080fd5b8201601f81018413611eda57600080fd5b61198b84823560208401611e4a565b60006020808385031215611efc57600080fd5b82356001600160401b03811115611f1257600080fd5b8301601f81018513611f2357600080fd5b8035611f31611df882611d3b565b81815260059190911b82018301908381019087831115611f5057600080fd5b928401925b82841015611f6e57833582529284019290840190611f55565b979650505050505050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b81811015610f5e57611fe4838551611f79565b9284019260809290920191600101611fd1565b60006020828403121561200957600080fd5b61115882611c29565b6020808252825182820181905260009190848201906040850190845b81811015610f5e5783518352928401929184019160010161202e565b60008060006060848603121561205f57600080fd5b61206884611c29565b95602085013595506040909401359392505050565b6000806040838503121561209057600080fd5b61209983611c29565b9150602083013580151581146120ae57600080fd5b809150509250929050565b600080600080608085870312156120cf57600080fd5b6120d885611c29565b93506120e660208601611c29565b92506040850135915060608501356001600160401b0381111561210857600080fd5b8501601f8101871361211957600080fd5b61212887823560208401611e4a565b91505092959194509250565b608081016106d98284611f79565b6000806040838503121561215557600080fd5b61215e83611c29565b915061216c60208401611c29565b90509250929050565b600181811c9082168061218957607f821691505b6020821081036121a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156121df576121df6121af565b500290565b60008261220157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612219576122196121af565b500190565b6020808252600990820152682727afa3a7a12624a760b91b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000835161229e818460208801611ba5565b8351908301906122b2818360208801611ba5565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ee90830184611bd1565b9695505050505050565b60006020828403121561230a57600080fd5b815161115881611b72565b600060018201612327576123276121af565b506001019056fea2646970667358221220acd219bd523f60015ad634eaebe2c4c3042e6b501717fa679339ab0a89fae34664736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001a0a00000000000000000000000000000000000000000000000000232bff5f46c000e1608372e8265fdd758975020abf27b90b01e70d02406a28f0daee5d0b5b713b0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d586e694a6a5054554357324447725768354834454c6a7a4b554c424844357958594a436337766151314b64702f00000000000000000000

Deployed Bytecode

0x6080604052600436106102085760003560e01c806370a0823111610118578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610628578063e14b150c1461063e578063e985e9c51461065e578063f2fde38b1461067e578063f9850b721461069e57600080fd5b8063b88d4fde1461058b578063c23dc68f146105ab578063c87b56dd146105d8578063c884ef83146105f857600080fd5b80638da5cb5b116100e75780638da5cb5b1461050557806395d89b411461052357806399a2557a14610538578063a0712d6814610558578063a22cb4651461056b57600080fd5b806370a0823114610483578063715018a6146104a35780638462151c146104b85780638ba4cc3c146104e557600080fd5b80633d995ada1161019b57806355f804b31161016a57806355f804b3146103e15780635bbb2177146104015780636352211e1461042e5780636c0360eb1461044e5780636f8b44b01461046357600080fd5b80633d995ada1461036157806342842e0e1461038157806342966c68146103a157806344a0d68a146103c157600080fd5b806313faede6116101d757806313faede6146102c557806318160ddd146102e957806323b872dd146103025780632a55205a1461032257600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a357600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061023461022f366004611b88565b6106b4565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106df565b6040516102409190611bfd565b34801561027757600080fd5b5061028b610286366004611c10565b610771565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611c45565b6107b5565b005b3480156102d157600080fd5b506102db600b5481565b604051908152602001610240565b3480156102f557600080fd5b50600154600054036102db565b34801561030e57600080fd5b506102c361031d366004611c6f565b610855565b34801561032e57600080fd5b5061034261033d366004611cab565b6109f7565b604080516001600160a01b039093168352602083019190915201610240565b34801561036d57600080fd5b506102c361037c366004611d5e565b610a2e565b34801561038d57600080fd5b506102c361039c366004611c6f565b610baf565b3480156103ad57600080fd5b506102c36103bc366004611c10565b610bcf565b3480156103cd57600080fd5b506102c36103dc366004611c10565b610bdd565b3480156103ed57600080fd5b506102c36103fc366004611ea1565b610c0c565b34801561040d57600080fd5b5061042161041c366004611ee9565b610c49565b6040516102409190611fb5565b34801561043a57600080fd5b5061028b610449366004611c10565b610d16565b34801561045a57600080fd5b5061025e610d21565b34801561046f57600080fd5b506102c361047e366004611c10565b610daf565b34801561048f57600080fd5b506102db61049e366004611ff7565b610dde565b3480156104af57600080fd5b506102c3610e2c565b3480156104c457600080fd5b506104d86104d3366004611ff7565b610e62565b6040516102409190612012565b3480156104f157600080fd5b506102c3610500366004611c45565b610f6a565b34801561051157600080fd5b506008546001600160a01b031661028b565b34801561052f57600080fd5b5061025e610fd7565b34801561054457600080fd5b506104d861055336600461204a565b610fe6565b6102c3610566366004611c10565b61115f565b34801561057757600080fd5b506102c361058636600461207d565b61122e565b34801561059757600080fd5b506102c36105a63660046120b9565b6112c3565b3480156105b757600080fd5b506105cb6105c6366004611c10565b61130d565b6040516102409190612134565b3480156105e457600080fd5b5061025e6105f3366004611c10565b611385565b34801561060457600080fd5b50610234610613366004611ff7565b600c6020526000908152604090205460ff1681565b34801561063457600080fd5b506102db600a5481565b34801561064a57600080fd5b506102c3610659366004611c10565b611408565b34801561066a57600080fd5b50610234610679366004612142565b611437565b34801561068a57600080fd5b506102c3610699366004611ff7565b611465565b3480156106aa57600080fd5b506102db600d5481565b60006001600160e01b0319821663152a902d60e11b14806106d957506106d9826114fd565b92915050565b6060600280546106ee90612175565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90612175565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b600061077c8261154b565b610799576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107c082610d16565b9050336001600160a01b038216146107f9576107dc8133611437565b6107f9576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061086082611572565b9050836001600160a01b0316816001600160a01b0316146108935760405162a1148160e81b815260040160405180910390fd5b600082815260066020526040902080546108bf8187335b6001600160a01b039081169116811491141790565b6108ea576108cd8633611437565b6108ea57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661091157604051633a954ecd60e21b815260040160405180910390fd5b801561091c57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b841690036109ae576001840160008181526004602052604081205490036109ac5760005481146109ac5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b600080610a0c6008546001600160a01b031690565b6064610a1985600a6121c5565b610a2391906121e4565b915091509250929050565b600a54604082015160015460005403610a479190612206565b1115610a6e5760405162461bcd60e51b8152600401610a659061221e565b60405180910390fd5b6000816000015182602001518360400151604051602001610ab49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b604051602081830303815290604052805190602001209050610add8260600151600d54836115d9565b610b195760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa82927a7a360991b6044820152606401610a65565b6020808301516001600160a01b03166000908152600c909152604090205460ff1615610b715760405162461bcd60e51b815260206004820152600760248201526610d3105253515160ca1b6044820152606401610a65565b602080830180516001600160a01b03166000908152600c909252604091829020805460ff191660011790555190830151610bab91906115ef565b5050565b610bca838383604051806020016040528060008152506112c3565b505050565b610bda8160016116cf565b50565b6008546001600160a01b03163314610c075760405162461bcd60e51b8152600401610a6590612241565b600b55565b6008546001600160a01b03163314610c365760405162461bcd60e51b8152600401610a6590612241565b8051610bab906009906020840190611ad9565b80516060906000816001600160401b03811115610c6857610c68611ccd565b604051908082528060200260200182016040528015610cba57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c865790505b50905060005b828114610d0e57610ce9858281518110610cdc57610cdc612276565b602002602001015161130d565b828281518110610cfb57610cfb612276565b6020908102919091010152600101610cc0565b509392505050565b60006106d982611572565b60098054610d2e90612175565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a90612175565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081565b6008546001600160a01b03163314610dd95760405162461bcd60e51b8152600401610a6590612241565b600a55565b60006001600160a01b038216610e07576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b03163314610e565760405162461bcd60e51b8152600401610a6590612241565b610e606000611819565b565b60606000806000610e7285610dde565b90506000816001600160401b03811115610e8e57610e8e611ccd565b604051908082528060200260200182016040528015610eb7578160200160208202803683370190505b509050610ee460408051608081018252600080825260208201819052918101829052606081019190915290565b60005b838614610f5e57610ef78161186b565b91508160400151610f565781516001600160a01b031615610f1757815194505b876001600160a01b0316856001600160a01b031603610f565780838780600101985081518110610f4957610f49612276565b6020026020010181815250505b600101610ee7565b50909695505050505050565b6008546001600160a01b03163314610f945760405162461bcd60e51b8152600401610a6590612241565b600a5481610fa56001546000540390565b610faf9190612206565b1115610fcd5760405162461bcd60e51b8152600401610a659061221e565b610bab82826115ef565b6060600380546106ee90612175565b606081831061100857604051631960ccad60e11b815260040160405180910390fd5b60008061101460005490565b905080841115611022578093505b600061102d87610dde565b90508486101561104c5785850381811015611046578091505b50611050565b5060005b6000816001600160401b0381111561106a5761106a611ccd565b604051908082528060200260200182016040528015611093578160200160208202803683370190505b509050816000036110a957935061115892505050565b60006110b48861130d565b9050600081604001516110c5575080515b885b8881141580156110d75750848714155b1561114c576110e58161186b565b925082604001516111445782516001600160a01b03161561110557825191505b8a6001600160a01b0316826001600160a01b031603611144578084888060010199508151811061113757611137612276565b6020026020010181815250505b6001016110c7565b50505092835250909150505b9392505050565b600a54816111706001546000540390565b61117a9190612206565b11156111985760405162461bcd60e51b8152600401610a659061221e565b80600b546111a691906121c5565b3410156111ea5760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b6044820152606401610a65565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611223573d6000803e3d6000fd5b50610bda33826115ef565b336001600160a01b038316036112575760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112ce848484610855565b6001600160a01b0383163b15611307576112ea848484846118a7565b611307576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60408051608080820183526000808352602080840182905283850182905260608085018390528551938401865282845290830182905293820181905292810183905290915060005483106113615792915050565b61136a8361186b565b905080604001511561137c5792915050565b61115883611993565b60606113908261154b565b6113ad57604051630a14c4b560e41b815260040160405180910390fd5b60006113b76119c8565b905080516000036113d75760405180602001604052806000815250611158565b806113e1846119d7565b6040516020016113f292919061228c565b6040516020818303038152906040529392505050565b6008546001600160a01b031633146114325760405162461bcd60e51b8152600401610a6590612241565b600d55565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b0316331461148f5760405162461bcd60e51b8152600401610a6590612241565b6001600160a01b0381166114f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a65565b610bda81611819565b60006301ffc9a760e01b6001600160e01b03198316148061152e57506380ac58cd60e01b6001600160e01b03198316145b806106d95750506001600160e01b031916635b5e139f60e01b1490565b60008054821080156106d9575050600090815260046020526040902054600160e01b161590565b6000816000548110156115c05760008181526004602052604081205490600160e01b821690036115be575b8060000361115857506000190160008181526004602052604090205461159d565b505b604051636f96cda160e11b815260040160405180910390fd5b6000826115e68584611a26565b14949350505050565b6000546001600160a01b03831661161857604051622e076360e81b815260040160405180910390fd5b816000036116395760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038316600081815260056020526040902080546801000000000000000185020190554260a01b6001841460e11b1717600082815260046020526040902055808281015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082106116835760005550505050565b60006116da83611572565b9050806000806116f886600090815260066020526040902080549091565b9150915084156117385761170d8184336108aa565b6117385761171b8333611437565b61173857604051632ce44b5f60e11b815260040160405180910390fd5b801561174357600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260046020526040812091909155600160e11b851690036117d1576001860160008181526004602052604081205490036117cf5760005481146117cf5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050600180548101905550505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600460205260409020546106d990611a92565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906118dc9033908990889088906004016122bb565b6020604051808303816000875af1925050508015611917575060408051601f3d908101601f19168201909252611914918101906122f8565b60015b611975573d808015611945576040519150601f19603f3d011682016040523d82523d6000602084013e61194a565b606091505b50805160000361196d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6040805160808101825260008082526020820181905291810182905260608101919091526106d96119c383611572565b611a92565b6060600980546106ee90612175565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611a1457600183039250600a81066030018353600a90046119f6565b50819003601f19909101908152919050565b600081815b8451811015610d0e576000858281518110611a4857611a48612276565b60200260200101519050808311611a6e5760008381526020829052604090209250611a7f565b600081815260208490526040902092505b5080611a8a81612315565b915050611a2b565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b828054611ae590612175565b90600052602060002090601f016020900481019282611b075760008555611b4d565b82601f10611b2057805160ff1916838001178555611b4d565b82800160010185558215611b4d579182015b82811115611b4d578251825591602001919060010190611b32565b50611b59929150611b5d565b5090565b5b80821115611b595760008155600101611b5e565b6001600160e01b031981168114610bda57600080fd5b600060208284031215611b9a57600080fd5b813561115881611b72565b60005b83811015611bc0578181015183820152602001611ba8565b838111156113075750506000910152565b60008151808452611be9816020860160208601611ba5565b601f01601f19169290920160200192915050565b6020815260006111586020830184611bd1565b600060208284031215611c2257600080fd5b5035919050565b80356001600160a01b0381168114611c4057600080fd5b919050565b60008060408385031215611c5857600080fd5b611c6183611c29565b946020939093013593505050565b600080600060608486031215611c8457600080fd5b611c8d84611c29565b9250611c9b60208501611c29565b9150604084013590509250925092565b60008060408385031215611cbe57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715611d0557611d05611ccd565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611d3357611d33611ccd565b604052919050565b60006001600160401b03821115611d5457611d54611ccd565b5060051b60200190565b60006020808385031215611d7157600080fd5b82356001600160401b0380821115611d8857600080fd5b9084019060808287031215611d9c57600080fd5b611da4611ce3565b82358152611db3848401611c29565b8482015260408301356040820152606083013582811115611dd357600080fd5b80840193505086601f840112611de857600080fd5b82359150611dfd611df883611d3b565b611d0b565b82815260059290921b83018401918481019088841115611e1c57600080fd5b938501935b83851015611e3a57843582529385019390850190611e21565b6060830152509695505050505050565b60006001600160401b03831115611e6357611e63611ccd565b611e76601f8401601f1916602001611d0b565b9050828152838383011115611e8a57600080fd5b828260208301376000602084830101529392505050565b600060208284031215611eb357600080fd5b81356001600160401b03811115611ec957600080fd5b8201601f81018413611eda57600080fd5b61198b84823560208401611e4a565b60006020808385031215611efc57600080fd5b82356001600160401b03811115611f1257600080fd5b8301601f81018513611f2357600080fd5b8035611f31611df882611d3b565b81815260059190911b82018301908381019087831115611f5057600080fd5b928401925b82841015611f6e57833582529284019290840190611f55565b979650505050505050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b81811015610f5e57611fe4838551611f79565b9284019260809290920191600101611fd1565b60006020828403121561200957600080fd5b61115882611c29565b6020808252825182820181905260009190848201906040850190845b81811015610f5e5783518352928401929184019160010161202e565b60008060006060848603121561205f57600080fd5b61206884611c29565b95602085013595506040909401359392505050565b6000806040838503121561209057600080fd5b61209983611c29565b9150602083013580151581146120ae57600080fd5b809150509250929050565b600080600080608085870312156120cf57600080fd5b6120d885611c29565b93506120e660208601611c29565b92506040850135915060608501356001600160401b0381111561210857600080fd5b8501601f8101871361211957600080fd5b61212887823560208401611e4a565b91505092959194509250565b608081016106d98284611f79565b6000806040838503121561215557600080fd5b61215e83611c29565b915061216c60208401611c29565b90509250929050565b600181811c9082168061218957607f821691505b6020821081036121a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156121df576121df6121af565b500290565b60008261220157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612219576122196121af565b500190565b6020808252600990820152682727afa3a7a12624a760b91b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000835161229e818460208801611ba5565b8351908301906122b2818360208801611ba5565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ee90830184611bd1565b9695505050505050565b60006020828403121561230a57600080fd5b815161115881611b72565b600060018201612327576123276121af565b506001019056fea2646970667358221220acd219bd523f60015ad634eaebe2c4c3042e6b501717fa679339ab0a89fae34664736f6c634300080e0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001a0a00000000000000000000000000000000000000000000000000232bff5f46c000e1608372e8265fdd758975020abf27b90b01e70d02406a28f0daee5d0b5b713b0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d586e694a6a5054554357324447725768354834454c6a7a4b554c424844357958594a436337766151314b64702f00000000000000000000

-----Decoded View---------------
Arg [0] : url_ (string): ipfs://QmXniJjPTUCW2DGrWh5H4ELjzKULBHD5yXYJCc7vaQ1Kdp/
Arg [1] : maxSupply_ (uint256): 6666
Arg [2] : cost_ (uint256): 9900000000000000
Arg [3] : giveaway_ (bytes32): 0xe1608372e8265fdd758975020abf27b90b01e70d02406a28f0daee5d0b5b713b

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001a0a
Arg [2] : 00000000000000000000000000000000000000000000000000232bff5f46c000
Arg [3] : e1608372e8265fdd758975020abf27b90b01e70d02406a28f0daee5d0b5b713b
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [5] : 697066733a2f2f516d586e694a6a5054554357324447725768354834454c6a7a
Arg [6] : 4b554c424844357958594a436337766151314b64702f00000000000000000000


Deployed Bytecode Sourcemap

27356:2651:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29533:276;;;;;;;;;;-1:-1:-1;29533:276:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;29533:276:0;;;;;;;;10459:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11697:202::-;;;;;;;;;;-1:-1:-1;11697:202:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;11697:202:0;1528:203:1;11307:382:0;;;;;;;;;;-1:-1:-1;11307:382:0;;;;;:::i;:::-;;:::i;:::-;;27506:19;;;;;;;;;;;;;;;;;;;2319:25:1;;;2307:2;2292:18;27506:19:0;2173:177:1;6774:170:0;;;;;;;;;;-1:-1:-1;6895:12:0;;6827:7;6879:13;:28;6774:170;;16698:1596;;;;;;;;;;-1:-1:-1;16698:1596:0;;;;;:::i;:::-;;:::i;29817:150::-;;;;;;;;;;-1:-1:-1;29817:150:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3133:32:1;;;3115:51;;3197:2;3182:18;;3175:34;;;;3088:18;29817:150:0;2941:274:1;28547:456:0;;;;;;;;;;-1:-1:-1;28547:456:0;;;;;:::i;:::-;;:::i;12393:185::-;;;;;;;;;;-1:-1:-1;12393:185:0;;;;;:::i;:::-;;:::i;22969:94::-;;;;;;;;;;-1:-1:-1;22969:94:0;;;;;:::i;:::-;;:::i;29229:82::-;;;;;;;;;;-1:-1:-1;29229:82:0;;;;;:::i;:::-;;:::i;29011:100::-;;;;;;;;;;-1:-1:-1;29011:100:0;;;;;:::i;:::-;;:::i;24102:468::-;;;;;;;;;;-1:-1:-1;24102:468:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10307:144::-;;;;;;;;;;-1:-1:-1;10307:144:0;;;;;:::i;:::-;;:::i;27447:21::-;;;;;;;;;;;;;:::i;29119:102::-;;;;;;;;;;-1:-1:-1;29119:102:0;;;;;:::i;:::-;;:::i;7419:224::-;;;;;;;;;;-1:-1:-1;7419:224:0;;;;;:::i;:::-;;:::i;768:103::-;;;;;;;;;;;;;:::i;26457:892::-;;;;;;;;;;-1:-1:-1;26457:892:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28063:174::-;;;;;;;;;;-1:-1:-1;28063:174:0;;;;;:::i;:::-;;:::i;545:87::-;;;;;;;;;;-1:-1:-1;618:6:0;;-1:-1:-1;;;;;618:6:0;545:87;;10567:104;;;;;;;;;;;;;:::i;24578:1871::-;;;;;;;;;;-1:-1:-1;24578:1871:0;;;;;:::i;:::-;;:::i;28245:294::-;;;;;;:::i;:::-;;:::i;11907:306::-;;;;;;;;;;-1:-1:-1;11907:306:0;;;;;:::i;:::-;;:::i;12586:399::-;;;;;;;;;;-1:-1:-1;12586:399:0;;;;;:::i;:::-;;:::i;23674:420::-;;;;;;;;;;-1:-1:-1;23674:420:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10679:316::-;;;;;;;;;;-1:-1:-1;10679:316:0;;;;;:::i;:::-;;:::i;27532:39::-;;;;;;;;;;-1:-1:-1;27532:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27475:24;;;;;;;;;;;;;;;;29319:98;;;;;;;;;;-1:-1:-1;29319:98:0;;;;;:::i;:::-;;:::i;12221:164::-;;;;;;;;;;-1:-1:-1;12221:164:0;;;;;:::i;:::-;;:::i;879:201::-;;;;;;;;;;-1:-1:-1;879:201:0;;;;;:::i;:::-;;:::i;27578:23::-;;;;;;;;;;;;;;;;29533:276;29691:4;-1:-1:-1;;;;;;29720:41:0;;-1:-1:-1;;;29720:41:0;;:81;;;29765:36;29789:11;29765:23;:36::i;:::-;29713:88;29533:276;-1:-1:-1;;29533:276:0:o;10459:100::-;10513:13;10546:5;10539:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10459:100;:::o;11697:202::-;11765:7;11790:16;11798:7;11790;:16::i;:::-;11785:64;;11815:34;;-1:-1:-1;;;11815:34:0;;;;;;;;;;;11785:64;-1:-1:-1;11867:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11867:24:0;;11697:202::o;11307:382::-;11380:13;11396:16;11404:7;11396;:16::i;:::-;11380:32;-1:-1:-1;22084:10:0;-1:-1:-1;;;;;11427:28:0;;;11423:175;;11475:44;11492:5;22084:10;12221:164;:::i;11475:44::-;11470:128;;11547:35;;-1:-1:-1;;;11547:35:0;;;;;;;;;;;11470:128;11608:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;11608:29:0;-1:-1:-1;;;;;11608:29:0;;;;;;;;;11653:28;;11608:24;;11653:28;;;;;;;11369:320;11307:382;;:::o;16698:1596::-;16832:27;16862;16881:7;16862:18;:27::i;:::-;16832:57;;16945:4;-1:-1:-1;;;;;16904:45:0;16920:19;-1:-1:-1;;;;;16904:45:0;;16900:86;;16958:28;;-1:-1:-1;;;16958:28:0;;;;;;;;;;;16900:86;16998:27;16097:21;;;16047:15;16139:4;16132:36;16221:4;16205:21;;16259:26;;17098:62;16259:26;17134:4;22084:10;17140:19;-1:-1:-1;;;;;16562:31:0;;;16509:26;;16620:19;;16641:30;;16617:55;;16311:379;17098:62;17093:174;;17180:43;17197:4;22084:10;12221:164;:::i;17180:43::-;17175:92;;17232:35;;-1:-1:-1;;;17232:35:0;;;;;;;;;;;17175:92;-1:-1:-1;;;;;17282:16:0;;17278:52;;17307:23;;-1:-1:-1;;;17307:23:0;;;;;;;;;;;17278:52;17422:15;17419:83;;;17485:1;17464:19;17457:30;17419:83;-1:-1:-1;;;;;17550:24:0;;;;;;;:18;:24;;;;;;17548:26;;-1:-1:-1;;17548:26:0;;;17591:22;;;;;;;;;17589:24;;-1:-1:-1;17589:24:0;;;10260:11;10236:22;10232:40;10219:62;-1:-1:-1;;;10219:62:0;17628:26;;;;:17;:26;;;;;:174;;;;-1:-1:-1;;;17821:46:0;;:51;;17817:363;;17925:1;17915:11;;17893:19;17949:30;;;:17;:30;;;;;;:35;;17945:220;;18028:13;;18013:11;:28;18009:137;;18070:30;;;;:17;:30;;;;;:52;;;18009:137;17874:306;17817:363;18225:7;18221:2;-1:-1:-1;;;;;18206:27:0;18215:4;-1:-1:-1;;;;;18206:27:0;;;;;;;;;;;16821:1473;;;16698:1596;;;:::o;29817:150::-;29894:7;29903;29931;618:6;;-1:-1:-1;;;;;618:6:0;;545:87;29931:7;29955:3;29941:10;:5;29949:2;29941:10;:::i;:::-;29940:18;;;;:::i;:::-;29923:36;;;;29817:150;;;;;:::o;28547:456::-;28644:9;;28626:14;;;;6895:12;;6827:7;6879:13;:28;28610:30;;;;:::i;:::-;:43;;28602:65;;;;-1:-1:-1;;;28602:65:0;;;;;;;:::i;:::-;;;;;;;;;28678:12;28720:5;:11;;;28733:5;:13;;;28748:5;:14;;;28703:60;;;;;;;;;12918:19:1;;;12975:2;12971:15;;;;-1:-1:-1;;12967:53:1;12962:2;12953:12;;12946:75;13046:2;13037:12;;13030:28;13083:2;13074:12;;12733:359;28703:60:0;;;;;;;;;;;;;28693:71;;;;;;28678:86;;28783:53;28802:5;:17;;;28821:8;;28831:4;28783:18;:53::i;:::-;28775:79;;;;-1:-1:-1;;;28775:79:0;;13299:2:1;28775:79:0;;;13281:21:1;13338:2;13318:18;;;13311:30;-1:-1:-1;;;13357:18:1;;;13350:43;13410:18;;28775:79:0;13097:337:1;28775:79:0;28882:13;;;;;-1:-1:-1;;;;;28874:22:0;;;;;:7;:22;;;;;;;;;28873:23;28865:43;;;;-1:-1:-1;;;28865:43:0;;13641:2:1;28865:43:0;;;13623:21:1;13680:1;13660:18;;;13653:29;-1:-1:-1;;;13698:18:1;;;13691:37;13745:18;;28865:43:0;13439:330:1;28865:43:0;28927:13;;;;;;-1:-1:-1;;;;;28919:22:0;;;;;:7;:22;;;;;;;;:29;;-1:-1:-1;;28919:29:0;28944:4;28919:29;;;28965:13;28980:14;;;;28959:36;;28965:13;28959:5;:36::i;:::-;28591:412;28547:456;:::o;12393:185::-;12531:39;12548:4;12554:2;12558:7;12531:39;;;;;;;;;;;;:16;:39::i;:::-;12393:185;;;:::o;22969:94::-;23035:20;23041:7;23050:4;23035:5;:20::i;:::-;22969:94;:::o;29229:82::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;29291:4:::1;:12:::0;29229:82::o;29011:100::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;29085:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;24102:468::-:0;24277:15;;24191:23;;24252:22;24277:15;-1:-1:-1;;;;;24344:36:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24344:36:0;;-1:-1:-1;;24344:36:0;;;;;;;;;;;;24307:73;;24400:9;24395:125;24416:14;24411:1;:19;24395:125;;24472:32;24492:8;24501:1;24492:11;;;;;;;;:::i;:::-;;;;;;;24472:19;:32::i;:::-;24456:10;24467:1;24456:13;;;;;;;;:::i;:::-;;;;;;;;;;:48;24432:3;;24395:125;;;-1:-1:-1;24541:10:0;24102:468;-1:-1:-1;;;24102:468:0:o;10307:144::-;10371:7;10414:27;10433:7;10414:18;:27::i;27447:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29119:102::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;29191:9:::1;:22:::0;29119:102::o;7419:224::-;7483:7;-1:-1:-1;;;;;7507:19:0;;7503:60;;7535:28;;-1:-1:-1;;;7535:28:0;;;;;;;;;;;7503:60;-1:-1:-1;;;;;;7581:25:0;;;;;:18;:25;;;;;;-1:-1:-1;;;;;7581:54:0;;7419:224::o;768:103::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;833:30:::1;860:1;833:18;:30::i;:::-;768:103::o:0;26457:892::-;26527:16;26581:19;26615:25;26655:22;26680:16;26690:5;26680:9;:16::i;:::-;26655:41;;26711:25;26753:14;-1:-1:-1;;;;;26739:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26739:29:0;;26711:57;;26783:31;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26783:31:0;26834:9;26829:472;26878:14;26863:11;:29;26829:472;;26930:15;26943:1;26930:12;:15::i;:::-;26918:27;;26968:9;:16;;;27009:8;26964:73;27059:14;;-1:-1:-1;;;;;27059:28:0;;27055:111;;27132:14;;;-1:-1:-1;27055:111:0;27209:5;-1:-1:-1;;;;;27188:26:0;:17;-1:-1:-1;;;;;27188:26:0;;27184:102;;27265:1;27239:8;27248:13;;;;;;27239:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;27184:102;26894:3;;26829:472;;;-1:-1:-1;27322:8:0;;26457:892;-1:-1:-1;;;;;;26457:892:0:o;28063:174::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;28176:9:::1;;28164:8;28148:13;6895:12:::0;;6827:7;6879:13;:28;;6774:170;28148:13:::1;:24;;;;:::i;:::-;:37;;28140:59;;;;-1:-1:-1::0;;;28140:59:0::1;;;;;;;:::i;:::-;28210:19;28216:2;28220:8;28210:5;:19::i;10567:104::-:0;10623:13;10656:7;10649:14;;;;;:::i;24578:1871::-;24713:16;24780:4;24771:5;:13;24767:45;;24793:19;;-1:-1:-1;;;24793:19:0;;;;;;;;;;;24767:45;24827:19;24861:17;24881:14;6718:7;6745:13;;6671:95;24881:14;24861:34;-1:-1:-1;25022:9:0;25015:4;:16;25011:73;;;25059:9;25052:16;;25011:73;25098:25;25126:16;25136:5;25126:9;:16::i;:::-;25098:44;;25169:4;25161:5;:12;25157:278;;;25216:12;;;25251:31;;;25247:111;;;25327:11;25307:31;;25247:111;25175:198;25157:278;;;-1:-1:-1;25418:1:0;25157:278;25449:25;25491:17;-1:-1:-1;;;;;25477:32:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25477:32:0;;25449:60;;25528:17;25549:1;25528:22;25524:78;;25578:8;-1:-1:-1;25571:15:0;;-1:-1:-1;;;25571:15:0;25524:78;25616:31;25650:26;25670:5;25650:19;:26::i;:::-;25616:60;;25691:25;25736:9;:16;;;25731:92;;-1:-1:-1;25793:14:0;;25731:92;25854:5;25837:478;25866:4;25861:1;:9;;:45;;;;;25889:17;25874:11;:32;;25861:45;25837:478;;;25944:15;25957:1;25944:12;:15::i;:::-;25932:27;;25982:9;:16;;;26023:8;25978:73;26073:14;;-1:-1:-1;;;;;26073:28:0;;26069:111;;26146:14;;;-1:-1:-1;26069:111:0;26223:5;-1:-1:-1;;;;;26202:26:0;:17;-1:-1:-1;;;;;26202:26:0;;26198:102;;26279:1;26253:8;26262:13;;;;;;26253:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;26198:102;25908:3;;25837:478;;;-1:-1:-1;;;26357:29:0;;;-1:-1:-1;26364:8:0;;-1:-1:-1;;24578:1871:0;;;;;;:::o;28245:294::-;28341:9;;28329:8;28313:13;6895:12;;6827:7;6879:13;:28;;6774:170;28313:13;:24;;;;:::i;:::-;:37;;28305:59;;;;-1:-1:-1;;;28305:59:0;;;;;;;:::i;:::-;28403:8;28396:4;;:15;;;;:::i;:::-;28383:9;:28;;28375:59;;;;-1:-1:-1;;;28375:59:0;;14469:2:1;28375:59:0;;;14451:21:1;14508:2;14488:18;;;14481:30;-1:-1:-1;;;14527:18:1;;;14520:48;14585:18;;28375:59:0;14267:342:1;28375:59:0;618:6;;28445:48;;-1:-1:-1;;;;;618:6:0;;;;28471:21;28445:48;;;;;;;;;28471:21;618:6;28445:48;;;;;;;;;;;;;;;;;;;;;28504:27;28510:10;28522:8;28504:5;:27::i;11907:306::-;22084:10;-1:-1:-1;;;;;12006:31:0;;;12002:61;;12046:17;;-1:-1:-1;;;12046:17:0;;;;;;;;;;;12002:61;22084:10;12074:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;12074:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;12074:60:0;;;;;;;;;;12150:55;;540:41:1;;;12074:49:0;;22084:10;12150:55;;513:18:1;12150:55:0;;;;;;;11907:306;;:::o;12586:399::-;12753:31;12766:4;12772:2;12776:7;12753:12;:31::i;:::-;-1:-1:-1;;;;;12799:14:0;;;:19;12795:183;;12838:56;12869:4;12875:2;12879:7;12888:5;12838:30;:56::i;:::-;12833:145;;12922:40;;-1:-1:-1;;;12922:40:0;;;;;;;;;;;12833:145;12586:399;;;;:::o;23674:420::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6718:7:0;6745:13;23859:7;:25;23826:103;;23908:9;23674:420;-1:-1:-1;;23674:420:0:o;23826:103::-;23951:21;23964:7;23951:12;:21::i;:::-;23939:33;;23987:9;:16;;;23983:65;;;24027:9;23674:420;-1:-1:-1;;23674:420:0:o;23983:65::-;24065:21;24078:7;24065:12;:21::i;10679:316::-;10752:13;10783:16;10791:7;10783;:16::i;:::-;10778:59;;10808:29;;-1:-1:-1;;;10808:29:0;;;;;;;;;;;10778:59;10848:21;10872:10;:8;:10::i;:::-;10848:34;;10906:7;10900:21;10925:1;10900:26;:87;;;;;;;;;;;;;;;;;10953:7;10962:18;10972:7;10962:9;:18::i;:::-;10936:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10893:94;10679:316;-1:-1:-1;;;10679:316:0:o;29319:98::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;29389:8:::1;:20:::0;29319:98::o;12221:164::-;-1:-1:-1;;;;;12342:25:0;;;12318:4;12342:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12221:164::o;879:201::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;968:22:0;::::1;960:73;;;::::0;-1:-1:-1;;;960:73:0;;15291:2:1;960:73:0::1;::::0;::::1;15273:21:1::0;15330:2;15310:18;;;15303:30;15369:34;15349:18;;;15342:62;-1:-1:-1;;;15420:18:1;;;15413:36;15466:19;;960:73:0::1;15089:402:1::0;960:73:0::1;1044:28;1063:8;1044:18;:28::i;7211:200::-:0;7296:4;-1:-1:-1;;;;;;;;;7320:25:0;;;;:54;;-1:-1:-1;;;;;;;;;;7349:25:0;;;7320:54;:83;;;-1:-1:-1;;;;;;;;7378:25:0;-1:-1:-1;;;7378:25:0;;7211:200::o;12993:207::-;13050:4;13127:13;;13117:7;:23;13087:105;;;;-1:-1:-1;;13144:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;13144:43:0;:48;;12993:207::o;8500:626::-;8567:7;8602;8702:13;;8695:4;:20;8691:368;;;8740:14;8757:23;;;:17;:23;;;;;;;-1:-1:-1;;;8807:23:0;;:28;;8803:237;;8864:113;8871:6;8881:1;8871:11;8864:113;;-1:-1:-1;;;8942:6:0;8924:25;;;;:17;:25;;;;;;8864:113;;8803:237;8717:342;8691:368;9087:31;;-1:-1:-1;;;9087:31:0;;;;;;;;;;;1613:190;1738:4;1791;1762:25;1775:5;1782:4;1762:12;:25::i;:::-;:33;;1613:190;-1:-1:-1;;;;1613:190:0:o;13964:917::-;14029:20;14052:13;-1:-1:-1;;;;;14080:16:0;;14076:48;;14105:19;;-1:-1:-1;;;14105:19:0;;;;;;;;;;;14076:48;14139:8;14151:1;14139:13;14135:44;;14161:18;;-1:-1:-1;;;14161:18:0;;;;;;;;;;;14135:44;-1:-1:-1;;;;;14287:22:0;;;;;;:18;:22;;5321:2;14287:22;;:70;;14325:31;14313:44;;14287:70;;;10260:11;10236:22;10232:40;-1:-1:-1;11265:15:0;;11240:23;11236:45;10229:51;10219:62;14372:31;;;;:17;:31;;;;;:173;14390:12;14619:23;;;14657:101;14684:35;;14709:9;;;;;-1:-1:-1;;;;;14684:35:0;;;14701:1;;14684:35;;14701:1;;14684:35;14753:3;14743:7;:13;14657:101;;14772:13;:19;-1:-1:-1;12393:185:0;;;:::o;18399:1602::-;18479:27;18509;18528:7;18509:18;:27::i;:::-;18479:57;-1:-1:-1;18479:57:0;18547:12;;18667:28;18687:7;15921:27;16097:21;;;16047:15;16139:4;16132:36;16221:4;16205:21;;16259:26;;16205:21;;15826:477;18667:28;18610:85;;;;18710:13;18706:224;;;18745:62;18764:15;18781:4;22084:10;18787:19;21997:105;18745:62;18740:178;;18831:43;18848:4;22084:10;12221:164;:::i;18831:43::-;18826:92;;18883:35;;-1:-1:-1;;;18883:35:0;;;;;;;;;;;18826:92;19029:15;19026:83;;;19092:1;19071:19;19064:30;19026:83;-1:-1:-1;;;;;19155:24:0;;;;;;:18;:24;;;;;:59;;19183:31;19155:59;;;10260:11;10236:22;10232:40;10219:62;-1:-1:-1;;;10219:62:0;19229:26;;;;:17;:26;;;;;:203;;;;-1:-1:-1;;;19451:46:0;;:51;;19447:363;;19555:1;19545:11;;19523:19;19579:30;;;:17;:30;;;;;;:35;;19575:220;;19658:13;;19643:11;:28;19639:137;;19700:30;;;;:17;:30;;;;;:52;;;19639:137;19504:306;19447:363;19836:35;;19863:7;;19859:1;;-1:-1:-1;;;;;19836:35:0;;;;;19859:1;;19836:35;-1:-1:-1;;19968:12:0;:14;;;;;;-1:-1:-1;;;;18399:1602:0:o;1088:191::-;1181:6;;;-1:-1:-1;;;;;1198:17:0;;;-1:-1:-1;;;;;;1198:17:0;;;;;;;1231:40;;1181:6;;;1198:17;1181:6;;1231:40;;1162:16;;1231:40;1151:128;1088:191;:::o;9505:153::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9625:24:0;;;;:17;:24;;;;;;9606:44;;:18;:44::i;20009:716::-;20193:88;;-1:-1:-1;;;20193:88:0;;20172:4;;-1:-1:-1;;;;;20193:45:0;;;;;:88;;22084:10;;20260:4;;20266:7;;20275:5;;20193:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20193:88:0;;;;;;;;-1:-1:-1;;20193:88:0;;;;;;;;;;;;:::i;:::-;;;20189:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20476:6;:13;20493:1;20476:18;20472:235;;20522:40;;-1:-1:-1;;;20522:40:0;;;;;;;;;;;20472:235;20665:6;20659:13;20650:6;20646:2;20642:15;20635:38;20189:529;-1:-1:-1;;;;;;20352:64:0;-1:-1:-1;;;20352:64:0;;-1:-1:-1;20189:529:0;20009:716;;;;;;:::o;9862:158::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9965:47:0;9984:27;10003:7;9984:18;:27::i;:::-;9965:18;:47::i;29425:100::-;29477:13;29510:7;29503:14;;;;;:::i;22110:689::-;22238:4;22232:11;;22245:3;22228:21;;22263:17;;;;22387:11;;;22357:5;22433:2;22447;22437:13;;22429:22;22387:11;22416:36;22488:2;22478:13;;22322:352;22507:4;22322:352;;;22603:1;22598:3;22594:11;22587:18;;22654:2;22648:4;22644:13;22640:2;22636:22;22631:3;22623:36;22549:2;22539:13;;22322:352;;;-1:-1:-1;22702:13:0;;;-1:-1:-1;;22736:12:0;;;22762:19;;;22736:12;22110:689;-1:-1:-1;22110:689:0:o;1811:517::-;1894:7;1937:4;1894:7;1952:339;1976:5;:12;1972:1;:16;1952:339;;;2010:20;2033:5;2039:1;2033:8;;;;;;;;:::i;:::-;;;;;;;2010:31;;2076:12;2060;:28;2056:224;;2404:13;2454:15;;;2490:4;2483:15;;;2537:4;2521:21;;2109:57;;2056:224;;;2404:13;2454:15;;;2490:4;2483:15;;;2537:4;2521:21;;2207:57;;2056:224;-1:-1:-1;1990:3:0;;;;:::i;:::-;;;;1952:339;;9134:363;-1:-1:-1;;;;;;;;;;;;;9244:41:0;;;;5557:3;9330:32;;;-1:-1:-1;;;;;9296:67:0;-1:-1:-1;;;9296:67:0;-1:-1:-1;;;9393:23:0;;:28;;-1:-1:-1;;;9374:47:0;;;;5797:3;9461:27;;;;-1:-1:-1;;;9432:57:0;-1:-1:-1;9134:363:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:248::-;2756:6;2764;2817:2;2805:9;2796:7;2792:23;2788:32;2785:52;;;2833:1;2830;2823:12;2785:52;-1:-1:-1;;2856:23:1;;;2926:2;2911:18;;;2898:32;;-1:-1:-1;2688:248:1:o;3220:127::-;3281:10;3276:3;3272:20;3269:1;3262:31;3312:4;3309:1;3302:15;3336:4;3333:1;3326:15;3352:253;3424:2;3418:9;3466:4;3454:17;;-1:-1:-1;;;;;3486:34:1;;3522:22;;;3483:62;3480:88;;;3548:18;;:::i;:::-;3584:2;3577:22;3352:253;:::o;3610:275::-;3681:2;3675:9;3746:2;3727:13;;-1:-1:-1;;3723:27:1;3711:40;;-1:-1:-1;;;;;3766:34:1;;3802:22;;;3763:62;3760:88;;;3828:18;;:::i;:::-;3864:2;3857:22;3610:275;;-1:-1:-1;3610:275:1:o;3890:183::-;3950:4;-1:-1:-1;;;;;3975:6:1;3972:30;3969:56;;;4005:18;;:::i;:::-;-1:-1:-1;4050:1:1;4046:14;4062:4;4042:25;;3890:183::o;4078:1341::-;4160:6;4191:2;4234;4222:9;4213:7;4209:23;4205:32;4202:52;;;4250:1;4247;4240:12;4202:52;4290:9;4277:23;-1:-1:-1;;;;;4360:2:1;4352:6;4349:14;4346:34;;;4376:1;4373;4366:12;4346:34;4399:22;;;;4455:4;4437:16;;;4433:27;4430:47;;;4473:1;4470;4463:12;4430:47;4499:22;;:::i;:::-;4557:2;4544:16;4537:5;4530:31;4593;4620:2;4616;4612:11;4593:31;:::i;:::-;4588:2;4581:5;4577:14;4570:55;4678:2;4674;4670:11;4657:25;4652:2;4645:5;4641:14;4634:49;4729:2;4725;4721:11;4708:25;4758:2;4748:8;4745:16;4742:36;;;4774:1;4771;4764:12;4742:36;4805:8;4801:2;4797:17;4787:27;;;4852:7;4845:4;4841:2;4837:13;4833:27;4823:55;;4874:1;4871;4864:12;4823:55;4910:2;4897:16;4887:26;;4933:60;4949:43;4989:2;4949:43;:::i;:::-;4933:60;:::i;:::-;5027:15;;;5109:1;5105:10;;;;5097:19;;5093:28;;;5058:12;;;;5133:19;;;5130:39;;;5165:1;5162;5155:12;5130:39;5189:11;;;;5209:142;5225:6;5220:3;5217:15;5209:142;;;5291:17;;5279:30;;5242:12;;;;5329;;;;5209:142;;;5378:2;5367:14;;5360:29;-1:-1:-1;5371:5:1;4078:1341;-1:-1:-1;;;;;;4078:1341:1:o;5424:407::-;5489:5;-1:-1:-1;;;;;5515:6:1;5512:30;5509:56;;;5545:18;;:::i;:::-;5583:57;5628:2;5607:15;;-1:-1:-1;;5603:29:1;5634:4;5599:40;5583:57;:::i;:::-;5574:66;;5663:6;5656:5;5649:21;5703:3;5694:6;5689:3;5685:16;5682:25;5679:45;;;5720:1;5717;5710:12;5679:45;5769:6;5764:3;5757:4;5750:5;5746:16;5733:43;5823:1;5816:4;5807:6;5800:5;5796:18;5792:29;5785:40;5424:407;;;;;:::o;5836:451::-;5905:6;5958:2;5946:9;5937:7;5933:23;5929:32;5926:52;;;5974:1;5971;5964:12;5926:52;6014:9;6001:23;-1:-1:-1;;;;;6039:6:1;6036:30;6033:50;;;6079:1;6076;6069:12;6033:50;6102:22;;6155:4;6147:13;;6143:27;-1:-1:-1;6133:55:1;;6184:1;6181;6174:12;6133:55;6207:74;6273:7;6268:2;6255:16;6250:2;6246;6242:11;6207:74;:::i;6292:891::-;6376:6;6407:2;6450;6438:9;6429:7;6425:23;6421:32;6418:52;;;6466:1;6463;6456:12;6418:52;6506:9;6493:23;-1:-1:-1;;;;;6531:6:1;6528:30;6525:50;;;6571:1;6568;6561:12;6525:50;6594:22;;6647:4;6639:13;;6635:27;-1:-1:-1;6625:55:1;;6676:1;6673;6666:12;6625:55;6712:2;6699:16;6735:60;6751:43;6791:2;6751:43;:::i;6735:60::-;6829:15;;;6911:1;6907:10;;;;6899:19;;6895:28;;;6860:12;;;;6935:19;;;6932:39;;;6967:1;6964;6957:12;6932:39;6991:11;;;;7011:142;7027:6;7022:3;7019:15;7011:142;;;7093:17;;7081:30;;7044:12;;;;7131;;;;7011:142;;;7172:5;6292:891;-1:-1:-1;;;;;;;6292:891:1:o;7188:349::-;7272:12;;-1:-1:-1;;;;;7268:38:1;7256:51;;7360:4;7349:16;;;7343:23;-1:-1:-1;;;;;7339:48:1;7323:14;;;7316:72;7451:4;7440:16;;;7434:23;7427:31;7420:39;7404:14;;;7397:63;7513:4;7502:16;;;7496:23;7521:8;7492:38;7476:14;;7469:62;7188:349::o;7542:722::-;7775:2;7827:21;;;7897:13;;7800:18;;;7919:22;;;7746:4;;7775:2;7998:15;;;;7972:2;7957:18;;;7746:4;8041:197;8055:6;8052:1;8049:13;8041:197;;;8104:52;8152:3;8143:6;8137:13;8104:52;:::i;:::-;8213:15;;;;8185:4;8176:14;;;;;8077:1;8070:9;8041:197;;8269:186;8328:6;8381:2;8369:9;8360:7;8356:23;8352:32;8349:52;;;8397:1;8394;8387:12;8349:52;8420:29;8439:9;8420:29;:::i;8460:632::-;8631:2;8683:21;;;8753:13;;8656:18;;;8775:22;;;8602:4;;8631:2;8854:15;;;;8828:2;8813:18;;;8602:4;8897:169;8911:6;8908:1;8905:13;8897:169;;;8972:13;;8960:26;;9041:15;;;;9006:12;;;;8933:1;8926:9;8897:169;;9097:322;9174:6;9182;9190;9243:2;9231:9;9222:7;9218:23;9214:32;9211:52;;;9259:1;9256;9249:12;9211:52;9282:29;9301:9;9282:29;:::i;:::-;9272:39;9358:2;9343:18;;9330:32;;-1:-1:-1;9409:2:1;9394:18;;;9381:32;;9097:322;-1:-1:-1;;;9097:322:1:o;9424:347::-;9489:6;9497;9550:2;9538:9;9529:7;9525:23;9521:32;9518:52;;;9566:1;9563;9556:12;9518:52;9589:29;9608:9;9589:29;:::i;:::-;9579:39;;9668:2;9657:9;9653:18;9640:32;9715:5;9708:13;9701:21;9694:5;9691:32;9681:60;;9737:1;9734;9727:12;9681:60;9760:5;9750:15;;;9424:347;;;;;:::o;9776:667::-;9871:6;9879;9887;9895;9948:3;9936:9;9927:7;9923:23;9919:33;9916:53;;;9965:1;9962;9955:12;9916:53;9988:29;10007:9;9988:29;:::i;:::-;9978:39;;10036:38;10070:2;10059:9;10055:18;10036:38;:::i;:::-;10026:48;;10121:2;10110:9;10106:18;10093:32;10083:42;;10176:2;10165:9;10161:18;10148:32;-1:-1:-1;;;;;10195:6:1;10192:30;10189:50;;;10235:1;10232;10225:12;10189:50;10258:22;;10311:4;10303:13;;10299:27;-1:-1:-1;10289:55:1;;10340:1;10337;10330:12;10289:55;10363:74;10429:7;10424:2;10411:16;10406:2;10402;10398:11;10363:74;:::i;:::-;10353:84;;;9776:667;;;;;;;:::o;10448:266::-;10644:3;10629:19;;10657:51;10633:9;10690:6;10657:51;:::i;10904:260::-;10972:6;10980;11033:2;11021:9;11012:7;11008:23;11004:32;11001:52;;;11049:1;11046;11039:12;11001:52;11072:29;11091:9;11072:29;:::i;:::-;11062:39;;11120:38;11154:2;11143:9;11139:18;11120:38;:::i;:::-;11110:48;;10904:260;;;;;:::o;11351:380::-;11430:1;11426:12;;;;11473;;;11494:61;;11548:4;11540:6;11536:17;11526:27;;11494:61;11601:2;11593:6;11590:14;11570:18;11567:38;11564:161;;11647:10;11642:3;11638:20;11635:1;11628:31;11682:4;11679:1;11672:15;11710:4;11707:1;11700:15;11564:161;;11351:380;;;:::o;11736:127::-;11797:10;11792:3;11788:20;11785:1;11778:31;11828:4;11825:1;11818:15;11852:4;11849:1;11842:15;11868:168;11908:7;11974:1;11970;11966:6;11962:14;11959:1;11956:21;11951:1;11944:9;11937:17;11933:45;11930:71;;;11981:18;;:::i;:::-;-1:-1:-1;12021:9:1;;11868:168::o;12041:217::-;12081:1;12107;12097:132;;12151:10;12146:3;12142:20;12139:1;12132:31;12186:4;12183:1;12176:15;12214:4;12211:1;12204:15;12097:132;-1:-1:-1;12243:9:1;;12041:217::o;12263:128::-;12303:3;12334:1;12330:6;12327:1;12324:13;12321:39;;;12340:18;;:::i;:::-;-1:-1:-1;12376:9:1;;12263:128::o;12396:332::-;12598:2;12580:21;;;12637:1;12617:18;;;12610:29;-1:-1:-1;;;12670:2:1;12655:18;;12648:39;12719:2;12704:18;;12396:332::o;13774:356::-;13976:2;13958:21;;;13995:18;;;13988:30;14054:34;14049:2;14034:18;;14027:62;14121:2;14106:18;;13774:356::o;14135:127::-;14196:10;14191:3;14187:20;14184:1;14177:31;14227:4;14224:1;14217:15;14251:4;14248:1;14241:15;14614:470;14793:3;14831:6;14825:13;14847:53;14893:6;14888:3;14881:4;14873:6;14869:17;14847:53;:::i;:::-;14963:13;;14922:16;;;;14985:57;14963:13;14922:16;15019:4;15007:17;;14985:57;:::i;:::-;15058:20;;14614:470;-1:-1:-1;;;;14614:470:1:o;15496:489::-;-1:-1:-1;;;;;15765:15:1;;;15747:34;;15817:15;;15812:2;15797:18;;15790:43;15864:2;15849:18;;15842:34;;;15912:3;15907:2;15892:18;;15885:31;;;15690:4;;15933:46;;15959:19;;15951:6;15933:46;:::i;:::-;15925:54;15496:489;-1:-1:-1;;;;;;15496:489:1:o;15990:249::-;16059:6;16112:2;16100:9;16091:7;16087:23;16083:32;16080:52;;;16128:1;16125;16118:12;16080:52;16160:9;16154:16;16179:30;16203:5;16179:30;:::i;16244:135::-;16283:3;16304:17;;;16301:43;;16324:18;;:::i;:::-;-1:-1:-1;16371:1:1;16360:13;;16244:135::o

Swarm Source

ipfs://acd219bd523f60015ad634eaebe2c4c3042e6b501717fa679339ab0a89fae346
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.