ETH Price: $3,332.66 (+2.08%)
Gas: 5 Gwei

Token

VektorX (VX2)
 

Overview

Max Total Supply

1,000 VX2

Holders

206

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
5 VX2
0x490ac3d62b3e71621687724ad894b2f15eee1167
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:
VektorX

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
Yes with 20000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

//SPDX-License-Identifier: Unlicense

pragma solidity ^0.8.11;

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 IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error ApproveToCaller();

    error ApprovalToCurrentOwner();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        uint64 startTimestamp;    
        bool burned;
    }

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

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

contract ERC721A is IERC721A {
    // Mask of an entry in packed address data.
    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 _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 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    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 { // Cast aux without masking.
            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 not burned.
                    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;
    }

    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 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 _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    function approve(address to, uint256 tokenId) public override {
        address owner = address(uint160(_packedOwnershipOf(tokenId)));
        if (to == owner) revert ApprovalToCurrentOwner();

        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 transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    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 {
        _transfer(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 && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

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

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) 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] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.code.length != 0) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    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] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
            isApprovedForAll(from, _msgSenderERC721A()) ||
            getApproved(tokenId) == _msgSenderERC721A());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        delete _tokenApprovals[tokenId];

        unchecked {
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            _packedOwnerships[tokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;
            
            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));

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
                isApprovedForAll(from, _msgSenderERC721A()) ||
                getApproved(tokenId) == _msgSenderERC721A());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        delete _tokenApprovals[tokenId];

        unchecked {

            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            _packedOwnerships[tokenId] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED | 
                BITMASK_NEXT_INITIALIZED;

            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 _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)
            } { // Body of the for loop.
                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();
            // Set `start = max(start, _startTokenId())`.
            if (start < _startTokenId()) {
                start = _startTokenId();
            }
            // Set `stop = min(stop, stopLimit)`.
            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;
        }
    }
}

library EnumerableSet {

    struct Set {
        bytes32[] _values;

        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);

            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastValue;
                set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex
            }

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        assembly {
            result := store
        }

        return result;
    }
}


contract VektorX is ERC721AQueryable, ERC721ABurnable, Ownable {
  using EnumerableSet for EnumerableSet.UintSet;

  event ForceMoon(uint256 phase);

  uint256 public constant MAX_SUPPLY = 1000;

  uint256 public maxByWallet = 5;
  mapping(address => uint256) public mintedByWallet;

  // 0:close | 1:open
  bool public saleState;
  string public baseURI;
  string public uriSuffix;

  constructor(
    string memory name,
    string memory symbol,
    string memory baseURI_
  ) ERC721A(name, symbol) {
    baseURI = baseURI_;
    uriSuffix = "";
  }

  function mint(uint256 amount) external {
    require(msg.sender == tx.origin, "not allowed");
    require(saleState, "Sale is closed!");
    require(_totalMinted() + amount <= MAX_SUPPLY, "Exceed MAX_SUPPLY");
    require(amount > 0, "Amount can't be 0");
    require(amount + mintedByWallet[msg.sender] <= maxByWallet, "Exceed maxByWallet");

    mintedByWallet[msg.sender] += amount;

    _safeMint(msg.sender, amount);
  }

  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

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

  function setBaseURI(string memory newBaseURI, string memory newUriSuffix) external onlyOwner {
    baseURI = newBaseURI;
    uriSuffix = newUriSuffix;
  }

  function setSaleState(bool newSaleState) external onlyOwner {
    saleState = newSaleState;
  }

  function setMaxByWallet(uint256 newMaxByWallet) external onlyOwner {
    maxByWallet = newMaxByWallet;
  }

  function alphaMint(address[] calldata addresses, uint256[] calldata count) external onlyOwner {
    require(!saleState, "sale is open!");
    require(addresses.length == count.length, "mismatching lengths!");

    for (uint256 i; i < addresses.length; i++) {
      _safeMint(addresses[i], count[i]);
    }

    require(_totalMinted() <= MAX_SUPPLY, "Exceed MAX_SUPPLY");
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"baseURI_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":false,"internalType":"uint256","name":"phase","type":"uint256"}],"name":"ForceMoon","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"count","type":"uint256[]"}],"name":"alphaMint","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":[{"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":"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":"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":[{"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":"maxByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"mintedByWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"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":[],"name":"saleState","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"newBaseURI","type":"string"},{"internalType":"string","name":"newUriSuffix","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxByWallet","type":"uint256"}],"name":"setMaxByWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newSaleState","type":"bool"}],"name":"setSaleState","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"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

608060405260056009553480156200001657600080fd5b50604051620031b1380380620031b18339810160408190526200003991620001c1565b82826002620000498382620002e1565b506003620000588282620002e1565b50506001600055506200006b33620000a2565b600c620000798282620002e1565b50604080516020810190915260008152600d90620000989082620002e1565b50505050620003ad565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200011c57600080fd5b81516001600160401b0380821115620001395762000139620000f4565b604051601f8301601f19908116603f01168101908282118183101715620001645762000164620000f4565b816040528381526020925086838588010111156200018157600080fd5b600091505b83821015620001a5578582018301518183018401529082019062000186565b83821115620001b75760008385830101525b9695505050505050565b600080600060608486031215620001d757600080fd5b83516001600160401b0380821115620001ef57600080fd5b620001fd878388016200010a565b945060208601519150808211156200021457600080fd5b62000222878388016200010a565b935060408601519150808211156200023957600080fd5b5062000248868287016200010a565b9150509250925092565b600181811c908216806200026757607f821691505b6020821081036200028857634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002dc57600081815260208120601f850160051c81016020861015620002b75750805b601f850160051c820191505b81811015620002d857828155600101620002c3565b5050505b505050565b81516001600160401b03811115620002fd57620002fd620000f4565b62000315816200030e845462000252565b846200028e565b602080601f8311600181146200034d5760008415620003345750858301515b600019600386901b1c1916600185901b178555620002d8565b600085815260208120601f198616915b828110156200037e578886015182559484019460019091019084016200035d565b50858210156200039d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b612df480620003bd6000396000f3fe608060405234801561001057600080fd5b506004361061020b5760003560e01c80636790a9de1161012a578063a0712d68116100bd578063c4e370951161008c578063e985e9c511610071578063e985e9c5146104aa578063f09a03c0146104f3578063f2fde38b1461050657600080fd5b8063c4e3709514610484578063c87b56dd1461049757600080fd5b8063a0712d681461042b578063a22cb4651461043e578063b88d4fde14610451578063c23dc68f1461046457600080fd5b80638462151c116100f95780638462151c146103d25780638da5cb5b146103f257806395d89b411461041057806399a2557a1461041857600080fd5b80636790a9de1461039c5780636c0360eb146103af57806370a08231146103b7578063715018a6146103ca57600080fd5b806332cb6b0c116101a25780635503a0e8116101715780635503a0e8146103545780635bbb21771461035c578063603f4d521461037c5780636352211e1461038957600080fd5b806332cb6b0c1461031c57806334ecc70a1461032557806342842e0e1461032e57806342966c681461034157600080fd5b80630d758111116101de5780630d7581111461029a57806318160ddd146102c857806323b872dd146102f65780632e0674211461030957600080fd5b806301ffc9a71461021057806306fdde0314610238578063081812fc1461024d578063095ea7b314610285575b600080fd5b61022361021e366004612457565b610519565b60405190151581526020015b60405180910390f35b6102406105fe565b60405161022f91906124ea565b61026061025b3660046124fd565b610690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b61029861029336600461253f565b6106fa565b005b6102ba6102a8366004612569565b600a6020526000908152604090205481565b60405190815260200161022f565b600154600054037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016102ba565b610298610304366004612584565b610874565b6102986103173660046124fd565b610884565b6102ba6103e881565b6102ba60095481565b61029861033c366004612584565b61090f565b61029861034f3660046124fd565b61092a565b610240610938565b61036f61036a36600461263e565b6109c6565b60405161022f91906126e4565b600b546102239060ff1681565b6102606103973660046124fd565b610aab565b6102986103aa3660046127f2565b610ab6565b610240610b50565b6102ba6103c5366004612569565b610b5d565b610298610bdf565b6103e56103e0366004612569565b610c6c565b60405161022f9190612856565b60085473ffffffffffffffffffffffffffffffffffffffff16610260565b610240610d90565b6103e561042636600461288e565b610d9f565b6102986104393660046124fd565b610f67565b61029861044c3660046128d1565b6111fb565b61029861045f366004612904565b6112e1565b6104776104723660046124fd565b611351565b60405161022f9190612980565b6102986104923660046129c3565b6113c6565b6102406104a53660046124fd565b611478565b6102236104b83660046129de565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b610298610501366004612a54565b611514565b610298610514366004612569565b611767565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105ac57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105f857507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606002805461060d90612ac0565b80601f016020809104026020016040519081016040528092919081815260200182805461063990612ac0565b80156106865780601f1061065b57610100808354040283529160200191610686565b820191906000526020600020905b81548152906001019060200180831161066957829003601f168201915b5050505050905090565b600061069b82611894565b6106d1576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610705826118e2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361076c576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8216146107f35773ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832033845290915290205460ff166107f3576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61087f8383836119a1565b505050565b60085473ffffffffffffffffffffffffffffffffffffffff16331461090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600955565b61087f838383604051806020016040528060008152506112e1565b610935816001611c76565b50565b600d805461094590612ac0565b80601f016020809104026020016040519081016040528092919081815260200182805461097190612ac0565b80156109be5780601f10610993576101008083540402835291602001916109be565b820191906000526020600020905b8154815290600101906020018083116109a157829003601f168201915b505050505081565b805160609060008167ffffffffffffffff8111156109e6576109e66125c0565b604051908082528060200260200182016040528015610a4f57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610a045790505b50905060005b828114610aa357610a7e858281518110610a7157610a71612b13565b6020026020010151611351565b828281518110610a9057610a90612b13565b6020908102919091010152600101610a55565b509392505050565b60006105f8826118e2565b60085473ffffffffffffffffffffffffffffffffffffffff163314610b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b600c610b438382612b90565b50600d61087f8282612b90565b600c805461094590612ac0565b600073ffffffffffffffffffffffffffffffffffffffff8216610bac576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205467ffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff163314610c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b610c6a6000611e90565b565b60606000806000610c7c85610b5d565b905060008167ffffffffffffffff811115610c9957610c996125c0565b604051908082528060200260200182016040528015610cc2578160200160208202803683370190505b50604080516060810182526000808252602082018190529181019190915290915060015b838614610d8457610cf681611f07565b91508160400151610d7c57815173ffffffffffffffffffffffffffffffffffffffff1615610d2357815194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d7c5780838780600101985081518110610d6f57610d6f612b13565b6020026020010181815250505b600101610ce6565b50909695505050505050565b60606003805461060d90612ac0565b6060818310610dda576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610de660005490565b90506001851015610df657600194505b80841115610e02578093505b6000610e0d87610b5d565b905084861015610e2c5785850381811015610e26578091505b50610e30565b5060005b60008167ffffffffffffffff811115610e4b57610e4b6125c0565b604051908082528060200260200182016040528015610e74578160200160208202803683370190505b50905081600003610e8a579350610f6092505050565b6000610e9588611351565b905060008160400151610ea6575080515b885b888114158015610eb85750848714155b15610f5457610ec681611f07565b92508260400151610f4c57825173ffffffffffffffffffffffffffffffffffffffff1615610ef357825191505b8a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f4c5780848880600101995081518110610f3f57610f3f612b13565b6020026020010181815250505b600101610ea8565b50505092835250909150505b9392505050565b333214610fd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f7765640000000000000000000000000000000000000000006044820152606401610901565b600b5460ff1661103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f53616c6520697320636c6f7365642100000000000000000000000000000000006044820152606401610901565b6103e88161106b6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6110759190612cd9565b11156110dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f457863656564204d41585f535550504c590000000000000000000000000000006044820152606401610901565b60008111611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f416d6f756e742063616e277420626520300000000000000000000000000000006044820152606401610901565b600954336000908152600a60205260409020546111649083612cd9565b11156111cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f457863656564206d6178427957616c6c657400000000000000000000000000006044820152606401610901565b336000908152600a6020526040812080548392906111eb908490612cd9565b9091555061093590503382611f98565b3373ffffffffffffffffffffffffffffffffffffffff83160361124a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112ec8484846119a1565b73ffffffffffffffffffffffffffffffffffffffff83163b1561134b5761131584848484611fb6565b61134b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281019290925290600183108061139757506000548310155b156113a25792915050565b6113ab83611f07565b90508060400151156113bd5792915050565b610f608361212f565b60085473ffffffffffffffffffffffffffffffffffffffff163314611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b606061148382611894565b6114b9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114c36121b9565b905080516000036114e35760405180602001604052806000815250610f60565b806114ed846121c8565b6040516020016114fe929190612cf1565b6040516020818303038152906040529392505050565b60085473ffffffffffffffffffffffffffffffffffffffff163314611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b600b5460ff1615611602576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f73616c65206973206f70656e21000000000000000000000000000000000000006044820152606401610901565b82811461166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6d69736d61746368696e67206c656e67746873210000000000000000000000006044820152606401610901565b60005b838110156116d0576116be85858381811061168b5761168b612b13565b90506020020160208101906116a09190612569565b8484848181106116b2576116b2612b13565b90506020020135611f98565b806116c881612d20565b91505061166e565b506103e86116ff6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b111561134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f457863656564204d41585f535550504c590000000000000000000000000000006044820152606401610901565b60085473ffffffffffffffffffffffffffffffffffffffff1633146117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b73ffffffffffffffffffffffffffffffffffffffff811661188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610901565b61093581611e90565b6000816001111580156118a8575060005482105b80156105f85750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b6000818060011161196f5760005481101561196f57600081815260046020526040812054907c01000000000000000000000000000000000000000000000000000000008216900361196d575b80600003610f6057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160008181526004602052604090205461192e565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119ac826118e2565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a13576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff86161480611a69575073ffffffffffffffffffffffffffffffffffffffff8516600090815260076020908152604080832033845290915290205460ff165b80611a91575033611a7984610690565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611aca576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416611b17576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260066020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff88811684526005835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558716835280832080546001019055858352600490915281207c02000000000000000000000000000000000000000000000000000000004260a01b8717811790915583169003611c1457600183016000818152600460205260408120549003611c12576000548114611c125760008181526004602052604090208390555b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b6000611c81836118e2565b9050808215611d435760003373ffffffffffffffffffffffffffffffffffffffff83161480611ce0575073ffffffffffffffffffffffffffffffffffffffff8216600090815260076020908152604080832033845290915290205460ff165b80611d08575033611cf086610690565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611d41576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b600084815260066020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff841683526005825280832080546fffffffffffffffffffffffffffffffff019055868352600490915281207c03000000000000000000000000000000000000000000000000000000004260a01b84171790557c020000000000000000000000000000000000000000000000000000000083169003611e3d57600184016000818152600460205260408120549003611e3b576000548114611e3b5760008181526004602052604090208390555b505b604051849060009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060018054810190555050565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60408051606081018252600080825260208201819052918101919091526000828152600460205260409020546105f8906040805160608101825273ffffffffffffffffffffffffffffffffffffffff8316815260a083901c67ffffffffffffffff1660208201527c010000000000000000000000000000000000000000000000000000000090921615159082015290565b611fb2828260405180602001604052806000815250612235565b5050565b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612011903390899088908890600401612d58565b6020604051808303816000875af192505050801561206a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261206791810190612da1565b60015b6120e1573d808015612098576040519150601f19603f3d011682016040523d82523d6000602084013e61209d565b606091505b5080516000036120d9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050949350505050565b60408051606081018252600080825260208201819052918101919091526105f8612158836118e2565b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff8316815260a083901c67ffffffffffffffff1660208201527c010000000000000000000000000000000000000000000000000000000090921615159082015290565b6060600c805461060d90612ac0565b604080516080810191829052607f0190826030600a8206018353600a90045b801561220557600183039250600a81066030018353600a90046121e7565b508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b60005473ffffffffffffffffffffffffffffffffffffffff8416612285576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036122bf576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b156123c7575b604051829073ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46123776000878480600101955087611fb6565b6123ad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061231f5782600054146123c257600080fd5b612419565b5b60405160018301929073ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082106123c8575b50600090815561134b9085838684565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461093557600080fd5b60006020828403121561246957600080fd5b8135610f6081612429565b60005b8381101561248f578181015183820152602001612477565b8381111561134b5750506000910152565b600081518084526124b8816020860160208601612474565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f6060208301846124a0565b60006020828403121561250f57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60006020828403121561257b57600080fd5b610f6082612516565b60008060006060848603121561259957600080fd5b6125a284612516565b92506125b060208501612516565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612636576126366125c0565b604052919050565b6000602080838503121561265157600080fd5b823567ffffffffffffffff8082111561266957600080fd5b818501915085601f83011261267d57600080fd5b81358181111561268f5761268f6125c0565b8060051b91506126a08483016125ef565b81815291830184019184810190888411156126ba57600080fd5b938501935b838510156126d8578435825293850193908501906126bf565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610d8457612749838551805173ffffffffffffffffffffffffffffffffffffffff16825260208082015167ffffffffffffffff16908301526040908101511515910152565b9284019260609290920191600101612700565b600067ffffffffffffffff831115612776576127766125c0565b6127a760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016125ef565b90508281528383830111156127bb57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e357600080fd5b610f608383356020850161275c565b6000806040838503121561280557600080fd5b823567ffffffffffffffff8082111561281d57600080fd5b612829868387016127d2565b9350602085013591508082111561283f57600080fd5b5061284c858286016127d2565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610d8457835183529284019291840191600101612872565b6000806000606084860312156128a357600080fd5b6128ac84612516565b95602085013595506040909401359392505050565b8035801515811461253a57600080fd5b600080604083850312156128e457600080fd5b6128ed83612516565b91506128fb602084016128c1565b90509250929050565b6000806000806080858703121561291a57600080fd5b61292385612516565b935061293160208601612516565b925060408501359150606085013567ffffffffffffffff81111561295457600080fd5b8501601f8101871361296557600080fd5b6129748782356020840161275c565b91505092959194509250565b815173ffffffffffffffffffffffffffffffffffffffff16815260208083015167ffffffffffffffff1690820152604080830151151590820152606081016105f8565b6000602082840312156129d557600080fd5b610f60826128c1565b600080604083850312156129f157600080fd5b6129fa83612516565b91506128fb60208401612516565b60008083601f840112612a1a57600080fd5b50813567ffffffffffffffff811115612a3257600080fd5b6020830191508360208260051b8501011115612a4d57600080fd5b9250929050565b60008060008060408587031215612a6a57600080fd5b843567ffffffffffffffff80821115612a8257600080fd5b612a8e88838901612a08565b90965094506020870135915080821115612aa757600080fd5b50612ab487828801612a08565b95989497509550505050565b600181811c90821680612ad457607f821691505b602082108103612b0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b601f82111561087f57600081815260208120601f850160051c81016020861015612b695750805b601f850160051c820191505b81811015612b8857828155600101612b75565b505050505050565b815167ffffffffffffffff811115612baa57612baa6125c0565b612bbe81612bb88454612ac0565b84612b42565b602080601f831160018114612c115760008415612bdb5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612b88565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612c5e57888601518255948401946001909101908401612c3f565b5085821015612c9a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612cec57612cec612caa565b500190565b60008351612d03818460208801612474565b835190830190612d17818360208801612474565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d5157612d51612caa565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612d9760808301846124a0565b9695505050505050565b600060208284031215612db357600080fd5b8151610f608161242956fea2646970667358221220f6f59f061444daf13cad06d0ffb38f4ad039cd35e0dce3c919e9aaaaca6cfc0b64736f6c634300080f0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000756656b746f725800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000356583200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d553979674c6566453431545373324c476b48547a7844443451575831326943714c436865633373696e6a566d2f00000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061020b5760003560e01c80636790a9de1161012a578063a0712d68116100bd578063c4e370951161008c578063e985e9c511610071578063e985e9c5146104aa578063f09a03c0146104f3578063f2fde38b1461050657600080fd5b8063c4e3709514610484578063c87b56dd1461049757600080fd5b8063a0712d681461042b578063a22cb4651461043e578063b88d4fde14610451578063c23dc68f1461046457600080fd5b80638462151c116100f95780638462151c146103d25780638da5cb5b146103f257806395d89b411461041057806399a2557a1461041857600080fd5b80636790a9de1461039c5780636c0360eb146103af57806370a08231146103b7578063715018a6146103ca57600080fd5b806332cb6b0c116101a25780635503a0e8116101715780635503a0e8146103545780635bbb21771461035c578063603f4d521461037c5780636352211e1461038957600080fd5b806332cb6b0c1461031c57806334ecc70a1461032557806342842e0e1461032e57806342966c681461034157600080fd5b80630d758111116101de5780630d7581111461029a57806318160ddd146102c857806323b872dd146102f65780632e0674211461030957600080fd5b806301ffc9a71461021057806306fdde0314610238578063081812fc1461024d578063095ea7b314610285575b600080fd5b61022361021e366004612457565b610519565b60405190151581526020015b60405180910390f35b6102406105fe565b60405161022f91906124ea565b61026061025b3660046124fd565b610690565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161022f565b61029861029336600461253f565b6106fa565b005b6102ba6102a8366004612569565b600a6020526000908152604090205481565b60405190815260200161022f565b600154600054037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff016102ba565b610298610304366004612584565b610874565b6102986103173660046124fd565b610884565b6102ba6103e881565b6102ba60095481565b61029861033c366004612584565b61090f565b61029861034f3660046124fd565b61092a565b610240610938565b61036f61036a36600461263e565b6109c6565b60405161022f91906126e4565b600b546102239060ff1681565b6102606103973660046124fd565b610aab565b6102986103aa3660046127f2565b610ab6565b610240610b50565b6102ba6103c5366004612569565b610b5d565b610298610bdf565b6103e56103e0366004612569565b610c6c565b60405161022f9190612856565b60085473ffffffffffffffffffffffffffffffffffffffff16610260565b610240610d90565b6103e561042636600461288e565b610d9f565b6102986104393660046124fd565b610f67565b61029861044c3660046128d1565b6111fb565b61029861045f366004612904565b6112e1565b6104776104723660046124fd565b611351565b60405161022f9190612980565b6102986104923660046129c3565b6113c6565b6102406104a53660046124fd565b611478565b6102236104b83660046129de565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260076020908152604080832093909416825291909152205460ff1690565b610298610501366004612a54565b611514565b610298610514366004612569565b611767565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614806105ac57507f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b806105f857507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60606002805461060d90612ac0565b80601f016020809104026020016040519081016040528092919081815260200182805461063990612ac0565b80156106865780601f1061065b57610100808354040283529160200191610686565b820191906000526020600020905b81548152906001019060200180831161066957829003601f168201915b5050505050905090565b600061069b82611894565b6106d1576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060009081526006602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610705826118e2565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361076c576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff8216146107f35773ffffffffffffffffffffffffffffffffffffffff8116600090815260076020908152604080832033845290915290205460ff166107f3576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526006602052604080822080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff87811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b61087f8383836119a1565b505050565b60085473ffffffffffffffffffffffffffffffffffffffff16331461090a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b600955565b61087f838383604051806020016040528060008152506112e1565b610935816001611c76565b50565b600d805461094590612ac0565b80601f016020809104026020016040519081016040528092919081815260200182805461097190612ac0565b80156109be5780601f10610993576101008083540402835291602001916109be565b820191906000526020600020905b8154815290600101906020018083116109a157829003601f168201915b505050505081565b805160609060008167ffffffffffffffff8111156109e6576109e66125c0565b604051908082528060200260200182016040528015610a4f57816020015b60408051606081018252600080825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181610a045790505b50905060005b828114610aa357610a7e858281518110610a7157610a71612b13565b6020026020010151611351565b828281518110610a9057610a90612b13565b6020908102919091010152600101610a55565b509392505050565b60006105f8826118e2565b60085473ffffffffffffffffffffffffffffffffffffffff163314610b37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b600c610b438382612b90565b50600d61087f8282612b90565b600c805461094590612ac0565b600073ffffffffffffffffffffffffffffffffffffffff8216610bac576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5073ffffffffffffffffffffffffffffffffffffffff1660009081526005602052604090205467ffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff163314610c60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b610c6a6000611e90565b565b60606000806000610c7c85610b5d565b905060008167ffffffffffffffff811115610c9957610c996125c0565b604051908082528060200260200182016040528015610cc2578160200160208202803683370190505b50604080516060810182526000808252602082018190529181019190915290915060015b838614610d8457610cf681611f07565b91508160400151610d7c57815173ffffffffffffffffffffffffffffffffffffffff1615610d2357815194505b8773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603610d7c5780838780600101985081518110610d6f57610d6f612b13565b6020026020010181815250505b600101610ce6565b50909695505050505050565b60606003805461060d90612ac0565b6060818310610dda576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610de660005490565b90506001851015610df657600194505b80841115610e02578093505b6000610e0d87610b5d565b905084861015610e2c5785850381811015610e26578091505b50610e30565b5060005b60008167ffffffffffffffff811115610e4b57610e4b6125c0565b604051908082528060200260200182016040528015610e74578160200160208202803683370190505b50905081600003610e8a579350610f6092505050565b6000610e9588611351565b905060008160400151610ea6575080515b885b888114158015610eb85750848714155b15610f5457610ec681611f07565b92508260400151610f4c57825173ffffffffffffffffffffffffffffffffffffffff1615610ef357825191505b8a73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f4c5780848880600101995081518110610f3f57610f3f612b13565b6020026020010181815250505b600101610ea8565b50505092835250909150505b9392505050565b333214610fd0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6e6f7420616c6c6f7765640000000000000000000000000000000000000000006044820152606401610901565b600b5460ff1661103c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f53616c6520697320636c6f7365642100000000000000000000000000000000006044820152606401610901565b6103e88161106b6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b6110759190612cd9565b11156110dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f457863656564204d41585f535550504c590000000000000000000000000000006044820152606401610901565b60008111611147576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f416d6f756e742063616e277420626520300000000000000000000000000000006044820152606401610901565b600954336000908152600a60205260409020546111649083612cd9565b11156111cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f457863656564206d6178427957616c6c657400000000000000000000000000006044820152606401610901565b336000908152600a6020526040812080548392906111eb908490612cd9565b9091555061093590503382611f98565b3373ffffffffffffffffffffffffffffffffffffffff83160361124a576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b33600081815260076020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112ec8484846119a1565b73ffffffffffffffffffffffffffffffffffffffff83163b1561134b5761131584848484611fb6565b61134b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b6040805160608082018352600080835260208084018290528385018290528451928301855281835282018190529281019290925290600183108061139757506000548310155b156113a25792915050565b6113ab83611f07565b90508060400151156113bd5792915050565b610f608361212f565b60085473ffffffffffffffffffffffffffffffffffffffff163314611447576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b600b80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b606061148382611894565b6114b9576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114c36121b9565b905080516000036114e35760405180602001604052806000815250610f60565b806114ed846121c8565b6040516020016114fe929190612cf1565b6040516020818303038152906040529392505050565b60085473ffffffffffffffffffffffffffffffffffffffff163314611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b600b5460ff1615611602576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f73616c65206973206f70656e21000000000000000000000000000000000000006044820152606401610901565b82811461166b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6d69736d61746368696e67206c656e67746873210000000000000000000000006044820152606401610901565b60005b838110156116d0576116be85858381811061168b5761168b612b13565b90506020020160208101906116a09190612569565b8484848181106116b2576116b2612b13565b90506020020135611f98565b806116c881612d20565b91505061166e565b506103e86116ff6000547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b111561134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f457863656564204d41585f535550504c590000000000000000000000000000006044820152606401610901565b60085473ffffffffffffffffffffffffffffffffffffffff1633146117e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610901565b73ffffffffffffffffffffffffffffffffffffffff811661188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610901565b61093581611e90565b6000816001111580156118a8575060005482105b80156105f85750506000908152600460205260409020547c0100000000000000000000000000000000000000000000000000000000161590565b6000818060011161196f5760005481101561196f57600081815260046020526040812054907c01000000000000000000000000000000000000000000000000000000008216900361196d575b80600003610f6057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0160008181526004602052604090205461192e565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006119ac826118e2565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a13576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff86161480611a69575073ffffffffffffffffffffffffffffffffffffffff8516600090815260076020908152604080832033845290915290205460ff165b80611a91575033611a7984610690565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611aca576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8416611b17576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083815260066020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff88811684526005835281842080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558716835280832080546001019055858352600490915281207c02000000000000000000000000000000000000000000000000000000004260a01b8717811790915583169003611c1457600183016000818152600460205260408120549003611c12576000548114611c125760008181526004602052604090208390555b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b6000611c81836118e2565b9050808215611d435760003373ffffffffffffffffffffffffffffffffffffffff83161480611ce0575073ffffffffffffffffffffffffffffffffffffffff8216600090815260076020908152604080832033845290915290205460ff165b80611d08575033611cf086610690565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611d41576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b600084815260066020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000016905573ffffffffffffffffffffffffffffffffffffffff841683526005825280832080546fffffffffffffffffffffffffffffffff019055868352600490915281207c03000000000000000000000000000000000000000000000000000000004260a01b84171790557c020000000000000000000000000000000000000000000000000000000083169003611e3d57600184016000818152600460205260408120549003611e3b576000548114611e3b5760008181526004602052604090208390555b505b604051849060009073ffffffffffffffffffffffffffffffffffffffff8416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060018054810190555050565b6008805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60408051606081018252600080825260208201819052918101919091526000828152600460205260409020546105f8906040805160608101825273ffffffffffffffffffffffffffffffffffffffff8316815260a083901c67ffffffffffffffff1660208201527c010000000000000000000000000000000000000000000000000000000090921615159082015290565b611fb2828260405180602001604052806000815250612235565b5050565b6040517f150b7a0200000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff85169063150b7a0290612011903390899088908890600401612d58565b6020604051808303816000875af192505050801561206a575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261206791810190612da1565b60015b6120e1573d808015612098576040519150601f19603f3d011682016040523d82523d6000602084013e61209d565b606091505b5080516000036120d9576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050949350505050565b60408051606081018252600080825260208201819052918101919091526105f8612158836118e2565b6040805160608101825273ffffffffffffffffffffffffffffffffffffffff8316815260a083901c67ffffffffffffffff1660208201527c010000000000000000000000000000000000000000000000000000000090921615159082015290565b6060600c805461060d90612ac0565b604080516080810191829052607f0190826030600a8206018353600a90045b801561220557600183039250600a81066030018353600a90046121e7565b508190037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909101908152919050565b60005473ffffffffffffffffffffffffffffffffffffffff8416612285576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826000036122bf576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff841660008181526005602090815260408083208054680100000000000000018902019055848352600490915290204260a01b86176001861460e11b1790558190818501903b156123c7575b604051829073ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a46123776000878480600101955087611fb6565b6123ad576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821061231f5782600054146123c257600080fd5b612419565b5b60405160018301929073ffffffffffffffffffffffffffffffffffffffff8816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082106123c8575b50600090815561134b9085838684565b7fffffffff000000000000000000000000000000000000000000000000000000008116811461093557600080fd5b60006020828403121561246957600080fd5b8135610f6081612429565b60005b8381101561248f578181015183820152602001612477565b8381111561134b5750506000910152565b600081518084526124b8816020860160208601612474565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610f6060208301846124a0565b60006020828403121561250f57600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461253a57600080fd5b919050565b6000806040838503121561255257600080fd5b61255b83612516565b946020939093013593505050565b60006020828403121561257b57600080fd5b610f6082612516565b60008060006060848603121561259957600080fd5b6125a284612516565b92506125b060208501612516565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715612636576126366125c0565b604052919050565b6000602080838503121561265157600080fd5b823567ffffffffffffffff8082111561266957600080fd5b818501915085601f83011261267d57600080fd5b81358181111561268f5761268f6125c0565b8060051b91506126a08483016125ef565b81815291830184019184810190888411156126ba57600080fd5b938501935b838510156126d8578435825293850193908501906126bf565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015610d8457612749838551805173ffffffffffffffffffffffffffffffffffffffff16825260208082015167ffffffffffffffff16908301526040908101511515910152565b9284019260609290920191600101612700565b600067ffffffffffffffff831115612776576127766125c0565b6127a760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f860116016125ef565b90508281528383830111156127bb57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126127e357600080fd5b610f608383356020850161275c565b6000806040838503121561280557600080fd5b823567ffffffffffffffff8082111561281d57600080fd5b612829868387016127d2565b9350602085013591508082111561283f57600080fd5b5061284c858286016127d2565b9150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610d8457835183529284019291840191600101612872565b6000806000606084860312156128a357600080fd5b6128ac84612516565b95602085013595506040909401359392505050565b8035801515811461253a57600080fd5b600080604083850312156128e457600080fd5b6128ed83612516565b91506128fb602084016128c1565b90509250929050565b6000806000806080858703121561291a57600080fd5b61292385612516565b935061293160208601612516565b925060408501359150606085013567ffffffffffffffff81111561295457600080fd5b8501601f8101871361296557600080fd5b6129748782356020840161275c565b91505092959194509250565b815173ffffffffffffffffffffffffffffffffffffffff16815260208083015167ffffffffffffffff1690820152604080830151151590820152606081016105f8565b6000602082840312156129d557600080fd5b610f60826128c1565b600080604083850312156129f157600080fd5b6129fa83612516565b91506128fb60208401612516565b60008083601f840112612a1a57600080fd5b50813567ffffffffffffffff811115612a3257600080fd5b6020830191508360208260051b8501011115612a4d57600080fd5b9250929050565b60008060008060408587031215612a6a57600080fd5b843567ffffffffffffffff80821115612a8257600080fd5b612a8e88838901612a08565b90965094506020870135915080821115612aa757600080fd5b50612ab487828801612a08565b95989497509550505050565b600181811c90821680612ad457607f821691505b602082108103612b0d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b601f82111561087f57600081815260208120601f850160051c81016020861015612b695750805b601f850160051c820191505b81811015612b8857828155600101612b75565b505050505050565b815167ffffffffffffffff811115612baa57612baa6125c0565b612bbe81612bb88454612ac0565b84612b42565b602080601f831160018114612c115760008415612bdb5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612b88565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015612c5e57888601518255948401946001909101908401612c3f565b5085821015612c9a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008219821115612cec57612cec612caa565b500190565b60008351612d03818460208801612474565b835190830190612d17818360208801612474565b01949350505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d5157612d51612caa565b5060010190565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152612d9760808301846124a0565b9695505050505050565b600060208284031215612db357600080fd5b8151610f608161242956fea2646970667358221220f6f59f061444daf13cad06d0ffb38f4ad039cd35e0dce3c919e9aaaaca6cfc0b64736f6c634300080f0033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000756656b746f725800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000356583200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d553979674c6566453431545373324c476b48547a7844443451575831326943714c436865633373696e6a566d2f00000000000000000000

-----Decoded View---------------
Arg [0] : name (string): VektorX
Arg [1] : symbol (string): VX2
Arg [2] : baseURI_ (string): ipfs://QmU9ygLefE41TSs2LGkHTzxDD4QWX12iCqLChec3sinjVm/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [4] : 56656b746f725800000000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 5658320000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [8] : 697066733a2f2f516d553979674c6566453431545373324c476b48547a784444
Arg [9] : 3451575831326943714c436865633373696e6a566d2f00000000000000000000


Deployed Bytecode Sourcemap

29164:1997:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5626:354;;;;;;:::i;:::-;;:::i;:::-;;;611:14:1;;604:22;586:41;;574:2;559:18;5626:354:0;;;;;;;;8754:100;;;:::i;:::-;;;;;;;:::i;10191:204::-;;;;;;:::i;:::-;;:::i;:::-;;;1809:42:1;1797:55;;;1779:74;;1767:2;1752:18;10191:204:0;1633:226:1;9709:474:0;;;;;;:::i;:::-;;:::i;:::-;;29404:49;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2661:25:1;;;2649:2;2634:18;29404:49:0;2515:177:1;5185:172:0;30272:1;5308:12;5238:7;5292:13;:28;:46;;5185:172;;10891:170;;;;;;:::i;:::-;;:::i;30659:108::-;;;;;;:::i;:::-;;:::i;29321:41::-;;29358:4;29321:41;;29369:30;;;;;;11069:185;;;;;;:::i;:::-;;:::i;19969:94::-;;;;;;:::i;:::-;;:::i;29535:23::-;;;:::i;21106:468::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;29483:21::-;;;;;;;;;8602:144;;;;;;:::i;:::-;;:::i;30393:157::-;;;;;;:::i;:::-;;:::i;29509:21::-;;;:::i;5988:224::-;;;;;;:::i;:::-;;:::i;778:103::-;;;:::i;23577:892::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;555:87::-;628:6;;;;555:87;;8862:104;;;:::i;21582:1987::-;;;;;;:::i;:::-;;:::i;29743:435::-;;;;;;:::i;:::-;;:::i;10403:308::-;;;;;;:::i;:::-;;:::i;11262:396::-;;;;;;:::i;:::-;;:::i;20678:420::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;30556:97::-;;;;;;:::i;:::-;;:::i;8974:318::-;;;;;;:::i;:::-;;:::i;10719:164::-;;;;;;:::i;:::-;10840:25;;;;10816:4;10840:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;10719:164;30773:383;;;;;;:::i;:::-;;:::i;889:201::-;;;;;;:::i;:::-;;:::i;5626:354::-;5711:4;5750:25;;;;;;:102;;-1:-1:-1;5827:25:0;;;;;5750:102;:179;;;-1:-1:-1;5904:25:0;;;;;5750:179;5730:199;5626:354;-1:-1:-1;;5626:354:0:o;8754:100::-;8808:13;8841:5;8834:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8754:100;:::o;10191:204::-;10259:7;10284:16;10292:7;10284;:16::i;:::-;10279:64;;10309:34;;;;;;;;;;;;;;10279:64;-1:-1:-1;10363:24:0;;;;:15;:24;;;;;;;;;10191:204::o;9709:474::-;9782:13;9814:27;9833:7;9814:18;:27::i;:::-;9782:61;;9864:5;9858:11;;:2;:11;;;9854:48;;9878:24;;;;;;;;;;;;;;9854:48;19031:10;9919:28;;;;9915:175;;10840:25;;;10816:4;10840:25;;;:18;:25;;;;;;;;19031:10;10840:35;;;;;;;;;;9962:128;;10039:35;;;;;;;;;;;;;;9962:128;10102:24;;;;:15;:24;;;;;;:29;;;;;;;;;;;;;;10147:28;;10102:24;;10147:28;;;;;;;9771:412;9709:474;;:::o;10891:170::-;11025:28;11035:4;11041:2;11045:7;11025:9;:28::i;:::-;10891:170;;;:::o;30659:108::-;628:6;;690:23;628:6;19031:10;690:23;682:68;;;;;;;11362:2:1;682:68:0;;;11344:21:1;;;11381:18;;;11374:30;11440:34;11420:18;;;11413:62;11492:18;;682:68:0;;;;;;;;;30733:11:::1;:28:::0;30659:108::o;11069:185::-;11207:39;11224:4;11230:2;11234:7;11207:39;;;;;;;;;;;;:16;:39::i;19969:94::-;20035:20;20041:7;20050:4;20035:5;:20::i;:::-;19969:94;:::o;29535:23::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21106:468::-;21281:15;;21195:23;;21256:22;21281:15;21348:36;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;21348:36:0;;;;;;;;;;;;;;;21311:73;;21404:9;21399:125;21420:14;21415:1;:19;21399:125;;21476:32;21496:8;21505:1;21496:11;;;;;;;;:::i;:::-;;;;;;;21476:19;:32::i;:::-;21460:10;21471:1;21460:13;;;;;;;;:::i;:::-;;;;;;;;;;:48;21436:3;;21399:125;;;-1:-1:-1;21545:10:0;21106:468;-1:-1:-1;;;21106:468:0:o;8602:144::-;8666:7;8709:27;8728:7;8709:18;:27::i;30393:157::-;628:6;;690:23;628:6;19031:10;690:23;682:68;;;;;;;11362:2:1;682:68:0;;;11344:21:1;;;11381:18;;;11374:30;11440:34;11420:18;;;11413:62;11492:18;;682:68:0;11160:356:1;682:68:0;30493:7:::1;:20;30503:10:::0;30493:7;:20:::1;:::i;:::-;-1:-1:-1::0;30520:9:0::1;:24;30532:12:::0;30520:9;:24:::1;:::i;29509:21::-:0;;;;;;;:::i;5988:224::-;6052:7;6076:19;;;6072:60;;6104:28;;;;;;;;;;;;;;6072:60;-1:-1:-1;6150:25:0;;;;;;:18;:25;;;;;;3895:13;6150:54;;5988:224::o;778:103::-;628:6;;690:23;628:6;19031:10;690:23;682:68;;;;;;;11362:2:1;682:68:0;;;11344:21:1;;;11381:18;;;11374:30;11440:34;11420:18;;;11413:62;11492:18;;682:68:0;11160:356:1;682:68:0;843:30:::1;870:1;843:18;:30::i;:::-;778:103::o:0;23577:892::-;23647:16;23701:19;23735:25;23775:22;23800:16;23810:5;23800:9;:16::i;:::-;23775:41;;23831:25;23873:14;23859:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23859:29:0;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;23831:57:0;;-1:-1:-1;30272:1:0;23949:472;23998:14;23983:11;:29;23949:472;;24050:15;24063:1;24050:12;:15::i;:::-;24038:27;;24088:9;:16;;;24129:8;24084:73;24179:14;;:28;;;24175:111;;24252:14;;;-1:-1:-1;24175:111:0;24329:5;24308:26;;:17;:26;;;24304:102;;24385:1;24359:8;24368:13;;;;;;24359:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;24304:102;24014:3;;23949:472;;;-1:-1:-1;24442:8:0;;23577:892;-1:-1:-1;;;;;;23577:892:0:o;8862:104::-;8918:13;8951:7;8944:14;;;;;:::i;21582:1987::-;21717:16;21784:4;21775:5;:13;21771:45;;21797:19;;;;;;;;;;;;;;21771:45;21831:19;21865:17;21885:14;5129:7;5156:13;;5082:95;21885:14;21865:34;-1:-1:-1;30272:1:0;21977:5;:23;21973:87;;;30272:1;22021:23;;21973:87;22136:9;22129:4;:16;22125:73;;;22173:9;22166:16;;22125:73;22212:25;22240:16;22250:5;22240:9;:16::i;:::-;22212:44;;22285:4;22277:5;:12;22273:278;;;22332:12;;;22367:31;;;22363:111;;;22443:11;22423:31;;22363:111;22291:198;22273:278;;;-1:-1:-1;22534:1:0;22273:278;22565:25;22607:17;22593:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22593:32:0;;22565:60;;22644:17;22665:1;22644:22;22640:78;;22694:8;-1:-1:-1;22687:15:0;;-1:-1:-1;;;22687:15:0;22640:78;22734:31;22768:26;22788:5;22768:19;:26::i;:::-;22734:60;;22809:25;22856:9;:16;;;22851:92;;-1:-1:-1;22913:14:0;;22851:92;22974:5;22957:478;22986:4;22981:1;:9;;:45;;;;;23009:17;22994:11;:32;;22981:45;22957:478;;;23064:15;23077:1;23064:12;:15::i;:::-;23052:27;;23102:9;:16;;;23143:8;23098:73;23193:14;;:28;;;23189:111;;23266:14;;;-1:-1:-1;23189:111:0;23343:5;23322:26;;:17;:26;;;23318:102;;23399:1;23373:8;23382:13;;;;;;23373:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;23318:102;23028:3;;22957:478;;;-1:-1:-1;;;23477:29:0;;;-1:-1:-1;23484:8:0;;-1:-1:-1;;21582:1987:0;;;;;;:::o;29743:435::-;29797:10;29811:9;29797:23;29789:47;;;;;;;14295:2:1;29789:47:0;;;14277:21:1;14334:2;14314:18;;;14307:30;14373:13;14353:18;;;14346:41;14404:18;;29789:47:0;14093:335:1;29789:47:0;29851:9;;;;29843:37;;;;;;;14635:2:1;29843:37:0;;;14617:21:1;14674:2;14654:18;;;14647:30;14713:17;14693:18;;;14686:45;14748:18;;29843:37:0;14433:339:1;29843:37:0;29358:4;29912:6;29895:14;5412:7;5466:13;:31;;;5365:151;29895:14;:23;;;;:::i;:::-;:37;;29887:67;;;;;;;15301:2:1;29887:67:0;;;15283:21:1;15340:2;15320:18;;;15313:30;15379:19;15359:18;;;15352:47;15416:18;;29887:67:0;15099:341:1;29887:67:0;29978:1;29969:6;:10;29961:40;;;;;;;15647:2:1;29961:40:0;;;15629:21:1;15686:2;15666:18;;;15659:30;15725:19;15705:18;;;15698:47;15762:18;;29961:40:0;15445:341:1;29961:40:0;30055:11;;30040:10;30025:26;;;;:14;:26;;;;;;30016:35;;:6;:35;:::i;:::-;:50;;30008:81;;;;;;;15993:2:1;30008:81:0;;;15975:21:1;16032:2;16012:18;;;16005:30;16071:20;16051:18;;;16044:48;16109:18;;30008:81:0;15791:342:1;30008:81:0;30113:10;30098:26;;;;:14;:26;;;;;:36;;30128:6;;30098:26;:36;;30128:6;;30098:36;:::i;:::-;;;;-1:-1:-1;30143:29:0;;-1:-1:-1;30153:10:0;30165:6;30143:9;:29::i;10403:308::-;19031:10;10502:31;;;;10498:61;;10542:17;;;;;;;;;;;;;;10498:61;19031:10;10572:39;;;;:18;:39;;;;;;;;;:49;;;;;;;;;;;;:60;;;;;;;;;;;;;10648:55;;586:41:1;;;10572:49:0;;19031:10;10648:55;;559:18:1;10648:55:0;;;;;;;10403:308;;:::o;11262:396::-;11429:28;11439:4;11445:2;11449:7;11429:9;:28::i;:::-;11472:14;;;;:19;11468:183;;11511:56;11542:4;11548:2;11552:7;11561:5;11511:30;:56::i;:::-;11506:145;;11595:40;;;;;;;;;;;;;;11506:145;11262:396;;;;:::o;20678:420::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30272:1:0;20834:7;:25;:54;;;-1:-1:-1;5129:7:0;5156:13;20863:7;:25;;20834:54;20830:103;;;20912:9;20678:420;-1:-1:-1;;20678:420:0:o;20830:103::-;20955:21;20968:7;20955:12;:21::i;:::-;20943:33;;20991:9;:16;;;20987:65;;;21031:9;20678:420;-1:-1:-1;;20678:420:0:o;20987:65::-;21069:21;21082:7;21069:12;:21::i;30556:97::-;628:6;;690:23;628:6;19031:10;690:23;682:68;;;;;;;11362:2:1;682:68:0;;;11344:21:1;;;11381:18;;;11374:30;11440:34;11420:18;;;11413:62;11492:18;;682:68:0;11160:356:1;682:68:0;30623:9:::1;:24:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;30556:97::o;8974:318::-;9047:13;9078:16;9086:7;9078;:16::i;:::-;9073:59;;9103:29;;;;;;;;;;;;;;9073:59;9145:21;9169:10;:8;:10::i;:::-;9145:34;;9203:7;9197:21;9222:1;9197:26;:87;;;;;;;;;;;;;;;;;9250:7;9259:18;9269:7;9259:9;:18::i;:::-;9233:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9190:94;8974:318;-1:-1:-1;;;8974:318:0:o;30773:383::-;628:6;;690:23;628:6;19031:10;690:23;682:68;;;;;;;11362:2:1;682:68:0;;;11344:21:1;;;11381:18;;;11374:30;11440:34;11420:18;;;11413:62;11492:18;;682:68:0;11160:356:1;682:68:0;30883:9:::1;::::0;::::1;;30882:10;30874:36;;;::::0;::::1;::::0;;16815:2:1;30874:36:0::1;::::0;::::1;16797:21:1::0;16854:2;16834:18;;;16827:30;16893:15;16873:18;;;16866:43;16926:18;;30874:36:0::1;16613:337:1::0;30874:36:0::1;30925:32:::0;;::::1;30917:65;;;::::0;::::1;::::0;;17157:2:1;30917:65:0::1;::::0;::::1;17139:21:1::0;17196:2;17176:18;;;17169:30;17235:22;17215:18;;;17208:50;17275:18;;30917:65:0::1;16955:344:1::0;30917:65:0::1;30996:9;30991:93;31007:20:::0;;::::1;30991:93;;;31043:33;31053:9;;31063:1;31053:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;31067:5;;31073:1;31067:8;;;;;;;:::i;:::-;;;;;;;31043:9;:33::i;:::-;31029:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30991:93;;;;29358:4;31100:14;5412:7:::0;5466:13;:31;;;5365:151;31100:14:::1;:28;;31092:58;;;::::0;::::1;::::0;;15301:2:1;31092:58:0::1;::::0;::::1;15283:21:1::0;15340:2;15320:18;;;15313:30;15379:19;15359:18;;;15352:47;15416:18;;31092:58:0::1;15099:341:1::0;889:201:0;628:6;;690:23;628:6;19031:10;690:23;682:68;;;;;;;11362:2:1;682:68:0;;;11344:21:1;;;11381:18;;;11374:30;11440:34;11420:18;;;11413:62;11492:18;;682:68:0;11160:356:1;682:68:0;978:22:::1;::::0;::::1;970:73;;;::::0;::::1;::::0;;17706:2:1;970:73:0::1;::::0;::::1;17688:21:1::0;17745:2;17725:18;;;17718:30;17784:34;17764:18;;;17757:62;17855:8;17835:18;;;17828:36;17881:19;;970:73:0::1;17504:402:1::0;970:73:0::1;1054:28;1073:8;1054:18;:28::i;11666:273::-:0;11723:4;11779:7;30272:1;11760:26;;:66;;;;;11813:13;;11803:7;:23;11760:66;:152;;;;-1:-1:-1;;11864:26:0;;;;:17;:26;;;;;;4263:8;11864:43;:48;;11666:273::o;7098:670::-;7165:7;7200;;30272:1;7249:23;7245:456;;7302:13;;7295:4;:20;7291:410;;;7340:14;7357:23;;;:17;:23;;;;;;;4263:8;7446:23;;:28;;7442:240;;7506:113;7513:6;7523:1;7513:11;7506:113;;-1:-1:-1;7584:6:0;;7566:25;;;;:17;:25;;;;;;7506:113;;7442:240;7317:384;7291:410;7729:31;;;;;;;;;;;;;;14645:1594;14760:27;14790;14809:7;14790:18;:27::i;:::-;14760:57;;14875:4;14834:45;;14850:19;14834:45;;;14830:86;;14888:28;;;;;;;;;;;;;;14830:86;14929:22;19031:10;14955:27;;;;;:87;;-1:-1:-1;10840:25:0;;;10816:4;10840:25;;;:18;:25;;;;;;;;19031:10;10840:35;;;;;;;;;;14999:43;14955:147;;;-1:-1:-1;19031:10:0;15059:20;15071:7;15059:11;:20::i;:::-;:43;;;14955:147;14929:174;;15121:17;15116:66;;15147:35;;;;;;;;;;;;;;15116:66;15197:16;;;15193:52;;15222:23;;;;;;;;;;;;;;15193:52;15321:24;;;;:15;:24;;;;;;;;15314:31;;;;;;;15385:24;;;;;:18;:24;;;;;15383:26;;;;;;15454:22;;;;;;;15452:24;;-1:-1:-1;15452:24:0;;;15521:26;;;:17;:26;;;;;4399:8;15609:15;4209:3;15609:41;15567:84;;:128;;15521:174;;;15728:46;;:51;;15724:399;;15832:1;15822:11;;15800:19;15872:30;;;:17;:30;;;;;;:35;;15868:240;;15971:13;;15956:11;:28;15952:137;;16013:30;;;;:17;:30;;;;;:52;;;15952:137;15781:342;15724:399;16170:7;16166:2;16151:27;;16160:4;16151:27;;;;;;;;;;;;14749:1490;;14645:1594;;;:::o;16344:1535::-;16424:27;16454;16473:7;16454:18;:27::i;:::-;16424:57;-1:-1:-1;16424:57:0;16559:311;;;;16593:22;19031:10;16619:27;;;;;:91;;-1:-1:-1;10840:25:0;;;10816:4;10840:25;;;:18;:25;;;;;;;;19031:10;10840:35;;;;;;;;;;16667:43;16619:155;;;-1:-1:-1;19031:10:0;16731:20;16743:7;16731:11;:20::i;:::-;:43;;;16619:155;16593:182;;16797:17;16792:66;;16823:35;;;;;;;;;;;;;;16792:66;16578:292;16559:311;16953:24;;;;:15;:24;;;;;;;;16946:31;;;;;;;17017:24;;;;:18;:24;;;;;:59;;17045:31;17017:59;;;17093:26;;;:17;:26;;;;;17139:165;17183:15;4209:3;17183:41;17139:86;;:165;17093:211;;4399:8;17325:46;;:51;;17321:363;;17429:1;17419:11;;17397:19;17453:30;;;:17;:30;;;;;;:35;;17449:220;;17532:13;;17517:11;:28;17513:137;;17574:30;;;;:17;:30;;;;;:52;;;17513:137;17378:306;17321:363;17712:35;;17739:7;;17735:1;;17712:35;;;;;;17735:1;;17712:35;-1:-1:-1;;17846:12:0;:14;;;;;;-1:-1:-1;;16344:1535:0:o;1098:191::-;1191:6;;;;1208:17;;;;;;;;;;;1241:40;;1191:6;;;1208:17;1191:6;;1241:40;;1172:16;;1241:40;1161:128;1098:191;:::o;8079:153::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;8199:24:0;;;;:17;:24;;;;;;8180:44;;-1:-1:-1;;;;;;;;7886:41:0;;;;;4209:3;7972:32;;;7938:67;;-1:-1:-1;;;7938:67:0;4263:8;8035:23;;;:28;;-1:-1:-1;;;8016:47:0;-1:-1:-1;7776:295:0;11947:104;12016:27;12026:2;12030:8;12016:27;;;;;;;;;;;;:9;:27::i;:::-;11947:104;;:::o;17887:716::-;18071:88;;;;;18050:4;;18071:45;;;;;;:88;;19031:10;;18138:4;;18144:7;;18153:5;;18071:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18071:88:0;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;18067:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18354:6;:13;18371:1;18354:18;18350:235;;18400:40;;;;;;;;;;;;;;18350:235;18543:6;18537:13;18528:6;18524:2;18520:15;18513:38;18067:529;18230:64;;18240:54;18230:64;;-1:-1:-1;17887:716:0;;;;;;:::o;8436:158::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;8539:47:0;8558:27;8577:7;8558:18;:27::i;:::-;-1:-1:-1;;;;;;;;7886:41:0;;;;;4209:3;7972:32;;;7938:67;;-1:-1:-1;;;7938:67:0;4263:8;8035:23;;;:28;;-1:-1:-1;;;8016:47:0;-1:-1:-1;7776:295:0;30285:102;30345:13;30374:7;30367:14;;;;;:::i;19057:738::-;19187:4;19181:11;;19194:3;19177:21;;19214:17;;;;19343:11;;;19313:5;19389:2;19403;19393:13;;19385:22;19343:11;19372:36;19444:2;19434:13;;19277:379;19463:4;19277:379;;;19585:1;19580:3;19576:11;19569:18;;19636:2;19630:4;19626:13;19622:2;19618:22;19613:3;19605:36;19506:2;19496:13;;19277:379;;;-1:-1:-1;19698:13:0;;;19732:12;;;;19758:19;;;19732:12;19057:738;-1:-1:-1;19057:738:0:o;12059:1575::-;12182:20;12205:13;12233:16;;;12229:48;;12258:19;;;;;;;;;;;;;;12229:48;12292:8;12304:1;12292:13;12288:44;;12314:18;;;;;;;;;;;;;;12288:44;12446:22;;;;;;;:18;:22;;;;3965:2;12446:22;;;:70;;12484:31;12472:44;;12446:70;;;12533:31;;;:17;:31;;;;;12626:15;4209:3;12626:41;12584:84;;-1:-1:-1;12704:13:0;;4335:3;12689:56;12584:162;12533:213;;:31;;12827:23;;;;12871:14;:19;12867:635;;12911:313;12942:38;;12967:12;;12942:38;;;;12959:1;;12942:38;;12959:1;;12942:38;13008:69;13047:1;13051:2;13055:14;;;;;;13071:5;13008:30;:69::i;:::-;13003:174;;13113:40;;;;;;;;;;;;;;13003:174;13219:3;13204:12;:18;12911:313;;13305:12;13288:13;;:29;13284:43;;13319:8;;;13284:43;12867:635;;;13368:119;13399:40;;13424:14;;;;;13399:40;;;;13416:1;;13399:40;;13416:1;;13399:40;13482:3;13467:12;:18;13368:119;;12867:635;-1:-1:-1;13516:13:0;:28;;;13566:60;;13599:2;13603:12;13617:8;13566:60;:::i;14:177:1:-;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:1;868:16;;861:27;638:258::o;901:317::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1132:2;1120:15;1137:66;1116:88;1107:98;;;;1207:4;1103:109;;901:317;-1:-1:-1;;901:317:1:o;1223:220::-;1372:2;1361:9;1354:21;1335:4;1392:45;1433:2;1422:9;1418:18;1410:6;1392:45;:::i;1448:180::-;1507:6;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;-1:-1:-1;1599:23:1;;1448:180;-1:-1:-1;1448:180:1:o;1864:196::-;1932:20;;1992:42;1981:54;;1971:65;;1961:93;;2050:1;2047;2040:12;1961:93;1864:196;;;:::o;2065:254::-;2133:6;2141;2194:2;2182:9;2173:7;2169:23;2165:32;2162:52;;;2210:1;2207;2200:12;2162:52;2233:29;2252:9;2233:29;:::i;:::-;2223:39;2309:2;2294:18;;;;2281:32;;-1:-1:-1;;;2065:254:1:o;2324:186::-;2383:6;2436:2;2424:9;2415:7;2411:23;2407:32;2404:52;;;2452:1;2449;2442:12;2404:52;2475:29;2494:9;2475:29;:::i;2697:328::-;2774:6;2782;2790;2843:2;2831:9;2822:7;2818:23;2814:32;2811:52;;;2859:1;2856;2849:12;2811:52;2882:29;2901:9;2882:29;:::i;:::-;2872:39;;2930:38;2964:2;2953:9;2949:18;2930:38;:::i;:::-;2920:48;;3015:2;3004:9;3000:18;2987:32;2977:42;;2697:328;;;;;:::o;3030:184::-;3082:77;3079:1;3072:88;3179:4;3176:1;3169:15;3203:4;3200:1;3193:15;3219:334;3290:2;3284:9;3346:2;3336:13;;3351:66;3332:86;3320:99;;3449:18;3434:34;;3470:22;;;3431:62;3428:88;;;3496:18;;:::i;:::-;3532:2;3525:22;3219:334;;-1:-1:-1;3219:334:1:o;3558:946::-;3642:6;3673:2;3716;3704:9;3695:7;3691:23;3687:32;3684:52;;;3732:1;3729;3722:12;3684:52;3772:9;3759:23;3801:18;3842:2;3834:6;3831:14;3828:34;;;3858:1;3855;3848:12;3828:34;3896:6;3885:9;3881:22;3871:32;;3941:7;3934:4;3930:2;3926:13;3922:27;3912:55;;3963:1;3960;3953:12;3912:55;3999:2;3986:16;4021:2;4017;4014:10;4011:36;;;4027:18;;:::i;:::-;4073:2;4070:1;4066:10;4056:20;;4096:28;4120:2;4116;4112:11;4096:28;:::i;:::-;4158:15;;;4228:11;;;4224:20;;;4189:12;;;;4256:19;;;4253:39;;;4288:1;4285;4278:12;4253:39;4312:11;;;;4332:142;4348:6;4343:3;4340:15;4332:142;;;4414:17;;4402:30;;4365:12;;;;4452;;;;4332:142;;;4493:5;3558:946;-1:-1:-1;;;;;;;;3558:946:1:o;4815:722::-;5048:2;5100:21;;;5170:13;;5073:18;;;5192:22;;;5019:4;;5048:2;5271:15;;;;5245:2;5230:18;;;5019:4;5314:197;5328:6;5325:1;5322:13;5314:197;;;5377:52;5425:3;5416:6;5410:13;4593:12;;4607:42;4589:61;4577:74;;4704:4;4693:16;;;4687:23;4712:18;4683:48;4667:14;;;4660:72;4795:4;4784:16;;;4778:23;4771:31;4764:39;4748:14;;4741:63;4509:301;5377:52;5486:15;;;;5458:4;5449:14;;;;;5350:1;5343:9;5314:197;;5542:466;5607:5;5641:18;5633:6;5630:30;5627:56;;;5663:18;;:::i;:::-;5701:116;5811:4;5742:66;5737:2;5729:6;5725:15;5721:88;5717:99;5701:116;:::i;:::-;5692:125;;5840:6;5833:5;5826:21;5880:3;5871:6;5866:3;5862:16;5859:25;5856:45;;;5897:1;5894;5887:12;5856:45;5946:6;5941:3;5934:4;5927:5;5923:16;5910:43;6000:1;5993:4;5984:6;5977:5;5973:18;5969:29;5962:40;5542:466;;;;;:::o;6013:222::-;6056:5;6109:3;6102:4;6094:6;6090:17;6086:27;6076:55;;6127:1;6124;6117:12;6076:55;6149:80;6225:3;6216:6;6203:20;6196:4;6188:6;6184:17;6149:80;:::i;6240:543::-;6328:6;6336;6389:2;6377:9;6368:7;6364:23;6360:32;6357:52;;;6405:1;6402;6395:12;6357:52;6445:9;6432:23;6474:18;6515:2;6507:6;6504:14;6501:34;;;6531:1;6528;6521:12;6501:34;6554:50;6596:7;6587:6;6576:9;6572:22;6554:50;:::i;:::-;6544:60;;6657:2;6646:9;6642:18;6629:32;6613:48;;6686:2;6676:8;6673:16;6670:36;;;6702:1;6699;6692:12;6670:36;;6725:52;6769:7;6758:8;6747:9;6743:24;6725:52;:::i;:::-;6715:62;;;6240:543;;;;;:::o;6788:632::-;6959:2;7011:21;;;7081:13;;6984:18;;;7103:22;;;6930:4;;6959:2;7182:15;;;;7156:2;7141:18;;;6930:4;7225:169;7239:6;7236:1;7233:13;7225:169;;;7300:13;;7288:26;;7369:15;;;;7334:12;;;;7261:1;7254:9;7225:169;;7425:322;7502:6;7510;7518;7571:2;7559:9;7550:7;7546:23;7542:32;7539:52;;;7587:1;7584;7577:12;7539:52;7610:29;7629:9;7610:29;:::i;:::-;7600:39;7686:2;7671:18;;7658:32;;-1:-1:-1;7737:2:1;7722:18;;;7709:32;;7425:322;-1:-1:-1;;;7425:322:1:o;7752:160::-;7817:20;;7873:13;;7866:21;7856:32;;7846:60;;7902:1;7899;7892:12;7917:254;7982:6;7990;8043:2;8031:9;8022:7;8018:23;8014:32;8011:52;;;8059:1;8056;8049:12;8011:52;8082:29;8101:9;8082:29;:::i;:::-;8072:39;;8130:35;8161:2;8150:9;8146:18;8130:35;:::i;:::-;8120:45;;7917:254;;;;;:::o;8176:667::-;8271:6;8279;8287;8295;8348:3;8336:9;8327:7;8323:23;8319:33;8316:53;;;8365:1;8362;8355:12;8316:53;8388:29;8407:9;8388:29;:::i;:::-;8378:39;;8436:38;8470:2;8459:9;8455:18;8436:38;:::i;:::-;8426:48;;8521:2;8510:9;8506:18;8493:32;8483:42;;8576:2;8565:9;8561:18;8548:32;8603:18;8595:6;8592:30;8589:50;;;8635:1;8632;8625:12;8589:50;8658:22;;8711:4;8703:13;;8699:27;-1:-1:-1;8689:55:1;;8740:1;8737;8730:12;8689:55;8763:74;8829:7;8824:2;8811:16;8806:2;8802;8798:11;8763:74;:::i;:::-;8753:84;;;8176:667;;;;;;;:::o;8848:265::-;4593:12;;4607:42;4589:61;4577:74;;4704:4;4693:16;;;4687:23;4712:18;4683:48;4667:14;;;4660:72;4795:4;4784:16;;;4778:23;4771:31;4764:39;4748:14;;;4741:63;9044:2;9029:18;;9056:51;4509:301;9118:180;9174:6;9227:2;9215:9;9206:7;9202:23;9198:32;9195:52;;;9243:1;9240;9233:12;9195:52;9266:26;9282:9;9266:26;:::i;9303:260::-;9371:6;9379;9432:2;9420:9;9411:7;9407:23;9403:32;9400:52;;;9448:1;9445;9438:12;9400:52;9471:29;9490:9;9471:29;:::i;:::-;9461:39;;9519:38;9553:2;9542:9;9538:18;9519:38;:::i;9568:367::-;9631:8;9641:6;9695:3;9688:4;9680:6;9676:17;9672:27;9662:55;;9713:1;9710;9703:12;9662:55;-1:-1:-1;9736:20:1;;9779:18;9768:30;;9765:50;;;9811:1;9808;9801:12;9765:50;9848:4;9840:6;9836:17;9824:29;;9908:3;9901:4;9891:6;9888:1;9884:14;9876:6;9872:27;9868:38;9865:47;9862:67;;;9925:1;9922;9915:12;9862:67;9568:367;;;;;:::o;9940:773::-;10062:6;10070;10078;10086;10139:2;10127:9;10118:7;10114:23;10110:32;10107:52;;;10155:1;10152;10145:12;10107:52;10195:9;10182:23;10224:18;10265:2;10257:6;10254:14;10251:34;;;10281:1;10278;10271:12;10251:34;10320:70;10382:7;10373:6;10362:9;10358:22;10320:70;:::i;:::-;10409:8;;-1:-1:-1;10294:96:1;-1:-1:-1;10497:2:1;10482:18;;10469:32;;-1:-1:-1;10513:16:1;;;10510:36;;;10542:1;10539;10532:12;10510:36;;10581:72;10645:7;10634:8;10623:9;10619:24;10581:72;:::i;:::-;9940:773;;;;-1:-1:-1;10672:8:1;-1:-1:-1;;;;9940:773:1:o;10718:437::-;10797:1;10793:12;;;;10840;;;10861:61;;10915:4;10907:6;10903:17;10893:27;;10861:61;10968:2;10960:6;10957:14;10937:18;10934:38;10931:218;;11005:77;11002:1;10995:88;11106:4;11103:1;11096:15;11134:4;11131:1;11124:15;10931:218;;10718:437;;;:::o;11521:184::-;11573:77;11570:1;11563:88;11670:4;11667:1;11660:15;11694:4;11691:1;11684:15;11836:545;11938:2;11933:3;11930:11;11927:448;;;11974:1;11999:5;11995:2;11988:17;12044:4;12040:2;12030:19;12114:2;12102:10;12098:19;12095:1;12091:27;12085:4;12081:38;12150:4;12138:10;12135:20;12132:47;;;-1:-1:-1;12173:4:1;12132:47;12228:2;12223:3;12219:12;12216:1;12212:20;12206:4;12202:31;12192:41;;12283:82;12301:2;12294:5;12291:13;12283:82;;;12346:17;;;12327:1;12316:13;12283:82;;;12287:3;;;11836:545;;;:::o;12617:1471::-;12743:3;12737:10;12770:18;12762:6;12759:30;12756:56;;;12792:18;;:::i;:::-;12821:97;12911:6;12871:38;12903:4;12897:11;12871:38;:::i;:::-;12865:4;12821:97;:::i;:::-;12973:4;;13037:2;13026:14;;13054:1;13049:782;;;;13875:1;13892:6;13889:89;;;-1:-1:-1;13944:19:1;;;13938:26;13889:89;12523:66;12514:1;12510:11;;;12506:84;12502:89;12492:100;12598:1;12594:11;;;12489:117;13991:81;;13019:1063;;13049:782;11783:1;11776:14;;;11820:4;11807:18;;13097:66;13085:79;;;13262:236;13276:7;13273:1;13270:14;13262:236;;;13365:19;;;13359:26;13344:42;;13457:27;;;;13425:1;13413:14;;;;13292:19;;13262:236;;;13266:3;13526:6;13517:7;13514:19;13511:261;;;13587:19;;;13581:26;13688:66;13670:1;13666:14;;;13682:3;13662:24;13658:97;13654:102;13639:118;13624:134;;13511:261;-1:-1:-1;;;;;13818:1:1;13802:14;;;13798:22;13785:36;;-1:-1:-1;12617:1471:1:o;14777:184::-;14829:77;14826:1;14819:88;14926:4;14923:1;14916:15;14950:4;14947:1;14940:15;14966:128;15006:3;15037:1;15033:6;15030:1;15027:13;15024:39;;;15043:18;;:::i;:::-;-1:-1:-1;15079:9:1;;14966:128::o;16138:470::-;16317:3;16355:6;16349:13;16371:53;16417:6;16412:3;16405:4;16397:6;16393:17;16371:53;:::i;:::-;16487:13;;16446:16;;;;16509:57;16487:13;16446:16;16543:4;16531:17;;16509:57;:::i;:::-;16582:20;;16138:470;-1:-1:-1;;;;16138:470:1:o;17304:195::-;17343:3;17374:66;17367:5;17364:77;17361:103;;17444:18;;:::i;:::-;-1:-1:-1;17491:1:1;17480:13;;17304:195::o;17911:512::-;18105:4;18134:42;18215:2;18207:6;18203:15;18192:9;18185:34;18267:2;18259:6;18255:15;18250:2;18239:9;18235:18;18228:43;;18307:6;18302:2;18291:9;18287:18;18280:34;18350:3;18345:2;18334:9;18330:18;18323:31;18371:46;18412:3;18401:9;18397:19;18389:6;18371:46;:::i;:::-;18363:54;17911:512;-1:-1:-1;;;;;;17911:512:1:o;18428:249::-;18497:6;18550:2;18538:9;18529:7;18525:23;18521:32;18518:52;;;18566:1;18563;18556:12;18518:52;18598:9;18592:16;18617:30;18641:5;18617:30;:::i

Swarm Source

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