ETH Price: $3,598.34 (+0.25%)

Token

ERC-20: MinerBox (SMB)
 

Overview

Max Total Supply

248 SMB

Holders

99

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 SMB
0x6b453f0b9752af3be5b993ded88fb503328e8d5d
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:
MinerBox

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9 <0.9.0;

library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }
	
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

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

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

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

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

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

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

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

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

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

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

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

    function verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

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

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

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

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

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

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

    function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
        return processProofCalldata(proof, leaf) == root;
    }

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

    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

    function multiProofVerify(bytes32[] memory proof, bool[] memory proofFlags, bytes32 root, bytes32[] memory leaves) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

    function multiProofVerifyCalldata(bytes32[] calldata proof, bool[] calldata proofFlags, bytes32 root, bytes32[] memory leaves) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

    function processMultiProof(bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;

        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function processMultiProofCalldata(bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves) internal pure returns (bytes32 merkleRoot) {
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;
        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

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

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

interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function setApprovalForAll(address operator, bool _approved) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function isApprovedForAll(address owner, address operator) external view returns (bool);
}

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external view returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function unregister(address addr) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

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

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

abstract contract OperatorFilterer {
    error OperatorNotAllowed(address operator);
    IOperatorFilterRegistry constant operatorFilterRegistry = IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);
    
	constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {
        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator(address from) virtual {
        if (address(operatorFilterRegistry).code.length > 0) {
            if (from == msg.sender) {
                _;
                return;
            }
            if (
                !(
                    operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)
                        && operatorFilterRegistry.isOperatorAllowed(address(this), from)
                )
            ) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

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

abstract contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);
    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

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: address zero is not a valid owner");
        return _balances[owner];
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: invalid token ID");
        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) {
        _requireMinted(tokenId);
        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "";
    }

    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 token owner nor approved for all");
        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);
        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: caller is not token 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: caller is not token 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) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);
        _afterTokenTransfer(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);
        _afterTokenTransfer(owner, address(0), tokenId);
    }

    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        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);
        _afterTokenTransfer(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 _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

    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 {}
    function _afterTokenTransfer(address from, address to, uint256 tokenId) internal virtual {}
}

contract ERC721F is Ownable, ERC721, DefaultOperatorFilterer {
    using Counters for Counters.Counter;

    Counters.Counter private _tokenSupply;

    string private _baseTokenURI;

    constructor(string memory name_, string memory symbol_) ERC721(name_, symbol_) {
    }

    function walletOfOwner(address _owner) external view returns (uint256[] memory){
        uint256 ownerTokenCount = balanceOf(_owner);
        uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount);
        uint256 currentTokenId = _startTokenId();
        uint256 ownedTokenIndex = 0;

        while (ownedTokenIndex < ownerTokenCount && currentTokenId < _tokenSupply.current()) {
            if (ownerOf(currentTokenId) == _owner) {
                ownedTokenIds[ownedTokenIndex] = currentTokenId;
                unchecked{ ownedTokenIndex++;}
            }
            unchecked{ currentTokenId++;}
        }
        return ownedTokenIds;
    }
    
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

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

    function setBaseTokenURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function _mint(address to, uint256 tokenId) internal virtual override {
        super._mint(to, tokenId);
        _tokenSupply.increment();
    }
	
    function transferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public override onlyAllowedOperator(from) {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public override onlyAllowedOperator(from) {
        super.safeTransferFrom(from, to, tokenId, data);
    }
	
    function totalSupply() public view returns (uint256) {
        return _tokenSupply.current();
    }
}

abstract contract ERC721Payable {
    function _withdraw(address _address, uint256 _amount) internal {
        (bool success, ) = _address.call{ value: _amount }("");
        require(success, "Failed to withdraw Ether");
    }
    receive() external payable { }
}

contract ERC721FCOMMON is ERC721F, ERC721Payable {
    constructor(string memory name_, string memory symbol_) ERC721F(name_, symbol_) {
    }
}

contract MinerBox is ERC721FCOMMON {
    uint256 public tokenPrice = 0.06 ether; 
    uint256 public preSaleTokenPrice = 0.04 ether;
    uint256 public constant MAX_TOKENS = 10000;
	uint256 public constant MINT_LIMIT = 8601;
    uint public constant MAX_RESERVE = 1399;
    uint256 public CLAIM_TOKENS = 601;
    uint public saleState;

    bytes32 public preSaleMerkleRoot;
    bytes32 public claimlistMerkleRoot;
	mapping(address => uint256) private userBalancePreSaleMint;
    mapping(address => uint256) private userBalance;
    
    constructor() ERC721FCOMMON("MinerBox", "SMB") {
        setBaseTokenURI("https://mint.ordersatoshi.com/erc721/");
        _mint(msg.sender, 0);
    }

    function airdrop(address to, uint256 numberOfTokens) public onlyOwner {    
        uint supply = totalSupply();
		require(numberOfTokens != 0, "numberOfNfts cannot be 0");
        require(supply + numberOfTokens <= MAX_TOKENS, "Reserve would exceed max supply of Tokens");
        require(numberOfTokens < MAX_RESERVE, "Can only mint reserved tokens at a time");
        for (uint i = 0; i < numberOfTokens;) {
            _safeMint(to, supply + i);
            unchecked{ i++;}
        }
    }

    function setMintPrice(uint256 price) external onlyOwner {
        tokenPrice = price;
    }
	
    function setPresalePrice(uint256 price) external onlyOwner {
        preSaleTokenPrice = price;
    }

    function setClaimTokens(uint256 limit) external onlyOwner {
        CLAIM_TOKENS = limit;
    }
	
    function setMerkleRoot(uint256 _ID, bytes32 _newRoot) external onlyOwner {
        require(_ID < 3 && _ID > 0, "!id");
        if (_ID == 2) {
            preSaleMerkleRoot = _newRoot;
        } else if (_ID == 1) {
            claimlistMerkleRoot = _newRoot;
        }
    }

    function setSaleState(uint256 _id) external onlyOwner {
        require(_id < 4, "!id");
        saleState=_id;
    }

    function mint(uint256 numberOfTokens) external payable {
        require(numberOfTokens != 0, "numberOfNfts cannot be 0");
        require(msg.sender == tx.origin, "No Contracts allowed.");
        require(numberOfTokens < 4, "Can only mint 3 tokens at a time");
        require(tokenPrice * numberOfTokens <= msg.value, "Ether value sent is not correct");
        require(saleState==3, "Sale NOT active yet");
        uint256 supply = totalSupply();
        require(supply + numberOfTokens <= MINT_LIMIT, "Purchase would exceed max mint limit of Tokens");
        for (uint256 i; i < numberOfTokens; ) {
            _mint(msg.sender, supply + i);
            unchecked {
                i++;
            }
        }
    }

    function claim(uint256 numberOfTokens, bytes32[] calldata merkleProof) external {
        require(numberOfTokens != 0, "numberOfNfts cannot be 0");
        require(userBalance[msg.sender]+numberOfTokens<2,"Max claim is 1 token");
        require(saleState==1, "Claim is not active yet");
        uint256 supply = totalSupply();
        require(supply + numberOfTokens <= CLAIM_TOKENS, "Purchase would exceed max claim supply of Tokens");
        require(checkValidity(merkleProof, claimlistMerkleRoot), "Invalid Merkle Proof");
        userBalance[msg.sender] += numberOfTokens;
        for (uint256 i; i < numberOfTokens; ) {
            _safeMint(msg.sender, supply + i);
            unchecked {
                i++;
            }
        }
    }

    function mintPreSale(uint256 numberOfTokens, bytes32[] calldata merkleProof) external payable {
        require(numberOfTokens != 0, "numberOfNfts cannot be 0");
        require(userBalancePreSaleMint[msg.sender]+numberOfTokens<4,"Max mint is 3 tokens");
        require(saleState==2, "PreSale is not active yet");
        require(preSaleTokenPrice * numberOfTokens <= msg.value, "Ether value sent is not correct");
        uint256 supply = totalSupply();
        require(supply + numberOfTokens <= MINT_LIMIT, "Purchase would exceed max mint limit of Tokens");
        require(checkValidity(merkleProof, preSaleMerkleRoot), "Invalid Merkle Proof");
		userBalancePreSaleMint[msg.sender] += numberOfTokens;
        for (uint256 i; i < numberOfTokens; ) {
            _safeMint(msg.sender, supply + i);
            unchecked {
                i++;
            }
        }
    }

    function checkValidity(bytes32[] calldata merkleProof, bytes32 root) internal view returns (bool) {
        bytes32 leafToCheck = keccak256(abi.encodePacked(msg.sender));
        return MerkleProof.verify(merkleProof, root, leafToCheck);
    }

    function withdraw() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "Insufficient balance");
        _withdraw(owner(), address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"CLAIM_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_RESERVE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKENS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimlistMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":"numberOfTokens","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfTokens","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"mintPreSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleState","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setClaimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_ID","type":"uint256"},{"internalType":"bytes32","name":"_newRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setPresalePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"setSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenPrice","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405266d529ae9e860000600955668e1bc9bf040000600a55610259600b553480156200002d57600080fd5b506040518060400160405280600881526020016709ad2dccae484def60c31b8152506040518060400160405280600381526020016229a6a160e91b8152508181733cc6cdda760b79bafa08df41ecfa224f810dceb660018383620000a06200009a6200024260201b60201c565b62000246565b6001620000ae83826200053c565b506002620000bd82826200053c565b5050506daaeb6d7670e522a718067333cd4e3b15620002055780156200015357604051633e9f1edf60e11b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e90637d3e3dbe906044015b600060405180830381600087803b1580156200013457600080fd5b505af115801562000149573d6000803e3d6000fd5b5050505062000205565b6001600160a01b03821615620001a45760405163a0af290360e01b81523060048201526001600160a01b03831660248201526daaeb6d7670e522a718067333cd4e9063a0af29039060440162000119565b604051632210724360e11b81523060048201526daaeb6d7670e522a718067333cd4e90634420e48690602401600060405180830381600087803b158015620001eb57600080fd5b505af115801562000200573d6000803e3d6000fd5b505050505b5050505050506200022f604051806060016040528060258152602001620030a46025913962000296565b6200023c336000620002b2565b62000630565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b620002a0620002e0565b6008620002ae82826200053c565b5050565b620002c982826200034260201b620017e21760201c565b620002ae60076200048a60201b620019241760201c565b6000546001600160a01b03163314620003405760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b565b6001600160a01b0382166200039a5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015260640162000337565b6000818152600360205260409020546001600160a01b031615620004015760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015260640162000337565b6001600160a01b03821660009081526004602052604081208054600192906200042c90849062000608565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004c357607f821691505b602082108103620004e457634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200049357600081815260208120601f850160051c81016020861015620005135750805b601f850160051c820191505b8181101562000534578281556001016200051f565b505050505050565b81516001600160401b0381111562000558576200055862000498565b6200057081620005698454620004ae565b84620004ea565b602080601f831160018114620005a857600084156200058f5750858301515b600019600386901b1c1916600185901b17855562000534565b600085815260208120601f198616915b82811015620005d957888601518255948401946001909101908401620005b8565b5085821015620005f85787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200062a57634e487b7160e01b600052601160045260246000fd5b92915050565b612a6480620006406000396000f3fe6080604052600436106102285760003560e01c80636352211e11610123578063a0712d68116100ab578063e985e9c51161006f578063e985e9c514610612578063eff31e9e14610632578063f2fde38b14610648578063f47c84c514610668578063f4a0a5281461067e57600080fd5b8063a0712d681461057f578063a22cb46514610592578063b88d4fde146105b2578063c87b56dd146105d2578063d66a3c54146105f257600080fd5b80637ff9b596116100f25780637ff9b596146105035780638ba4cc3c146105195780638da5cb5b1461053957806395d89b41146105575780639e6b2c5b1461056c57600080fd5b80636352211e1461049857806370a08231146104b8578063715018a6146104d85780637259bce3146104ed57600080fd5b806323b872dd116101b15780633ccfd60b116101755780633ccfd60b1461040a57806342842e0e1461041f578063438388451461043f578063438b630014610455578063603f4d521461048257600080fd5b806323b872dd146103745780632560e376146103945780632f52ebb7146103aa57806330176e13146103ca5780633549345e146103ea57600080fd5b8063081812fc116101f8578063081812fc146102c5578063084c4088146102fd578063095ea7b31461031f57806318160ddd1461033f57806318712c211461035457600080fd5b806299c3191461023457806301ffc9a71461025d578063027752401461028d57806306fdde03146102a357600080fd5b3661022f57005b600080fd5b34801561024057600080fd5b5061024a600b5481565b6040519081526020015b60405180910390f35b34801561026957600080fd5b5061027d610278366004612267565b61069e565b6040519015158152602001610254565b34801561029957600080fd5b5061024a61219981565b3480156102af57600080fd5b506102b86106f0565b60405161025491906122d4565b3480156102d157600080fd5b506102e56102e03660046122e7565b610782565b6040516001600160a01b039091168152602001610254565b34801561030957600080fd5b5061031d6103183660046122e7565b6107a9565b005b34801561032b57600080fd5b5061031d61033a36600461231c565b6107f1565b34801561034b57600080fd5b5061024a610906565b34801561036057600080fd5b5061031d61036f366004612346565b610916565b34801561038057600080fd5b5061031d61038f366004612368565b610980565b3480156103a057600080fd5b5061024a600e5481565b3480156103b657600080fd5b5061031d6103c53660046123a4565b610adc565b3480156103d657600080fd5b5061031d6103e53660046124af565b610cd3565b3480156103f657600080fd5b5061031d6104053660046122e7565b610ce7565b34801561041657600080fd5b5061031d610cf4565b34801561042b57600080fd5b5061031d61043a366004612368565b610d5f565b34801561044b57600080fd5b5061024a600d5481565b34801561046157600080fd5b506104756104703660046124f8565b610eb0565b6040516102549190612513565b34801561048e57600080fd5b5061024a600c5481565b3480156104a457600080fd5b506102e56104b33660046122e7565b610f77565b3480156104c457600080fd5b5061024a6104d33660046124f8565b610fd7565b3480156104e457600080fd5b5061031d61105d565b3480156104f957600080fd5b5061024a600a5481565b34801561050f57600080fd5b5061024a60095481565b34801561052557600080fd5b5061031d61053436600461231c565b611071565b34801561054557600080fd5b506000546001600160a01b03166102e5565b34801561056357600080fd5b506102b8611194565b61031d61057a3660046123a4565b6111a3565b61031d61058d3660046122e7565b6113a1565b34801561059e57600080fd5b5061031d6105ad366004612565565b61155a565b3480156105be57600080fd5b5061031d6105cd36600461259c565b611565565b3480156105de57600080fd5b506102b86105ed3660046122e7565b6116bd565b3480156105fe57600080fd5b5061031d61060d3660046122e7565b611724565b34801561061e57600080fd5b5061027d61062d366004612618565b611731565b34801561063e57600080fd5b5061024a61057781565b34801561065457600080fd5b5061031d6106633660046124f8565b61175f565b34801561067457600080fd5b5061024a61271081565b34801561068a57600080fd5b5061031d6106993660046122e7565b6117d5565b60006001600160e01b031982166380ac58cd60e01b14806106cf57506001600160e01b03198216635b5e139f60e01b145b806106ea57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546106ff9061264b565b80601f016020809104026020016040519081016040528092919081815260200182805461072b9061264b565b80156107785780601f1061074d57610100808354040283529160200191610778565b820191906000526020600020905b81548152906001019060200180831161075b57829003601f168201915b5050505050905090565b600061078d8261192d565b506000908152600560205260409020546001600160a01b031690565b6107b161198c565b600481106107ec5760405162461bcd60e51b8152602060048201526003602482015262085a5960ea1b60448201526064015b60405180910390fd5b600c55565b60006107fc82610f77565b9050806001600160a01b0316836001600160a01b0316036108695760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107e3565b336001600160a01b038216148061088557506108858133611731565b6108f75760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016107e3565b61090183836119e6565b505050565b600061091160075490565b905090565b61091e61198c565b60038210801561092e5750600082115b6109605760405162461bcd60e51b8152602060048201526003602482015262085a5960ea1b60448201526064016107e3565b8160020361096e57600d5550565b8160010361097c57600e8190555b5050565b826daaeb6d7670e522a718067333cd4e3b15610acb57336001600160a01b038216036109b6576109b1848484611a54565b610ad6565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a299190612685565b8015610aac5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac9190612685565b610acb57604051633b79c77360e21b81523360048201526024016107e3565b610ad6848484611a54565b50505050565b82600003610afc5760405162461bcd60e51b81526004016107e3906126a2565b33600090815260106020526040902054600290610b1a9085906126ef565b10610b5e5760405162461bcd60e51b815260206004820152601460248201527326b0bc1031b630b4b69034b99018903a37b5b2b760611b60448201526064016107e3565b600c54600114610bb05760405162461bcd60e51b815260206004820152601760248201527f436c61696d206973206e6f74206163746976652079657400000000000000000060448201526064016107e3565b6000610bba610906565b600b54909150610bca85836126ef565b1115610c315760405162461bcd60e51b815260206004820152603060248201527f507572636861736520776f756c6420657863656564206d617820636c61696d2060448201526f737570706c79206f6620546f6b656e7360801b60648201526084016107e3565b610c3e8383600e54611a85565b610c815760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21026b2b935b63290283937b7b360611b60448201526064016107e3565b3360009081526010602052604081208054869290610ca09084906126ef565b90915550600090505b84811015610ccc57610cc433610cbf83856126ef565b611b09565b600101610ca9565b5050505050565b610cdb61198c565b600861097c8282612750565b610cef61198c565b600a55565b610cfc61198c565b4780610d415760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016107e3565b610d5c610d566000546001600160a01b031690565b47611b23565b50565b826daaeb6d7670e522a718067333cd4e3b15610ea557336001600160a01b03821603610d90576109b1848484611bc6565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e039190612685565b8015610e865750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e869190612685565b610ea557604051633b79c77360e21b81523360048201526024016107e3565b610ad6848484611bc6565b60606000610ebd83610fd7565b905060008167ffffffffffffffff811115610eda57610eda612423565b604051908082528060200260200182016040528015610f03578160200160208202803683370190505b5090506000805b8381108015610f1a575060075482105b15610f6d57856001600160a01b0316610f3283610f77565b6001600160a01b031603610f625781838281518110610f5357610f53612810565b60209081029190910101526001015b600190910190610f0a565b5090949350505050565b6000818152600360205260408120546001600160a01b0316806106ea5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107e3565b60006001600160a01b0382166110415760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016107e3565b506001600160a01b031660009081526004602052604090205490565b61106561198c565b61106f6000611be1565b565b61107961198c565b6000611083610906565b9050816000036110a55760405162461bcd60e51b81526004016107e3906126a2565b6127106110b283836126ef565b11156111125760405162461bcd60e51b815260206004820152602960248201527f5265736572766520776f756c6420657863656564206d617820737570706c79206044820152686f6620546f6b656e7360b81b60648201526084016107e3565b61057782106111735760405162461bcd60e51b815260206004820152602760248201527f43616e206f6e6c79206d696e7420726573657276656420746f6b656e7320617460448201526620612074696d6560c81b60648201526084016107e3565b60005b82811015610ad65761118c84610cbf83856126ef565b600101611176565b6060600280546106ff9061264b565b826000036111c35760405162461bcd60e51b81526004016107e3906126a2565b336000908152600f60205260409020546004906111e19085906126ef565b106112255760405162461bcd60e51b81526020600482015260146024820152734d6178206d696e74206973203320746f6b656e7360601b60448201526064016107e3565b600c546002146112775760405162461bcd60e51b815260206004820152601960248201527f50726553616c65206973206e6f7420616374697665207965740000000000000060448201526064016107e3565b3483600a546112869190612826565b11156112d45760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107e3565b60006112de610906565b90506121996112ed85836126ef565b111561130b5760405162461bcd60e51b81526004016107e39061283d565b6113188383600d54611a85565b61135b5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21026b2b935b63290283937b7b360611b60448201526064016107e3565b336000908152600f60205260408120805486929061137a9084906126ef565b90915550600090505b84811015610ccc5761139933610cbf83856126ef565b600101611383565b806000036113c15760405162461bcd60e51b81526004016107e3906126a2565b3332146114085760405162461bcd60e51b815260206004820152601560248201527427379021b7b73a3930b1ba399030b63637bbb2b21760591b60448201526064016107e3565b600481106114585760405162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206d696e74203320746f6b656e7320617420612074696d6560448201526064016107e3565b34816009546114679190612826565b11156114b55760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107e3565b600c546003146114fd5760405162461bcd60e51b815260206004820152601360248201527214d85b19481393d5081858dd1a5d99481e595d606a1b60448201526064016107e3565b6000611507610906565b905061219961151683836126ef565b11156115345760405162461bcd60e51b81526004016107e39061283d565b60005b82811015610901576115523361154d83856126ef565b611c31565b600101611537565b61097c338383611c49565b836daaeb6d7670e522a718067333cd4e3b156116b157336001600160a01b0382160361159c5761159785858585611d17565b610ccc565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156115eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160f9190612685565b80156116925750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561166e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116929190612685565b6116b157604051633b79c77360e21b81523360048201526024016107e3565b610ccc85858585611d17565b60606116c88261192d565b60006116d2611d49565b905060008151116116f2576040518060200160405280600081525061171d565b806116fc84611d58565b60405160200161170d92919061288b565b6040516020818303038152906040525b9392505050565b61172c61198c565b600b55565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61176761198c565b6001600160a01b0381166117cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e3565b610d5c81611be1565b6117dd61198c565b600955565b6001600160a01b0382166118385760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107e3565b6000818152600360205260409020546001600160a01b03161561189d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107e3565b6001600160a01b03821660009081526004602052604081208054600192906118c69084906126ef565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b6000818152600360205260409020546001600160a01b0316610d5c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107e3565b6000546001600160a01b0316331461106f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e3565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611a1b82610f77565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611a5e3382611e61565b611a7a5760405162461bcd60e51b81526004016107e3906128ca565b610901838383611ebf565b6040516bffffffffffffffffffffffff193360601b1660208201526000908190603401604051602081830303815290604052805190602001209050611b0085858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525087925085915061205b9050565b95945050505050565b61097c828260405180602001604052806000815250612071565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b70576040519150601f19603f3d011682016040523d82523d6000602084013e611b75565b606091505b50509050806109015760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207769746864726177204574686572000000000000000060448201526064016107e3565b61090183838360405180602001604052806000815250611565565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c3b82826117e2565b61097c600780546001019055565b816001600160a01b0316836001600160a01b031603611caa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107e3565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d213383611e61565b611d3d5760405162461bcd60e51b81526004016107e3906128ca565b610ad6848484846120a4565b6060600880546106ff9061264b565b606081600003611d7f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611da95780611d9381612918565b9150611da29050600a83612947565b9150611d83565b60008167ffffffffffffffff811115611dc457611dc4612423565b6040519080825280601f01601f191660200182016040528015611dee576020820181803683370190505b5090505b8415611e5957611e0360018361295b565b9150611e10600a8661296e565b611e1b9060306126ef565b60f81b818381518110611e3057611e30612810565b60200101906001600160f81b031916908160001a905350611e52600a86612947565b9450611df2565b949350505050565b600080611e6d83610f77565b9050806001600160a01b0316846001600160a01b03161480611e945750611e948185611731565b80611e595750836001600160a01b0316611ead84610782565b6001600160a01b031614949350505050565b826001600160a01b0316611ed282610f77565b6001600160a01b031614611f365760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107e3565b6001600160a01b038216611f985760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107e3565b611fa36000826119e6565b6001600160a01b0383166000908152600460205260408120805460019290611fcc90849061295b565b90915550506001600160a01b0382166000908152600460205260408120805460019290611ffa9084906126ef565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008261206885846120d7565b14949350505050565b61207b8383611c31565b6120886000848484612124565b6109015760405162461bcd60e51b81526004016107e390612982565b6120af848484611ebf565b6120bb84848484612124565b610ad65760405162461bcd60e51b81526004016107e390612982565b600081815b845181101561211c57612108828683815181106120fb576120fb612810565b6020026020010151612225565b91508061211481612918565b9150506120dc565b509392505050565b60006001600160a01b0384163b1561221a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121689033908990889088906004016129d4565b6020604051808303816000875af19250505080156121a3575060408051601f3d908101601f191682019092526121a091810190612a11565b60015b612200573d8080156121d1576040519150601f19603f3d011682016040523d82523d6000602084013e6121d6565b606091505b5080516000036121f85760405162461bcd60e51b81526004016107e390612982565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611e59565b506001949350505050565b600081831061224157600082815260208490526040902061171d565b5060009182526020526040902090565b6001600160e01b031981168114610d5c57600080fd5b60006020828403121561227957600080fd5b813561171d81612251565b60005b8381101561229f578181015183820152602001612287565b50506000910152565b600081518084526122c0816020860160208601612284565b601f01601f19169290920160200192915050565b60208152600061171d60208301846122a8565b6000602082840312156122f957600080fd5b5035919050565b80356001600160a01b038116811461231757600080fd5b919050565b6000806040838503121561232f57600080fd5b61233883612300565b946020939093013593505050565b6000806040838503121561235957600080fd5b50508035926020909101359150565b60008060006060848603121561237d57600080fd5b61238684612300565b925061239460208501612300565b9150604084013590509250925092565b6000806000604084860312156123b957600080fd5b83359250602084013567ffffffffffffffff808211156123d857600080fd5b818601915086601f8301126123ec57600080fd5b8135818111156123fb57600080fd5b8760208260051b850101111561241057600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561245457612454612423565b604051601f8501601f19908116603f0116810190828211818310171561247c5761247c612423565b8160405280935085815286868601111561249557600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156124c157600080fd5b813567ffffffffffffffff8111156124d857600080fd5b8201601f810184136124e957600080fd5b611e5984823560208401612439565b60006020828403121561250a57600080fd5b61171d82612300565b6020808252825182820181905260009190848201906040850190845b8181101561254b5783518352928401929184019160010161252f565b50909695505050505050565b8015158114610d5c57600080fd5b6000806040838503121561257857600080fd5b61258183612300565b9150602083013561259181612557565b809150509250929050565b600080600080608085870312156125b257600080fd5b6125bb85612300565b93506125c960208601612300565b925060408501359150606085013567ffffffffffffffff8111156125ec57600080fd5b8501601f810187136125fd57600080fd5b61260c87823560208401612439565b91505092959194509250565b6000806040838503121561262b57600080fd5b61263483612300565b915061264260208401612300565b90509250929050565b600181811c9082168061265f57607f821691505b60208210810361267f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561269757600080fd5b815161171d81612557565b60208082526018908201527f6e756d6265724f664e6674732063616e6e6f7420626520300000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106ea576106ea6126d9565b601f82111561090157600081815260208120601f850160051c810160208610156127295750805b601f850160051c820191505b8181101561274857828155600101612735565b505050505050565b815167ffffffffffffffff81111561276a5761276a612423565b61277e81612778845461264b565b84612702565b602080601f8311600181146127b3576000841561279b5750858301515b600019600386901b1c1916600185901b178555612748565b600085815260208120601f198616915b828110156127e2578886015182559484019460019091019084016127c3565b50858210156128005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176106ea576106ea6126d9565b6020808252602e908201527f507572636861736520776f756c6420657863656564206d6178206d696e74206c60408201526d696d6974206f6620546f6b656e7360901b606082015260800190565b6000835161289d818460208801612284565b8351908301906128b1818360208801612284565b64173539b7b760d91b9101908152600501949350505050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60006001820161292a5761292a6126d9565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261295657612956612931565b500490565b818103818111156106ea576106ea6126d9565b60008261297d5761297d612931565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a07908301846122a8565b9695505050505050565b600060208284031215612a2357600080fd5b815161171d8161225156fea264697066735822122005195ac4eefd60823da6a53414d9749515c6a1d54706177ce365b613ffc596a464736f6c6343000811003368747470733a2f2f6d696e742e6f726465727361746f7368692e636f6d2f6572633732312f

Deployed Bytecode

0x6080604052600436106102285760003560e01c80636352211e11610123578063a0712d68116100ab578063e985e9c51161006f578063e985e9c514610612578063eff31e9e14610632578063f2fde38b14610648578063f47c84c514610668578063f4a0a5281461067e57600080fd5b8063a0712d681461057f578063a22cb46514610592578063b88d4fde146105b2578063c87b56dd146105d2578063d66a3c54146105f257600080fd5b80637ff9b596116100f25780637ff9b596146105035780638ba4cc3c146105195780638da5cb5b1461053957806395d89b41146105575780639e6b2c5b1461056c57600080fd5b80636352211e1461049857806370a08231146104b8578063715018a6146104d85780637259bce3146104ed57600080fd5b806323b872dd116101b15780633ccfd60b116101755780633ccfd60b1461040a57806342842e0e1461041f578063438388451461043f578063438b630014610455578063603f4d521461048257600080fd5b806323b872dd146103745780632560e376146103945780632f52ebb7146103aa57806330176e13146103ca5780633549345e146103ea57600080fd5b8063081812fc116101f8578063081812fc146102c5578063084c4088146102fd578063095ea7b31461031f57806318160ddd1461033f57806318712c211461035457600080fd5b806299c3191461023457806301ffc9a71461025d578063027752401461028d57806306fdde03146102a357600080fd5b3661022f57005b600080fd5b34801561024057600080fd5b5061024a600b5481565b6040519081526020015b60405180910390f35b34801561026957600080fd5b5061027d610278366004612267565b61069e565b6040519015158152602001610254565b34801561029957600080fd5b5061024a61219981565b3480156102af57600080fd5b506102b86106f0565b60405161025491906122d4565b3480156102d157600080fd5b506102e56102e03660046122e7565b610782565b6040516001600160a01b039091168152602001610254565b34801561030957600080fd5b5061031d6103183660046122e7565b6107a9565b005b34801561032b57600080fd5b5061031d61033a36600461231c565b6107f1565b34801561034b57600080fd5b5061024a610906565b34801561036057600080fd5b5061031d61036f366004612346565b610916565b34801561038057600080fd5b5061031d61038f366004612368565b610980565b3480156103a057600080fd5b5061024a600e5481565b3480156103b657600080fd5b5061031d6103c53660046123a4565b610adc565b3480156103d657600080fd5b5061031d6103e53660046124af565b610cd3565b3480156103f657600080fd5b5061031d6104053660046122e7565b610ce7565b34801561041657600080fd5b5061031d610cf4565b34801561042b57600080fd5b5061031d61043a366004612368565b610d5f565b34801561044b57600080fd5b5061024a600d5481565b34801561046157600080fd5b506104756104703660046124f8565b610eb0565b6040516102549190612513565b34801561048e57600080fd5b5061024a600c5481565b3480156104a457600080fd5b506102e56104b33660046122e7565b610f77565b3480156104c457600080fd5b5061024a6104d33660046124f8565b610fd7565b3480156104e457600080fd5b5061031d61105d565b3480156104f957600080fd5b5061024a600a5481565b34801561050f57600080fd5b5061024a60095481565b34801561052557600080fd5b5061031d61053436600461231c565b611071565b34801561054557600080fd5b506000546001600160a01b03166102e5565b34801561056357600080fd5b506102b8611194565b61031d61057a3660046123a4565b6111a3565b61031d61058d3660046122e7565b6113a1565b34801561059e57600080fd5b5061031d6105ad366004612565565b61155a565b3480156105be57600080fd5b5061031d6105cd36600461259c565b611565565b3480156105de57600080fd5b506102b86105ed3660046122e7565b6116bd565b3480156105fe57600080fd5b5061031d61060d3660046122e7565b611724565b34801561061e57600080fd5b5061027d61062d366004612618565b611731565b34801561063e57600080fd5b5061024a61057781565b34801561065457600080fd5b5061031d6106633660046124f8565b61175f565b34801561067457600080fd5b5061024a61271081565b34801561068a57600080fd5b5061031d6106993660046122e7565b6117d5565b60006001600160e01b031982166380ac58cd60e01b14806106cf57506001600160e01b03198216635b5e139f60e01b145b806106ea57506301ffc9a760e01b6001600160e01b03198316145b92915050565b6060600180546106ff9061264b565b80601f016020809104026020016040519081016040528092919081815260200182805461072b9061264b565b80156107785780601f1061074d57610100808354040283529160200191610778565b820191906000526020600020905b81548152906001019060200180831161075b57829003601f168201915b5050505050905090565b600061078d8261192d565b506000908152600560205260409020546001600160a01b031690565b6107b161198c565b600481106107ec5760405162461bcd60e51b8152602060048201526003602482015262085a5960ea1b60448201526064015b60405180910390fd5b600c55565b60006107fc82610f77565b9050806001600160a01b0316836001600160a01b0316036108695760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016107e3565b336001600160a01b038216148061088557506108858133611731565b6108f75760405162461bcd60e51b815260206004820152603e60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c000060648201526084016107e3565b61090183836119e6565b505050565b600061091160075490565b905090565b61091e61198c565b60038210801561092e5750600082115b6109605760405162461bcd60e51b8152602060048201526003602482015262085a5960ea1b60448201526064016107e3565b8160020361096e57600d5550565b8160010361097c57600e8190555b5050565b826daaeb6d7670e522a718067333cd4e3b15610acb57336001600160a01b038216036109b6576109b1848484611a54565b610ad6565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a299190612685565b8015610aac5750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610a88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aac9190612685565b610acb57604051633b79c77360e21b81523360048201526024016107e3565b610ad6848484611a54565b50505050565b82600003610afc5760405162461bcd60e51b81526004016107e3906126a2565b33600090815260106020526040902054600290610b1a9085906126ef565b10610b5e5760405162461bcd60e51b815260206004820152601460248201527326b0bc1031b630b4b69034b99018903a37b5b2b760611b60448201526064016107e3565b600c54600114610bb05760405162461bcd60e51b815260206004820152601760248201527f436c61696d206973206e6f74206163746976652079657400000000000000000060448201526064016107e3565b6000610bba610906565b600b54909150610bca85836126ef565b1115610c315760405162461bcd60e51b815260206004820152603060248201527f507572636861736520776f756c6420657863656564206d617820636c61696d2060448201526f737570706c79206f6620546f6b656e7360801b60648201526084016107e3565b610c3e8383600e54611a85565b610c815760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21026b2b935b63290283937b7b360611b60448201526064016107e3565b3360009081526010602052604081208054869290610ca09084906126ef565b90915550600090505b84811015610ccc57610cc433610cbf83856126ef565b611b09565b600101610ca9565b5050505050565b610cdb61198c565b600861097c8282612750565b610cef61198c565b600a55565b610cfc61198c565b4780610d415760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b60448201526064016107e3565b610d5c610d566000546001600160a01b031690565b47611b23565b50565b826daaeb6d7670e522a718067333cd4e3b15610ea557336001600160a01b03821603610d90576109b1848484611bc6565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e039190612685565b8015610e865750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e869190612685565b610ea557604051633b79c77360e21b81523360048201526024016107e3565b610ad6848484611bc6565b60606000610ebd83610fd7565b905060008167ffffffffffffffff811115610eda57610eda612423565b604051908082528060200260200182016040528015610f03578160200160208202803683370190505b5090506000805b8381108015610f1a575060075482105b15610f6d57856001600160a01b0316610f3283610f77565b6001600160a01b031603610f625781838281518110610f5357610f53612810565b60209081029190910101526001015b600190910190610f0a565b5090949350505050565b6000818152600360205260408120546001600160a01b0316806106ea5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107e3565b60006001600160a01b0382166110415760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b60648201526084016107e3565b506001600160a01b031660009081526004602052604090205490565b61106561198c565b61106f6000611be1565b565b61107961198c565b6000611083610906565b9050816000036110a55760405162461bcd60e51b81526004016107e3906126a2565b6127106110b283836126ef565b11156111125760405162461bcd60e51b815260206004820152602960248201527f5265736572766520776f756c6420657863656564206d617820737570706c79206044820152686f6620546f6b656e7360b81b60648201526084016107e3565b61057782106111735760405162461bcd60e51b815260206004820152602760248201527f43616e206f6e6c79206d696e7420726573657276656420746f6b656e7320617460448201526620612074696d6560c81b60648201526084016107e3565b60005b82811015610ad65761118c84610cbf83856126ef565b600101611176565b6060600280546106ff9061264b565b826000036111c35760405162461bcd60e51b81526004016107e3906126a2565b336000908152600f60205260409020546004906111e19085906126ef565b106112255760405162461bcd60e51b81526020600482015260146024820152734d6178206d696e74206973203320746f6b656e7360601b60448201526064016107e3565b600c546002146112775760405162461bcd60e51b815260206004820152601960248201527f50726553616c65206973206e6f7420616374697665207965740000000000000060448201526064016107e3565b3483600a546112869190612826565b11156112d45760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107e3565b60006112de610906565b90506121996112ed85836126ef565b111561130b5760405162461bcd60e51b81526004016107e39061283d565b6113188383600d54611a85565b61135b5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b21026b2b935b63290283937b7b360611b60448201526064016107e3565b336000908152600f60205260408120805486929061137a9084906126ef565b90915550600090505b84811015610ccc5761139933610cbf83856126ef565b600101611383565b806000036113c15760405162461bcd60e51b81526004016107e3906126a2565b3332146114085760405162461bcd60e51b815260206004820152601560248201527427379021b7b73a3930b1ba399030b63637bbb2b21760591b60448201526064016107e3565b600481106114585760405162461bcd60e51b815260206004820181905260248201527f43616e206f6e6c79206d696e74203320746f6b656e7320617420612074696d6560448201526064016107e3565b34816009546114679190612826565b11156114b55760405162461bcd60e51b815260206004820152601f60248201527f45746865722076616c75652073656e74206973206e6f7420636f72726563740060448201526064016107e3565b600c546003146114fd5760405162461bcd60e51b815260206004820152601360248201527214d85b19481393d5081858dd1a5d99481e595d606a1b60448201526064016107e3565b6000611507610906565b905061219961151683836126ef565b11156115345760405162461bcd60e51b81526004016107e39061283d565b60005b82811015610901576115523361154d83856126ef565b611c31565b600101611537565b61097c338383611c49565b836daaeb6d7670e522a718067333cd4e3b156116b157336001600160a01b0382160361159c5761159785858585611d17565b610ccc565b604051633185c44d60e21b81523060048201523360248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa1580156115eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160f9190612685565b80156116925750604051633185c44d60e21b81523060048201526001600160a01b03821660248201526daaeb6d7670e522a718067333cd4e9063c617113490604401602060405180830381865afa15801561166e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116929190612685565b6116b157604051633b79c77360e21b81523360048201526024016107e3565b610ccc85858585611d17565b60606116c88261192d565b60006116d2611d49565b905060008151116116f2576040518060200160405280600081525061171d565b806116fc84611d58565b60405160200161170d92919061288b565b6040516020818303038152906040525b9392505050565b61172c61198c565b600b55565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b61176761198c565b6001600160a01b0381166117cc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e3565b610d5c81611be1565b6117dd61198c565b600955565b6001600160a01b0382166118385760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016107e3565b6000818152600360205260409020546001600160a01b03161561189d5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016107e3565b6001600160a01b03821660009081526004602052604081208054600192906118c69084906126ef565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b80546001019055565b6000818152600360205260409020546001600160a01b0316610d5c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b60448201526064016107e3565b6000546001600160a01b0316331461106f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e3565b600081815260056020526040902080546001600160a01b0319166001600160a01b0384169081179091558190611a1b82610f77565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611a5e3382611e61565b611a7a5760405162461bcd60e51b81526004016107e3906128ca565b610901838383611ebf565b6040516bffffffffffffffffffffffff193360601b1660208201526000908190603401604051602081830303815290604052805190602001209050611b0085858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525087925085915061205b9050565b95945050505050565b61097c828260405180602001604052806000815250612071565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b70576040519150601f19603f3d011682016040523d82523d6000602084013e611b75565b606091505b50509050806109015760405162461bcd60e51b815260206004820152601860248201527f4661696c656420746f207769746864726177204574686572000000000000000060448201526064016107e3565b61090183838360405180602001604052806000815250611565565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b611c3b82826117e2565b61097c600780546001019055565b816001600160a01b0316836001600160a01b031603611caa5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016107e3565b6001600160a01b03838116600081815260066020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611d213383611e61565b611d3d5760405162461bcd60e51b81526004016107e3906128ca565b610ad6848484846120a4565b6060600880546106ff9061264b565b606081600003611d7f5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611da95780611d9381612918565b9150611da29050600a83612947565b9150611d83565b60008167ffffffffffffffff811115611dc457611dc4612423565b6040519080825280601f01601f191660200182016040528015611dee576020820181803683370190505b5090505b8415611e5957611e0360018361295b565b9150611e10600a8661296e565b611e1b9060306126ef565b60f81b818381518110611e3057611e30612810565b60200101906001600160f81b031916908160001a905350611e52600a86612947565b9450611df2565b949350505050565b600080611e6d83610f77565b9050806001600160a01b0316846001600160a01b03161480611e945750611e948185611731565b80611e595750836001600160a01b0316611ead84610782565b6001600160a01b031614949350505050565b826001600160a01b0316611ed282610f77565b6001600160a01b031614611f365760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201526437bbb732b960d91b60648201526084016107e3565b6001600160a01b038216611f985760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016107e3565b611fa36000826119e6565b6001600160a01b0383166000908152600460205260408120805460019290611fcc90849061295b565b90915550506001600160a01b0382166000908152600460205260408120805460019290611ffa9084906126ef565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60008261206885846120d7565b14949350505050565b61207b8383611c31565b6120886000848484612124565b6109015760405162461bcd60e51b81526004016107e390612982565b6120af848484611ebf565b6120bb84848484612124565b610ad65760405162461bcd60e51b81526004016107e390612982565b600081815b845181101561211c57612108828683815181106120fb576120fb612810565b6020026020010151612225565b91508061211481612918565b9150506120dc565b509392505050565b60006001600160a01b0384163b1561221a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906121689033908990889088906004016129d4565b6020604051808303816000875af19250505080156121a3575060408051601f3d908101601f191682019092526121a091810190612a11565b60015b612200573d8080156121d1576040519150601f19603f3d011682016040523d82523d6000602084013e6121d6565b606091505b5080516000036121f85760405162461bcd60e51b81526004016107e390612982565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050611e59565b506001949350505050565b600081831061224157600082815260208490526040902061171d565b5060009182526020526040902090565b6001600160e01b031981168114610d5c57600080fd5b60006020828403121561227957600080fd5b813561171d81612251565b60005b8381101561229f578181015183820152602001612287565b50506000910152565b600081518084526122c0816020860160208601612284565b601f01601f19169290920160200192915050565b60208152600061171d60208301846122a8565b6000602082840312156122f957600080fd5b5035919050565b80356001600160a01b038116811461231757600080fd5b919050565b6000806040838503121561232f57600080fd5b61233883612300565b946020939093013593505050565b6000806040838503121561235957600080fd5b50508035926020909101359150565b60008060006060848603121561237d57600080fd5b61238684612300565b925061239460208501612300565b9150604084013590509250925092565b6000806000604084860312156123b957600080fd5b83359250602084013567ffffffffffffffff808211156123d857600080fd5b818601915086601f8301126123ec57600080fd5b8135818111156123fb57600080fd5b8760208260051b850101111561241057600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052604160045260246000fd5b600067ffffffffffffffff8084111561245457612454612423565b604051601f8501601f19908116603f0116810190828211818310171561247c5761247c612423565b8160405280935085815286868601111561249557600080fd5b858560208301376000602087830101525050509392505050565b6000602082840312156124c157600080fd5b813567ffffffffffffffff8111156124d857600080fd5b8201601f810184136124e957600080fd5b611e5984823560208401612439565b60006020828403121561250a57600080fd5b61171d82612300565b6020808252825182820181905260009190848201906040850190845b8181101561254b5783518352928401929184019160010161252f565b50909695505050505050565b8015158114610d5c57600080fd5b6000806040838503121561257857600080fd5b61258183612300565b9150602083013561259181612557565b809150509250929050565b600080600080608085870312156125b257600080fd5b6125bb85612300565b93506125c960208601612300565b925060408501359150606085013567ffffffffffffffff8111156125ec57600080fd5b8501601f810187136125fd57600080fd5b61260c87823560208401612439565b91505092959194509250565b6000806040838503121561262b57600080fd5b61263483612300565b915061264260208401612300565b90509250929050565b600181811c9082168061265f57607f821691505b60208210810361267f57634e487b7160e01b600052602260045260246000fd5b50919050565b60006020828403121561269757600080fd5b815161171d81612557565b60208082526018908201527f6e756d6265724f664e6674732063616e6e6f7420626520300000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808201808211156106ea576106ea6126d9565b601f82111561090157600081815260208120601f850160051c810160208610156127295750805b601f850160051c820191505b8181101561274857828155600101612735565b505050505050565b815167ffffffffffffffff81111561276a5761276a612423565b61277e81612778845461264b565b84612702565b602080601f8311600181146127b3576000841561279b5750858301515b600019600386901b1c1916600185901b178555612748565b600085815260208120601f198616915b828110156127e2578886015182559484019460019091019084016127c3565b50858210156128005787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176106ea576106ea6126d9565b6020808252602e908201527f507572636861736520776f756c6420657863656564206d6178206d696e74206c60408201526d696d6974206f6620546f6b656e7360901b606082015260800190565b6000835161289d818460208801612284565b8351908301906128b1818360208801612284565b64173539b7b760d91b9101908152600501949350505050565b6020808252602e908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526d1c881b9bdc88185c1c1c9bdd995960921b606082015260800190565b60006001820161292a5761292a6126d9565b5060010190565b634e487b7160e01b600052601260045260246000fd5b60008261295657612956612931565b500490565b818103818111156106ea576106ea6126d9565b60008261297d5761297d612931565b500690565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612a07908301846122a8565b9695505050505050565b600060208284031215612a2357600080fd5b815161171d8161225156fea264697066735822122005195ac4eefd60823da6a53414d9749515c6a1d54706177ce365b613ffc596a464736f6c63430008110033

Deployed Bytecode Sourcemap

26500:4835:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26780:33;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;26780:33:0;;;;;;;;16990:305;;;;;;;;;;-1:-1:-1;16990:305:0;;;;;:::i;:::-;;:::i;:::-;;;747:14:1;;740:22;722:41;;710:2;695:18;16990:305:0;582:187:1;26686:41:0;;;;;;;;;;;;26723:4;26686:41;;17748:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18750:169::-;;;;;;;;;;-1:-1:-1;18750:169:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1879:32:1;;;1861:51;;1849:2;1834:18;18750:169:0;1715:203:1;28334:120:0;;;;;;;;;;-1:-1:-1;28334:120:0;;;;;:::i;:::-;;:::i;:::-;;18366:376;;;;;;;;;;-1:-1:-1;18366:376:0;;;;;:::i;:::-;;:::i;25968:101::-;;;;;;;;;;;;;:::i;28044:282::-;;;;;;;;;;-1:-1:-1;28044:282:0;;;;;:::i;:::-;;:::i;25413:163::-;;;;;;;;;;-1:-1:-1;25413:163:0;;;;;:::i;:::-;;:::i;26889:34::-;;;;;;;;;;;;;;;;29206:762;;;;;;;;;;-1:-1:-1;29206:762:0;;;;;:::i;:::-;;:::i;25141:107::-;;;;;;;;;;-1:-1:-1;25141:107:0;;;;;:::i;:::-;;:::i;27827:103::-;;;;;;;;;;-1:-1:-1;27827:103:0;;;;;:::i;:::-;;:::i;31128:204::-;;;;;;;;;;;;;:::i;25584:171::-;;;;;;;;;;-1:-1:-1;25584:171:0;;;;;:::i;:::-;;:::i;26850:32::-;;;;;;;;;;;;;;;;24237:670;;;;;;;;;;-1:-1:-1;24237:670:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;26820:21::-;;;;;;;;;;;;;;;;17518:222;;;;;;;;;;-1:-1:-1;17518:222:0;;;;;:::i;:::-;;:::i;17303:207::-;;;;;;;;;;-1:-1:-1;17303:207:0;;;;;:::i;:::-;;:::i;14041:103::-;;;;;;;;;;;;;:::i;26588:45::-;;;;;;;;;;;;;;;;26542:38;;;;;;;;;;;;;;;;27213:504;;;;;;;;;;-1:-1:-1;27213:504:0;;;;;:::i;:::-;;:::i;13806:87::-;;;;;;;;;;-1:-1:-1;13852:7:0;13879:6;-1:-1:-1;;;;;13879:6:0;13806:87;;17856:104;;;;;;;;;;;;;:::i;29976:890::-;;;;;;:::i;:::-;;:::i;28462:736::-;;;;;;:::i;:::-;;:::i;18927:155::-;;;;;;;;;;-1:-1:-1;18927:155:0;;;;;:::i;:::-;;:::i;25763:196::-;;;;;;;;;;-1:-1:-1;25763:196:0;;;;;:::i;:::-;;:::i;17968:288::-;;;;;;;;;;-1:-1:-1;17968:288:0;;;;;:::i;:::-;;:::i;27938:97::-;;;;;;;;;;-1:-1:-1;27938:97:0;;;;;:::i;:::-;;:::i;19087:155::-;;;;;;;;;;-1:-1:-1;19087:155:0;;;;;:::i;:::-;;:::i;26734:39::-;;;;;;;;;;;;26769:4;26734:39;;14152:201;;;;;;;;;;-1:-1:-1;14152:201:0;;;;;:::i;:::-;;:::i;26640:42::-;;;;;;;;;;;;26677:5;26640:42;;27725:93;;;;;;;;;;-1:-1:-1;27725:93:0;;;;;:::i;:::-;;:::i;16990:305::-;17092:4;-1:-1:-1;;;;;;17129:40:0;;-1:-1:-1;;;17129:40:0;;:105;;-1:-1:-1;;;;;;;17186:48:0;;-1:-1:-1;;;17186:48:0;17129:105;:158;;;-1:-1:-1;;;;;;;;;;16146:40:0;;;17251:36;17109:178;16990:305;-1:-1:-1;;16990:305:0:o;17748:100::-;17802:13;17835:5;17828:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17748:100;:::o;18750:169::-;18826:7;18846:23;18861:7;18846:14;:23::i;:::-;-1:-1:-1;18887:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;18887:24:0;;18750:169::o;28334:120::-;13765:13;:11;:13::i;:::-;28413:1:::1;28407:3;:7;28399:23;;;::::0;-1:-1:-1;;;28399:23:0;;7836:2:1;28399:23:0::1;::::0;::::1;7818:21:1::0;7875:1;7855:18;;;7848:29;-1:-1:-1;;;7893:18:1;;;7886:33;7936:18;;28399:23:0::1;;;;;;;;;28433:9;:13:::0;28334:120::o;18366:376::-;18447:13;18463:23;18478:7;18463:14;:23::i;:::-;18447:39;;18511:5;-1:-1:-1;;;;;18505:11:0;:2;-1:-1:-1;;;;;18505:11:0;;18497:57;;;;-1:-1:-1;;;18497:57:0;;8167:2:1;18497:57:0;;;8149:21:1;8206:2;8186:18;;;8179:30;8245:34;8225:18;;;8218:62;-1:-1:-1;;;8296:18:1;;;8289:31;8337:19;;18497:57:0;7965:397:1;18497:57:0;13359:10;-1:-1:-1;;;;;18573:21:0;;;;:62;;-1:-1:-1;18598:37:0;18615:5;13359:10;19087:155;:::i;18598:37::-;18565:137;;;;-1:-1:-1;;;18565:137:0;;8569:2:1;18565:137:0;;;8551:21:1;8608:2;8588:18;;;8581:30;8647:34;8627:18;;;8620:62;8718:32;8698:18;;;8691:60;8768:19;;18565:137:0;8367:426:1;18565:137:0;18713:21;18722:2;18726:7;18713:8;:21::i;:::-;18436:306;18366:376;;:::o;25968:101::-;26012:7;26039:22;:12;3483:14;;3391:114;26039:22;26032:29;;25968:101;:::o;28044:282::-;13765:13;:11;:13::i;:::-;28142:1:::1;28136:3;:7;:18;;;;;28153:1;28147:3;:7;28136:18;28128:34;;;::::0;-1:-1:-1;;;28128:34:0;;7836:2:1;28128:34:0::1;::::0;::::1;7818:21:1::0;7875:1;7855:18;;;7848:29;-1:-1:-1;;;7893:18:1;;;7886:33;7936:18;;28128:34:0::1;7634:326:1::0;28128:34:0::1;28177:3;28184:1;28177:8:::0;28173:146:::1;;28202:17;:28:::0;-1:-1:-1;28044:282:0:o;28173:146::-:1;28252:3;28259:1;28252:8:::0;28248:71:::1;;28277:19;:30:::0;;;28248:71:::1;28044:282:::0;;:::o;25413:163::-;25514:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25531:37:::1;25550:4;25556:2;25560:7;25531:18;:37::i;:::-;15611:7:::0;;15548:85;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;9010:34:1;15749:10:0;9060:18:1;;;9053:43;14732:42:0;;15693:40;;8945:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;9010:34:1;-1:-1:-1;;;;;9080:15:1;;9060:18;;;9053:43;14732:42:0;;15789:40;;8945:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1861:51:1;1834:18;;15911:30:0;1715:203:1;15647:310:0;25531:37:::1;25550:4;25556:2;25560:7;25531:18;:37::i;:::-;25413:163:::0;;;;:::o;29206:762::-;29305:14;29323:1;29305:19;29297:56;;;;-1:-1:-1;;;29297:56:0;;;;;;;:::i;:::-;29384:10;29372:23;;;;:11;:23;;;;;;29411:1;;29372:38;;29396:14;;29372:38;:::i;:::-;:40;29364:72;;;;-1:-1:-1;;;29364:72:0;;10174:2:1;29364:72:0;;;10156:21:1;10213:2;10193:18;;;10186:30;-1:-1:-1;;;10232:18:1;;;10225:50;10292:18;;29364:72:0;9972:344:1;29364:72:0;29455:9;;29466:1;29455:12;29447:48;;;;-1:-1:-1;;;29447:48:0;;10523:2:1;29447:48:0;;;10505:21:1;10562:2;10542:18;;;10535:30;10601:25;10581:18;;;10574:53;10644:18;;29447:48:0;10321:347:1;29447:48:0;29506:14;29523:13;:11;:13::i;:::-;29582:12;;29506:30;;-1:-1:-1;29555:23:0;29564:14;29506:30;29555:23;:::i;:::-;:39;;29547:100;;;;-1:-1:-1;;;29547:100:0;;10875:2:1;29547:100:0;;;10857:21:1;10914:2;10894:18;;;10887:30;10953:34;10933:18;;;10926:62;-1:-1:-1;;;11004:18:1;;;10997:46;11060:19;;29547:100:0;10673:412:1;29547:100:0;29666:47;29680:11;;29693:19;;29666:13;:47::i;:::-;29658:80;;;;-1:-1:-1;;;29658:80:0;;11292:2:1;29658:80:0;;;11274:21:1;11331:2;11311:18;;;11304:30;-1:-1:-1;;;11350:18:1;;;11343:50;11410:18;;29658:80:0;11090:344:1;29658:80:0;29761:10;29749:23;;;;:11;:23;;;;;:41;;29776:14;;29749:23;:41;;29776:14;;29749:41;:::i;:::-;;;;-1:-1:-1;29806:9:0;;-1:-1:-1;29801:160:0;29821:14;29817:1;:18;29801:160;;;29854:33;29864:10;29876;29885:1;29876:6;:10;:::i;:::-;29854:9;:33::i;:::-;29931:3;;29801:160;;;;29286:682;29206:762;;;:::o;25141:107::-;13765:13;:11;:13::i;:::-;25217::::1;:23;25233:7:::0;25217:13;:23:::1;:::i;27827:103::-:0;13765:13;:11;:13::i;:::-;27897:17:::1;:25:::0;27827:103::o;31128:204::-;13765:13;:11;:13::i;:::-;31196:21:::1;31236:11:::0;31228:44:::1;;;::::0;-1:-1:-1;;;31228:44:0;;13845:2:1;31228:44:0::1;::::0;::::1;13827:21:1::0;13884:2;13864:18;;;13857:30;-1:-1:-1;;;13903:18:1;;;13896:50;13963:18;;31228:44:0::1;13643:344:1::0;31228:44:0::1;31283:41;31293:7;13852::::0;13879:6;-1:-1:-1;;;;;13879:6:0;;13806:87;31293:7:::1;31302:21;31283:9;:41::i;:::-;31167:165;31128:204::o:0;25584:171::-;25689:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25706:41:::1;25729:4;25735:2;25739:7;25706:22;:41::i;15548:85::-:0;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;9010:34:1;15749:10:0;9060:18:1;;;9053:43;14732:42:0;;15693:40;;8945:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;9010:34:1;-1:-1:-1;;;;;9080:15:1;;9060:18;;;9053:43;14732:42:0;;15789:40;;8945:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1861:51:1;1834:18;;15911:30:0;1715:203:1;15647:310:0;25706:41:::1;25729:4;25735:2;25739:7;25706:22;:41::i;24237:670::-:0;24299:16;24327:23;24353:17;24363:6;24353:9;:17::i;:::-;24327:43;;24381:30;24428:15;24414:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24414:30:0;-1:-1:-1;24381:63:0;-1:-1:-1;24455:22:0;24506:23;24546:323;24571:15;24553;:33;:76;;;;-1:-1:-1;24607:12:0;3483:14;24590;:39;24553:76;24546:323;;;24677:6;-1:-1:-1;;;;;24650:33:0;:23;24658:14;24650:7;:23::i;:::-;-1:-1:-1;;;;;24650:33:0;;24646:169;;24737:14;24704:13;24718:15;24704:30;;;;;;;;:::i;:::-;;;;;;;;;;:47;24781:17;;24646:169;24840:16;;;;;24546:323;;;-1:-1:-1;24886:13:0;;24237:670;-1:-1:-1;;;;24237:670:0:o;17518:222::-;17590:7;17626:16;;;:7;:16;;;;;;-1:-1:-1;;;;;17626:16:0;;17653:56;;;;-1:-1:-1;;;17653:56:0;;14326:2:1;17653:56:0;;;14308:21:1;14365:2;14345:18;;;14338:30;-1:-1:-1;;;14384:18:1;;;14377:54;14448:18;;17653:56:0;14124:348:1;17303:207:0;17375:7;-1:-1:-1;;;;;17403:19:0;;17395:73;;;;-1:-1:-1;;;17395:73:0;;14679:2:1;17395:73:0;;;14661:21:1;14718:2;14698:18;;;14691:30;14757:34;14737:18;;;14730:62;-1:-1:-1;;;14808:18:1;;;14801:39;14857:19;;17395:73:0;14477:405:1;17395:73:0;-1:-1:-1;;;;;;17486:16:0;;;;;:9;:16;;;;;;;17303:207::o;14041:103::-;13765:13;:11;:13::i;:::-;14106:30:::1;14133:1;14106:18;:30::i;:::-;14041:103::o:0;27213:504::-;13765:13;:11;:13::i;:::-;27298:11:::1;27312:13;:11;:13::i;:::-;27298:27;;27338:14;27356:1;27338:19:::0;27330:56:::1;;;;-1:-1:-1::0;;;27330:56:0::1;;;;;;;:::i;:::-;26677:5;27405:23;27414:14:::0;27405:6;:23:::1;:::i;:::-;:37;;27397:91;;;::::0;-1:-1:-1;;;27397:91:0;;15089:2:1;27397:91:0::1;::::0;::::1;15071:21:1::0;15128:2;15108:18;;;15101:30;15167:34;15147:18;;;15140:62;-1:-1:-1;;;15218:18:1;;;15211:39;15267:19;;27397:91:0::1;14887:405:1::0;27397:91:0::1;26769:4;27507:14;:28;27499:80;;;::::0;-1:-1:-1;;;27499:80:0;;15499:2:1;27499:80:0::1;::::0;::::1;15481:21:1::0;15538:2;15518:18;;;15511:30;15577:34;15557:18;;;15550:62;-1:-1:-1;;;15628:18:1;;;15621:37;15675:19;;27499:80:0::1;15297:403:1::0;27499:80:0::1;27595:6;27590:120;27611:14;27607:1;:18;27590:120;;;27643:25;27653:2:::0;27657:10:::1;27666:1:::0;27657:6;:10:::1;:::i;27643:25::-;27694:3;;27590:120;;17856:104:::0;17912:13;17945:7;17938:14;;;;;:::i;29976:890::-;30089:14;30107:1;30089:19;30081:56;;;;-1:-1:-1;;;30081:56:0;;;;;;;:::i;:::-;30179:10;30156:34;;;;:22;:34;;;;;;30206:1;;30156:49;;30191:14;;30156:49;:::i;:::-;:51;30148:83;;;;-1:-1:-1;;;30148:83:0;;15907:2:1;30148:83:0;;;15889:21:1;15946:2;15926:18;;;15919:30;-1:-1:-1;;;15965:18:1;;;15958:50;16025:18;;30148:83:0;15705:344:1;30148:83:0;30250:9;;30261:1;30250:12;30242:50;;;;-1:-1:-1;;;30242:50:0;;16256:2:1;30242:50:0;;;16238:21:1;16295:2;16275:18;;;16268:30;16334:27;16314:18;;;16307:55;16379:18;;30242:50:0;16054:349:1;30242:50:0;30349:9;30331:14;30311:17;;:34;;;;:::i;:::-;:47;;30303:91;;;;-1:-1:-1;;;30303:91:0;;16783:2:1;30303:91:0;;;16765:21:1;16822:2;16802:18;;;16795:30;16861:33;16841:18;;;16834:61;16912:18;;30303:91:0;16581:355:1;30303:91:0;30405:14;30422:13;:11;:13::i;:::-;30405:30;-1:-1:-1;26723:4:0;30454:23;30463:14;30405:30;30454:23;:::i;:::-;:37;;30446:96;;;;-1:-1:-1;;;30446:96:0;;;;;;;:::i;:::-;30561:45;30575:11;;30588:17;;30561:13;:45::i;:::-;30553:78;;;;-1:-1:-1;;;30553:78:0;;11292:2:1;30553:78:0;;;11274:21:1;11331:2;11311:18;;;11304:30;-1:-1:-1;;;11350:18:1;;;11343:50;11410:18;;30553:78:0;11090:344:1;30553:78:0;30659:10;30636:34;;;;:22;:34;;;;;:52;;30674:14;;30636:34;:52;;30674:14;;30636:52;:::i;:::-;;;;-1:-1:-1;30704:9:0;;-1:-1:-1;30699:160:0;30719:14;30715:1;:18;30699:160;;;30752:33;30762:10;30774;30783:1;30774:6;:10;:::i;30752:33::-;30829:3;;30699:160;;28462:736;28536:14;28554:1;28536:19;28528:56;;;;-1:-1:-1;;;28528:56:0;;;;;;;:::i;:::-;28603:10;28617:9;28603:23;28595:57;;;;-1:-1:-1;;;28595:57:0;;17558:2:1;28595:57:0;;;17540:21:1;17597:2;17577:18;;;17570:30;-1:-1:-1;;;17616:18:1;;;17609:51;17677:18;;28595:57:0;17356:345:1;28595:57:0;28688:1;28671:14;:18;28663:63;;;;-1:-1:-1;;;28663:63:0;;17908:2:1;28663:63:0;;;17890:21:1;;;17927:18;;;17920:30;17986:34;17966:18;;;17959:62;18038:18;;28663:63:0;17706:356:1;28663:63:0;28776:9;28758:14;28745:10;;:27;;;;:::i;:::-;:40;;28737:84;;;;-1:-1:-1;;;28737:84:0;;16783:2:1;28737:84:0;;;16765:21:1;16822:2;16802:18;;;16795:30;16861:33;16841:18;;;16834:61;16912:18;;28737:84:0;16581:355:1;28737:84:0;28840:9;;28851:1;28840:12;28832:44;;;;-1:-1:-1;;;28832:44:0;;18269:2:1;28832:44:0;;;18251:21:1;18308:2;18288:18;;;18281:30;-1:-1:-1;;;18327:18:1;;;18320:49;18386:18;;28832:44:0;18067:343:1;28832:44:0;28887:14;28904:13;:11;:13::i;:::-;28887:30;-1:-1:-1;26723:4:0;28936:23;28945:14;28887:30;28936:23;:::i;:::-;:37;;28928:96;;;;-1:-1:-1;;;28928:96:0;;;;;;;:::i;:::-;29040:9;29035:156;29055:14;29051:1;:18;29035:156;;;29088:29;29094:10;29106;29115:1;29106:6;:10;:::i;:::-;29088:5;:29::i;:::-;29161:3;;29035:156;;18927:155;19022:52;13359:10;19055:8;19065;19022:18;:52::i;25763:196::-;25887:4;14732:42;15484:43;:47;15480:488;;15560:10;-1:-1:-1;;;;;15552:18:0;;;15548:85;;25904:47:::1;25927:4;25933:2;25937:7;25946:4;25904:22;:47::i;:::-;15611:7:::0;;15548:85;15693:67;;-1:-1:-1;;;15693:67:0;;15742:4;15693:67;;;9010:34:1;15749:10:0;9060:18:1;;;9053:43;14732:42:0;;15693:40;;8945:18:1;;15693:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:157;;;;-1:-1:-1;15789:61:0;;-1:-1:-1;;;15789:61:0;;15838:4;15789:61;;;9010:34:1;-1:-1:-1;;;;;9080:15:1;;9060:18;;;9053:43;14732:42:0;;15789:40;;8945:18:1;;15789:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15647:310;;15911:30;;-1:-1:-1;;;15911:30:0;;15930:10;15911:30;;;1861:51:1;1834:18;;15911:30:0;1715:203:1;15647:310:0;25904:47:::1;25927:4;25933:2;25937:7;25946:4;25904:22;:47::i;17968:288::-:0;18041:13;18067:23;18082:7;18067:14;:23::i;:::-;18101:21;18125:10;:8;:10::i;:::-;18101:34;;18177:1;18159:7;18153:21;:25;:95;;;;;;;;;;;;;;;;;18205:7;18214:18;:7;:16;:18::i;:::-;18188:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18153:95;18146:102;17968:288;-1:-1:-1;;;17968:288:0:o;27938:97::-;13765:13;:11;:13::i;:::-;28007:12:::1;:20:::0;27938:97::o;19087:155::-;-1:-1:-1;;;;;19202:25:0;;;19184:4;19202:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;19087:155::o;14152:201::-;13765:13;:11;:13::i;:::-;-1:-1:-1;;;;;14241:22:0;::::1;14233:73;;;::::0;-1:-1:-1;;;14233:73:0;;19285:2:1;14233:73:0::1;::::0;::::1;19267:21:1::0;19324:2;19304:18;;;19297:30;19363:34;19343:18;;;19336:62;-1:-1:-1;;;19414:18:1;;;19407:36;19460:19;;14233:73:0::1;19083:402:1::0;14233:73:0::1;14317:28;14336:8;14317:18;:28::i;27725:93::-:0;13765:13;:11;:13::i;:::-;27792:10:::1;:18:::0;27725:93::o;21011:431::-;-1:-1:-1;;;;;21091:16:0;;21083:61;;;;-1:-1:-1;;;21083:61:0;;19692:2:1;21083:61:0;;;19674:21:1;;;19711:18;;;19704:30;19770:34;19750:18;;;19743:62;19822:18;;21083:61:0;19490:356:1;21083:61:0;20295:4;20319:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20319:16:0;:30;21155:58;;;;-1:-1:-1;;;21155:58:0;;20053:2:1;21155:58:0;;;20035:21:1;20092:2;20072:18;;;20065:30;20131;20111:18;;;20104:58;20179:18;;21155:58:0;19851:352:1;21155:58:0;-1:-1:-1;;;;;21280:13:0;;;;;;:9;:13;;;;;:18;;21297:1;;21280:13;:18;;21297:1;;21280:18;:::i;:::-;;;;-1:-1:-1;;21309:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;21309:21:0;-1:-1:-1;;;;;21309:21:0;;;;;;;;21346:33;;21309:16;;;21346:33;;21309:16;;21346:33;28044:282;;:::o;3513:127::-;3602:19;;3620:1;3602:19;;;3513:127::o;22848:135::-;20295:4;20319:16;;;:7;:16;;;;;;-1:-1:-1;;;;;20319:16:0;22922:53;;;;-1:-1:-1;;;22922:53:0;;14326:2:1;22922:53:0;;;14308:21:1;14365:2;14345:18;;;14338:30;-1:-1:-1;;;14384:18:1;;;14377:54;14448:18;;22922:53:0;14124:348:1;13901:132:0;13852:7;13879:6;-1:-1:-1;;;;;13879:6:0;13359:10;13965:23;13957:68;;;;-1:-1:-1;;;13957:68:0;;20410:2:1;13957:68:0;;;20392:21:1;;;20429:18;;;20422:30;20488:34;20468:18;;;20461:62;20540:18;;13957:68:0;20208:356:1;22377:174:0;22452:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;22452:29:0;-1:-1:-1;;;;;22452:29:0;;;;;;;;:24;;22506:23;22452:24;22506:14;:23::i;:::-;-1:-1:-1;;;;;22497:46:0;;;;;;;;;;;22377:174;;:::o;19250:247::-;19358:41;13359:10;19391:7;19358:18;:41::i;:::-;19350:100;;;;-1:-1:-1;;;19350:100:0;;;;;;;:::i;:::-;19461:28;19471:4;19477:2;19481:7;19461:9;:28::i;30874:246::-;31015:28;;-1:-1:-1;;31032:10:0;21133:2:1;21129:15;21125:53;31015:28:0;;;21113:66:1;30966:4:0;;;;21195:12:1;;31015:28:0;;;;;;;;;;;;31005:39;;;;;;30983:61;;31062:50;31081:11;;31062:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31094:4:0;;-1:-1:-1;31100:11:0;;-1:-1:-1;31062:18:0;;-1:-1:-1;31062:50:0:i;:::-;31055:57;30874:246;-1:-1:-1;;;;;30874:246:0:o;20637:110::-;20713:26;20723:2;20727:7;20713:26;;;;;;;;;;;;:9;:26::i;26115:191::-;26190:12;26208:8;-1:-1:-1;;;;;26208:13:0;26230:7;26208:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26189:54;;;26262:7;26254:44;;;;-1:-1:-1;;;26254:44:0;;21630:2:1;26254:44:0;;;21612:21:1;21669:2;21649:18;;;21642:30;21708:26;21688:18;;;21681:54;21752:18;;26254:44:0;21428:348:1;19505:151:0;19609:39;19626:4;19632:2;19636:7;19609:39;;;;;;;;;;;;:16;:39::i;14361:191::-;14435:16;14454:6;;-1:-1:-1;;;;;14471:17:0;;;-1:-1:-1;;;;;;14471:17:0;;;;;;14504:40;;14454:6;;;;;;;14504:40;;14435:16;14504:40;14424:128;14361:191;:::o;25256:148::-;25337:24;25349:2;25353:7;25337:11;:24::i;:::-;25372;:12;3602:19;;3620:1;3602:19;;;3513:127;22559:281;22680:8;-1:-1:-1;;;;;22671:17:0;:5;-1:-1:-1;;;;;22671:17:0;;22663:55;;;;-1:-1:-1;;;22663:55:0;;21983:2:1;22663:55:0;;;21965:21:1;22022:2;22002:18;;;21995:30;22061:27;22041:18;;;22034:55;22106:18;;22663:55:0;21781:349:1;22663:55:0;-1:-1:-1;;;;;22729:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;22729:46:0;;;;;;;;;;22791:41;;722::1;;;22791::0;;695:18:1;22791:41:0;;;;;;;22559:281;;;:::o;19664:280::-;19795:41;13359:10;19828:7;19795:18;:41::i;:::-;19787:100;;;;-1:-1:-1;;;19787:100:0;;;;;;;:::i;:::-;19898:38;19912:4;19918:2;19922:7;19931:4;19898:13;:38::i;25019:114::-;25079:13;25112;25105:20;;;;;:::i;4124:532::-;4180:13;4210:5;4219:1;4210:10;4206:53;;-1:-1:-1;;4237:10:0;;;;;;;;;;;;-1:-1:-1;;;4237:10:0;;;;;4124:532::o;4206:53::-;4284:5;4269:12;4325:78;4332:9;;4325:78;;4358:8;;;;:::i;:::-;;-1:-1:-1;4381:10:0;;-1:-1:-1;4389:2:0;4381:10;;:::i;:::-;;;4325:78;;;4413:19;4445:6;4435:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4435:17:0;;4413:39;;4463:154;4470:10;;4463:154;;4497:11;4507:1;4497:11;;:::i;:::-;;-1:-1:-1;4566:10:0;4574:2;4566:5;:10;:::i;:::-;4553:24;;:2;:24;:::i;:::-;4540:39;;4523:6;4530;4523:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;4523:56:0;;;;;;;;-1:-1:-1;4594:11:0;4603:2;4594:11;;:::i;:::-;;;4463:154;;;4641:6;4124:532;-1:-1:-1;;;;4124:532:0:o;20365:264::-;20458:4;20475:13;20491:23;20506:7;20491:14;:23::i;:::-;20475:39;;20544:5;-1:-1:-1;;;;;20533:16:0;:7;-1:-1:-1;;;;;20533:16:0;;:52;;;;20553:32;20570:5;20577:7;20553:16;:32::i;:::-;20533:87;;;;20613:7;-1:-1:-1;;;;;20589:31:0;:20;20601:7;20589:11;:20::i;:::-;-1:-1:-1;;;;;20589:31:0;;20525:96;20365:264;-1:-1:-1;;;;20365:264:0:o;21840:529::-;21965:4;-1:-1:-1;;;;;21938:31:0;:23;21953:7;21938:14;:23::i;:::-;-1:-1:-1;;;;;21938:31:0;;21930:81;;;;-1:-1:-1;;;21930:81:0;;22984:2:1;21930:81:0;;;22966:21:1;23023:2;23003:18;;;22996:30;23062:34;23042:18;;;23035:62;-1:-1:-1;;;23113:18:1;;;23106:35;23158:19;;21930:81:0;22782:401:1;21930:81:0;-1:-1:-1;;;;;22030:16:0;;22022:65;;;;-1:-1:-1;;;22022:65:0;;23390:2:1;22022:65:0;;;23372:21:1;23429:2;23409:18;;;23402:30;23468:34;23448:18;;;23441:62;-1:-1:-1;;;23519:18:1;;;23512:34;23563:19;;22022:65:0;23188:400:1;22022:65:0;22148:29;22165:1;22169:7;22148:8;:29::i;:::-;-1:-1:-1;;;;;22188:15:0;;;;;;:9;:15;;;;;:20;;22207:1;;22188:15;:20;;22207:1;;22188:20;:::i;:::-;;;;-1:-1:-1;;;;;;;22219:13:0;;;;;;:9;:13;;;;;:18;;22236:1;;22219:13;:18;;22236:1;;22219:18;:::i;:::-;;;;-1:-1:-1;;22248:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;22248:21:0;-1:-1:-1;;;;;22248:21:0;;;;;;;;;22285:27;;22248:16;;22285:27;;;;;;;18436:306;18366:376;;:::o;5656:156::-;5747:4;5800;5771:25;5784:5;5791:4;5771:12;:25::i;:::-;:33;;5656:156;-1:-1:-1;;;;5656:156:0:o;20755:248::-;20850:18;20856:2;20860:7;20850:5;:18::i;:::-;20887:53;20918:1;20922:2;20926:7;20935:4;20887:22;:53::i;:::-;20879:116;;;;-1:-1:-1;;;20879:116:0;;;;;;;:::i;19952:270::-;20065:28;20075:4;20081:2;20085:7;20065:9;:28::i;:::-;20112:47;20135:4;20141:2;20145:7;20154:4;20112:22;:47::i;:::-;20104:110;;;;-1:-1:-1;;;20104:110:0;;;;;;;:::i;6002:296::-;6085:7;6128:4;6085:7;6143:118;6167:5;:12;6163:1;:16;6143:118;;;6216:33;6226:12;6240:5;6246:1;6240:8;;;;;;;;:::i;:::-;;;;;;;6216:9;:33::i;:::-;6201:48;-1:-1:-1;6181:3:0;;;;:::i;:::-;;;;6143:118;;;-1:-1:-1;6278:12:0;6002:296;-1:-1:-1;;;6002:296:0:o;22991:754::-;23102:4;-1:-1:-1;;;;;23123:13:0;;174:19;:23;23119:619;;23159:71;;-1:-1:-1;;;23159:71:0;;-1:-1:-1;;;;;23159:36:0;;;;;:71;;13359:10;;23210:4;;23216:7;;23225:4;;23159:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23159:71:0;;;;;;;;-1:-1:-1;;23159:71:0;;;;;;;;;;;;:::i;:::-;;;23155:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23400:6;:13;23417:1;23400:18;23396:272;;23443:60;;-1:-1:-1;;;23443:60:0;;;;;;;:::i;23396:272::-;23618:6;23612:13;23603:6;23599:2;23595:15;23588:38;23155:528;-1:-1:-1;;;;;;23281:51:0;-1:-1:-1;;;23281:51:0;;-1:-1:-1;23274:58:0;;23119:619;-1:-1:-1;23722:4:0;22991:754;;;;;;:::o;9172:149::-;9235:7;9266:1;9262;:5;:51;;9397:13;9447:15;;;9483:4;9476:15;;;9530:4;9514:21;;9262:51;;;-1:-1:-1;9397:13:0;9447:15;;;9483:4;9476:15;9530:4;9514:21;;;9172:149::o;196:131:1:-;-1:-1:-1;;;;;;270:32:1;;260:43;;250:71;;317:1;314;307:12;332:245;390:6;443:2;431:9;422:7;418:23;414:32;411:52;;;459:1;456;449:12;411:52;498:9;485:23;517:30;541:5;517:30;:::i;774:250::-;859:1;869:113;883:6;880:1;877:13;869:113;;;959:11;;;953:18;940:11;;;933:39;905:2;898:10;869:113;;;-1:-1:-1;;1016:1:1;998:16;;991:27;774:250::o;1029:271::-;1071:3;1109:5;1103:12;1136:6;1131:3;1124:19;1152:76;1221:6;1214:4;1209:3;1205:14;1198:4;1191:5;1187:16;1152:76;:::i;:::-;1282:2;1261:15;-1:-1:-1;;1257:29:1;1248:39;;;;1289:4;1244:50;;1029:271;-1:-1:-1;;1029:271:1:o;1305:220::-;1454:2;1443:9;1436:21;1417:4;1474:45;1515:2;1504:9;1500:18;1492:6;1474:45;:::i;1530:180::-;1589:6;1642:2;1630:9;1621:7;1617:23;1613:32;1610:52;;;1658:1;1655;1648:12;1610:52;-1:-1:-1;1681:23:1;;1530:180;-1:-1:-1;1530:180:1:o;1923:173::-;1991:20;;-1:-1:-1;;;;;2040:31:1;;2030:42;;2020:70;;2086:1;2083;2076:12;2020:70;1923:173;;;:::o;2101:254::-;2169:6;2177;2230:2;2218:9;2209:7;2205:23;2201:32;2198:52;;;2246:1;2243;2236:12;2198:52;2269:29;2288:9;2269:29;:::i;:::-;2259:39;2345:2;2330:18;;;;2317:32;;-1:-1:-1;;;2101:254:1:o;2360:248::-;2428:6;2436;2489:2;2477:9;2468:7;2464:23;2460:32;2457:52;;;2505:1;2502;2495:12;2457:52;-1:-1:-1;;2528:23:1;;;2598:2;2583:18;;;2570:32;;-1:-1:-1;2360:248:1:o;2613:328::-;2690:6;2698;2706;2759:2;2747:9;2738:7;2734:23;2730:32;2727:52;;;2775:1;2772;2765:12;2727:52;2798:29;2817:9;2798:29;:::i;:::-;2788:39;;2846:38;2880:2;2869:9;2865:18;2846:38;:::i;:::-;2836:48;;2931:2;2920:9;2916:18;2903:32;2893:42;;2613:328;;;;;:::o;3128:683::-;3223:6;3231;3239;3292:2;3280:9;3271:7;3267:23;3263:32;3260:52;;;3308:1;3305;3298:12;3260:52;3344:9;3331:23;3321:33;;3405:2;3394:9;3390:18;3377:32;3428:18;3469:2;3461:6;3458:14;3455:34;;;3485:1;3482;3475:12;3455:34;3523:6;3512:9;3508:22;3498:32;;3568:7;3561:4;3557:2;3553:13;3549:27;3539:55;;3590:1;3587;3580:12;3539:55;3630:2;3617:16;3656:2;3648:6;3645:14;3642:34;;;3672:1;3669;3662:12;3642:34;3725:7;3720:2;3710:6;3707:1;3703:14;3699:2;3695:23;3691:32;3688:45;3685:65;;;3746:1;3743;3736:12;3685:65;3777:2;3773;3769:11;3759:21;;3799:6;3789:16;;;;;3128:683;;;;;:::o;3816:127::-;3877:10;3872:3;3868:20;3865:1;3858:31;3908:4;3905:1;3898:15;3932:4;3929:1;3922:15;3948:632;4013:5;4043:18;4084:2;4076:6;4073:14;4070:40;;;4090:18;;:::i;:::-;4165:2;4159:9;4133:2;4219:15;;-1:-1:-1;;4215:24:1;;;4241:2;4211:33;4207:42;4195:55;;;4265:18;;;4285:22;;;4262:46;4259:72;;;4311:18;;:::i;:::-;4351:10;4347:2;4340:22;4380:6;4371:15;;4410:6;4402;4395:22;4450:3;4441:6;4436:3;4432:16;4429:25;4426:45;;;4467:1;4464;4457:12;4426:45;4517:6;4512:3;4505:4;4497:6;4493:17;4480:44;4572:1;4565:4;4556:6;4548;4544:19;4540:30;4533:41;;;;3948:632;;;;;:::o;4585:451::-;4654:6;4707:2;4695:9;4686:7;4682:23;4678:32;4675:52;;;4723:1;4720;4713:12;4675:52;4763:9;4750:23;4796:18;4788:6;4785:30;4782:50;;;4828:1;4825;4818:12;4782:50;4851:22;;4904:4;4896:13;;4892:27;-1:-1:-1;4882:55:1;;4933:1;4930;4923:12;4882:55;4956:74;5022:7;5017:2;5004:16;4999:2;4995;4991:11;4956:74;:::i;5041:186::-;5100:6;5153:2;5141:9;5132:7;5128:23;5124:32;5121:52;;;5169:1;5166;5159:12;5121:52;5192:29;5211:9;5192:29;:::i;5232:632::-;5403:2;5455:21;;;5525:13;;5428:18;;;5547:22;;;5374:4;;5403:2;5626:15;;;;5600:2;5585:18;;;5374:4;5669:169;5683:6;5680:1;5677:13;5669:169;;;5744:13;;5732:26;;5813:15;;;;5778:12;;;;5705:1;5698:9;5669:169;;;-1:-1:-1;5855:3:1;;5232:632;-1:-1:-1;;;;;;5232:632:1:o;5869:118::-;5955:5;5948:13;5941:21;5934:5;5931:32;5921:60;;5977:1;5974;5967:12;5992:315;6057:6;6065;6118:2;6106:9;6097:7;6093:23;6089:32;6086:52;;;6134:1;6131;6124:12;6086:52;6157:29;6176:9;6157:29;:::i;:::-;6147:39;;6236:2;6225:9;6221:18;6208:32;6249:28;6271:5;6249:28;:::i;:::-;6296:5;6286:15;;;5992:315;;;;;:::o;6312:667::-;6407:6;6415;6423;6431;6484:3;6472:9;6463:7;6459:23;6455:33;6452:53;;;6501:1;6498;6491:12;6452:53;6524:29;6543:9;6524:29;:::i;:::-;6514:39;;6572:38;6606:2;6595:9;6591:18;6572:38;:::i;:::-;6562:48;;6657:2;6646:9;6642:18;6629:32;6619:42;;6712:2;6701:9;6697:18;6684:32;6739:18;6731:6;6728:30;6725:50;;;6771:1;6768;6761:12;6725:50;6794:22;;6847:4;6839:13;;6835:27;-1:-1:-1;6825:55:1;;6876:1;6873;6866:12;6825:55;6899:74;6965:7;6960:2;6947:16;6942:2;6938;6934:11;6899:74;:::i;:::-;6889:84;;;6312:667;;;;;;;:::o;6984:260::-;7052:6;7060;7113:2;7101:9;7092:7;7088:23;7084:32;7081:52;;;7129:1;7126;7119:12;7081:52;7152:29;7171:9;7152:29;:::i;:::-;7142:39;;7200:38;7234:2;7223:9;7219:18;7200:38;:::i;:::-;7190:48;;6984:260;;;;;:::o;7249:380::-;7328:1;7324:12;;;;7371;;;7392:61;;7446:4;7438:6;7434:17;7424:27;;7392:61;7499:2;7491:6;7488:14;7468:18;7465:38;7462:161;;7545:10;7540:3;7536:20;7533:1;7526:31;7580:4;7577:1;7570:15;7608:4;7605:1;7598:15;7462:161;;7249:380;;;:::o;9107:245::-;9174:6;9227:2;9215:9;9206:7;9202:23;9198:32;9195:52;;;9243:1;9240;9233:12;9195:52;9275:9;9269:16;9294:28;9316:5;9294:28;:::i;9357:348::-;9559:2;9541:21;;;9598:2;9578:18;;;9571:30;9637:26;9632:2;9617:18;;9610:54;9696:2;9681:18;;9357:348::o;9710:127::-;9771:10;9766:3;9762:20;9759:1;9752:31;9802:4;9799:1;9792:15;9826:4;9823:1;9816:15;9842:125;9907:9;;;9928:10;;;9925:36;;;9941:18;;:::i;11565:545::-;11667:2;11662:3;11659:11;11656:448;;;11703:1;11728:5;11724:2;11717:17;11773:4;11769:2;11759:19;11843:2;11831:10;11827:19;11824:1;11820:27;11814:4;11810:38;11879:4;11867:10;11864:20;11861:47;;;-1:-1:-1;11902:4:1;11861:47;11957:2;11952:3;11948:12;11945:1;11941:20;11935:4;11931:31;11921:41;;12012:82;12030:2;12023:5;12020:13;12012:82;;;12075:17;;;12056:1;12045:13;12012:82;;;12016:3;;;11565:545;;;:::o;12286:1352::-;12412:3;12406:10;12439:18;12431:6;12428:30;12425:56;;;12461:18;;:::i;:::-;12490:97;12580:6;12540:38;12572:4;12566:11;12540:38;:::i;:::-;12534:4;12490:97;:::i;:::-;12642:4;;12706:2;12695:14;;12723:1;12718:663;;;;13425:1;13442:6;13439:89;;;-1:-1:-1;13494:19:1;;;13488:26;13439:89;-1:-1:-1;;12243:1:1;12239:11;;;12235:24;12231:29;12221:40;12267:1;12263:11;;;12218:57;13541:81;;12688:944;;12718:663;11512:1;11505:14;;;11549:4;11536:18;;-1:-1:-1;;12754:20:1;;;12872:236;12886:7;12883:1;12880:14;12872:236;;;12975:19;;;12969:26;12954:42;;13067:27;;;;13035:1;13023:14;;;;12902:19;;12872:236;;;12876:3;13136:6;13127:7;13124:19;13121:201;;;13197:19;;;13191:26;-1:-1:-1;;13280:1:1;13276:14;;;13292:3;13272:24;13268:37;13264:42;13249:58;13234:74;;13121:201;-1:-1:-1;;;;;13368:1:1;13352:14;;;13348:22;13335:36;;-1:-1:-1;12286:1352:1:o;13992:127::-;14053:10;14048:3;14044:20;14041:1;14034:31;14084:4;14081:1;14074:15;14108:4;14105:1;14098:15;16408:168;16481:9;;;16512;;16529:15;;;16523:22;;16509:37;16499:71;;16550:18;;:::i;16941:410::-;17143:2;17125:21;;;17182:2;17162:18;;;17155:30;17221:34;17216:2;17201:18;;17194:62;-1:-1:-1;;;17287:2:1;17272:18;;17265:44;17341:3;17326:19;;16941:410::o;18415:663::-;18695:3;18733:6;18727:13;18749:66;18808:6;18803:3;18796:4;18788:6;18784:17;18749:66;:::i;:::-;18878:13;;18837:16;;;;18900:70;18878:13;18837:16;18947:4;18935:17;;18900:70;:::i;:::-;-1:-1:-1;;;18992:20:1;;19021:22;;;19070:1;19059:13;;18415:663;-1:-1:-1;;;;18415:663:1:o;20569:410::-;20771:2;20753:21;;;20810:2;20790:18;;;20783:30;20849:34;20844:2;20829:18;;20822:62;-1:-1:-1;;;20915:2:1;20900:18;;20893:44;20969:3;20954:19;;20569:410::o;22135:135::-;22174:3;22195:17;;;22192:43;;22215:18;;:::i;:::-;-1:-1:-1;22262:1:1;22251:13;;22135:135::o;22275:127::-;22336:10;22331:3;22327:20;22324:1;22317:31;22367:4;22364:1;22357:15;22391:4;22388:1;22381:15;22407:120;22447:1;22473;22463:35;;22478:18;;:::i;:::-;-1:-1:-1;22512:9:1;;22407:120::o;22532:128::-;22599:9;;;22620:11;;;22617:37;;;22634:18;;:::i;22665:112::-;22697:1;22723;22713:35;;22728:18;;:::i;:::-;-1:-1:-1;22762:9:1;;22665:112::o;23593:414::-;23795:2;23777:21;;;23834:2;23814:18;;;23807:30;23873:34;23868:2;23853:18;;23846:62;-1:-1:-1;;;23939:2:1;23924:18;;23917:48;23997:3;23982:19;;23593:414::o;24012:489::-;-1:-1:-1;;;;;24281:15:1;;;24263:34;;24333:15;;24328:2;24313:18;;24306:43;24380:2;24365:18;;24358:34;;;24428:3;24423:2;24408:18;;24401:31;;;24206:4;;24449:46;;24475:19;;24467:6;24449:46;:::i;:::-;24441:54;24012:489;-1:-1:-1;;;;;;24012:489:1:o;24506:249::-;24575:6;24628:2;24616:9;24607:7;24603:23;24599:32;24596:52;;;24644:1;24641;24634:12;24596:52;24676:9;24670:16;24695:30;24719:5;24695:30;:::i

Swarm Source

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