ETH Price: $3,352.06 (+0.52%)

Token

MuttClub (MUTT)
 

Overview

Max Total Supply

190 MUTT

Holders

118

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
twindad.eth
Balance
1 MUTT
0x5e92a45225c3925b6180b8672a3cf5dd75bcc4a1
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:
MuttClub

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 2021-12-16
*/

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


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 Pausable is Context {

    event Paused(address account);

    event Unpaused(address account);

    bool private _paused;

    constructor() {
        _paused = false;
    }

    function paused() public view virtual returns (bool) {
        return _paused;
    }

    modifier whenNotPaused() {
        require(!paused(), "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(paused(), "Pausable: not paused");
        _;
    }

    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

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) {
        
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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
    ) external;

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

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Enumerable is IERC721 {
    
    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

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

contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    string private _name;

    string private _symbol;

    mapping(uint256 => address) private _owners;

    mapping(address => uint256) private _balances;

    mapping(uint256 => address) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;


    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }


    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 virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }

    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) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        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 virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_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 {
        
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _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 {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

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

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

    mapping(uint256 => uint256) private _ownedTokensIndex;

    uint256[] private _allTokens;

    mapping(uint256 => uint256) private _allTokensIndex;

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

    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
 
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; 
            _ownedTokensIndex[lastTokenId] = tokenIndex; 
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; 
        _allTokensIndex[lastTokenId] = tokenIndex; 

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}


contract MuttClub is ERC721Enumerable, Ownable {
    using Strings for uint256;

    uint256 public constant MAX_MUTTS = 6000;
    uint256 public constant PRESALE_PRICE = 0.05 ether;
    uint256 public PRICE = 0.1 ether;
    uint256 public constant FREEPASS_MAX_MINT = 1;
    uint256 public constant PRESALE_MAX_MINT = 3;
    uint256 public constant MAX_PER_MINT = 12;
    uint256 public constant MAX_MUTTS_MINT = 12;
    uint256 public constant RESERVED_MUTTS = 250;
    address public constant founderAddress = 0x820270a17869f10C6f637765fDd8bD0B41E7bad6;

    uint256 public reservedClaimed;

    uint256 public numMUTTSMinted;

    string public baseTokenURI;

    bool public publicSaleStarted;
    bool public presaleStarted;

    mapping(address => bool) public _presaleEligible;
    mapping(address => bool) public _freepassEligible;
    mapping(address => uint256) public _totalClaimed;

    event BaseURIChanged(string baseURI);
    event PresaleMint(address minter, uint256 amountOfMUTTS);
    event PublicSaleMint(address minter, uint256 amountOfMUTTS);

    modifier whenPresaleStarted() {
        require(presaleStarted, "Presale has not started");
        _;
    }

    modifier whenPublicSaleStarted() {
        require(publicSaleStarted, "Public sale has not started");
        _;
    }

    constructor(string memory baseURI) ERC721("MuttClub", "MUTT") {
        baseTokenURI = baseURI;
    }

    function claimReserved(address recipient, uint256 amount) external onlyOwner {
        require(reservedClaimed != RESERVED_MUTTS, "Already have claimed all reserved MUTTS");
        require(reservedClaimed + amount <= RESERVED_MUTTS, "Minting would exceed max reserved MUTTS");
        require(recipient != address(0), "Cannot add null address");
        require(totalSupply() < MAX_MUTTS, "All tokens have been minted");
        require(totalSupply() + amount <= MAX_MUTTS, "Minting would exceed max supply");

        uint256 _nextTokenId = numMUTTSMinted + 1;

        for (uint256 i = 0; i < amount; i++) {
            _safeMint(recipient, _nextTokenId + i);
        }
        numMUTTSMinted += amount;
        reservedClaimed += amount;
    }

    function addToPresale(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _presaleEligible[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }

    function checkPresaleEligiblity(address addr) external view returns (bool) {
        return _presaleEligible[addr];
    }

    function addToFreePass(address[] calldata addresses) external onlyOwner {
        for (uint256 i = 0; i < addresses.length; i++) {
            require(addresses[i] != address(0), "Cannot add null address");

            _freepassEligible[addresses[i]] = true;

            _totalClaimed[addresses[i]] > 0 ? _totalClaimed[addresses[i]] : 0;
        }
    }

    function checkFreePassEligiblity(address addr) external view returns (bool) {
        return _freepassEligible[addr];
    }

    function amountClaimedBy(address owner) external view returns (uint256) {
        require(owner != address(0), "Cannot add null address");

        return _totalClaimed[owner];
    }

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

    function mintPresale(uint256 amountOfMUTTS) external payable whenPresaleStarted {
        require(_presaleEligible[msg.sender], "You are not eligible for the presale");
        require(totalSupply() < MAX_MUTTS, "All tokens have been minted");
        require(amountOfMUTTS <= PRESALE_MAX_MINT, "Cannot purchase this many tokens during presale");
        require(totalSupply() + amountOfMUTTS <= MAX_MUTTS, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfMUTTS <= PRESALE_MAX_MINT, "Purchase exceeds max allowed");
        require(amountOfMUTTS > 0, "Must mint at least one MUTTS");
        require(PRESALE_PRICE * amountOfMUTTS == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfMUTTS; i++) {
            uint256 tokenId = numMUTTSMinted + 1;

            numMUTTSMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PresaleMint(msg.sender, amountOfMUTTS);
    }

    function mintFreePass(uint256 amountOfMUTTS) external payable whenPresaleStarted {
        require(_freepassEligible[msg.sender], "You do not have a FREE PASS");
        require(totalSupply() < MAX_MUTTS, "All tokens have been minted");
        require(amountOfMUTTS <= FREEPASS_MAX_MINT, "Cannot purchase this many tokens during presale");
        require(totalSupply() + amountOfMUTTS <= MAX_MUTTS, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfMUTTS <= FREEPASS_MAX_MINT, "Purchase exceeds max allowed");
        require(amountOfMUTTS > 0, "Must mint at least one MUTTS");

        for (uint256 i = 0; i < amountOfMUTTS; i++) {
            uint256 tokenId = numMUTTSMinted + 1;

            numMUTTSMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PresaleMint(msg.sender, amountOfMUTTS);
    }

    function mint(uint256 amountOfMUTTS) external payable whenPublicSaleStarted {
        require(totalSupply() < MAX_MUTTS, "All tokens have been minted");
        require(amountOfMUTTS <= MAX_PER_MINT, "Cannot purchase this many tokens in a transaction");
        require(totalSupply() + amountOfMUTTS <= MAX_MUTTS, "Minting would exceed max supply");
        require(_totalClaimed[msg.sender] + amountOfMUTTS <= MAX_MUTTS_MINT, "Purchase exceeds max allowed per address");
        require(amountOfMUTTS > 0, "Must mint at least one MUTT");
        require(PRICE * amountOfMUTTS == msg.value, "ETH amount is incorrect");

        for (uint256 i = 0; i < amountOfMUTTS; i++) {
            uint256 tokenId = numMUTTSMinted + 1;

            numMUTTSMinted += 1;
            _totalClaimed[msg.sender] += 1;
            _safeMint(msg.sender, tokenId);
        }

        emit PublicSaleMint(msg.sender, amountOfMUTTS);
    }

    function togglePresaleStarted() external onlyOwner {
        presaleStarted = !presaleStarted;
    }

    function togglePublicSaleStarted() external onlyOwner {
        publicSaleStarted = !publicSaleStarted;
    }

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

    function setBaseURI(string memory baseURI) public onlyOwner {
        baseTokenURI = baseURI;
        emit BaseURIChanged(baseURI);
    }

    function withdrawAll() public onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficent balance");
        _widthdraw(founderAddress, address(this).balance);
    }

    function _widthdraw(address _address, uint256 _amount) private {
        (bool success, ) = _address.call{ value: _amount }("");
        require(success, "Failed to widthdraw Ether");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"baseURI","type":"string"}],"name":"BaseURIChanged","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":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfMUTTS","type":"uint256"}],"name":"PresaleMint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"minter","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountOfMUTTS","type":"uint256"}],"name":"PublicSaleMint","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":"FREEPASS_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MUTTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MUTTS_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_MAX_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRESALE_PRICE","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":"RESERVED_MUTTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_freepassEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_presaleEligible","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_totalClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToFreePass","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"addToPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"amountClaimedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkFreePassEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"checkPresaleEligiblity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimReserved","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"founderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"amountOfMUTTS","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfMUTTS","type":"uint256"}],"name":"mintFreePass","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOfMUTTS","type":"uint256"}],"name":"mintPresale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numMUTTSMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"presaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reservedClaimed","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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","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":[],"name":"togglePresaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"togglePublicSaleStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405267016345785d8a0000600b553480156200001d57600080fd5b5060405162003601380380620036018339810160408190526200004091620001d8565b604080518082018252600881526726baba3a21b63ab160c11b6020808301918252835180850190945260048452631355551560e21b9084015281519192916200008c9160009162000132565b508051620000a290600190602084019062000132565b505050620000bf620000b9620000dc60201b60201c565b620000e0565b8051620000d490600e90602084019062000132565b505062000307565b3390565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200014090620002b4565b90600052602060002090601f016020900481019282620001645760008555620001af565b82601f106200017f57805160ff1916838001178555620001af565b82800160010185558215620001af579182015b82811115620001af57825182559160200191906001019062000192565b50620001bd929150620001c1565b5090565b5b80821115620001bd5760008155600101620001c2565b60006020808385031215620001ec57600080fd5b82516001600160401b03808211156200020457600080fd5b818501915085601f8301126200021957600080fd5b8151818111156200022e576200022e620002f1565b604051601f8201601f19908116603f01168101908382118183101715620002595762000259620002f1565b8160405282815288868487010111156200027257600080fd5b600093505b8284101562000296578484018601518185018701529285019262000277565b82841115620002a85760008684830101525b98975050505050505050565b600181811c90821680620002c957607f821691505b60208210811415620002eb57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6132ea80620003176000396000f3fe6080604052600436106102c95760003560e01c806366e25e2f11610175578063aef6ee1f116100dc578063d547cfb711610095578063ed1fc2a21161006f578063ed1fc2a214610889578063f2fde38b1461089e578063f759867a146108be578063fb9f5167146108d157600080fd5b8063d547cfb714610815578063d65049371461082a578063e985e9c51461084057600080fd5b8063aef6ee1f14610754578063b88d4fde14610774578063c1d35b2a14610794578063c87b56dd146107a7578063c92c1183146107c7578063d0258c25146107dc57600080fd5b80638da5cb5b1161012e5780638da5cb5b146106b457806391b7f5ed146106d257806395d89b41146106f2578063a0712d6814610707578063a22cb4651461071a578063a2e914771461073a57600080fd5b806366e25e2f1461060757806370a0823114610627578063715018a6146106475780637f674f481461065c578063853828b6146106895780638d859f3e1461069e57600080fd5b806323b872dd1161023457806346bb2833116101ed57806355f804b3116101c757806355f804b3146105ac57806362dc6e21146105cc5780636352211e146105e7578063639688001461039e57600080fd5b806346bb28331461054f5780634f6ccce714610577578063549527c31461059757600080fd5b806323b872dd146104af57806324510043146104cf5780632ece34b6146104e55780632f745c59146104fa5780632f8145751461051a57806342842e0e1461052f57600080fd5b806318160ddd1161028657806318160ddd146103c1578063191f65ac146103d65780631978f4691461040f5780631b5757f21461042f5780631f734dfe1461044f578063216d5da91461047f57600080fd5b806301ffc9a7146102ce57806304549d6f1461030357806306fdde0314610322578063081812fc14610344578063095ea7b31461037c57806309d42b301461039e575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612e25565b6108e7565b60405190151581526020015b60405180910390f35b34801561030f57600080fd5b50600f546102ee90610100900460ff1681565b34801561032e57600080fd5b50610337610912565b6040516102fa9190612f59565b34801561035057600080fd5b5061036461035f366004612ea8565b6109a4565b6040516001600160a01b0390911681526020016102fa565b34801561038857600080fd5b5061039c610397366004612d86565b610a3e565b005b3480156103aa57600080fd5b506103b3600c81565b6040519081526020016102fa565b3480156103cd57600080fd5b506008546103b3565b3480156103e257600080fd5b506102ee6103f1366004612c44565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561041b57600080fd5b506103b361042a366004612c44565b610b54565b34801561043b57600080fd5b5061039c61044a366004612d86565b610b98565b34801561045b57600080fd5b506102ee61046a366004612c44565b60116020526000908152604090205460ff1681565b34801561048b57600080fd5b506102ee61049a366004612c44565b60106020526000908152604090205460ff1681565b3480156104bb57600080fd5b5061039c6104ca366004612c92565b610d90565b3480156104db57600080fd5b506103b3600c5481565b3480156104f157600080fd5b506103b3600181565b34801561050657600080fd5b506103b3610515366004612d86565b610dc1565b34801561052657600080fd5b5061039c610e57565b34801561053b57600080fd5b5061039c61054a366004612c92565b610e95565b34801561055b57600080fd5b5061036473820270a17869f10c6f637765fdd8bd0b41e7bad681565b34801561058357600080fd5b506103b3610592366004612ea8565b610eb0565b3480156105a357600080fd5b506103b3600381565b3480156105b857600080fd5b5061039c6105c7366004612e5f565b610f43565b3480156105d857600080fd5b506103b366b1a2bc2ec5000081565b3480156105f357600080fd5b50610364610602366004612ea8565b610fbb565b34801561061357600080fd5b5061039c610622366004612db0565b611032565b34801561063357600080fd5b506103b3610642366004612c44565b6111c6565b34801561065357600080fd5b5061039c61124d565b34801561066857600080fd5b506103b3610677366004612c44565b60126020526000908152604090205481565b34801561069557600080fd5b5061039c611283565b3480156106aa57600080fd5b506103b3600b5481565b3480156106c057600080fd5b50600a546001600160a01b0316610364565b3480156106de57600080fd5b5061039c6106ed366004612ea8565b611312565b3480156106fe57600080fd5b50610337611341565b61039c610715366004612ea8565b611350565b34801561072657600080fd5b5061039c610735366004612d4a565b61163e565b34801561074657600080fd5b50600f546102ee9060ff1681565b34801561076057600080fd5b5061039c61076f366004612db0565b61164d565b34801561078057600080fd5b5061039c61078f366004612cce565b6117e1565b61039c6107a2366004612ea8565b611819565b3480156107b357600080fd5b506103376107c2366004612ea8565b611ab4565b3480156107d357600080fd5b506103b360fa81565b3480156107e857600080fd5b506102ee6107f7366004612c44565b6001600160a01b031660009081526011602052604090205460ff1690565b34801561082157600080fd5b50610337611b8f565b34801561083657600080fd5b506103b361177081565b34801561084c57600080fd5b506102ee61085b366004612c5f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561089557600080fd5b5061039c611c1d565b3480156108aa57600080fd5b5061039c6108b9366004612c44565b611c64565b61039c6108cc366004612ea8565b611cfc565b3480156108dd57600080fd5b506103b3600d5481565b60006001600160e01b0319821663780e9d6360e01b148061090c575061090c82611fc5565b92915050565b606060008054610921906131c6565b80601f016020809104026020016040519081016040528092919081815260200182805461094d906131c6565b801561099a5780601f1061096f5761010080835404028352916020019161099a565b820191906000526020600020905b81548152906001019060200180831161097d57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a225760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a4982610fbb565b9050806001600160a01b0316836001600160a01b03161415610ab75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a19565b336001600160a01b0382161480610ad35750610ad3813361085b565b610b455760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a19565b610b4f8383612015565b505050565b60006001600160a01b038216610b7c5760405162461bcd60e51b8152600401610a1990613079565b506001600160a01b031660009081526012602052604090205490565b600a546001600160a01b03163314610bc25760405162461bcd60e51b8152600401610a1990613044565b60fa600c541415610c255760405162461bcd60e51b815260206004820152602760248201527f416c7265616479206861766520636c61696d656420616c6c207265736572766560448201526664204d5554545360c81b6064820152608401610a19565b60fa81600c54610c359190613138565b1115610c935760405162461bcd60e51b815260206004820152602760248201527f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560448201526664204d5554545360c81b6064820152608401610a19565b6001600160a01b038216610cb95760405162461bcd60e51b8152600401610a1990613079565b611770610cc560085490565b10610ce25760405162461bcd60e51b8152600401610a1990613101565b61177081610cef60085490565b610cf99190613138565b1115610d175760405162461bcd60e51b8152600401610a199061300d565b6000600d546001610d289190613138565b905060005b82811015610d5a57610d4884610d438385613138565b612083565b80610d5281613201565b915050610d2d565b5081600d6000828254610d6d9190613138565b9250508190555081600c6000828254610d869190613138565b9091555050505050565b610d9a338261209d565b610db65760405162461bcd60e51b8152600401610a19906130b0565b610b4f838383612194565b6000610dcc836111c6565b8210610e2e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a19565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e815760405162461bcd60e51b8152600401610a1990613044565b600f805460ff19811660ff90911615179055565b610b4f838383604051806020016040528060008152506117e1565b6000610ebb60085490565b8210610f1e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a19565b60088281548110610f3157610f31613272565b90600052602060002001549050919050565b600a546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610a1990613044565b8051610f8090600e906020840190612b19565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610fb09190612f59565b60405180910390a150565b6000818152600260205260408120546001600160a01b03168061090c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a19565b600a546001600160a01b0316331461105c5760405162461bcd60e51b8152600401610a1990613044565b60005b81811015610b4f57600083838381811061107b5761107b613272565b90506020020160208101906110909190612c44565b6001600160a01b031614156110b75760405162461bcd60e51b8152600401610a1990613079565b6001601160008585858181106110cf576110cf613272565b90506020020160208101906110e49190612c44565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560128185858581811061112457611124613272565b90506020020160208101906111399190612c44565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116111665760006111b3565b6012600084848481811061117c5761117c613272565b90506020020160208101906111919190612c44565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b50806111be81613201565b91505061105f565b60006001600160a01b0382166112315760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a19565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146112775760405162461bcd60e51b8152600401610a1990613044565b611281600061233f565b565b600a546001600160a01b031633146112ad5760405162461bcd60e51b8152600401610a1990613044565b47806112f15760405162461bcd60e51b8152602060048201526013602482015272496e737566666963656e742062616c616e636560681b6044820152606401610a19565b61130f73820270a17869f10c6f637765fdd8bd0b41e7bad647612391565b50565b600a546001600160a01b0316331461133c5760405162461bcd60e51b8152600401610a1990613044565b600b55565b606060018054610921906131c6565b600f5460ff166113a25760405162461bcd60e51b815260206004820152601b60248201527f5075626c69632073616c6520686173206e6f74207374617274656400000000006044820152606401610a19565b6117706113ae60085490565b106113cb5760405162461bcd60e51b8152600401610a1990613101565b600c8111156114365760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e736044820152701034b71030903a3930b739b0b1ba34b7b760791b6064820152608401610a19565b6117708161144360085490565b61144d9190613138565b111561146b5760405162461bcd60e51b8152600401610a199061300d565b33600090815260126020526040902054600c90611489908390613138565b11156114e85760405162461bcd60e51b815260206004820152602860248201527f50757263686173652065786365656473206d617820616c6c6f77656420706572604482015267206164647265737360c01b6064820152608401610a19565b600081116115385760405162461bcd60e51b815260206004820152601b60248201527f4d757374206d696e74206174206c65617374206f6e65204d55545400000000006044820152606401610a19565b3481600b546115479190613164565b1461158e5760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a19565b60005b81811015611607576000600d5460016115aa9190613138565b90506001600d60008282546115bf9190613138565b90915550503360009081526012602052604081208054600192906115e4908490613138565b909155506115f490503382612083565b50806115ff81613201565b915050611591565b5060408051338152602081018390527f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b59101610fb0565b611649338383612434565b5050565b600a546001600160a01b031633146116775760405162461bcd60e51b8152600401610a1990613044565b60005b81811015610b4f57600083838381811061169657611696613272565b90506020020160208101906116ab9190612c44565b6001600160a01b031614156116d25760405162461bcd60e51b8152600401610a1990613079565b6001601060008585858181106116ea576116ea613272565b90506020020160208101906116ff9190612c44565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560128185858581811061173f5761173f613272565b90506020020160208101906117549190612c44565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116117815760006117ce565b6012600084848481811061179757611797613272565b90506020020160208101906117ac9190612c44565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b50806117d981613201565b91505061167a565b6117eb338361209d565b6118075760405162461bcd60e51b8152600401610a19906130b0565b61181384848484612503565b50505050565b600f54610100900460ff1661186a5760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a185cc81b9bdd081cdd185c9d1959604a1b6044820152606401610a19565b3360009081526011602052604090205460ff166118c95760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f206e6f74206861766520612046524545205041535300000000006044820152606401610a19565b6117706118d560085490565b106118f25760405162461bcd60e51b8152600401610a1990613101565b60018111156119135760405162461bcd60e51b8152600401610a1990612f6c565b6117708161192060085490565b61192a9190613138565b11156119485760405162461bcd60e51b8152600401610a199061300d565b33600090815260126020526040902054600190611966908390613138565b11156119b45760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610a19565b60008111611a045760405162461bcd60e51b815260206004820152601c60248201527f4d757374206d696e74206174206c65617374206f6e65204d55545453000000006044820152606401610a19565b60005b81811015611a7d576000600d546001611a209190613138565b90506001600d6000828254611a359190613138565b9091555050336000908152601260205260408120805460019290611a5a908490613138565b90915550611a6a90503382612083565b5080611a7581613201565b915050611a07565b5060408051338152602081018390527ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a39101610fb0565b6000818152600260205260409020546060906001600160a01b0316611b335760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a19565b6000611b3d612536565b90506000815111611b5d5760405180602001604052806000815250611b88565b80611b6784612545565b604051602001611b78929190612eed565b6040516020818303038152906040525b9392505050565b600e8054611b9c906131c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc8906131c6565b8015611c155780601f10611bea57610100808354040283529160200191611c15565b820191906000526020600020905b815481529060010190602001808311611bf857829003601f168201915b505050505081565b600a546001600160a01b03163314611c475760405162461bcd60e51b8152600401610a1990613044565b600f805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610a1990613044565b6001600160a01b038116611cf35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a19565b61130f8161233f565b600f54610100900460ff16611d4d5760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a185cc81b9bdd081cdd185c9d1959604a1b6044820152606401610a19565b3360009081526010602052604090205460ff16611db85760405162461bcd60e51b8152602060048201526024808201527f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560448201526373616c6560e01b6064820152608401610a19565b611770611dc460085490565b10611de15760405162461bcd60e51b8152600401610a1990613101565b6003811115611e025760405162461bcd60e51b8152600401610a1990612f6c565b61177081611e0f60085490565b611e199190613138565b1115611e375760405162461bcd60e51b8152600401610a199061300d565b33600090815260126020526040902054600390611e55908390613138565b1115611ea35760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610a19565b60008111611ef35760405162461bcd60e51b815260206004820152601c60248201527f4d757374206d696e74206174206c65617374206f6e65204d55545453000000006044820152606401610a19565b34611f058266b1a2bc2ec50000613164565b14611f4c5760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a19565b60005b81811015611a7d576000600d546001611f689190613138565b90506001600d6000828254611f7d9190613138565b9091555050336000908152601260205260408120805460019290611fa2908490613138565b90915550611fb290503382612083565b5080611fbd81613201565b915050611f4f565b60006001600160e01b031982166380ac58cd60e01b1480611ff657506001600160e01b03198216635b5e139f60e01b145b8061090c57506301ffc9a760e01b6001600160e01b031983161461090c565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061204a82610fbb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611649828260405180602001604052806000815250612643565b6000818152600260205260408120546001600160a01b03166121165760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a19565b600061212183610fbb565b9050806001600160a01b0316846001600160a01b0316148061215c5750836001600160a01b0316612151846109a4565b6001600160a01b0316145b8061218c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121a782610fbb565b6001600160a01b03161461220f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a19565b6001600160a01b0382166122715760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a19565b61227c838383612676565b612287600082612015565b6001600160a01b03831660009081526003602052604081208054600192906122b0908490613183565b90915550506001600160a01b03821660009081526003602052604081208054600192906122de908490613138565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123de576040519150601f19603f3d011682016040523d82523d6000602084013e6123e3565b606091505b5050905080610b4f5760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20776964746864726177204574686572000000000000006044820152606401610a19565b816001600160a01b0316836001600160a01b031614156124965760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a19565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61250e848484612194565b61251a8484848461272e565b6118135760405162461bcd60e51b8152600401610a1990612fbb565b6060600e8054610921906131c6565b6060816125695750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612593578061257d81613201565b915061258c9050600a83613150565b915061256d565b60008167ffffffffffffffff8111156125ae576125ae613288565b6040519080825280601f01601f1916602001820160405280156125d8576020820181803683370190505b5090505b841561218c576125ed600183613183565b91506125fa600a8661321c565b612605906030613138565b60f81b81838151811061261a5761261a613272565b60200101906001600160f81b031916908160001a90535061263c600a86613150565b94506125dc565b61264d838361283b565b61265a600084848461272e565b610b4f5760405162461bcd60e51b8152600401610a1990612fbb565b6001600160a01b0383166126d1576126cc81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6126f4565b816001600160a01b0316836001600160a01b0316146126f4576126f48382612989565b6001600160a01b03821661270b57610b4f81612a26565b826001600160a01b0316826001600160a01b031614610b4f57610b4f8282612ad5565b60006001600160a01b0384163b1561283057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612772903390899088908890600401612f1c565b602060405180830381600087803b15801561278c57600080fd5b505af19250505080156127bc575060408051601f3d908101601f191682019092526127b991810190612e42565b60015b612816573d8080156127ea576040519150601f19603f3d011682016040523d82523d6000602084013e6127ef565b606091505b50805161280e5760405162461bcd60e51b8152600401610a1990612fbb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061218c565b506001949350505050565b6001600160a01b0382166128915760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a19565b6000818152600260205260409020546001600160a01b0316156128f65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a19565b61290260008383612676565b6001600160a01b038216600090815260036020526040812080546001929061292b908490613138565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612996846111c6565b6129a09190613183565b6000838152600760205260409020549091508082146129f3576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612a3890600190613183565b60008381526009602052604081205460088054939450909284908110612a6057612a60613272565b906000526020600020015490508060088381548110612a8157612a81613272565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612ab957612ab961325c565b6001900381819060005260206000200160009055905550505050565b6000612ae0836111c6565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612b25906131c6565b90600052602060002090601f016020900481019282612b475760008555612b8d565b82601f10612b6057805160ff1916838001178555612b8d565b82800160010185558215612b8d579182015b82811115612b8d578251825591602001919060010190612b72565b50612b99929150612b9d565b5090565b5b80821115612b995760008155600101612b9e565b600067ffffffffffffffff80841115612bcd57612bcd613288565b604051601f8501601f19908116603f01168101908282118183101715612bf557612bf5613288565b81604052809350858152868686011115612c0e57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612c3f57600080fd5b919050565b600060208284031215612c5657600080fd5b611b8882612c28565b60008060408385031215612c7257600080fd5b612c7b83612c28565b9150612c8960208401612c28565b90509250929050565b600080600060608486031215612ca757600080fd5b612cb084612c28565b9250612cbe60208501612c28565b9150604084013590509250925092565b60008060008060808587031215612ce457600080fd5b612ced85612c28565b9350612cfb60208601612c28565b925060408501359150606085013567ffffffffffffffff811115612d1e57600080fd5b8501601f81018713612d2f57600080fd5b612d3e87823560208401612bb2565b91505092959194509250565b60008060408385031215612d5d57600080fd5b612d6683612c28565b915060208301358015158114612d7b57600080fd5b809150509250929050565b60008060408385031215612d9957600080fd5b612da283612c28565b946020939093013593505050565b60008060208385031215612dc357600080fd5b823567ffffffffffffffff80821115612ddb57600080fd5b818501915085601f830112612def57600080fd5b813581811115612dfe57600080fd5b8660208260051b8501011115612e1357600080fd5b60209290920196919550909350505050565b600060208284031215612e3757600080fd5b8135611b888161329e565b600060208284031215612e5457600080fd5b8151611b888161329e565b600060208284031215612e7157600080fd5b813567ffffffffffffffff811115612e8857600080fd5b8201601f81018413612e9957600080fd5b61218c84823560208401612bb2565b600060208284031215612eba57600080fd5b5035919050565b60008151808452612ed981602086016020860161319a565b601f01601f19169290920160200192915050565b60008351612eff81846020880161319a565b835190830190612f1381836020880161319a565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4f90830184612ec1565b9695505050505050565b602081526000611b886020830184612ec1565b6020808252602f908201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360408201526e20647572696e672070726573616c6560881b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601f908201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601b908201527f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000604082015260600190565b6000821982111561314b5761314b613230565b500190565b60008261315f5761315f613246565b500490565b600081600019048311821515161561317e5761317e613230565b500290565b60008282101561319557613195613230565b500390565b60005b838110156131b557818101518382015260200161319d565b838111156118135750506000910152565b600181811c908216806131da57607f821691505b602082108114156131fb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561321557613215613230565b5060010190565b60008261322b5761322b613246565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461130f57600080fdfea26469706673582212208ad2fed99b5909db37acfc7c3fe4ddd36782d01c308ef1c0f5ded636b7ed255c64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003c697066733a2f2f516d616435426154683473344b70434433416d6a7170473577346e42536535635176584a47316d4337784b6656533f746f6b656e3d00000000

Deployed Bytecode

0x6080604052600436106102c95760003560e01c806366e25e2f11610175578063aef6ee1f116100dc578063d547cfb711610095578063ed1fc2a21161006f578063ed1fc2a214610889578063f2fde38b1461089e578063f759867a146108be578063fb9f5167146108d157600080fd5b8063d547cfb714610815578063d65049371461082a578063e985e9c51461084057600080fd5b8063aef6ee1f14610754578063b88d4fde14610774578063c1d35b2a14610794578063c87b56dd146107a7578063c92c1183146107c7578063d0258c25146107dc57600080fd5b80638da5cb5b1161012e5780638da5cb5b146106b457806391b7f5ed146106d257806395d89b41146106f2578063a0712d6814610707578063a22cb4651461071a578063a2e914771461073a57600080fd5b806366e25e2f1461060757806370a0823114610627578063715018a6146106475780637f674f481461065c578063853828b6146106895780638d859f3e1461069e57600080fd5b806323b872dd1161023457806346bb2833116101ed57806355f804b3116101c757806355f804b3146105ac57806362dc6e21146105cc5780636352211e146105e7578063639688001461039e57600080fd5b806346bb28331461054f5780634f6ccce714610577578063549527c31461059757600080fd5b806323b872dd146104af57806324510043146104cf5780632ece34b6146104e55780632f745c59146104fa5780632f8145751461051a57806342842e0e1461052f57600080fd5b806318160ddd1161028657806318160ddd146103c1578063191f65ac146103d65780631978f4691461040f5780631b5757f21461042f5780631f734dfe1461044f578063216d5da91461047f57600080fd5b806301ffc9a7146102ce57806304549d6f1461030357806306fdde0314610322578063081812fc14610344578063095ea7b31461037c57806309d42b301461039e575b600080fd5b3480156102da57600080fd5b506102ee6102e9366004612e25565b6108e7565b60405190151581526020015b60405180910390f35b34801561030f57600080fd5b50600f546102ee90610100900460ff1681565b34801561032e57600080fd5b50610337610912565b6040516102fa9190612f59565b34801561035057600080fd5b5061036461035f366004612ea8565b6109a4565b6040516001600160a01b0390911681526020016102fa565b34801561038857600080fd5b5061039c610397366004612d86565b610a3e565b005b3480156103aa57600080fd5b506103b3600c81565b6040519081526020016102fa565b3480156103cd57600080fd5b506008546103b3565b3480156103e257600080fd5b506102ee6103f1366004612c44565b6001600160a01b031660009081526010602052604090205460ff1690565b34801561041b57600080fd5b506103b361042a366004612c44565b610b54565b34801561043b57600080fd5b5061039c61044a366004612d86565b610b98565b34801561045b57600080fd5b506102ee61046a366004612c44565b60116020526000908152604090205460ff1681565b34801561048b57600080fd5b506102ee61049a366004612c44565b60106020526000908152604090205460ff1681565b3480156104bb57600080fd5b5061039c6104ca366004612c92565b610d90565b3480156104db57600080fd5b506103b3600c5481565b3480156104f157600080fd5b506103b3600181565b34801561050657600080fd5b506103b3610515366004612d86565b610dc1565b34801561052657600080fd5b5061039c610e57565b34801561053b57600080fd5b5061039c61054a366004612c92565b610e95565b34801561055b57600080fd5b5061036473820270a17869f10c6f637765fdd8bd0b41e7bad681565b34801561058357600080fd5b506103b3610592366004612ea8565b610eb0565b3480156105a357600080fd5b506103b3600381565b3480156105b857600080fd5b5061039c6105c7366004612e5f565b610f43565b3480156105d857600080fd5b506103b366b1a2bc2ec5000081565b3480156105f357600080fd5b50610364610602366004612ea8565b610fbb565b34801561061357600080fd5b5061039c610622366004612db0565b611032565b34801561063357600080fd5b506103b3610642366004612c44565b6111c6565b34801561065357600080fd5b5061039c61124d565b34801561066857600080fd5b506103b3610677366004612c44565b60126020526000908152604090205481565b34801561069557600080fd5b5061039c611283565b3480156106aa57600080fd5b506103b3600b5481565b3480156106c057600080fd5b50600a546001600160a01b0316610364565b3480156106de57600080fd5b5061039c6106ed366004612ea8565b611312565b3480156106fe57600080fd5b50610337611341565b61039c610715366004612ea8565b611350565b34801561072657600080fd5b5061039c610735366004612d4a565b61163e565b34801561074657600080fd5b50600f546102ee9060ff1681565b34801561076057600080fd5b5061039c61076f366004612db0565b61164d565b34801561078057600080fd5b5061039c61078f366004612cce565b6117e1565b61039c6107a2366004612ea8565b611819565b3480156107b357600080fd5b506103376107c2366004612ea8565b611ab4565b3480156107d357600080fd5b506103b360fa81565b3480156107e857600080fd5b506102ee6107f7366004612c44565b6001600160a01b031660009081526011602052604090205460ff1690565b34801561082157600080fd5b50610337611b8f565b34801561083657600080fd5b506103b361177081565b34801561084c57600080fd5b506102ee61085b366004612c5f565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b34801561089557600080fd5b5061039c611c1d565b3480156108aa57600080fd5b5061039c6108b9366004612c44565b611c64565b61039c6108cc366004612ea8565b611cfc565b3480156108dd57600080fd5b506103b3600d5481565b60006001600160e01b0319821663780e9d6360e01b148061090c575061090c82611fc5565b92915050565b606060008054610921906131c6565b80601f016020809104026020016040519081016040528092919081815260200182805461094d906131c6565b801561099a5780601f1061096f5761010080835404028352916020019161099a565b820191906000526020600020905b81548152906001019060200180831161097d57829003601f168201915b5050505050905090565b6000818152600260205260408120546001600160a01b0316610a225760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6000610a4982610fbb565b9050806001600160a01b0316836001600160a01b03161415610ab75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a19565b336001600160a01b0382161480610ad35750610ad3813361085b565b610b455760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a19565b610b4f8383612015565b505050565b60006001600160a01b038216610b7c5760405162461bcd60e51b8152600401610a1990613079565b506001600160a01b031660009081526012602052604090205490565b600a546001600160a01b03163314610bc25760405162461bcd60e51b8152600401610a1990613044565b60fa600c541415610c255760405162461bcd60e51b815260206004820152602760248201527f416c7265616479206861766520636c61696d656420616c6c207265736572766560448201526664204d5554545360c81b6064820152608401610a19565b60fa81600c54610c359190613138565b1115610c935760405162461bcd60e51b815260206004820152602760248201527f4d696e74696e6720776f756c6420657863656564206d6178207265736572766560448201526664204d5554545360c81b6064820152608401610a19565b6001600160a01b038216610cb95760405162461bcd60e51b8152600401610a1990613079565b611770610cc560085490565b10610ce25760405162461bcd60e51b8152600401610a1990613101565b61177081610cef60085490565b610cf99190613138565b1115610d175760405162461bcd60e51b8152600401610a199061300d565b6000600d546001610d289190613138565b905060005b82811015610d5a57610d4884610d438385613138565b612083565b80610d5281613201565b915050610d2d565b5081600d6000828254610d6d9190613138565b9250508190555081600c6000828254610d869190613138565b9091555050505050565b610d9a338261209d565b610db65760405162461bcd60e51b8152600401610a19906130b0565b610b4f838383612194565b6000610dcc836111c6565b8210610e2e5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610a19565b506001600160a01b03919091166000908152600660209081526040808320938352929052205490565b600a546001600160a01b03163314610e815760405162461bcd60e51b8152600401610a1990613044565b600f805460ff19811660ff90911615179055565b610b4f838383604051806020016040528060008152506117e1565b6000610ebb60085490565b8210610f1e5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610a19565b60088281548110610f3157610f31613272565b90600052602060002001549050919050565b600a546001600160a01b03163314610f6d5760405162461bcd60e51b8152600401610a1990613044565b8051610f8090600e906020840190612b19565b507f5411e8ebf1636d9e83d5fc4900bf80cbac82e8790da2a4c94db4895e889eedf681604051610fb09190612f59565b60405180910390a150565b6000818152600260205260408120546001600160a01b03168061090c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a19565b600a546001600160a01b0316331461105c5760405162461bcd60e51b8152600401610a1990613044565b60005b81811015610b4f57600083838381811061107b5761107b613272565b90506020020160208101906110909190612c44565b6001600160a01b031614156110b75760405162461bcd60e51b8152600401610a1990613079565b6001601160008585858181106110cf576110cf613272565b90506020020160208101906110e49190612c44565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560128185858581811061112457611124613272565b90506020020160208101906111399190612c44565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116111665760006111b3565b6012600084848481811061117c5761117c613272565b90506020020160208101906111919190612c44565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b50806111be81613201565b91505061105f565b60006001600160a01b0382166112315760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a19565b506001600160a01b031660009081526003602052604090205490565b600a546001600160a01b031633146112775760405162461bcd60e51b8152600401610a1990613044565b611281600061233f565b565b600a546001600160a01b031633146112ad5760405162461bcd60e51b8152600401610a1990613044565b47806112f15760405162461bcd60e51b8152602060048201526013602482015272496e737566666963656e742062616c616e636560681b6044820152606401610a19565b61130f73820270a17869f10c6f637765fdd8bd0b41e7bad647612391565b50565b600a546001600160a01b0316331461133c5760405162461bcd60e51b8152600401610a1990613044565b600b55565b606060018054610921906131c6565b600f5460ff166113a25760405162461bcd60e51b815260206004820152601b60248201527f5075626c69632073616c6520686173206e6f74207374617274656400000000006044820152606401610a19565b6117706113ae60085490565b106113cb5760405162461bcd60e51b8152600401610a1990613101565b600c8111156114365760405162461bcd60e51b815260206004820152603160248201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e736044820152701034b71030903a3930b739b0b1ba34b7b760791b6064820152608401610a19565b6117708161144360085490565b61144d9190613138565b111561146b5760405162461bcd60e51b8152600401610a199061300d565b33600090815260126020526040902054600c90611489908390613138565b11156114e85760405162461bcd60e51b815260206004820152602860248201527f50757263686173652065786365656473206d617820616c6c6f77656420706572604482015267206164647265737360c01b6064820152608401610a19565b600081116115385760405162461bcd60e51b815260206004820152601b60248201527f4d757374206d696e74206174206c65617374206f6e65204d55545400000000006044820152606401610a19565b3481600b546115479190613164565b1461158e5760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a19565b60005b81811015611607576000600d5460016115aa9190613138565b90506001600d60008282546115bf9190613138565b90915550503360009081526012602052604081208054600192906115e4908490613138565b909155506115f490503382612083565b50806115ff81613201565b915050611591565b5060408051338152602081018390527f239739eec2dbaccb604ff1de6462a5eccd5f3148924696dd88f04d636ff582b59101610fb0565b611649338383612434565b5050565b600a546001600160a01b031633146116775760405162461bcd60e51b8152600401610a1990613044565b60005b81811015610b4f57600083838381811061169657611696613272565b90506020020160208101906116ab9190612c44565b6001600160a01b031614156116d25760405162461bcd60e51b8152600401610a1990613079565b6001601060008585858181106116ea576116ea613272565b90506020020160208101906116ff9190612c44565b6001600160a01b0316815260208101919091526040016000908120805460ff19169215159290921790915560128185858581811061173f5761173f613272565b90506020020160208101906117549190612c44565b6001600160a01b03166001600160a01b0316815260200190815260200160002054116117815760006117ce565b6012600084848481811061179757611797613272565b90506020020160208101906117ac9190612c44565b6001600160a01b03166001600160a01b03168152602001908152602001600020545b50806117d981613201565b91505061167a565b6117eb338361209d565b6118075760405162461bcd60e51b8152600401610a19906130b0565b61181384848484612503565b50505050565b600f54610100900460ff1661186a5760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a185cc81b9bdd081cdd185c9d1959604a1b6044820152606401610a19565b3360009081526011602052604090205460ff166118c95760405162461bcd60e51b815260206004820152601b60248201527f596f7520646f206e6f74206861766520612046524545205041535300000000006044820152606401610a19565b6117706118d560085490565b106118f25760405162461bcd60e51b8152600401610a1990613101565b60018111156119135760405162461bcd60e51b8152600401610a1990612f6c565b6117708161192060085490565b61192a9190613138565b11156119485760405162461bcd60e51b8152600401610a199061300d565b33600090815260126020526040902054600190611966908390613138565b11156119b45760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610a19565b60008111611a045760405162461bcd60e51b815260206004820152601c60248201527f4d757374206d696e74206174206c65617374206f6e65204d55545453000000006044820152606401610a19565b60005b81811015611a7d576000600d546001611a209190613138565b90506001600d6000828254611a359190613138565b9091555050336000908152601260205260408120805460019290611a5a908490613138565b90915550611a6a90503382612083565b5080611a7581613201565b915050611a07565b5060408051338152602081018390527ff5df7d07fef0d8ac7581015ebd1a3b7b7760da84b12f0c8174ae0dcd639cb6a39101610fb0565b6000818152600260205260409020546060906001600160a01b0316611b335760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a19565b6000611b3d612536565b90506000815111611b5d5760405180602001604052806000815250611b88565b80611b6784612545565b604051602001611b78929190612eed565b6040516020818303038152906040525b9392505050565b600e8054611b9c906131c6565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc8906131c6565b8015611c155780601f10611bea57610100808354040283529160200191611c15565b820191906000526020600020905b815481529060010190602001808311611bf857829003601f168201915b505050505081565b600a546001600160a01b03163314611c475760405162461bcd60e51b8152600401610a1990613044565b600f805461ff001981166101009182900460ff1615909102179055565b600a546001600160a01b03163314611c8e5760405162461bcd60e51b8152600401610a1990613044565b6001600160a01b038116611cf35760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a19565b61130f8161233f565b600f54610100900460ff16611d4d5760405162461bcd60e51b8152602060048201526017602482015276141c995cd85b19481a185cc81b9bdd081cdd185c9d1959604a1b6044820152606401610a19565b3360009081526010602052604090205460ff16611db85760405162461bcd60e51b8152602060048201526024808201527f596f7520617265206e6f7420656c696769626c6520666f72207468652070726560448201526373616c6560e01b6064820152608401610a19565b611770611dc460085490565b10611de15760405162461bcd60e51b8152600401610a1990613101565b6003811115611e025760405162461bcd60e51b8152600401610a1990612f6c565b61177081611e0f60085490565b611e199190613138565b1115611e375760405162461bcd60e51b8152600401610a199061300d565b33600090815260126020526040902054600390611e55908390613138565b1115611ea35760405162461bcd60e51b815260206004820152601c60248201527f50757263686173652065786365656473206d617820616c6c6f776564000000006044820152606401610a19565b60008111611ef35760405162461bcd60e51b815260206004820152601c60248201527f4d757374206d696e74206174206c65617374206f6e65204d55545453000000006044820152606401610a19565b34611f058266b1a2bc2ec50000613164565b14611f4c5760405162461bcd60e51b815260206004820152601760248201527611551208185b5bdd5b9d081a5cc81a5b98dbdc9c9958dd604a1b6044820152606401610a19565b60005b81811015611a7d576000600d546001611f689190613138565b90506001600d6000828254611f7d9190613138565b9091555050336000908152601260205260408120805460019290611fa2908490613138565b90915550611fb290503382612083565b5080611fbd81613201565b915050611f4f565b60006001600160e01b031982166380ac58cd60e01b1480611ff657506001600160e01b03198216635b5e139f60e01b145b8061090c57506301ffc9a760e01b6001600160e01b031983161461090c565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061204a82610fbb565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611649828260405180602001604052806000815250612643565b6000818152600260205260408120546001600160a01b03166121165760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a19565b600061212183610fbb565b9050806001600160a01b0316846001600160a01b0316148061215c5750836001600160a01b0316612151846109a4565b6001600160a01b0316145b8061218c57506001600160a01b0380821660009081526005602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b03166121a782610fbb565b6001600160a01b03161461220f5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a19565b6001600160a01b0382166122715760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a19565b61227c838383612676565b612287600082612015565b6001600160a01b03831660009081526003602052604081208054600192906122b0908490613183565b90915550506001600160a01b03821660009081526003602052604081208054600192906122de908490613138565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146123de576040519150601f19603f3d011682016040523d82523d6000602084013e6123e3565b606091505b5050905080610b4f5760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20776964746864726177204574686572000000000000006044820152606401610a19565b816001600160a01b0316836001600160a01b031614156124965760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a19565b6001600160a01b03838116600081815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b61250e848484612194565b61251a8484848461272e565b6118135760405162461bcd60e51b8152600401610a1990612fbb565b6060600e8054610921906131c6565b6060816125695750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612593578061257d81613201565b915061258c9050600a83613150565b915061256d565b60008167ffffffffffffffff8111156125ae576125ae613288565b6040519080825280601f01601f1916602001820160405280156125d8576020820181803683370190505b5090505b841561218c576125ed600183613183565b91506125fa600a8661321c565b612605906030613138565b60f81b81838151811061261a5761261a613272565b60200101906001600160f81b031916908160001a90535061263c600a86613150565b94506125dc565b61264d838361283b565b61265a600084848461272e565b610b4f5760405162461bcd60e51b8152600401610a1990612fbb565b6001600160a01b0383166126d1576126cc81600880546000838152600960205260408120829055600182018355919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30155565b6126f4565b816001600160a01b0316836001600160a01b0316146126f4576126f48382612989565b6001600160a01b03821661270b57610b4f81612a26565b826001600160a01b0316826001600160a01b031614610b4f57610b4f8282612ad5565b60006001600160a01b0384163b1561283057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612772903390899088908890600401612f1c565b602060405180830381600087803b15801561278c57600080fd5b505af19250505080156127bc575060408051601f3d908101601f191682019092526127b991810190612e42565b60015b612816573d8080156127ea576040519150601f19603f3d011682016040523d82523d6000602084013e6127ef565b606091505b50805161280e5760405162461bcd60e51b8152600401610a1990612fbb565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061218c565b506001949350505050565b6001600160a01b0382166128915760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a19565b6000818152600260205260409020546001600160a01b0316156128f65760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a19565b61290260008383612676565b6001600160a01b038216600090815260036020526040812080546001929061292b908490613138565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60006001612996846111c6565b6129a09190613183565b6000838152600760205260409020549091508082146129f3576001600160a01b03841660009081526006602090815260408083208584528252808320548484528184208190558352600790915290208190555b5060009182526007602090815260408084208490556001600160a01b039094168352600681528383209183525290812055565b600854600090612a3890600190613183565b60008381526009602052604081205460088054939450909284908110612a6057612a60613272565b906000526020600020015490508060088381548110612a8157612a81613272565b6000918252602080832090910192909255828152600990915260408082208490558582528120556008805480612ab957612ab961325c565b6001900381819060005260206000200160009055905550505050565b6000612ae0836111c6565b6001600160a01b039093166000908152600660209081526040808320868452825280832085905593825260079052919091209190915550565b828054612b25906131c6565b90600052602060002090601f016020900481019282612b475760008555612b8d565b82601f10612b6057805160ff1916838001178555612b8d565b82800160010185558215612b8d579182015b82811115612b8d578251825591602001919060010190612b72565b50612b99929150612b9d565b5090565b5b80821115612b995760008155600101612b9e565b600067ffffffffffffffff80841115612bcd57612bcd613288565b604051601f8501601f19908116603f01168101908282118183101715612bf557612bf5613288565b81604052809350858152868686011115612c0e57600080fd5b858560208301376000602087830101525050509392505050565b80356001600160a01b0381168114612c3f57600080fd5b919050565b600060208284031215612c5657600080fd5b611b8882612c28565b60008060408385031215612c7257600080fd5b612c7b83612c28565b9150612c8960208401612c28565b90509250929050565b600080600060608486031215612ca757600080fd5b612cb084612c28565b9250612cbe60208501612c28565b9150604084013590509250925092565b60008060008060808587031215612ce457600080fd5b612ced85612c28565b9350612cfb60208601612c28565b925060408501359150606085013567ffffffffffffffff811115612d1e57600080fd5b8501601f81018713612d2f57600080fd5b612d3e87823560208401612bb2565b91505092959194509250565b60008060408385031215612d5d57600080fd5b612d6683612c28565b915060208301358015158114612d7b57600080fd5b809150509250929050565b60008060408385031215612d9957600080fd5b612da283612c28565b946020939093013593505050565b60008060208385031215612dc357600080fd5b823567ffffffffffffffff80821115612ddb57600080fd5b818501915085601f830112612def57600080fd5b813581811115612dfe57600080fd5b8660208260051b8501011115612e1357600080fd5b60209290920196919550909350505050565b600060208284031215612e3757600080fd5b8135611b888161329e565b600060208284031215612e5457600080fd5b8151611b888161329e565b600060208284031215612e7157600080fd5b813567ffffffffffffffff811115612e8857600080fd5b8201601f81018413612e9957600080fd5b61218c84823560208401612bb2565b600060208284031215612eba57600080fd5b5035919050565b60008151808452612ed981602086016020860161319a565b601f01601f19169290920160200192915050565b60008351612eff81846020880161319a565b835190830190612f1381836020880161319a565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612f4f90830184612ec1565b9695505050505050565b602081526000611b886020830184612ec1565b6020808252602f908201527f43616e6e6f742070757263686173652074686973206d616e7920746f6b656e7360408201526e20647572696e672070726573616c6560881b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601f908201527f4d696e74696e6720776f756c6420657863656564206d617820737570706c7900604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526017908201527f43616e6e6f7420616464206e756c6c2061646472657373000000000000000000604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601b908201527f416c6c20746f6b656e732068617665206265656e206d696e7465640000000000604082015260600190565b6000821982111561314b5761314b613230565b500190565b60008261315f5761315f613246565b500490565b600081600019048311821515161561317e5761317e613230565b500290565b60008282101561319557613195613230565b500390565b60005b838110156131b557818101518382015260200161319d565b838111156118135750506000910152565b600181811c908216806131da57607f821691505b602082108114156131fb57634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561321557613215613230565b5060010190565b60008261322b5761322b613246565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461130f57600080fdfea26469706673582212208ad2fed99b5909db37acfc7c3fe4ddd36782d01c308ef1c0f5ded636b7ed255c64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000003c697066733a2f2f516d616435426154683473344b70434433416d6a7170473577346e42536535635176584a47316d4337784b6656533f746f6b656e3d00000000

-----Decoded View---------------
Arg [0] : baseURI (string): ipfs://Qmad5BaTh4s4KpCD3AmjqpG5w4nBSe5cQvXJG1mC7xKfVS?token=

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000003c
Arg [2] : 697066733a2f2f516d616435426154683473344b70434433416d6a7170473577
Arg [3] : 346e42536535635176584a47316d4337784b6656533f746f6b656e3d00000000


Deployed Bytecode Sourcemap

20366:7354:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17496:224;;;;;;;;;;-1:-1:-1;17496:224:0;;;;;:::i;:::-;;:::i;:::-;;;6755:14:1;;6748:22;6730:41;;6718:2;6703:18;17496:224:0;;;;;;;;21089:26;;;;;;;;;;-1:-1:-1;21089:26:0;;;;;;;;;;;10722:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11805:221::-;;;;;;;;;;-1:-1:-1;11805:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5774:32:1;;;5756:51;;5744:2;5729:18;11805:221:0;5610:203:1;11386:411:0;;;;;;;;;;-1:-1:-1;11386:411:0;;;;;:::i;:::-;;:::i;:::-;;20700:41;;;;;;;;;;;;20739:2;20700:41;;;;;21079:25:1;;;21067:2;21052:18;20700:41:0;20933:177:1;17992:113:0;;;;;;;;;;-1:-1:-1;18080:10:0;:17;17992:113;;22963:123;;;;;;;;;;-1:-1:-1;22963:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;23056:22:0;23032:4;23056:22;;;:16;:22;;;;;;;;;22963:123;23598:186;;;;;;;;;;-1:-1:-1;23598:186:0;;;;;:::i;:::-;;:::i;21825:761::-;;;;;;;;;;-1:-1:-1;21825:761:0;;;;;:::i;:::-;;:::i;21179:49::-;;;;;;;;;;-1:-1:-1;21179:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21124:48;;;;;;;;;;-1:-1:-1;21124:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12369:296;;;;;;;;;;-1:-1:-1;12369:296:0;;;;;:::i;:::-;;:::i;20941:30::-;;;;;;;;;;;;;;;;20597:45;;;;;;;;;;;;20641:1;20597:45;;17728:256;;;;;;;;;;-1:-1:-1;17728:256:0;;;;;:::i;:::-;;:::i;26917:111::-;;;;;;;;;;;;;:::i;12678:185::-;;;;;;;;;;-1:-1:-1;12678:185:0;;;;;:::i;:::-;;:::i;20849:83::-;;;;;;;;;;;;20890:42;20849:83;;18113:233;;;;;;;;;;-1:-1:-1;18113:233:0;;;;;:::i;:::-;;:::i;20649:44::-;;;;;;;;;;;;20692:1;20649:44;;27157:140;;;;;;;;;;-1:-1:-1;27157:140:0;;;;;:::i;:::-;;:::i;20501:50::-;;;;;;;;;;;;20541:10;20501:50;;10475:239;;;;;;;;;;-1:-1:-1;10475:239:0;;;;;:::i;:::-;;:::i;23094:363::-;;;;;;;;;;-1:-1:-1;23094:363:0;;;;;:::i;:::-;;:::i;10259:208::-;;;;;;;;;;-1:-1:-1;10259:208:0;;;;;:::i;:::-;;:::i;2979:103::-;;;;;;;;;;;;;:::i;21235:48::-;;;;;;;;;;-1:-1:-1;21235:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;27305:212;;;;;;;;;;;;;:::i;20558:32::-;;;;;;;;;;;;;;;;2756:87;;;;;;;;;;-1:-1:-1;2829:6:0;;-1:-1:-1;;;;;2829:6:0;2756:87;;23792:92;;;;;;;;;;-1:-1:-1;23792:92:0;;;;;:::i;:::-;;:::i;10830:104::-;;;;;;;;;;;;;:::i;25864:935::-;;;;;;:::i;:::-;;:::i;12034:155::-;;;;;;;;;;-1:-1:-1;12034:155:0;;;;;:::i;:::-;;:::i;21053:29::-;;;;;;;;;;-1:-1:-1;21053:29:0;;;;;;;;22594:361;;;;;;;;;;-1:-1:-1;22594:361:0;;;;;:::i;:::-;;:::i;12877:328::-;;;;;;;;;;-1:-1:-1;12877:328:0;;;;;:::i;:::-;;:::i;24925:931::-;;;;;;:::i;:::-;;:::i;10942:334::-;;;;;;;;;;-1:-1:-1;10942:334:0;;;;;:::i;:::-;;:::i;20798:44::-;;;;;;;;;;;;20839:3;20798:44;;23465:125;;;;;;;;;;-1:-1:-1;23465:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;23559:23:0;23535:4;23559:23;;;:17;:23;;;;;;;;;23465:125;21018:26;;;;;;;;;;;;;:::i;20454:40::-;;;;;;;;;;;;20490:4;20454:40;;12197:164;;;;;;;;;;-1:-1:-1;12197:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;12318:25:0;;;12294:4;12318:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12197:164;26807:102;;;;;;;;;;;;;:::i;3090:201::-;;;;;;;;;;-1:-1:-1;3090:201:0;;;;;:::i;:::-;;:::i;23892:1025::-;;;;;;:::i;:::-;;:::i;20980:29::-;;;;;;;;;;;;;;;;17496:224;17598:4;-1:-1:-1;;;;;;17622:50:0;;-1:-1:-1;;;17622:50:0;;:90;;;17676:36;17700:11;17676:23;:36::i;:::-;17615:97;17496:224;-1:-1:-1;;17496:224:0:o;10722:100::-;10776:13;10809:5;10802:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10722:100;:::o;11805:221::-;11881:7;13625:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13625:16:0;11901:73;;;;-1:-1:-1;;;11901:73:0;;15362:2:1;11901:73:0;;;15344:21:1;15401:2;15381:18;;;15374:30;15440:34;15420:18;;;15413:62;-1:-1:-1;;;15491:18:1;;;15484:42;15543:19;;11901:73:0;;;;;;;;;-1:-1:-1;11994:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11994:24:0;;11805:221::o;11386:411::-;11467:13;11483:23;11498:7;11483:14;:23::i;:::-;11467:39;;11531:5;-1:-1:-1;;;;;11525:11:0;:2;-1:-1:-1;;;;;11525:11:0;;;11517:57;;;;-1:-1:-1;;;11517:57:0;;18073:2:1;11517:57:0;;;18055:21:1;18112:2;18092:18;;;18085:30;18151:34;18131:18;;;18124:62;-1:-1:-1;;;18202:18:1;;;18195:31;18243:19;;11517:57:0;17871:397:1;11517:57:0;1621:10;-1:-1:-1;;;;;11609:21:0;;;;:62;;-1:-1:-1;11634:37:0;11651:5;1621:10;12197:164;:::i;11634:37::-;11587:168;;;;-1:-1:-1;;;11587:168:0;;12625:2:1;11587:168:0;;;12607:21:1;12664:2;12644:18;;;12637:30;12703:34;12683:18;;;12676:62;12774:26;12754:18;;;12747:54;12818:19;;11587:168:0;12423:420:1;11587:168:0;11768:21;11777:2;11781:7;11768:8;:21::i;:::-;11456:341;11386:411;;:::o;23598:186::-;23661:7;-1:-1:-1;;;;;23689:19:0;;23681:55;;;;-1:-1:-1;;;23681:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23756:20:0;;;;;:13;:20;;;;;;;23598:186::o;21825:761::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;20839:3:::1;21921:15;;:33;;21913:85;;;::::0;-1:-1:-1;;;21913:85:0;;9571:2:1;21913:85:0::1;::::0;::::1;9553:21:1::0;9610:2;9590:18;;;9583:30;9649:34;9629:18;;;9622:62;-1:-1:-1;;;9700:18:1;;;9693:37;9747:19;;21913:85:0::1;9369:403:1::0;21913:85:0::1;20839:3;22035:6;22017:15;;:24;;;;:::i;:::-;:42;;22009:94;;;::::0;-1:-1:-1;;;22009:94:0;;20014:2:1;22009:94:0::1;::::0;::::1;19996:21:1::0;20053:2;20033:18;;;20026:30;20092:34;20072:18;;;20065:62;-1:-1:-1;;;20143:18:1;;;20136:37;20190:19;;22009:94:0::1;19812:403:1::0;22009:94:0::1;-1:-1:-1::0;;;;;22122:23:0;::::1;22114:59;;;;-1:-1:-1::0;;;22114:59:0::1;;;;;;;:::i;:::-;20490:4;22192:13;18080:10:::0;:17;;17992:113;22192:13:::1;:25;22184:65;;;;-1:-1:-1::0;;;22184:65:0::1;;;;;;;:::i;:::-;20490:4;22284:6;22268:13;18080:10:::0;:17;;17992:113;22268:13:::1;:22;;;;:::i;:::-;:35;;22260:79;;;;-1:-1:-1::0;;;22260:79:0::1;;;;;;;:::i;:::-;22352:20;22375:14;;22392:1;22375:18;;;;:::i;:::-;22352:41;;22411:9;22406:102;22430:6;22426:1;:10;22406:102;;;22458:38;22468:9:::0;22479:16:::1;22494:1:::0;22479:12;:16:::1;:::i;:::-;22458:9;:38::i;:::-;22438:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22406:102;;;;22536:6;22518:14;;:24;;;;;;;:::i;:::-;;;;;;;;22572:6;22553:15;;:25;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;21825:761:0:o;12369:296::-;12521:41;1621:10;12554:7;12521:18;:41::i;:::-;12513:103;;;;-1:-1:-1;;;12513:103:0;;;;;;;:::i;:::-;12629:28;12639:4;12645:2;12649:7;12629:9;:28::i;17728:256::-;17825:7;17861:23;17878:5;17861:16;:23::i;:::-;17853:5;:31;17845:87;;;;-1:-1:-1;;;17845:87:0;;8333:2:1;17845:87:0;;;8315:21:1;8372:2;8352:18;;;8345:30;8411:34;8391:18;;;8384:62;-1:-1:-1;;;8462:18:1;;;8455:41;8513:19;;17845:87:0;8131:407:1;17845:87:0;-1:-1:-1;;;;;;17950:19:0;;;;;;;;:12;:19;;;;;;;;:26;;;;;;;;;17728:256::o;26917:111::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;27003:17:::1;::::0;;-1:-1:-1;;26982:38:0;::::1;27003:17;::::0;;::::1;27002:18;26982:38;::::0;;26917:111::o;12678:185::-;12816:39;12833:4;12839:2;12843:7;12816:39;;;;;;;;;;;;:16;:39::i;18113:233::-;18188:7;18224:30;18080:10;:17;;17992:113;18224:30;18216:5;:38;18208:95;;;;-1:-1:-1;;;18208:95:0;;19601:2:1;18208:95:0;;;19583:21:1;19640:2;19620:18;;;19613:30;19679:34;19659:18;;;19652:62;-1:-1:-1;;;19730:18:1;;;19723:42;19782:19;;18208:95:0;19399:408:1;18208:95:0;18321:10;18332:5;18321:17;;;;;;;;:::i;:::-;;;;;;;;;18314:24;;18113:233;;;:::o;27157:140::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;27228:22;;::::1;::::0;:12:::1;::::0;:22:::1;::::0;::::1;::::0;::::1;:::i;:::-;;27266:23;27281:7;27266:23;;;;;;:::i;:::-;;;;;;;;27157:140:::0;:::o;10475:239::-;10547:7;10583:16;;;:7;:16;;;;;;-1:-1:-1;;;;;10583:16:0;10618:19;10610:73;;;;-1:-1:-1;;;10610:73:0;;13461:2:1;10610:73:0;;;13443:21:1;13500:2;13480:18;;;13473:30;13539:34;13519:18;;;13512:62;-1:-1:-1;;;13590:18:1;;;13583:39;13639:19;;10610:73:0;13259:405:1;23094:363:0;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;23182:9:::1;23177:273;23197:20:::0;;::::1;23177:273;;;23271:1;23247:9:::0;;23257:1;23247:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23247:26:0::1;;;23239:62;;;;-1:-1:-1::0;;;23239:62:0::1;;;;;;;:::i;:::-;23352:4;23318:17;:31;23336:9;;23346:1;23336:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23318:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;23318:31:0;;;:38;;-1:-1:-1;;23318:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;23373:13:::1;-1:-1:-1::0;23387:9:0;;23397:1;23387:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23373:27:0::1;-1:-1:-1::0;;;;;23373:27:0::1;;;;;;;;;;;;;:31;:65;;23437:1;23373:65;;;23407:13;:27;23421:9;;23431:1;23421:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23407:27:0::1;-1:-1:-1::0;;;;;23407:27:0::1;;;;;;;;;;;;;23373:65;-1:-1:-1::0;23219:3:0;::::1;::::0;::::1;:::i;:::-;;;;23177:273;;10259:208:::0;10331:7;-1:-1:-1;;;;;10359:19:0;;10351:74;;;;-1:-1:-1;;;10351:74:0;;13050:2:1;10351:74:0;;;13032:21:1;13089:2;13069:18;;;13062:30;13128:34;13108:18;;;13101:62;-1:-1:-1;;;13179:18:1;;;13172:40;13229:19;;10351:74:0;12848:406:1;10351:74:0;-1:-1:-1;;;;;;10443:16:0;;;;;:9;:16;;;;;;;10259:208::o;2979:103::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;3044:30:::1;3071:1;3044:18;:30::i;:::-;2979:103::o:0;27305:212::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;27374:21:::1;27414:11:::0;27406:43:::1;;;::::0;-1:-1:-1;;;27406:43:0;;15775:2:1;27406:43:0::1;::::0;::::1;15757:21:1::0;15814:2;15794:18;;;15787:30;-1:-1:-1;;;15833:18:1;;;15826:49;15892:18;;27406:43:0::1;15573:343:1::0;27406:43:0::1;27460:49;20890:42;27487:21;27460:10;:49::i;:::-;27345:172;27305:212::o:0;23792:92::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;23859:5:::1;:17:::0;23792:92::o;10830:104::-;10886:13;10919:7;10912:14;;;;;:::i;25864:935::-;21637:17;;;;21629:57;;;;-1:-1:-1;;;21629:57:0;;10692:2:1;21629:57:0;;;10674:21:1;10731:2;10711:18;;;10704:30;10770:29;10750:18;;;10743:57;10817:18;;21629:57:0;10490:351:1;21629:57:0;20490:4:::1;25959:13;18080:10:::0;:17;;17992:113;25959:13:::1;:25;25951:65;;;;-1:-1:-1::0;;;25951:65:0::1;;;;;;;:::i;:::-;20739:2;26035:13;:29;;26027:91;;;::::0;-1:-1:-1;;;26027:91:0;;14231:2:1;26027:91:0::1;::::0;::::1;14213:21:1::0;14270:2;14250:18;;;14243:30;14309:34;14289:18;;;14282:62;-1:-1:-1;;;14360:18:1;;;14353:47;14417:19;;26027:91:0::1;14029:413:1::0;26027:91:0::1;20490:4;26153:13;26137;18080:10:::0;:17;;17992:113;26137:13:::1;:29;;;;:::i;:::-;:42;;26129:86;;;;-1:-1:-1::0;;;26129:86:0::1;;;;;;;:::i;:::-;26248:10;26234:25;::::0;;;:13:::1;:25;::::0;;;;;20789:2:::1;::::0;26234:41:::1;::::0;26262:13;;26234:41:::1;:::i;:::-;:59;;26226:112;;;::::0;-1:-1:-1;;;26226:112:0;;17664:2:1;26226:112:0::1;::::0;::::1;17646:21:1::0;17703:2;17683:18;;;17676:30;17742:34;17722:18;;;17715:62;-1:-1:-1;;;17793:18:1;;;17786:38;17841:19;;26226:112:0::1;17462:404:1::0;26226:112:0::1;26373:1;26357:13;:17;26349:57;;;::::0;-1:-1:-1;;;26349:57:0;;10336:2:1;26349:57:0::1;::::0;::::1;10318:21:1::0;10375:2;10355:18;;;10348:30;10414:29;10394:18;;;10387:57;10461:18;;26349:57:0::1;10134:351:1::0;26349:57:0::1;26450:9;26433:13;26425:5;;:21;;;;:::i;:::-;:34;26417:70;;;::::0;-1:-1:-1;;;26417:70:0;;15010:2:1;26417:70:0::1;::::0;::::1;14992:21:1::0;15049:2;15029:18;;;15022:30;-1:-1:-1;;;15068:18:1;;;15061:53;15131:18;;26417:70:0::1;14808:347:1::0;26417:70:0::1;26505:9;26500:233;26524:13;26520:1;:17;26500:233;;;26559:15;26577:14;;26594:1;26577:18;;;;:::i;:::-;26559:36;;26630:1;26612:14;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;26660:10:0::1;26646:25;::::0;;;:13:::1;:25;::::0;;;;:30;;26675:1:::1;::::0;26646:25;:30:::1;::::0;26675:1;;26646:30:::1;:::i;:::-;::::0;;;-1:-1:-1;26691:30:0::1;::::0;-1:-1:-1;26701:10:0::1;26713:7:::0;26691:9:::1;:30::i;:::-;-1:-1:-1::0;26539:3:0;::::1;::::0;::::1;:::i;:::-;;;;26500:233;;;-1:-1:-1::0;26750:41:0::1;::::0;;26765:10:::1;6485:51:1::0;;6567:2;6552:18;;6545:34;;;26750:41:0::1;::::0;6458:18:1;26750:41:0::1;6311:274:1::0;12034:155:0;12129:52;1621:10;12162:8;12172;12129:18;:52::i;:::-;12034:155;;:::o;22594:361::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;22681:9:::1;22676:272;22696:20:::0;;::::1;22676:272;;;22770:1;22746:9:::0;;22756:1;22746:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22746:26:0::1;;;22738:62;;;;-1:-1:-1::0;;;22738:62:0::1;;;;;;;:::i;:::-;22850:4;22817:16;:30;22834:9;;22844:1;22834:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22817:30:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;22817:30:0;;;:37;;-1:-1:-1;;22817:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;;22871:13:::1;-1:-1:-1::0;22885:9:0;;22895:1;22885:12;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22871:27:0::1;-1:-1:-1::0;;;;;22871:27:0::1;;;;;;;;;;;;;:31;:65;;22935:1;22871:65;;;22905:13;:27;22919:9;;22929:1;22919:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22905:27:0::1;-1:-1:-1::0;;;;;22905:27:0::1;;;;;;;;;;;;;22871:65;-1:-1:-1::0;22718:3:0;::::1;::::0;::::1;:::i;:::-;;;;22676:272;;12877:328:::0;13052:41;1621:10;13085:7;13052:18;:41::i;:::-;13044:103;;;;-1:-1:-1;;;13044:103:0;;;;;;;:::i;:::-;13158:39;13172:4;13178:2;13182:7;13191:5;13158:13;:39::i;:::-;12877:328;;;;:::o;24925:931::-;21515:14;;;;;;;21507:50;;;;-1:-1:-1;;;21507:50:0;;7208:2:1;21507:50:0;;;7190:21:1;7247:2;7227:18;;;7220:30;-1:-1:-1;;;7266:18:1;;;7259:53;7329:18;;21507:50:0;7006:347:1;21507:50:0;25043:10:::1;25025:29;::::0;;;:17:::1;:29;::::0;;;;;::::1;;25017:69;;;::::0;-1:-1:-1;;;25017:69:0;;19245:2:1;25017:69:0::1;::::0;::::1;19227:21:1::0;19284:2;19264:18;;;19257:30;19323:29;19303:18;;;19296:57;19370:18;;25017:69:0::1;19043:351:1::0;25017:69:0::1;20490:4;25105:13;18080:10:::0;:17;;17992:113;25105:13:::1;:25;25097:65;;;;-1:-1:-1::0;;;25097:65:0::1;;;;;;;:::i;:::-;20641:1;25181:13;:34;;25173:94;;;;-1:-1:-1::0;;;25173:94:0::1;;;;;;;:::i;:::-;20490:4;25302:13;25286;18080:10:::0;:17;;17992:113;25286:13:::1;:29;;;;:::i;:::-;:42;;25278:86;;;;-1:-1:-1::0;;;25278:86:0::1;;;;;;;:::i;:::-;25397:10;25383:25;::::0;;;:13:::1;:25;::::0;;;;;20641:1:::1;::::0;25383:41:::1;::::0;25411:13;;25383:41:::1;:::i;:::-;:62;;25375:103;;;::::0;-1:-1:-1;;;25375:103:0;;20422:2:1;25375:103:0::1;::::0;::::1;20404:21:1::0;20461:2;20441:18;;;20434:30;20500;20480:18;;;20473:58;20548:18;;25375:103:0::1;20220:352:1::0;25375:103:0::1;25513:1;25497:13;:17;25489:58;;;::::0;-1:-1:-1;;;25489:58:0;;7976:2:1;25489:58:0::1;::::0;::::1;7958:21:1::0;8015:2;7995:18;;;7988:30;8054;8034:18;;;8027:58;8102:18;;25489:58:0::1;7774:352:1::0;25489:58:0::1;25565:9;25560:233;25584:13;25580:1;:17;25560:233;;;25619:15;25637:14;;25654:1;25637:18;;;;:::i;:::-;25619:36;;25690:1;25672:14;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;25720:10:0::1;25706:25;::::0;;;:13:::1;:25;::::0;;;;:30;;25735:1:::1;::::0;25706:25;:30:::1;::::0;25735:1;;25706:30:::1;:::i;:::-;::::0;;;-1:-1:-1;25751:30:0::1;::::0;-1:-1:-1;25761:10:0::1;25773:7:::0;25751:9:::1;:30::i;:::-;-1:-1:-1::0;25599:3:0;::::1;::::0;::::1;:::i;:::-;;;;25560:233;;;-1:-1:-1::0;25810:38:0::1;::::0;;25822:10:::1;6485:51:1::0;;6567:2;6552:18;;6545:34;;;25810:38:0::1;::::0;6458:18:1;25810:38:0::1;6311:274:1::0;10942:334:0;13601:4;13625:16;;;:7;:16;;;;;;11015:13;;-1:-1:-1;;;;;13625:16:0;11041:76;;;;-1:-1:-1;;;11041:76:0;;16894:2:1;11041:76:0;;;16876:21:1;16933:2;16913:18;;;16906:30;16972:34;16952:18;;;16945:62;-1:-1:-1;;;17023:18:1;;;17016:45;17078:19;;11041:76:0;16692:411:1;11041:76:0;11130:21;11154:10;:8;:10::i;:::-;11130:34;;11206:1;11188:7;11182:21;:25;:86;;;;;;;;;;;;;;;;;11234:7;11243:18;:7;:16;:18::i;:::-;11217:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;11182:86;11175:93;10942:334;-1:-1:-1;;;10942:334:0:o;21018:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;26807:102::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;26887:14:::1;::::0;;-1:-1:-1;;26869:32:0;::::1;26887:14;::::0;;;::::1;;;26886:15;26869:32:::0;;::::1;;::::0;;26807:102::o;3090:201::-;2829:6;;-1:-1:-1;;;;;2829:6:0;1621:10;2891:23;2883:68;;;;-1:-1:-1;;;2883:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3179:22:0;::::1;3171:73;;;::::0;-1:-1:-1;;;3171:73:0;;9164:2:1;3171:73:0::1;::::0;::::1;9146:21:1::0;9203:2;9183:18;;;9176:30;9242:34;9222:18;;;9215:62;-1:-1:-1;;;9293:18:1;;;9286:36;9339:19;;3171:73:0::1;8962:402:1::0;3171:73:0::1;3255:28;3274:8;3255:18;:28::i;23892:1025::-:0;21515:14;;;;;;;21507:50;;;;-1:-1:-1;;;21507:50:0;;7208:2:1;21507:50:0;;;7190:21:1;7247:2;7227:18;;;7220:30;-1:-1:-1;;;7266:18:1;;;7259:53;7329:18;;21507:50:0;7006:347:1;21507:50:0;24008:10:::1;23991:28;::::0;;;:16:::1;:28;::::0;;;;;::::1;;23983:77;;;::::0;-1:-1:-1;;;23983:77:0;;11807:2:1;23983:77:0::1;::::0;::::1;11789:21:1::0;11846:2;11826:18;;;11819:30;11885:34;11865:18;;;11858:62;-1:-1:-1;;;11936:18:1;;;11929:34;11980:19;;23983:77:0::1;11605:400:1::0;23983:77:0::1;20490:4;24079:13;18080:10:::0;:17;;17992:113;24079:13:::1;:25;24071:65;;;;-1:-1:-1::0;;;24071:65:0::1;;;;;;;:::i;:::-;20692:1;24155:13;:33;;24147:93;;;;-1:-1:-1::0;;;24147:93:0::1;;;;;;;:::i;:::-;20490:4;24275:13;24259;18080:10:::0;:17;;17992:113;24259:13:::1;:29;;;;:::i;:::-;:42;;24251:86;;;;-1:-1:-1::0;;;24251:86:0::1;;;;;;;:::i;:::-;24370:10;24356:25;::::0;;;:13:::1;:25;::::0;;;;;20692:1:::1;::::0;24356:41:::1;::::0;24384:13;;24356:41:::1;:::i;:::-;:61;;24348:102;;;::::0;-1:-1:-1;;;24348:102:0;;20422:2:1;24348:102:0::1;::::0;::::1;20404:21:1::0;20461:2;20441:18;;;20434:30;20500;20480:18;;;20473:58;20548:18;;24348:102:0::1;20220:352:1::0;24348:102:0::1;24485:1;24469:13;:17;24461:58;;;::::0;-1:-1:-1;;;24461:58:0;;7976:2:1;24461:58:0::1;::::0;::::1;7958:21:1::0;8015:2;7995:18;;;7988:30;8054;8034:18;;;8027:58;8102:18;;24461:58:0::1;7774:352:1::0;24461:58:0::1;24571:9;24538:29;24554:13:::0;20541:10:::1;24538:29;:::i;:::-;:42;24530:78;;;::::0;-1:-1:-1;;;24530:78:0;;15010:2:1;24530:78:0::1;::::0;::::1;14992:21:1::0;15049:2;15029:18;;;15022:30;-1:-1:-1;;;15068:18:1;;;15061:53;15131:18;;24530:78:0::1;14808:347:1::0;24530:78:0::1;24626:9;24621:233;24645:13;24641:1;:17;24621:233;;;24680:15;24698:14;;24715:1;24698:18;;;;:::i;:::-;24680:36;;24751:1;24733:14;;:19;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24781:10:0::1;24767:25;::::0;;;:13:::1;:25;::::0;;;;:30;;24796:1:::1;::::0;24767:25;:30:::1;::::0;24796:1;;24767:30:::1;:::i;:::-;::::0;;;-1:-1:-1;24812:30:0::1;::::0;-1:-1:-1;24822:10:0::1;24834:7:::0;24812:9:::1;:30::i;:::-;-1:-1:-1::0;24660:3:0;::::1;::::0;::::1;:::i;:::-;;;;24621:233;;9944:305:::0;10046:4;-1:-1:-1;;;;;;10083:40:0;;-1:-1:-1;;;10083:40:0;;:105;;-1:-1:-1;;;;;;;10140:48:0;;-1:-1:-1;;;10140:48:0;10083:105;:158;;;-1:-1:-1;;;;;;;;;;7572:40:0;;;10205:36;7463:157;15738:174;15813:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;15813:29:0;-1:-1:-1;;;;;15813:29:0;;;;;;;;:24;;15867:23;15813:24;15867:14;:23::i;:::-;-1:-1:-1;;;;;15858:46:0;;;;;;;;;;;15738:174;;:::o;14027:110::-;14103:26;14113:2;14117:7;14103:26;;;;;;;;;;;;:9;:26::i;13671:348::-;13764:4;13625:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13625:16:0;13781:73;;;;-1:-1:-1;;;13781:73:0;;12212:2:1;13781:73:0;;;12194:21:1;12251:2;12231:18;;;12224:30;12290:34;12270:18;;;12263:62;-1:-1:-1;;;12341:18:1;;;12334:42;12393:19;;13781:73:0;12010:408:1;13781:73:0;13865:13;13881:23;13896:7;13881:14;:23::i;:::-;13865:39;;13934:5;-1:-1:-1;;;;;13923:16:0;:7;-1:-1:-1;;;;;13923:16:0;;:51;;;;13967:7;-1:-1:-1;;;;;13943:31:0;:20;13955:7;13943:11;:20::i;:::-;-1:-1:-1;;;;;13943:31:0;;13923:51;:87;;;-1:-1:-1;;;;;;12318:25:0;;;12294:4;12318:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;13978:32;13915:96;13671:348;-1:-1:-1;;;;13671:348:0:o;15204:526::-;15363:4;-1:-1:-1;;;;;15336:31:0;:23;15351:7;15336:14;:23::i;:::-;-1:-1:-1;;;;;15336:31:0;;15328:85;;;;-1:-1:-1;;;15328:85:0;;16484:2:1;15328:85:0;;;16466:21:1;16523:2;16503:18;;;16496:30;16562:34;16542:18;;;16535:62;-1:-1:-1;;;16613:18:1;;;16606:39;16662:19;;15328:85:0;16282:405:1;15328:85:0;-1:-1:-1;;;;;15432:16:0;;15424:65;;;;-1:-1:-1;;;15424:65:0;;11048:2:1;15424:65:0;;;11030:21:1;11087:2;11067:18;;;11060:30;11126:34;11106:18;;;11099:62;-1:-1:-1;;;11177:18:1;;;11170:34;11221:19;;15424:65:0;10846:400:1;15424:65:0;15502:39;15523:4;15529:2;15533:7;15502:20;:39::i;:::-;15554:29;15571:1;15575:7;15554:8;:29::i;:::-;-1:-1:-1;;;;;15596:15:0;;;;;;:9;:15;;;;;:20;;15615:1;;15596:15;:20;;15615:1;;15596:20;:::i;:::-;;;;-1:-1:-1;;;;;;;15627:13:0;;;;;;:9;:13;;;;;:18;;15644:1;;15627:13;:18;;15644:1;;15627:18;:::i;:::-;;;;-1:-1:-1;;15656:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;15656:21:0;-1:-1:-1;;;;;15656:21:0;;;;;;;;;15695:27;;15656:16;;15695:27;;;;;;;15204:526;;;:::o;3299:191::-;3392:6;;;-1:-1:-1;;;;;3409:17:0;;;-1:-1:-1;;;;;;3409:17:0;;;;;;;3442:40;;3392:6;;;3409:17;3392:6;;3442:40;;3373:16;;3442:40;3362:128;3299:191;:::o;27525:192::-;27600:12;27618:8;-1:-1:-1;;;;;27618:13:0;27640:7;27618:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27599:54;;;27672:7;27664:45;;;;-1:-1:-1;;;27664:45:0;;17310:2:1;27664:45:0;;;17292:21:1;17349:2;17329:18;;;17322:30;17388:27;17368:18;;;17361:55;17433:18;;27664:45:0;17108:349:1;15920:315:0;16075:8;-1:-1:-1;;;;;16066:17:0;:5;-1:-1:-1;;;;;16066:17:0;;;16058:55;;;;-1:-1:-1;;;16058:55:0;;11453:2:1;16058:55:0;;;11435:21:1;11492:2;11472:18;;;11465:30;11531:27;11511:18;;;11504:55;11576:18;;16058:55:0;11251:349:1;16058:55:0;-1:-1:-1;;;;;16124:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;16124:46:0;;;;;;;;;;16186:41;;6730::1;;;16186::0;;6703:18:1;16186:41:0;;;;;;;15920:315;;;:::o;13213:::-;13370:28;13380:4;13386:2;13390:7;13370:9;:28::i;:::-;13417:48;13440:4;13446:2;13450:7;13459:5;13417:22;:48::i;:::-;13409:111;;;;-1:-1:-1;;;13409:111:0;;;;;;;:::i;27036:113::-;27096:13;27129:12;27122:19;;;;;:::i;152:542::-;208:13;248:10;244:53;;-1:-1:-1;;275:10:0;;;;;;;;;;;;-1:-1:-1;;;275:10:0;;;;;152:542::o;244:53::-;322:5;307:12;363:78;370:9;;363:78;;396:8;;;;:::i;:::-;;-1:-1:-1;419:10:0;;-1:-1:-1;427:2:0;419:10;;:::i;:::-;;;363:78;;;451:19;483:6;473:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;473:17:0;;451:39;;501:154;508:10;;501:154;;535:11;545:1;535:11;;:::i;:::-;;-1:-1:-1;604:10:0;612:2;604:5;:10;:::i;:::-;591:24;;:2;:24;:::i;:::-;578:39;;561:6;568;561:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;561:56:0;;;;;;;;-1:-1:-1;632:11:0;641:2;632:11;;:::i;:::-;;;501:154;;14145:321;14275:18;14281:2;14285:7;14275:5;:18::i;:::-;14326:54;14357:1;14361:2;14365:7;14374:5;14326:22;:54::i;:::-;14304:154;;;;-1:-1:-1;;;14304:154:0;;;;;;;:::i;18354:589::-;-1:-1:-1;;;;;18560:18:0;;18556:187;;18595:40;18627:7;19284:10;:17;;19257:24;;;;:15;:24;;;;;:44;;;19312:24;;;;;;;;;;;;19180:164;18595:40;18556:187;;;18665:2;-1:-1:-1;;;;;18657:10:0;:4;-1:-1:-1;;;;;18657:10:0;;18653:90;;18684:47;18717:4;18723:7;18684:32;:47::i;:::-;-1:-1:-1;;;;;18757:16:0;;18753:183;;18790:45;18827:7;18790:36;:45::i;18753:183::-;18863:4;-1:-1:-1;;;;;18857:10:0;:2;-1:-1:-1;;;;;18857:10:0;;18853:83;;18884:40;18912:2;18916:7;18884:27;:40::i;16243:799::-;16398:4;-1:-1:-1;;;;;16419:13:0;;3668:20;3716:8;16415:620;;16455:72;;-1:-1:-1;;;16455:72:0;;-1:-1:-1;;;;;16455:36:0;;;;;:72;;1621:10;;16506:4;;16512:7;;16521:5;;16455:72;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16455:72:0;;;;;;;;-1:-1:-1;;16455:72:0;;;;;;;;;;;;:::i;:::-;;;16451:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16697:13:0;;16693:272;;16740:60;;-1:-1:-1;;;16740:60:0;;;;;;;:::i;16693:272::-;16915:6;16909:13;16900:6;16896:2;16892:15;16885:38;16451:529;-1:-1:-1;;;;;;16578:51:0;-1:-1:-1;;;16578:51:0;;-1:-1:-1;16571:58:0;;16415:620;-1:-1:-1;17019:4:0;16243:799;;;;;;:::o;14474:382::-;-1:-1:-1;;;;;14554:16:0;;14546:61;;;;-1:-1:-1;;;14546:61:0;;14649:2:1;14546:61:0;;;14631:21:1;;;14668:18;;;14661:30;14727:34;14707:18;;;14700:62;14779:18;;14546:61:0;14447:356:1;14546:61:0;13601:4;13625:16;;;:7;:16;;;;;;-1:-1:-1;;;;;13625:16:0;:30;14618:58;;;;-1:-1:-1;;;14618:58:0;;9979:2:1;14618:58:0;;;9961:21:1;10018:2;9998:18;;;9991:30;10057;10037:18;;;10030:58;10105:18;;14618:58:0;9777:352:1;14618:58:0;14689:45;14718:1;14722:2;14726:7;14689:20;:45::i;:::-;-1:-1:-1;;;;;14747:13:0;;;;;;:9;:13;;;;;:18;;14764:1;;14747:13;:18;;14764:1;;14747:18;:::i;:::-;;;;-1:-1:-1;;14776:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;14776:21:0;-1:-1:-1;;;;;14776:21:0;;;;;;;;14815:33;;14776:16;;;14815:33;;14776:16;;14815:33;14474:382;;:::o;19352:560::-;19447:22;19497:1;19472:22;19489:4;19472:16;:22::i;:::-;:26;;;;:::i;:::-;19509:18;19530:26;;;:17;:26;;;;;;19447:51;;-1:-1:-1;19573:28:0;;;19569:238;;-1:-1:-1;;;;;19640:18:0;;19618:19;19640:18;;;:12;:18;;;;;;;;:34;;;;;;;;;19691:30;;;;;;:44;;;19751:30;;:17;:30;;;;;:43;;;19569:238;-1:-1:-1;19826:26:0;;;;:17;:26;;;;;;;;19819:33;;;-1:-1:-1;;;;;19870:18:0;;;;;:12;:18;;;;;:34;;;;;;;19863:41;19352:560::o;19920:437::-;20037:10;:17;20012:22;;20037:21;;20057:1;;20037:21;:::i;:::-;20069:18;20090:24;;;:15;:24;;;;;;20149:10;:26;;20012:46;;-1:-1:-1;20090:24:0;;20012:46;;20149:26;;;;;;:::i;:::-;;;;;;;;;20127:48;;20213:11;20188:10;20199;20188:22;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;;;20236:28;;;:15;:28;;;;;;;:41;;;20298:24;;;;;20291:31;20333:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19991:366;;;19920:437;:::o;18951:221::-;19036:14;19053:20;19070:2;19053:16;:20::i;:::-;-1:-1:-1;;;;;19084:16:0;;;;;;;:12;:16;;;;;;;;:24;;;;;;;;:34;;;19129:26;;;:17;:26;;;;;;:35;;;;-1:-1:-1;18951:221:0:o;-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:615::-;2985:6;2993;3046:2;3034:9;3025:7;3021:23;3017:32;3014:52;;;3062:1;3059;3052:12;3014:52;3102:9;3089:23;3131:18;3172:2;3164:6;3161:14;3158:34;;;3188:1;3185;3178:12;3158:34;3226:6;3215:9;3211:22;3201:32;;3271:7;3264:4;3260:2;3256:13;3252:27;3242:55;;3293:1;3290;3283:12;3242:55;3333:2;3320:16;3359:2;3351:6;3348:14;3345:34;;;3375:1;3372;3365:12;3345:34;3428:7;3423:2;3413:6;3410:1;3406:14;3402:2;3398:23;3394:32;3391:45;3388:65;;;3449:1;3446;3439:12;3388:65;3480:2;3472:11;;;;;3502:6;;-1:-1:-1;2899:615:1;;-1:-1:-1;;;;2899:615:1:o;3519:245::-;3577:6;3630:2;3618:9;3609:7;3605:23;3601:32;3598:52;;;3646:1;3643;3636:12;3598:52;3685:9;3672:23;3704:30;3728:5;3704:30;:::i;3769:249::-;3838:6;3891:2;3879:9;3870:7;3866:23;3862:32;3859:52;;;3907:1;3904;3897:12;3859:52;3939:9;3933:16;3958:30;3982:5;3958:30;:::i;4023:450::-;4092:6;4145:2;4133:9;4124:7;4120:23;4116:32;4113:52;;;4161:1;4158;4151:12;4113:52;4201:9;4188:23;4234:18;4226:6;4223:30;4220:50;;;4266:1;4263;4256:12;4220:50;4289:22;;4342:4;4334:13;;4330:27;-1:-1:-1;4320:55:1;;4371:1;4368;4361:12;4320:55;4394:73;4459:7;4454:2;4441:16;4436:2;4432;4428:11;4394:73;:::i;4478:180::-;4537:6;4590:2;4578:9;4569:7;4565:23;4561:32;4558:52;;;4606:1;4603;4596:12;4558:52;-1:-1:-1;4629:23:1;;4478:180;-1:-1:-1;4478:180:1:o;4663:257::-;4704:3;4742:5;4736:12;4769:6;4764:3;4757:19;4785:63;4841:6;4834:4;4829:3;4825:14;4818:4;4811:5;4807:16;4785:63;:::i;:::-;4902:2;4881:15;-1:-1:-1;;4877:29:1;4868:39;;;;4909:4;4864:50;;4663:257;-1:-1:-1;;4663:257:1:o;4925:470::-;5104:3;5142:6;5136:13;5158:53;5204:6;5199:3;5192:4;5184:6;5180:17;5158:53;:::i;:::-;5274:13;;5233:16;;;;5296:57;5274:13;5233:16;5330:4;5318:17;;5296:57;:::i;:::-;5369:20;;4925:470;-1:-1:-1;;;;4925:470:1:o;5818:488::-;-1:-1:-1;;;;;6087:15:1;;;6069:34;;6139:15;;6134:2;6119:18;;6112:43;6186:2;6171:18;;6164:34;;;6234:3;6229:2;6214:18;;6207:31;;;6012:4;;6255:45;;6280:19;;6272:6;6255:45;:::i;:::-;6247:53;5818:488;-1:-1:-1;;;;;;5818:488:1:o;6782:219::-;6931:2;6920:9;6913:21;6894:4;6951:44;6991:2;6980:9;6976:18;6968:6;6951:44;:::i;7358:411::-;7560:2;7542:21;;;7599:2;7579:18;;;7572:30;7638:34;7633:2;7618:18;;7611:62;-1:-1:-1;;;7704:2:1;7689:18;;7682:45;7759:3;7744:19;;7358:411::o;8543:414::-;8745:2;8727:21;;;8784:2;8764:18;;;8757:30;8823:34;8818:2;8803:18;;8796:62;-1:-1:-1;;;8889:2:1;8874:18;;8867:48;8947:3;8932:19;;8543:414::o;13669:355::-;13871:2;13853:21;;;13910:2;13890:18;;;13883:30;13949:33;13944:2;13929:18;;13922:61;14015:2;14000:18;;13669:355::o;15921:356::-;16123:2;16105:21;;;16142:18;;;16135:30;16201:34;16196:2;16181:18;;16174:62;16268:2;16253:18;;15921:356::o;18273:347::-;18475:2;18457:21;;;18514:2;18494:18;;;18487:30;18553:25;18548:2;18533:18;;18526:53;18611:2;18596:18;;18273:347::o;18625:413::-;18827:2;18809:21;;;18866:2;18846:18;;;18839:30;18905:34;18900:2;18885:18;;18878:62;-1:-1:-1;;;18971:2:1;18956:18;;18949:47;19028:3;19013:19;;18625:413::o;20577:351::-;20779:2;20761:21;;;20818:2;20798:18;;;20791:30;20857:29;20852:2;20837:18;;20830:57;20919:2;20904:18;;20577:351::o;21115:128::-;21155:3;21186:1;21182:6;21179:1;21176:13;21173:39;;;21192:18;;:::i;:::-;-1:-1:-1;21228:9:1;;21115:128::o;21248:120::-;21288:1;21314;21304:35;;21319:18;;:::i;:::-;-1:-1:-1;21353:9:1;;21248:120::o;21373:168::-;21413:7;21479:1;21475;21471:6;21467:14;21464:1;21461:21;21456:1;21449:9;21442:17;21438:45;21435:71;;;21486:18;;:::i;:::-;-1:-1:-1;21526:9:1;;21373:168::o;21546:125::-;21586:4;21614:1;21611;21608:8;21605:34;;;21619:18;;:::i;:::-;-1:-1:-1;21656:9:1;;21546:125::o;21676:258::-;21748:1;21758:113;21772:6;21769:1;21766:13;21758:113;;;21848:11;;;21842:18;21829:11;;;21822:39;21794:2;21787:10;21758:113;;;21889:6;21886:1;21883:13;21880:48;;;-1:-1:-1;;21924:1:1;21906:16;;21899:27;21676:258::o;21939:380::-;22018:1;22014:12;;;;22061;;;22082:61;;22136:4;22128:6;22124:17;22114:27;;22082:61;22189:2;22181:6;22178:14;22158:18;22155:38;22152:161;;;22235:10;22230:3;22226:20;22223:1;22216:31;22270:4;22267:1;22260:15;22298:4;22295:1;22288:15;22152:161;;21939:380;;;:::o;22324:135::-;22363:3;-1:-1:-1;;22384:17:1;;22381:43;;;22404:18;;:::i;:::-;-1:-1:-1;22451:1:1;22440:13;;22324:135::o;22464:112::-;22496:1;22522;22512:35;;22527:18;;:::i;:::-;-1:-1:-1;22561:9:1;;22464:112::o;22581:127::-;22642:10;22637:3;22633:20;22630:1;22623:31;22673:4;22670:1;22663:15;22697:4;22694:1;22687:15;22713:127;22774:10;22769:3;22765:20;22762:1;22755:31;22805:4;22802:1;22795:15;22829:4;22826:1;22819:15;22845:127;22906:10;22901:3;22897:20;22894:1;22887:31;22937:4;22934:1;22927:15;22961:4;22958:1;22951:15;22977:127;23038:10;23033:3;23029:20;23026:1;23019:31;23069:4;23066:1;23059:15;23093:4;23090:1;23083:15;23109:127;23170:10;23165:3;23161:20;23158:1;23151:31;23201:4;23198:1;23191:15;23225:4;23222:1;23215:15;23241:131;-1:-1:-1;;;;;;23315:32:1;;23305:43;;23295:71;;23362:1;23359;23352:12

Swarm Source

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