ETH Price: $3,484.06 (-1.44%)
Gas: 2 Gwei

Token

ReshApes (ReshApe)
 

Overview

Max Total Supply

1,000 ReshApe

Holders

156

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
16 ReshApe
0x16449c21c335c87262abaad85408ff42fe453888
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:
ReshApes

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.7;

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;

        _status = _NOT_ENTERED;
    }
}

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

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

library Address {

    function isContract(address account) internal view returns (bool) {

        return account.code.length > 0;
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IERC721Receiver {

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

interface IERC165 {

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

abstract contract ERC165 is IERC165 {

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

interface IERC721 is IERC165 {

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

interface IERC721Metadata is IERC721 {

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface IERC721A is IERC721, IERC721Metadata {

    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 {
        address addr;
        uint64 startTimestamp;
        bool burned;
    }

    struct AddressData {
        uint64 balance;
        uint64 numberMinted;
        uint64 numberBurned;
        uint64 aux;
    }

    function totalSupply() external view returns (uint256);
}

contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;
    uint256 internal _currentIndex;

    uint256 internal _burnCounter;
    string private _name;
    string private _symbol;

    mapping(uint256 => TokenOwnership) internal _ownerships;
    mapping(address => AddressData) private _addressData;
    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 totalSupply() public view override returns (uint256) {
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

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

    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }


    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr) if (curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

    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, tokenId.toString())) : '';
    }

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

    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner) if(!isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    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 == _msgSender()) revert ApproveToCaller();

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), 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.isContract()) if(!_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].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 {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);
            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

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

            if (to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                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 {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);
            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            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 {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

        _approve(address(0), tokenId, from);

        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        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 {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

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

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

        _approve(address(0), tokenId, from);

        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        unchecked {
            _burnCounter++;
        }
    }

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
            return retval == 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 {}
}

contract ReshApes is ERC721A, Ownable, ReentrancyGuard {

    using Strings for uint256;

    string public baseURI = "";
    uint256 public maxSupply = 10000;
    uint256 public MAX_PER_TX = 20;
    uint256 public PRICE = 0.009 ether;
    uint256 public FREE_SUPPLY = 1000;
    uint256 public FREE_PER_WALLET = 2;
    bool public SALE_ACTIVE;

    constructor() ERC721A("ReshApes", "ReshApe") {
    }

    modifier mintCompliance(uint256 _amount) {
        require(tx.origin == msg.sender, "No contracts");
        require(SALE_ACTIVE, "Mint is not allowed");
        if (totalSupply() >= FREE_SUPPLY) {
            require(PRICE * _amount == msg.value, "Insufficient funds!");
            require(_amount > 0 && _amount <= MAX_PER_TX, "Exceeds max paid per tx!");
        }else{
            require(_amount > 0 && _amount <= FREE_PER_WALLET, "Exceeds max free mint per tx");
            require(this.balanceOf(msg.sender) < FREE_PER_WALLET, "Exceeds max free mint per wallet");
        }
        require(totalSupply() + _amount <= maxSupply, "Exceeds max supply");
        _;
    }

    function mint(uint256 _amount) public payable mintCompliance(_amount) {
        _safeMint(msg.sender, _amount);
    }

    function setFreeSupply(uint256 _freeSupply) public onlyOwner() {
        require(_freeSupply <= maxSupply, "Not valid quantity!");
        FREE_SUPPLY = _freeSupply;
    }

    function walletOfOwner(address _owner) public view returns (uint256[] memory) {
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = _startTokenId();
        uint256 ownedTokenIndex = 0;
        address latestOwnerAddress;
        while (ownedTokenIndex < ownerTokenCount && currentTokenId < _currentIndex) {
        TokenOwnership memory ownership = _ownerships[currentTokenId];
        if (!ownership.burned) {
            if (ownership.addr != address(0)) {
            latestOwnerAddress = ownership.addr;
            }
            if (latestOwnerAddress == _owner) {
            ownedTokenIds[ownedTokenIndex] = currentTokenId;
            ownedTokenIndex++;
            }
        }
        currentTokenId++;
        }
        return ownedTokenIds;
    }

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

    function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
        require(_exists(_tokenId), 'ERC721Metadata: URI query for nonexistent token');
        string memory currentBaseURI = _baseURI();
        return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString())) : '';
    }

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

    function setupOS() external onlyOwner {
        require(totalSupply() < maxSupply, "Max supply exceeded!");
        _safeMint(msg.sender, 20);
    }

    function mintForAddress(uint256 _amount, address _receiver) public payable onlyOwner {
        require(totalSupply() + _amount <= maxSupply, "Exceeds max supply");
        _safeMint(_receiver, _amount);
    }

    function toogleSale() public onlyOwner {
		SALE_ACTIVE = !SALE_ACTIVE;
	}

    function setMaxPerTxn(uint256 _maxPerTxn) public onlyOwner() {
        MAX_PER_TX = _maxPerTxn;
    }

    function setFreePerWallet(uint256 _freePerWallet) public onlyOwner() {
        FREE_PER_WALLET = _freePerWallet;
    }

    function setPrice(uint256 _price) public onlyOwner {
        PRICE = _price;
    }

    function setMaxSupply(uint256 _maxSupply) public onlyOwner {
        maxSupply = _maxSupply;
    }

    function setBaseURI(string memory _baseUri) public onlyOwner {
        baseURI = _baseUri;
    }

    function withdraw() public onlyOwner nonReentrant {
        (bool os, ) = payable(owner()).call{value: address(this).balance}('');
        require(os);
    }

    function withdraw(address _address, uint256 _weiAmount) onlyOwner nonReentrant public {
        require(_weiAmount <= address(this).balance, "Insufficient balance!");
        (bool os, ) = payable(_address).call{value: _weiAmount}('');
        require(os);
    }

    function saleState() external view returns (bool, uint256, uint256, uint256, uint256, uint256, uint256) {
        return (
            SALE_ACTIVE, FREE_SUPPLY, FREE_PER_WALLET, PRICE, MAX_PER_TX, totalSupply(), maxSupply
        );
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"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":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":"FREE_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FREE_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SALE_ACTIVE","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"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"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"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":"_baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freePerWallet","type":"uint256"}],"name":"setFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_freeSupply","type":"uint256"}],"name":"setFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxPerTxn","type":"uint256"}],"name":"setMaxPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setupOS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toogleSale","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_weiAmount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60a06040819052600060808190526200001b91600a916200011f565b50612710600b556014600c55661ff973cafa8000600d556103e8600e556002600f553480156200004a57600080fd5b506040805180820182526008815267526573684170657360c01b6020808301918252835180850190945260078452665265736841706560c81b9084015281519192916200009a916002916200011f565b508051620000b09060039060208401906200011f565b50506000805550620000c233620000cd565b600160095562000202565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200012d90620001c5565b90600052602060002090601f0160209004810192826200015157600085556200019c565b82601f106200016c57805160ff19168380011785556200019c565b828001600101855582156200019c579182015b828111156200019c5782518255916020019190600101906200017f565b50620001aa929150620001ae565b5090565b5b80821115620001aa5760008155600101620001af565b600181811c90821680620001da57607f821691505b60208210811415620001fc57634e487b7160e01b600052602260045260246000fd5b50919050565b61238c80620002126000396000f3fe6080604052600436106102255760003560e01c80638d859f3e11610123578063c87b56dd116100ab578063f216ddfd1161006f578063f216ddfd1461065a578063f2fde38b14610674578063f3fef3a314610694578063f43a22dc146106b4578063f676308a146106ca57600080fd5b8063c87b56dd146105b2578063cd90e5af146105d2578063d5abeb01146105e8578063e985e9c5146105fe578063efbd73f41461064757600080fd5b80639858cf19116100f25780639858cf1914610529578063a0712d681461053f578063a22cb46514610552578063b6f3ce0014610572578063b88d4fde1461059257600080fd5b80638d859f3e146104c05780638da5cb5b146104d657806391b7f5ed146104f457806395d89b411461051457600080fd5b806353630745116101b15780636c0360eb116101755780636c0360eb146104415780636f8b44b01461045657806370a0823114610476578063715018a614610496578063814c3634146104ab57600080fd5b8063536307451461038057806355f804b3146103a0578063603f4d52146103c05780636352211e1461040c578063698982ba1461042c57600080fd5b806318160ddd116101f857806318160ddd146102db57806323b872dd146102fe5780633ccfd60b1461031e57806342842e0e14610333578063438b63001461035357600080fd5b806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281578063095ea7b3146102b9575b600080fd5b34801561023657600080fd5b5061024a610245366004611ff4565b6106ea565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b5061027461073c565b60405161025691906121a8565b34801561028d57600080fd5b506102a161029c366004612077565b6107ce565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102d96102d4366004611fca565b610812565b005b3480156102e757600080fd5b50600154600054035b604051908152602001610256565b34801561030a57600080fd5b506102d9610319366004611ed6565b610899565b34801561032a57600080fd5b506102d96108a4565b34801561033f57600080fd5b506102d961034e366004611ed6565b6109a8565b34801561035f57600080fd5b5061037361036e366004611e88565b6109c3565b6040516102569190612164565b34801561038c57600080fd5b506102d961039b366004612077565b610b04565b3480156103ac57600080fd5b506102d96103bb36600461202e565b610b33565b3480156103cc57600080fd5b506103d5610b74565b6040805197151588526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610256565b34801561041857600080fd5b506102a1610427366004612077565b610bc1565b34801561043857600080fd5b506102d9610bd3565b34801561044d57600080fd5b50610274610c58565b34801561046257600080fd5b506102d9610471366004612077565b610ce6565b34801561048257600080fd5b506102f0610491366004611e88565b610d15565b3480156104a257600080fd5b506102d9610d64565b3480156104b757600080fd5b506102d9610d98565b3480156104cc57600080fd5b506102f0600d5481565b3480156104e257600080fd5b506008546001600160a01b03166102a1565b34801561050057600080fd5b506102d961050f366004612077565b610dd6565b34801561052057600080fd5b50610274610e05565b34801561053557600080fd5b506102f0600e5481565b6102d961054d366004612077565b610e14565b34801561055e57600080fd5b506102d961056d366004611f8e565b6110e3565b34801561057e57600080fd5b506102d961058d366004612077565b611179565b34801561059e57600080fd5b506102d96105ad366004611f12565b6111a8565b3480156105be57600080fd5b506102746105cd366004612077565b6111f2565b3480156105de57600080fd5b506102f0600f5481565b3480156105f457600080fd5b506102f0600b5481565b34801561060a57600080fd5b5061024a610619366004611ea3565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6102d96106553660046120a9565b6112bd565b34801561066657600080fd5b5060105461024a9060ff1681565b34801561068057600080fd5b506102d961068f366004611e88565b61134f565b3480156106a057600080fd5b506102d96106af366004611fca565b6113ea565b3480156106c057600080fd5b506102f0600c5481565b3480156106d657600080fd5b506102d96106e5366004612077565b61151e565b60006001600160e01b031982166380ac58cd60e01b148061071b57506001600160e01b03198216635b5e139f60e01b145b8061073657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461074b9061227e565b80601f01602080910402602001604051908101604052809291908181526020018280546107779061227e565b80156107c45780601f10610799576101008083540402835291602001916107c4565b820191906000526020600020905b8154815290600101906020018083116107a757829003601f168201915b5050505050905090565b60006107d982611595565b6107f6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061081d82610bc1565b9050806001600160a01b0316836001600160a01b031614156108525760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146108895761086c8133610619565b610889576040516367d9dca160e11b815260040160405180910390fd5b6108948383836115c0565b505050565b61089483838361161c565b6008546001600160a01b031633146108d75760405162461bcd60e51b81526004016108ce906121bb565b60405180910390fd5b6002600954141561092a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108ce565b600260095560006109436008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461098d576040519150601f19603f3d011682016040523d82523d6000602084013e610992565b606091505b50509050806109a057600080fd5b506001600955565b610894838383604051806020016040528060008152506111a8565b606060006109d083610d15565b905060008167ffffffffffffffff8111156109ed576109ed61232a565b604051908082528060200260200182016040528015610a16578160200160208202803683370190505b509050600080805b8482108015610a2e575060005483105b15610af957600083815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290610ae65780516001600160a01b031615610aa057805191505b876001600160a01b0316826001600160a01b03161415610ae65783858481518110610acd57610acd612314565b602090810291909101015282610ae2816122b9565b9350505b83610af0816122b9565b94505050610a1e565b509195945050505050565b6008546001600160a01b03163314610b2e5760405162461bcd60e51b81526004016108ce906121bb565b600f55565b6008546001600160a01b03163314610b5d5760405162461bcd60e51b81526004016108ce906121bb565b8051610b7090600a906020840190611d5d565b5050565b6000806000806000806000601060009054906101000a900460ff16600e54600f54600d54600c54610ba86001546000540390565b600b54959d949c50929a50909850965094509092509050565b6000610bcc8261180b565b5192915050565b6008546001600160a01b03163314610bfd5760405162461bcd60e51b81526004016108ce906121bb565b600b546001546000540310610c4b5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b60448201526064016108ce565b610c56336014611927565b565b600a8054610c659061227e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c919061227e565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b505050505081565b6008546001600160a01b03163314610d105760405162461bcd60e51b81526004016108ce906121bb565b600b55565b60006001600160a01b038216610d3e576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610d8e5760405162461bcd60e51b81526004016108ce906121bb565b610c566000611941565b6008546001600160a01b03163314610dc25760405162461bcd60e51b81526004016108ce906121bb565b6010805460ff19811660ff90911615179055565b6008546001600160a01b03163314610e005760405162461bcd60e51b81526004016108ce906121bb565b600d55565b60606003805461074b9061227e565b80323314610e535760405162461bcd60e51b815260206004820152600c60248201526b4e6f20636f6e74726163747360a01b60448201526064016108ce565b60105460ff16610e9b5760405162461bcd60e51b8152602060048201526013602482015272135a5b9d081a5cc81b9bdd08185b1b1bddd959606a1b60448201526064016108ce565b600e546001546000540310610f5f573481600d54610eb9919061221c565b14610efc5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016108ce565b600081118015610f0e5750600c548111155b610f5a5760405162461bcd60e51b815260206004820152601860248201527f45786365656473206d617820706169642070657220747821000000000000000060448201526064016108ce565b61107b565b600081118015610f715750600f548111155b610fbd5760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d61782066726565206d696e74207065722074780000000060448201526064016108ce565b600f546040516370a0823160e01b815233600482015230906370a082319060240160206040518083038186803b158015610ff657600080fd5b505afa15801561100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102e9190612090565b1061107b5760405162461bcd60e51b815260206004820181905260248201527f45786365656473206d61782066726565206d696e74207065722077616c6c657460448201526064016108ce565b600b548161108c6001546000540390565b61109691906121f0565b11156110d95760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016108ce565b610b703383611927565b6001600160a01b03821633141561110d5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146111a35760405162461bcd60e51b81526004016108ce906121bb565b600c55565b6111b384848461161c565b6001600160a01b0383163b156111ec576111cf84848484611993565b6111ec576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606111fd82611595565b6112615760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108ce565b600061126b611a8b565b9050600081511161128b57604051806020016040528060008152506112b6565b8061129584611a9a565b6040516020016112a69291906120f8565b6040516020818303038152906040525b9392505050565b6008546001600160a01b031633146112e75760405162461bcd60e51b81526004016108ce906121bb565b600b54826112f86001546000540390565b61130291906121f0565b11156113455760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016108ce565b610b708183611927565b6008546001600160a01b031633146113795760405162461bcd60e51b81526004016108ce906121bb565b6001600160a01b0381166113de5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ce565b6113e781611941565b50565b6008546001600160a01b031633146114145760405162461bcd60e51b81526004016108ce906121bb565b600260095414156114675760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108ce565b6002600955478111156114b45760405162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e742062616c616e63652160581b60448201526064016108ce565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611501576040519150601f19603f3d011682016040523d82523d6000602084013e611506565b606091505b505090508061151457600080fd5b5050600160095550565b6008546001600160a01b031633146115485760405162461bcd60e51b81526004016108ce906121bb565b600b548111156115905760405162461bcd60e51b81526020600482015260136024820152724e6f742076616c6964207175616e746974792160681b60448201526064016108ce565b600e55565b6000805482108015610736575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006116278261180b565b9050836001600160a01b031681600001516001600160a01b03161461165e5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061167c575061167c8533610619565b8061169757503361168c846107ce565b6001600160a01b0316145b9050806116b757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166116de57604051633a954ecd60e21b815260040160405180910390fd5b6116ea600084876115c0565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217835587018084529220805491939091166117c05760005482146117c0578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051606081018252600080825260208201819052918101919091528160005481101561190e57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061190c5780516001600160a01b0316156118a2579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611907579392505050565b6118a2565b505b604051636f96cda160e11b815260040160405180910390fd5b610b70828260405180602001604052806000815250611b98565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906119c8903390899088908890600401612127565b602060405180830381600087803b1580156119e257600080fd5b505af1925050508015611a12575060408051601f3d908101601f19168201909252611a0f91810190612011565b60015b611a6d573d808015611a40576040519150601f19603f3d011682016040523d82523d6000602084013e611a45565b606091505b508051611a65576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461074b9061227e565b606081611abe5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ae85780611ad2816122b9565b9150611ae19050600a83612208565b9150611ac2565b60008167ffffffffffffffff811115611b0357611b0361232a565b6040519080825280601f01601f191660200182016040528015611b2d576020820181803683370190505b5090505b8415611a8357611b4260018361223b565b9150611b4f600a866122d4565b611b5a9060306121f0565b60f81b818381518110611b6f57611b6f612314565b60200101906001600160f81b031916908160001a905350611b91600a86612208565b9450611b31565b6000546001600160a01b038416611bc157604051622e076360e81b815260040160405180910390fd5b82611bdf5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15611d08575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611cd16000878480600101955087611993565b611cee576040516368d2bf6b60e11b815260040160405180910390fd5b808210611c86578260005414611d0357600080fd5b611d4d565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611d09575b5060009081556111ec9085838684565b828054611d699061227e565b90600052602060002090601f016020900481019282611d8b5760008555611dd1565b82601f10611da457805160ff1916838001178555611dd1565b82800160010185558215611dd1579182015b82811115611dd1578251825591602001919060010190611db6565b50611ddd929150611de1565b5090565b5b80821115611ddd5760008155600101611de2565b600067ffffffffffffffff80841115611e1157611e1161232a565b604051601f8501601f19908116603f01168101908282118183101715611e3957611e3961232a565b81604052809350858152868686011115611e5257600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611e8357600080fd5b919050565b600060208284031215611e9a57600080fd5b6112b682611e6c565b60008060408385031215611eb657600080fd5b611ebf83611e6c565b9150611ecd60208401611e6c565b90509250929050565b600080600060608486031215611eeb57600080fd5b611ef484611e6c565b9250611f0260208501611e6c565b9150604084013590509250925092565b60008060008060808587031215611f2857600080fd5b611f3185611e6c565b9350611f3f60208601611e6c565b925060408501359150606085013567ffffffffffffffff811115611f6257600080fd5b8501601f81018713611f7357600080fd5b611f8287823560208401611df6565b91505092959194509250565b60008060408385031215611fa157600080fd5b611faa83611e6c565b915060208301358015158114611fbf57600080fd5b809150509250929050565b60008060408385031215611fdd57600080fd5b611fe683611e6c565b946020939093013593505050565b60006020828403121561200657600080fd5b81356112b681612340565b60006020828403121561202357600080fd5b81516112b681612340565b60006020828403121561204057600080fd5b813567ffffffffffffffff81111561205757600080fd5b8201601f8101841361206857600080fd5b611a8384823560208401611df6565b60006020828403121561208957600080fd5b5035919050565b6000602082840312156120a257600080fd5b5051919050565b600080604083850312156120bc57600080fd5b82359150611ecd60208401611e6c565b600081518084526120e4816020860160208601612252565b601f01601f19169290920160200192915050565b6000835161210a818460208801612252565b83519083019061211e818360208801612252565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061215a908301846120cc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561219c57835183529284019291840191600101612180565b50909695505050505050565b6020815260006112b660208301846120cc565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115612203576122036122e8565b500190565b600082612217576122176122fe565b500490565b6000816000190483118215151615612236576122366122e8565b500290565b60008282101561224d5761224d6122e8565b500390565b60005b8381101561226d578181015183820152602001612255565b838111156111ec5750506000910152565b600181811c9082168061229257607f821691505b602082108114156122b357634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122cd576122cd6122e8565b5060010190565b6000826122e3576122e36122fe565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146113e757600080fdfea2646970667358221220f8b5a6395dcdf8658a64f3cc1db54c010a2c7f7b7039081396878ebde632c69464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102255760003560e01c80638d859f3e11610123578063c87b56dd116100ab578063f216ddfd1161006f578063f216ddfd1461065a578063f2fde38b14610674578063f3fef3a314610694578063f43a22dc146106b4578063f676308a146106ca57600080fd5b8063c87b56dd146105b2578063cd90e5af146105d2578063d5abeb01146105e8578063e985e9c5146105fe578063efbd73f41461064757600080fd5b80639858cf19116100f25780639858cf1914610529578063a0712d681461053f578063a22cb46514610552578063b6f3ce0014610572578063b88d4fde1461059257600080fd5b80638d859f3e146104c05780638da5cb5b146104d657806391b7f5ed146104f457806395d89b411461051457600080fd5b806353630745116101b15780636c0360eb116101755780636c0360eb146104415780636f8b44b01461045657806370a0823114610476578063715018a614610496578063814c3634146104ab57600080fd5b8063536307451461038057806355f804b3146103a0578063603f4d52146103c05780636352211e1461040c578063698982ba1461042c57600080fd5b806318160ddd116101f857806318160ddd146102db57806323b872dd146102fe5780633ccfd60b1461031e57806342842e0e14610333578063438b63001461035357600080fd5b806301ffc9a71461022a57806306fdde031461025f578063081812fc14610281578063095ea7b3146102b9575b600080fd5b34801561023657600080fd5b5061024a610245366004611ff4565b6106ea565b60405190151581526020015b60405180910390f35b34801561026b57600080fd5b5061027461073c565b60405161025691906121a8565b34801561028d57600080fd5b506102a161029c366004612077565b6107ce565b6040516001600160a01b039091168152602001610256565b3480156102c557600080fd5b506102d96102d4366004611fca565b610812565b005b3480156102e757600080fd5b50600154600054035b604051908152602001610256565b34801561030a57600080fd5b506102d9610319366004611ed6565b610899565b34801561032a57600080fd5b506102d96108a4565b34801561033f57600080fd5b506102d961034e366004611ed6565b6109a8565b34801561035f57600080fd5b5061037361036e366004611e88565b6109c3565b6040516102569190612164565b34801561038c57600080fd5b506102d961039b366004612077565b610b04565b3480156103ac57600080fd5b506102d96103bb36600461202e565b610b33565b3480156103cc57600080fd5b506103d5610b74565b6040805197151588526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610256565b34801561041857600080fd5b506102a1610427366004612077565b610bc1565b34801561043857600080fd5b506102d9610bd3565b34801561044d57600080fd5b50610274610c58565b34801561046257600080fd5b506102d9610471366004612077565b610ce6565b34801561048257600080fd5b506102f0610491366004611e88565b610d15565b3480156104a257600080fd5b506102d9610d64565b3480156104b757600080fd5b506102d9610d98565b3480156104cc57600080fd5b506102f0600d5481565b3480156104e257600080fd5b506008546001600160a01b03166102a1565b34801561050057600080fd5b506102d961050f366004612077565b610dd6565b34801561052057600080fd5b50610274610e05565b34801561053557600080fd5b506102f0600e5481565b6102d961054d366004612077565b610e14565b34801561055e57600080fd5b506102d961056d366004611f8e565b6110e3565b34801561057e57600080fd5b506102d961058d366004612077565b611179565b34801561059e57600080fd5b506102d96105ad366004611f12565b6111a8565b3480156105be57600080fd5b506102746105cd366004612077565b6111f2565b3480156105de57600080fd5b506102f0600f5481565b3480156105f457600080fd5b506102f0600b5481565b34801561060a57600080fd5b5061024a610619366004611ea3565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6102d96106553660046120a9565b6112bd565b34801561066657600080fd5b5060105461024a9060ff1681565b34801561068057600080fd5b506102d961068f366004611e88565b61134f565b3480156106a057600080fd5b506102d96106af366004611fca565b6113ea565b3480156106c057600080fd5b506102f0600c5481565b3480156106d657600080fd5b506102d96106e5366004612077565b61151e565b60006001600160e01b031982166380ac58cd60e01b148061071b57506001600160e01b03198216635b5e139f60e01b145b8061073657506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606002805461074b9061227e565b80601f01602080910402602001604051908101604052809291908181526020018280546107779061227e565b80156107c45780601f10610799576101008083540402835291602001916107c4565b820191906000526020600020905b8154815290600101906020018083116107a757829003601f168201915b5050505050905090565b60006107d982611595565b6107f6576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b600061081d82610bc1565b9050806001600160a01b0316836001600160a01b031614156108525760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b038216146108895761086c8133610619565b610889576040516367d9dca160e11b815260040160405180910390fd5b6108948383836115c0565b505050565b61089483838361161c565b6008546001600160a01b031633146108d75760405162461bcd60e51b81526004016108ce906121bb565b60405180910390fd5b6002600954141561092a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108ce565b600260095560006109436008546001600160a01b031690565b6001600160a01b03164760405160006040518083038185875af1925050503d806000811461098d576040519150601f19603f3d011682016040523d82523d6000602084013e610992565b606091505b50509050806109a057600080fd5b506001600955565b610894838383604051806020016040528060008152506111a8565b606060006109d083610d15565b905060008167ffffffffffffffff8111156109ed576109ed61232a565b604051908082528060200260200182016040528015610a16578160200160208202803683370190505b509050600080805b8482108015610a2e575060005483105b15610af957600083815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff16151591810182905290610ae65780516001600160a01b031615610aa057805191505b876001600160a01b0316826001600160a01b03161415610ae65783858481518110610acd57610acd612314565b602090810291909101015282610ae2816122b9565b9350505b83610af0816122b9565b94505050610a1e565b509195945050505050565b6008546001600160a01b03163314610b2e5760405162461bcd60e51b81526004016108ce906121bb565b600f55565b6008546001600160a01b03163314610b5d5760405162461bcd60e51b81526004016108ce906121bb565b8051610b7090600a906020840190611d5d565b5050565b6000806000806000806000601060009054906101000a900460ff16600e54600f54600d54600c54610ba86001546000540390565b600b54959d949c50929a50909850965094509092509050565b6000610bcc8261180b565b5192915050565b6008546001600160a01b03163314610bfd5760405162461bcd60e51b81526004016108ce906121bb565b600b546001546000540310610c4b5760405162461bcd60e51b81526020600482015260146024820152734d617820737570706c792065786365656465642160601b60448201526064016108ce565b610c56336014611927565b565b600a8054610c659061227e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c919061227e565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b505050505081565b6008546001600160a01b03163314610d105760405162461bcd60e51b81526004016108ce906121bb565b600b55565b60006001600160a01b038216610d3e576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b031660009081526005602052604090205467ffffffffffffffff1690565b6008546001600160a01b03163314610d8e5760405162461bcd60e51b81526004016108ce906121bb565b610c566000611941565b6008546001600160a01b03163314610dc25760405162461bcd60e51b81526004016108ce906121bb565b6010805460ff19811660ff90911615179055565b6008546001600160a01b03163314610e005760405162461bcd60e51b81526004016108ce906121bb565b600d55565b60606003805461074b9061227e565b80323314610e535760405162461bcd60e51b815260206004820152600c60248201526b4e6f20636f6e74726163747360a01b60448201526064016108ce565b60105460ff16610e9b5760405162461bcd60e51b8152602060048201526013602482015272135a5b9d081a5cc81b9bdd08185b1b1bddd959606a1b60448201526064016108ce565b600e546001546000540310610f5f573481600d54610eb9919061221c565b14610efc5760405162461bcd60e51b8152602060048201526013602482015272496e73756666696369656e742066756e64732160681b60448201526064016108ce565b600081118015610f0e5750600c548111155b610f5a5760405162461bcd60e51b815260206004820152601860248201527f45786365656473206d617820706169642070657220747821000000000000000060448201526064016108ce565b61107b565b600081118015610f715750600f548111155b610fbd5760405162461bcd60e51b815260206004820152601c60248201527f45786365656473206d61782066726565206d696e74207065722074780000000060448201526064016108ce565b600f546040516370a0823160e01b815233600482015230906370a082319060240160206040518083038186803b158015610ff657600080fd5b505afa15801561100a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102e9190612090565b1061107b5760405162461bcd60e51b815260206004820181905260248201527f45786365656473206d61782066726565206d696e74207065722077616c6c657460448201526064016108ce565b600b548161108c6001546000540390565b61109691906121f0565b11156110d95760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016108ce565b610b703383611927565b6001600160a01b03821633141561110d5760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6008546001600160a01b031633146111a35760405162461bcd60e51b81526004016108ce906121bb565b600c55565b6111b384848461161c565b6001600160a01b0383163b156111ec576111cf84848484611993565b6111ec576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60606111fd82611595565b6112615760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016108ce565b600061126b611a8b565b9050600081511161128b57604051806020016040528060008152506112b6565b8061129584611a9a565b6040516020016112a69291906120f8565b6040516020818303038152906040525b9392505050565b6008546001600160a01b031633146112e75760405162461bcd60e51b81526004016108ce906121bb565b600b54826112f86001546000540390565b61130291906121f0565b11156113455760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b60448201526064016108ce565b610b708183611927565b6008546001600160a01b031633146113795760405162461bcd60e51b81526004016108ce906121bb565b6001600160a01b0381166113de5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108ce565b6113e781611941565b50565b6008546001600160a01b031633146114145760405162461bcd60e51b81526004016108ce906121bb565b600260095414156114675760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108ce565b6002600955478111156114b45760405162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e742062616c616e63652160581b60448201526064016108ce565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611501576040519150601f19603f3d011682016040523d82523d6000602084013e611506565b606091505b505090508061151457600080fd5b5050600160095550565b6008546001600160a01b031633146115485760405162461bcd60e51b81526004016108ce906121bb565b600b548111156115905760405162461bcd60e51b81526020600482015260136024820152724e6f742076616c6964207175616e746974792160681b60448201526064016108ce565b600e55565b6000805482108015610736575050600090815260046020526040902054600160e01b900460ff161590565b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b60006116278261180b565b9050836001600160a01b031681600001516001600160a01b03161461165e5760405162a1148160e81b815260040160405180910390fd5b6000336001600160a01b038616148061167c575061167c8533610619565b8061169757503361168c846107ce565b6001600160a01b0316145b9050806116b757604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0384166116de57604051633a954ecd60e21b815260040160405180910390fd5b6116ea600084876115c0565b6001600160a01b038581166000908152600560209081526040808320805467ffffffffffffffff1980821667ffffffffffffffff92831660001901831617909255898616808652838620805493841693831660019081018416949094179055898652600490945282852080546001600160e01b031916909417600160a01b429092169190910217835587018084529220805491939091166117c05760005482146117c0578054602086015167ffffffffffffffff16600160a01b026001600160e01b03199091166001600160a01b038a16171781555b50505082846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b60408051606081018252600080825260208201819052918101919091528160005481101561190e57600081815260046020908152604091829020825160608101845290546001600160a01b0381168252600160a01b810467ffffffffffffffff1692820192909252600160e01b90910460ff1615159181018290529061190c5780516001600160a01b0316156118a2579392505050565b5060001901600081815260046020908152604091829020825160608101845290546001600160a01b038116808352600160a01b820467ffffffffffffffff1693830193909352600160e01b900460ff1615159281019290925215611907579392505050565b6118a2565b505b604051636f96cda160e11b815260040160405180910390fd5b610b70828260405180602001604052806000815250611b98565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906119c8903390899088908890600401612127565b602060405180830381600087803b1580156119e257600080fd5b505af1925050508015611a12575060408051601f3d908101601f19168201909252611a0f91810190612011565b60015b611a6d573d808015611a40576040519150601f19603f3d011682016040523d82523d6000602084013e611a45565b606091505b508051611a65576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6060600a805461074b9061227e565b606081611abe5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611ae85780611ad2816122b9565b9150611ae19050600a83612208565b9150611ac2565b60008167ffffffffffffffff811115611b0357611b0361232a565b6040519080825280601f01601f191660200182016040528015611b2d576020820181803683370190505b5090505b8415611a8357611b4260018361223b565b9150611b4f600a866122d4565b611b5a9060306121f0565b60f81b818381518110611b6f57611b6f612314565b60200101906001600160f81b031916908160001a905350611b91600a86612208565b9450611b31565b6000546001600160a01b038416611bc157604051622e076360e81b815260040160405180910390fd5b82611bdf5760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038416600081815260056020908152604080832080546fffffffffffffffffffffffffffffffff19811667ffffffffffffffff8083168b0181169182176801000000000000000067ffffffffffffffff1990941690921783900481168b01811690920217909155858452600490925290912080546001600160e01b0319168317600160a01b42909316929092029190911790558190818501903b15611d08575b60405182906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4611cd16000878480600101955087611993565b611cee576040516368d2bf6b60e11b815260040160405180910390fd5b808210611c86578260005414611d0357600080fd5b611d4d565b5b6040516001830192906001600160a01b038816906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210611d09575b5060009081556111ec9085838684565b828054611d699061227e565b90600052602060002090601f016020900481019282611d8b5760008555611dd1565b82601f10611da457805160ff1916838001178555611dd1565b82800160010185558215611dd1579182015b82811115611dd1578251825591602001919060010190611db6565b50611ddd929150611de1565b5090565b5b80821115611ddd5760008155600101611de2565b600067ffffffffffffffff80841115611e1157611e1161232a565b604051601f8501601f19908116603f01168101908282118183101715611e3957611e3961232a565b81604052809350858152868686011115611e5257600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114611e8357600080fd5b919050565b600060208284031215611e9a57600080fd5b6112b682611e6c565b60008060408385031215611eb657600080fd5b611ebf83611e6c565b9150611ecd60208401611e6c565b90509250929050565b600080600060608486031215611eeb57600080fd5b611ef484611e6c565b9250611f0260208501611e6c565b9150604084013590509250925092565b60008060008060808587031215611f2857600080fd5b611f3185611e6c565b9350611f3f60208601611e6c565b925060408501359150606085013567ffffffffffffffff811115611f6257600080fd5b8501601f81018713611f7357600080fd5b611f8287823560208401611df6565b91505092959194509250565b60008060408385031215611fa157600080fd5b611faa83611e6c565b915060208301358015158114611fbf57600080fd5b809150509250929050565b60008060408385031215611fdd57600080fd5b611fe683611e6c565b946020939093013593505050565b60006020828403121561200657600080fd5b81356112b681612340565b60006020828403121561202357600080fd5b81516112b681612340565b60006020828403121561204057600080fd5b813567ffffffffffffffff81111561205757600080fd5b8201601f8101841361206857600080fd5b611a8384823560208401611df6565b60006020828403121561208957600080fd5b5035919050565b6000602082840312156120a257600080fd5b5051919050565b600080604083850312156120bc57600080fd5b82359150611ecd60208401611e6c565b600081518084526120e4816020860160208601612252565b601f01601f19169290920160200192915050565b6000835161210a818460208801612252565b83519083019061211e818360208801612252565b01949350505050565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061215a908301846120cc565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561219c57835183529284019291840191600101612180565b50909695505050505050565b6020815260006112b660208301846120cc565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60008219821115612203576122036122e8565b500190565b600082612217576122176122fe565b500490565b6000816000190483118215151615612236576122366122e8565b500290565b60008282101561224d5761224d6122e8565b500390565b60005b8381101561226d578181015183820152602001612255565b838111156111ec5750506000910152565b600181811c9082168061229257607f821691505b602082108114156122b357634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156122cd576122cd6122e8565b5060010190565b6000826122e3576122e36122fe565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b0319811681146113e757600080fdfea2646970667358221220f8b5a6395dcdf8658a64f3cc1db54c010a2c7f7b7039081396878ebde632c69464736f6c63430008070033

Deployed Bytecode Sourcemap

22073:4596:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10574:305;;;;;;;;;;-1:-1:-1;10574:305:0;;;;;:::i;:::-;;:::i;:::-;;;6941:14:1;;6934:22;6916:41;;6904:2;6889:18;10574:305:0;;;;;;;;12594:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13622:204::-;;;;;;;;;;-1:-1:-1;13622:204:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5602:32:1;;;5584:51;;5572:2;5557:18;13622:204:0;5438:203:1;13242:372:0;;;;;;;;;;-1:-1:-1;13242:372:0;;;;;:::i;:::-;;:::i;:::-;;10239:170;;;;;;;;;;-1:-1:-1;10360:12:0;;10292:7;10344:13;:28;10239:170;;;13006:25:1;;;12994:2;12979:18;10239:170:0;12860:177:1;14301:170:0;;;;;;;;;;-1:-1:-1;14301:170:0;;;;;:::i;:::-;;:::i;25980:160::-;;;;;;;;;;;;;:::i;14479:185::-;;;;;;;;;;-1:-1:-1;14479:185:0;;;;;:::i;:::-;;:::i;23500:885::-;;;;;;;;;;-1:-1:-1;23500:885:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;25546:120::-;;;;;;;;;;-1:-1:-1;25546:120:0;;;;;:::i;:::-;;:::i;25874:98::-;;;;;;;;;;-1:-1:-1;25874:98:0;;;;;:::i;:::-;;:::i;26422:242::-;;;;;;;;;;;;;:::i;:::-;;;;7302:14:1;;7295:22;7277:41;;7349:2;7334:18;;7327:34;;;;7377:18;;;7370:34;;;;7435:2;7420:18;;7413:34;;;;7478:3;7463:19;;7456:35;7522:3;7507:19;;7500:35;7566:3;7551:19;;7544:35;7264:3;7249:19;26422:242:0;6968:617:1;12461:125:0;;;;;;;;;;-1:-1:-1;12461:125:0;;;;;:::i;:::-;;:::i;24974:151::-;;;;;;;;;;;;;:::i;22171:26::-;;;;;;;;;;;;;:::i;25766:100::-;;;;;;;;;;-1:-1:-1;25766:100:0;;;;;:::i;:::-;;:::i;10889:206::-;;;;;;;;;;-1:-1:-1;10889:206:0;;;;;:::i;:::-;;:::i;2629:103::-;;;;;;;;;;;;;:::i;25352:75::-;;;;;;;;;;;;;:::i;22280:34::-;;;;;;;;;;;;;;;;2406:87;;;;;;;;;;-1:-1:-1;2479:6:0;;-1:-1:-1;;;;;2479:6:0;2406:87;;25674:84;;;;;;;;;;-1:-1:-1;25674:84:0;;;;;:::i;:::-;;:::i;12702:104::-;;;;;;;;;;;;;:::i;22321:33::-;;;;;;;;;;;;;;;;23191:119;;;;;;:::i;:::-;;:::i;13834:287::-;;;;;;;;;;-1:-1:-1;13834:287:0;;;;;:::i;:::-;;:::i;25435:103::-;;;;;;;;;;-1:-1:-1;25435:103:0;;;;;:::i;:::-;;:::i;14672:370::-;;;;;;;;;;-1:-1:-1;14672:370:0;;;;;:::i;:::-;;:::i;24502:356::-;;;;;;;;;;-1:-1:-1;24502:356:0;;;;;:::i;:::-;;:::i;22361:34::-;;;;;;;;;;;;;;;;22204:32;;;;;;;;;;;;;;;;14129:164;;;;;;;;;;-1:-1:-1;14129:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;14250:25:0;;;14226:4;14250:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;14129:164;25133:211;;;;;;:::i;:::-;;:::i;22402:23::-;;;;;;;;;;-1:-1:-1;22402:23:0;;;;;;;;2740:201;;;;;;;;;;-1:-1:-1;2740:201:0;;;;;:::i;:::-;;:::i;26148:266::-;;;;;;;;;;-1:-1:-1;26148:266:0;;;;;:::i;:::-;;:::i;22243:30::-;;;;;;;;;;;;;;;;23318:174;;;;;;;;;;-1:-1:-1;23318:174:0;;;;;:::i;:::-;;:::i;10574:305::-;10676:4;-1:-1:-1;;;;;;10713:40:0;;-1:-1:-1;;;10713:40:0;;:105;;-1:-1:-1;;;;;;;10770:48:0;;-1:-1:-1;;;10770:48:0;10713:105;:158;;;-1:-1:-1;;;;;;;;;;7080:40:0;;;10835:36;10693:178;10574:305;-1:-1:-1;;10574:305:0:o;12594:100::-;12648:13;12681:5;12674:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12594:100;:::o;13622:204::-;13690:7;13715:16;13723:7;13715;:16::i;:::-;13710:64;;13740:34;;-1:-1:-1;;;13740:34:0;;;;;;;;;;;13710:64;-1:-1:-1;13794:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;13794:24:0;;13622:204::o;13242:372::-;13315:13;13331:24;13347:7;13331:15;:24::i;:::-;13315:40;;13376:5;-1:-1:-1;;;;;13370:11:0;:2;-1:-1:-1;;;;;13370:11:0;;13366:48;;;13390:24;;-1:-1:-1;;;13390:24:0;;;;;;;;;;;13366:48;2032:10;-1:-1:-1;;;;;13431:21:0;;;13427:139;;13458:37;13475:5;2032:10;14129:164;:::i;13458:37::-;13454:112;;13519:35;;-1:-1:-1;;;13519:35:0;;;;;;;;;;;13454:112;13578:28;13587:2;13591:7;13600:5;13578:8;:28::i;:::-;13304:310;13242:372;;:::o;14301:170::-;14435:28;14445:4;14451:2;14455:7;14435:9;:28::i;25980:160::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;;;;;;;;;189:1:::1;335:7;;:19;;327:63;;;::::0;-1:-1:-1;;;327:63:0;;12013:2:1;327:63:0::1;::::0;::::1;11995:21:1::0;12052:2;12032:18;;;12025:30;12091:33;12071:18;;;12064:61;12142:18;;327:63:0::1;11811:355:1::0;327:63:0::1;189:1;401:7;:18:::0;26042:7:::2;26063;2479:6:::0;;-1:-1:-1;;;;;2479:6:0;;2406:87;26063:7:::2;-1:-1:-1::0;;;;;26055:21:0::2;26084;26055:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26041:69;;;26129:2;26121:11;;;::::0;::::2;;-1:-1:-1::0;145:1:0::1;444:7;:22:::0;25980:160::o;14479:185::-;14617:39;14634:4;14640:2;14644:7;14617:39;;;;;;;;;;;;:16;:39::i;23500:885::-;23560:16;23589:23;23615:17;23625:6;23615:9;:17::i;:::-;23589:43;;23643:30;23690:15;23676:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23676:30:0;-1:-1:-1;23643:63:0;-1:-1:-1;23717:22:0;23768:23;23806:26;23843:504;23868:15;23850;:33;:67;;;;;23904:13;;23887:14;:30;23850:67;23843:504;;;23930:31;23964:27;;;:11;:27;;;;;;;;;23930:61;;;;;;;;;-1:-1:-1;;;;;23930:61:0;;;;-1:-1:-1;;;23930:61:0;;;;;;;;;;;-1:-1:-1;;;23930:61:0;;;;;;;;;;;;;;24002:307;;24044:14;;-1:-1:-1;;;;;24044:28:0;;24040:100;;24110:14;;;-1:-1:-1;24040:100:0;24180:6;-1:-1:-1;;;;;24158:28:0;:18;-1:-1:-1;;;;;24158:28:0;;24154:144;;;24236:14;24203:13;24217:15;24203:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;24265:17;;;;:::i;:::-;;;;24154:144;24319:16;;;;:::i;:::-;;;;23919:428;23843:504;;;-1:-1:-1;24364:13:0;;23500:885;-1:-1:-1;;;;;23500:885:0:o;25546:120::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;25626:15:::1;:32:::0;25546:120::o;25874:98::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;25946:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;:::-;;25874:98:::0;:::o;26422:242::-;26466:4;26472:7;26481;26490;26499;26508;26517;26559:11;;;;;;;;;;;26572;;26585:15;;26602:5;;26609:10;;26621:13;10360:12;;10292:7;10344:13;:28;;10239:170;26621:13;26636:9;;26537:119;;;;-1:-1:-1;26537:119:0;;-1:-1:-1;26537:119:0;;-1:-1:-1;26537:119:0;-1:-1:-1;26537:119:0;-1:-1:-1;26636:9:0;;-1:-1:-1;26422:242:0;-1:-1:-1;26422:242:0:o;12461:125::-;12525:7;12552:21;12565:7;12552:12;:21::i;:::-;:26;;12461:125;-1:-1:-1;;12461:125:0:o;24974:151::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;25047:9:::1;::::0;10360:12;;10292:7;10344:13;:28;25031:25:::1;25023:58;;;::::0;-1:-1:-1;;;25023:58:0;;11303:2:1;25023:58:0::1;::::0;::::1;11285:21:1::0;11342:2;11322:18;;;11315:30;-1:-1:-1;;;11361:18:1;;;11354:50;11421:18;;25023:58:0::1;11101:344:1::0;25023:58:0::1;25092:25;25102:10;25114:2;25092:9;:25::i;:::-;24974:151::o:0;22171:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25766:100::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;25836:9:::1;:22:::0;25766:100::o;10889:206::-;10953:7;-1:-1:-1;;;;;10977:19:0;;10973:60;;11005:28;;-1:-1:-1;;;11005:28:0;;;;;;;;;;;10973:60;-1:-1:-1;;;;;;11059:19:0;;;;;:12;:19;;;;;:27;;;;10889:206::o;2629:103::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;2694:30:::1;2721:1;2694:18;:30::i;25352:75::-:0;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;25411:11:::1;::::0;;-1:-1:-1;;25396:26:0;::::1;25411:11;::::0;;::::1;25410:12;25396:26;::::0;;25352:75::o;25674:84::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;25736:5:::1;:14:::0;25674:84::o;12702:104::-;12758:13;12791:7;12784:14;;;;;:::i;23191:119::-;23252:7;22555:9;22568:10;22555:23;22547:48;;;;-1:-1:-1;;;22547:48:0;;12373:2:1;22547:48:0;;;12355:21:1;12412:2;12392:18;;;12385:30;-1:-1:-1;;;12431:18:1;;;12424:42;12483:18;;22547:48:0;12171:336:1;22547:48:0;22614:11;;;;22606:43;;;;-1:-1:-1;;;22606:43:0;;8776:2:1;22606:43:0;;;8758:21:1;8815:2;8795:18;;;8788:30;-1:-1:-1;;;8834:18:1;;;8827:49;8893:18;;22606:43:0;8574:343:1;22606:43:0;22681:11;;10360:12;;10292:7;10344:13;:28;22664;22660:426;;22736:9;22725:7;22717:5;;:15;;;;:::i;:::-;:28;22709:60;;;;-1:-1:-1;;;22709:60:0;;12714:2:1;22709:60:0;;;12696:21:1;12753:2;12733:18;;;12726:30;-1:-1:-1;;;12772:18:1;;;12765:49;12831:18;;22709:60:0;12512:343:1;22709:60:0;22802:1;22792:7;:11;:36;;;;;22818:10;;22807:7;:21;;22792:36;22784:73;;;;-1:-1:-1;;;22784:73:0;;8423:2:1;22784:73:0;;;8405:21:1;8462:2;8442:18;;;8435:30;8501:26;8481:18;;;8474:54;8545:18;;22784:73:0;8221:348:1;22784:73:0;22660:426;;;22906:1;22896:7;:11;:41;;;;;22922:15;;22911:7;:26;;22896:41;22888:82;;;;-1:-1:-1;;;22888:82:0;;10598:2:1;22888:82:0;;;10580:21:1;10637:2;10617:18;;;10610:30;10676;10656:18;;;10649:58;10724:18;;22888:82:0;10396:352:1;22888:82:0;23022:15;;22993:26;;-1:-1:-1;;;22993:26:0;;23008:10;22993:26;;;5584:51:1;22993:4:0;;:14;;5557:18:1;;22993:26:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;22985:89;;;;-1:-1:-1;;;22985:89:0;;11652:2:1;22985:89:0;;;11634:21:1;;;11671:18;;;11664:30;11730:34;11710:18;;;11703:62;11782:18;;22985:89:0;11450:356:1;22985:89:0;23131:9;;23120:7;23104:13;10360:12;;10292:7;10344:13;:28;;10239:170;23104:13;:23;;;;:::i;:::-;:36;;23096:67;;;;-1:-1:-1;;;23096:67:0;;9124:2:1;23096:67:0;;;9106:21:1;9163:2;9143:18;;;9136:30;-1:-1:-1;;;9182:18:1;;;9175:48;9240:18;;23096:67:0;8922:342:1;23096:67:0;23272:30:::1;23282:10;23294:7;23272:9;:30::i;13834:287::-:0;-1:-1:-1;;;;;13933:24:0;;2032:10;13933:24;13929:54;;;13966:17;;-1:-1:-1;;;13966:17:0;;;;;;;;;;;13929:54;2032:10;13996:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;13996:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;13996:53:0;;;;;;;;;;14065:48;;6916:41:1;;;13996:42:0;;2032:10;14065:48;;6889:18:1;14065:48:0;;;;;;;13834:287;;:::o;25435:103::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;25507:10:::1;:23:::0;25435:103::o;14672:370::-;14839:28;14849:4;14855:2;14859:7;14839:9;:28::i;:::-;-1:-1:-1;;;;;14882:13:0;;3258:19;:23;14878:157;;14903:56;14934:4;14940:2;14944:7;14953:5;14903:30;:56::i;:::-;14899:136;;14983:40;;-1:-1:-1;;;14983:40:0;;;;;;;;;;;14899:136;14672:370;;;;:::o;24502:356::-;24576:13;24610:17;24618:8;24610:7;:17::i;:::-;24602:77;;;;-1:-1:-1;;;24602:77:0;;10182:2:1;24602:77:0;;;10164:21:1;10221:2;10201:18;;;10194:30;10260:34;10240:18;;;10233:62;-1:-1:-1;;;10311:18:1;;;10304:45;10366:19;;24602:77:0;9980:411:1;24602:77:0;24690:28;24721:10;:8;:10::i;:::-;24690:41;;24780:1;24755:14;24749:28;:32;:101;;;;;;;;;;;;;;;;;24808:14;24824:19;:8;:17;:19::i;:::-;24791:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24749:101;24742:108;24502:356;-1:-1:-1;;;24502:356:0:o;25133:211::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;25264:9:::1;;25253:7;25237:13;10360:12:::0;;10292:7;10344:13;:28;;10239:170;25237:13:::1;:23;;;;:::i;:::-;:36;;25229:67;;;::::0;-1:-1:-1;;;25229:67:0;;9124:2:1;25229:67:0::1;::::0;::::1;9106:21:1::0;9163:2;9143:18;;;9136:30;-1:-1:-1;;;9182:18:1;;;9175:48;9240:18;;25229:67:0::1;8922:342:1::0;25229:67:0::1;25307:29;25317:9;25328:7;25307:9;:29::i;2740:201::-:0;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2829:22:0;::::1;2821:73;;;::::0;-1:-1:-1;;;2821:73:0;;8016:2:1;2821:73:0::1;::::0;::::1;7998:21:1::0;8055:2;8035:18;;;8028:30;8094:34;8074:18;;;8067:62;-1:-1:-1;;;8145:18:1;;;8138:36;8191:19;;2821:73:0::1;7814:402:1::0;2821:73:0::1;2905:28;2924:8;2905:18;:28::i;:::-;2740:201:::0;:::o;26148:266::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;189:1:::1;335:7;;:19;;327:63;;;::::0;-1:-1:-1;;;327:63:0;;12013:2:1;327:63:0::1;::::0;::::1;11995:21:1::0;12052:2;12032:18;;;12025:30;12091:33;12071:18;;;12064:61;12142:18;;327:63:0::1;11811:355:1::0;327:63:0::1;189:1;401:7;:18:::0;26267:21:::2;26253:35:::0;::::2;;26245:69;;;::::0;-1:-1:-1;;;26245:69:0;;9832:2:1;26245:69:0::2;::::0;::::2;9814:21:1::0;9871:2;9851:18;;;9844:30;-1:-1:-1;;;9890:18:1;;;9883:51;9951:18;;26245:69:0::2;9630:345:1::0;26245:69:0::2;26326:7;26347:8;-1:-1:-1::0;;;;;26339:22:0::2;26369:10;26339:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26325:59;;;26403:2;26395:11;;;::::0;::::2;;-1:-1:-1::0;;145:1:0::1;444:7;:22:::0;-1:-1:-1;26148:266:0:o;23318:174::-;2479:6;;-1:-1:-1;;;;;2479:6:0;2032:10;2541:23;2533:68;;;;-1:-1:-1;;;2533:68:0;;;;;;;:::i;:::-;23415:9:::1;;23400:11;:24;;23392:56;;;::::0;-1:-1:-1;;;23392:56:0;;10955:2:1;23392:56:0::1;::::0;::::1;10937:21:1::0;10994:2;10974:18;;;10967:30;-1:-1:-1;;;11013:18:1;;;11006:49;11072:18;;23392:56:0::1;10753:343:1::0;23392:56:0::1;23459:11;:25:::0;23318:174::o;15050:::-;15107:4;15171:13;;15161:7;:23;15131:85;;;;-1:-1:-1;;15189:20:0;;;;:11;:20;;;;;:27;-1:-1:-1;;;15189:27:0;;;;15188:28;;15050:174::o;20862:196::-;20977:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;20977:29:0;-1:-1:-1;;;;;20977:29:0;;;;;;;;;21022:28;;20977:24;;21022:28;;;;;;;20862:196;;;:::o;17758:1440::-;17873:35;17911:21;17924:7;17911:12;:21::i;:::-;17873:59;;17971:4;-1:-1:-1;;;;;17949:26:0;:13;:18;;;-1:-1:-1;;;;;17949:26:0;;17945:67;;17984:28;;-1:-1:-1;;;17984:28:0;;;;;;;;;;;17945:67;18025:22;2032:10;-1:-1:-1;;;;;18051:20:0;;;;:73;;-1:-1:-1;18088:36:0;18105:4;2032:10;14129:164;:::i;18088:36::-;18051:126;;;-1:-1:-1;2032:10:0;18141:20;18153:7;18141:11;:20::i;:::-;-1:-1:-1;;;;;18141:36:0;;18051:126;18025:153;;18196:17;18191:66;;18222:35;;-1:-1:-1;;;18222:35:0;;;;;;;;;;;18191:66;-1:-1:-1;;;;;18272:16:0;;18268:52;;18297:23;;-1:-1:-1;;;18297:23:0;;;;;;;;;;;18268:52;18389:35;18406:1;18410:7;18419:4;18389:8;:35::i;:::-;-1:-1:-1;;;;;18462:18:0;;;;;;;:12;:18;;;;;;;;:31;;-1:-1:-1;;18462:31:0;;;;;;;-1:-1:-1;;18462:31:0;;;;;;;18508:16;;;;;;;;;:29;;;;;;;;-1:-1:-1;18508:29:0;;;;;;;;;;;18586:20;;;:11;:20;;;;;;18621:18;;-1:-1:-1;;;;;;18654:49:0;;;;-1:-1:-1;;;18687:15:0;18654:49;;;;;;;;;;18742:11;;18802:24;;;;;18845:13;;18586:20;;18802:24;;18845:13;18841:241;;18912:13;;18897:11;:28;18893:174;;18950:20;;19019:28;;;;18993:54;;-1:-1:-1;;;18993:54:0;-1:-1:-1;;;;;;18993:54:0;;;-1:-1:-1;;;;;18950:20:0;;18993:54;;;;18893:174;18437:656;;;19129:7;19125:2;-1:-1:-1;;;;;19110:27:0;19119:4;-1:-1:-1;;;;;19110:27:0;;;;;;;;;;;17862:1336;;17758:1440;;;:::o;11622:831::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;11733:7:0;11818:13;;11811:4;:20;11807:579;;;11852:31;11886:17;;;:11;:17;;;;;;;;;11852:51;;;;;;;;;-1:-1:-1;;;;;11852:51:0;;;;-1:-1:-1;;;11852:51:0;;;;;;;;;;;-1:-1:-1;;;11852:51:0;;;;;;;;;;;;;;11922:449;;11972:14;;-1:-1:-1;;;;;11972:28:0;;11968:101;;12036:9;11622:831;-1:-1:-1;;;11622:831:0:o;11968:101::-;-1:-1:-1;;;12131:6:0;12176:17;;;;:11;:17;;;;;;;;;12164:29;;;;;;;;;-1:-1:-1;;;;;12164:29:0;;;;;-1:-1:-1;;;12164:29:0;;;;;;;;;;;-1:-1:-1;;;12164:29:0;;;;;;;;;;;;;12224:28;12220:109;;12292:9;11622:831;-1:-1:-1;;;11622:831:0:o;12220:109::-;12091:261;;;11833:553;11807:579;12414:31;;-1:-1:-1;;;12414:31:0;;;;;;;;;;;15232:104;15301:27;15311:2;15315:8;15301:27;;;;;;;;;;;;:9;:27::i;2949:191::-;3042:6;;;-1:-1:-1;;;;;3059:17:0;;;-1:-1:-1;;;;;;3059:17:0;;;;;;;3092:40;;3042:6;;;3059:17;3042:6;;3092:40;;3023:16;;3092:40;3012:128;2949:191;:::o;21066:667::-;21250:72;;-1:-1:-1;;;21250:72:0;;21229:4;;-1:-1:-1;;;;;21250:36:0;;;;;:72;;2032:10;;21301:4;;21307:7;;21316:5;;21250:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21250:72:0;;;;;;;;-1:-1:-1;;21250:72:0;;;;;;;;;;;;:::i;:::-;;;21246:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21484:13:0;;21480:235;;21530:40;;-1:-1:-1;;;21530:40:0;;;;;;;;;;;21480:235;21673:6;21667:13;21658:6;21654:2;21650:15;21643:38;21246:480;-1:-1:-1;;;;;;21369:55:0;-1:-1:-1;;;21369:55:0;;-1:-1:-1;21246:480:0;21066:667;;;;;;:::o;24866:100::-;24918:13;24951:7;24944:14;;;;;:::i;571:534::-;627:13;659:10;655:53;;-1:-1:-1;;686:10:0;;;;;;;;;;;;-1:-1:-1;;;686:10:0;;;;;571:534::o;655:53::-;733:5;718:12;774:78;781:9;;774:78;;807:8;;;;:::i;:::-;;-1:-1:-1;830:10:0;;-1:-1:-1;838:2:0;830:10;;:::i;:::-;;;774:78;;;862:19;894:6;884:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;884:17:0;;862:39;;912:154;919:10;;912:154;;946:11;956:1;946:11;;:::i;:::-;;-1:-1:-1;1015:10:0;1023:2;1015:5;:10;:::i;:::-;1002:24;;:2;:24;:::i;:::-;989:39;;972:6;979;972:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;972:56:0;;;;;;;;-1:-1:-1;1043:11:0;1052:2;1043:11;;:::i;:::-;;;912:154;;15344:1466;15467:20;15490:13;-1:-1:-1;;;;;15518:16:0;;15514:48;;15543:19;;-1:-1:-1;;;15543:19:0;;;;;;;;;;;15514:48;15577:13;15573:44;;15599:18;;-1:-1:-1;;;15599:18:0;;;;;;;;;;;15573:44;-1:-1:-1;;;;;15729:16:0;;;;;;:12;:16;;;;;;;;:44;;-1:-1:-1;;15788:49:0;;15729:44;;;;;;;;15788:49;;;;-1:-1:-1;;15729:44:0;;;;;;15788:49;;;;;;;;;;;;;;;;15852:25;;;:11;:25;;;;;;:35;;-1:-1:-1;;;;;;15902:66:0;;;-1:-1:-1;;;15952:15:0;15902:66;;;;;;;;;;;;;15852:25;;16049:23;;;;3258:19;:23;16089:589;;16129:313;16160:38;;16185:12;;-1:-1:-1;;;;;16160:38:0;;;16177:1;;16160:38;;16177:1;;16160:38;16226:69;16265:1;16269:2;16273:14;;;;;;16289:5;16226:30;:69::i;:::-;16221:174;;16331:40;;-1:-1:-1;;;16331:40:0;;;;;;;;;;;16221:174;16437:3;16422:12;:18;16129:313;;16481:12;16464:13;;:29;16460:43;;16495:8;;;16460:43;16089:589;;;16544:119;16575:40;;16600:14;;;;;-1:-1:-1;;;;;16575:40:0;;;16592:1;;16575:40;;16592:1;;16575:40;16658:3;16643:12;:18;16544:119;;16089:589;-1:-1:-1;16692:13:0;:28;;;16742:60;;16775:2;16779:12;16793:8;16742:60;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:631:1;78:5;108:18;149:2;141:6;138:14;135:40;;;155:18;;:::i;:::-;230:2;224:9;198:2;284:15;;-1:-1:-1;;280:24:1;;;306:2;276:33;272:42;260:55;;;330:18;;;350:22;;;327:46;324:72;;;376:18;;:::i;:::-;416:10;412:2;405:22;445:6;436:15;;475:6;467;460:22;515:3;506:6;501:3;497:16;494:25;491:45;;;532:1;529;522:12;491:45;582:6;577:3;570:4;562:6;558:17;545:44;637:1;630:4;621:6;613;609:19;605:30;598:41;;;;14:631;;;;;:::o;650:173::-;718:20;;-1:-1:-1;;;;;767:31:1;;757:42;;747:70;;813:1;810;803:12;747:70;650:173;;;:::o;828:186::-;887:6;940:2;928:9;919:7;915:23;911:32;908:52;;;956:1;953;946:12;908:52;979:29;998:9;979:29;:::i;1019:260::-;1087:6;1095;1148:2;1136:9;1127:7;1123:23;1119:32;1116:52;;;1164:1;1161;1154:12;1116:52;1187:29;1206:9;1187:29;:::i;:::-;1177:39;;1235:38;1269:2;1258:9;1254:18;1235:38;:::i;:::-;1225:48;;1019:260;;;;;:::o;1284:328::-;1361:6;1369;1377;1430:2;1418:9;1409:7;1405:23;1401:32;1398:52;;;1446:1;1443;1436:12;1398:52;1469:29;1488:9;1469:29;:::i;:::-;1459:39;;1517:38;1551:2;1540:9;1536:18;1517:38;:::i;:::-;1507:48;;1602:2;1591:9;1587:18;1574:32;1564:42;;1284:328;;;;;:::o;1617:666::-;1712:6;1720;1728;1736;1789:3;1777:9;1768:7;1764:23;1760:33;1757:53;;;1806:1;1803;1796:12;1757:53;1829:29;1848:9;1829:29;:::i;:::-;1819:39;;1877:38;1911:2;1900:9;1896:18;1877:38;:::i;:::-;1867:48;;1962:2;1951:9;1947:18;1934:32;1924:42;;2017:2;2006:9;2002:18;1989:32;2044:18;2036:6;2033:30;2030:50;;;2076:1;2073;2066:12;2030:50;2099:22;;2152:4;2144:13;;2140:27;-1:-1:-1;2130:55:1;;2181:1;2178;2171:12;2130:55;2204:73;2269:7;2264:2;2251:16;2246:2;2242;2238:11;2204:73;:::i;:::-;2194:83;;;1617:666;;;;;;;:::o;2288:347::-;2353:6;2361;2414:2;2402:9;2393:7;2389:23;2385:32;2382:52;;;2430:1;2427;2420:12;2382:52;2453:29;2472:9;2453:29;:::i;:::-;2443:39;;2532:2;2521:9;2517:18;2504:32;2579:5;2572:13;2565:21;2558:5;2555:32;2545:60;;2601:1;2598;2591:12;2545:60;2624:5;2614:15;;;2288:347;;;;;:::o;2640:254::-;2708:6;2716;2769:2;2757:9;2748:7;2744:23;2740:32;2737:52;;;2785:1;2782;2775:12;2737:52;2808:29;2827:9;2808:29;:::i;:::-;2798:39;2884:2;2869:18;;;;2856:32;;-1:-1:-1;;;2640:254:1:o;2899:245::-;2957:6;3010:2;2998:9;2989:7;2985:23;2981:32;2978:52;;;3026:1;3023;3016:12;2978:52;3065:9;3052:23;3084:30;3108:5;3084:30;:::i;3149:249::-;3218:6;3271:2;3259:9;3250:7;3246:23;3242:32;3239:52;;;3287:1;3284;3277:12;3239:52;3319:9;3313:16;3338:30;3362:5;3338:30;:::i;3403:450::-;3472:6;3525:2;3513:9;3504:7;3500:23;3496:32;3493:52;;;3541:1;3538;3531:12;3493:52;3581:9;3568:23;3614:18;3606:6;3603:30;3600:50;;;3646:1;3643;3636:12;3600:50;3669:22;;3722:4;3714:13;;3710:27;-1:-1:-1;3700:55:1;;3751:1;3748;3741:12;3700:55;3774:73;3839:7;3834:2;3821:16;3816:2;3812;3808:11;3774:73;:::i;3858:180::-;3917:6;3970:2;3958:9;3949:7;3945:23;3941:32;3938:52;;;3986:1;3983;3976:12;3938:52;-1:-1:-1;4009:23:1;;3858:180;-1:-1:-1;3858:180:1:o;4043:184::-;4113:6;4166:2;4154:9;4145:7;4141:23;4137:32;4134:52;;;4182:1;4179;4172:12;4134:52;-1:-1:-1;4205:16:1;;4043:184;-1:-1:-1;4043:184:1:o;4232:254::-;4300:6;4308;4361:2;4349:9;4340:7;4336:23;4332:32;4329:52;;;4377:1;4374;4367:12;4329:52;4413:9;4400:23;4390:33;;4442:38;4476:2;4465:9;4461:18;4442:38;:::i;4491:257::-;4532:3;4570:5;4564:12;4597:6;4592:3;4585:19;4613:63;4669:6;4662:4;4657:3;4653:14;4646:4;4639:5;4635:16;4613:63;:::i;:::-;4730:2;4709:15;-1:-1:-1;;4705:29:1;4696:39;;;;4737:4;4692:50;;4491:257;-1:-1:-1;;4491:257:1:o;4753:470::-;4932:3;4970:6;4964:13;4986:53;5032:6;5027:3;5020:4;5012:6;5008:17;4986:53;:::i;:::-;5102:13;;5061:16;;;;5124:57;5102:13;5061:16;5158:4;5146:17;;5124:57;:::i;:::-;5197:20;;4753:470;-1:-1:-1;;;;4753:470:1:o;5646:488::-;-1:-1:-1;;;;;5915:15:1;;;5897:34;;5967:15;;5962:2;5947:18;;5940:43;6014:2;5999:18;;5992:34;;;6062:3;6057:2;6042:18;;6035:31;;;5840:4;;6083:45;;6108:19;;6100:6;6083:45;:::i;:::-;6075:53;5646:488;-1:-1:-1;;;;;;5646:488:1:o;6139:632::-;6310:2;6362:21;;;6432:13;;6335:18;;;6454:22;;;6281:4;;6310:2;6533:15;;;;6507:2;6492:18;;;6281:4;6576:169;6590:6;6587:1;6584:13;6576:169;;;6651:13;;6639:26;;6720:15;;;;6685:12;;;;6612:1;6605:9;6576:169;;;-1:-1:-1;6762:3:1;;6139:632;-1:-1:-1;;;;;;6139:632:1:o;7590:219::-;7739:2;7728:9;7721:21;7702:4;7759:44;7799:2;7788:9;7784:18;7776:6;7759:44;:::i;9269:356::-;9471:2;9453:21;;;9490:18;;;9483:30;9549:34;9544:2;9529:18;;9522:62;9616:2;9601:18;;9269:356::o;13042:128::-;13082:3;13113:1;13109:6;13106:1;13103:13;13100:39;;;13119:18;;:::i;:::-;-1:-1:-1;13155:9:1;;13042:128::o;13175:120::-;13215:1;13241;13231:35;;13246:18;;:::i;:::-;-1:-1:-1;13280:9:1;;13175:120::o;13300:168::-;13340:7;13406:1;13402;13398:6;13394:14;13391:1;13388:21;13383:1;13376:9;13369:17;13365:45;13362:71;;;13413:18;;:::i;:::-;-1:-1:-1;13453:9:1;;13300:168::o;13473:125::-;13513:4;13541:1;13538;13535:8;13532:34;;;13546:18;;:::i;:::-;-1:-1:-1;13583:9:1;;13473:125::o;13603:258::-;13675:1;13685:113;13699:6;13696:1;13693:13;13685:113;;;13775:11;;;13769:18;13756:11;;;13749:39;13721:2;13714:10;13685:113;;;13816:6;13813:1;13810:13;13807:48;;;-1:-1:-1;;13851:1:1;13833:16;;13826:27;13603:258::o;13866:380::-;13945:1;13941:12;;;;13988;;;14009:61;;14063:4;14055:6;14051:17;14041:27;;14009:61;14116:2;14108:6;14105:14;14085:18;14082:38;14079:161;;;14162:10;14157:3;14153:20;14150:1;14143:31;14197:4;14194:1;14187:15;14225:4;14222:1;14215:15;14079:161;;13866:380;;;:::o;14251:135::-;14290:3;-1:-1:-1;;14311:17:1;;14308:43;;;14331:18;;:::i;:::-;-1:-1:-1;14378:1:1;14367:13;;14251:135::o;14391:112::-;14423:1;14449;14439:35;;14454:18;;:::i;:::-;-1:-1:-1;14488:9:1;;14391:112::o;14508:127::-;14569:10;14564:3;14560:20;14557:1;14550:31;14600:4;14597:1;14590:15;14624:4;14621:1;14614:15;14640:127;14701:10;14696:3;14692:20;14689:1;14682:31;14732:4;14729:1;14722:15;14756:4;14753:1;14746:15;14772:127;14833:10;14828:3;14824:20;14821:1;14814:31;14864:4;14861:1;14854:15;14888:4;14885:1;14878:15;14904:127;14965:10;14960:3;14956:20;14953:1;14946:31;14996:4;14993:1;14986:15;15020:4;15017:1;15010:15;15036:131;-1:-1:-1;;;;;;15110:32:1;;15100:43;;15090:71;;15157:1;15154;15147:12

Swarm Source

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