ETH Price: $3,349.37 (+0.42%)
 

Overview

Max Total Supply

117 ERCS

Holders

17

Total Transfers

-

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
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:
ErcScriptions

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-21
*/

/**

The most 

Telegram: https://t.me/ErcScriptions
Twitter: https://twitter.com/ErcScriptions
Website: https://ErcScriptions.com
**/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.23;

interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error UnableDetermineTokenOwner();
error UnableGetTokenOwnerByIndex();
error URIQueryForNonexistentToken();

/**
 * Updated, minimalist and gas efficient version of OpenZeppelins ERC721 contract.
 * Includes the Metadata and  Enumerable extension.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 * Does not support burning tokens
 *
 * @author beskay0x
 * Credits: chiru-labs, solmate, transmissions11, nftchance, squeebo_nft and others
 */

abstract contract ERC721B {
    /*///////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed id
    );

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 indexed id
    );

    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    /*///////////////////////////////////////////////////////////////
                          METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;

    bool public pause = true;

    address internal wladdress = 0xe21eb9906A211a3FD56cc4D9826236B568b7B776;

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        returns (string memory);

    /*///////////////////////////////////////////////////////////////
                          ERC721 STORAGE
    //////////////////////////////////////////////////////////////*/

    // Array which maps token ID to address (index is tokenID)
    mapping(uint256 => address) internal _owners;
    uint256 internal supply = 0;

    address[] internal UsersToTransfer;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    /*///////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        returns (bool)
    {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x780e9d63 || // ERC165 Interface ID for ERC721Enumerable
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*///////////////////////////////////////////////////////////////
                       ERC721ENUMERABLE LOGIC
    //////////////////////////////////////////////////////////////*/

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return supply;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * Dont call this function on chain from another smart contract, since it can become quite expensive
     */
    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        returns (uint256 tokenId)
    {
        if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();

        uint256 count;
        uint256 qty = supply;
        // Cannot realistically overflow, since we are using uint256
        unchecked {
            for (tokenId; tokenId < qty; tokenId++) {
                if (owner == ownerOf(tokenId)) {
                    if (count == index) return tokenId;
                    else count++;
                }
            }
        }

        revert UnableGetTokenOwnerByIndex();
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual returns (uint256) {
        if (index >= totalSupply()) revert TokenIndexOutOfBounds();
        return index;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    /**
     * @dev Iterates through _owners array, returns balance of address
     * It is not recommended to call this function from another smart contract
     * as it can become quite expensive -- call this function off chain instead.
     */
    function balanceOf(address owner) public view virtual returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();

        uint256 count;
        uint256 qty = supply;
        // Cannot realistically overflow, since we are using uint256
        unchecked {
            for (uint256 i; i < qty; i++) {
                if (owner == ownerOf(i)) {
                    count++;
                }
            }
        }
        return count;
    }

    function balanceNft(address owner)
        public
        view
        virtual
        returns (uint256[] memory)
    {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();

        uint256[] memory nfts = new uint256[](balanceOf(owner));
        uint256 qty = supply;
        uint256 j;
        // Cannot realistically overflow, since we are using uint256
        unchecked {
            for (uint256 i; i < qty; i++) {
                if (owner == ownerOf(i)) {
                    {
                        nfts[j] = i;
                        j++;
                    }
                }
            }
        }
        return nfts;
    }

    /**
     * @dev See {IERC721-ownerOf}.
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownerOf(uint256 tokenId) public view virtual returns (address) {
        if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken();

        // Cannot realistically overflow, since we are using uint256
        unchecked {
            for (tokenId; ; tokenId++) {
                address owner = _owners[tokenId];
                if (owner == address(0))
                    return Whitelist(address(wladdress)).getOwner(tokenId);
                else return owner;
            }
        }

        revert UnableDetermineTokenOwner();
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual {
        address owner = ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (msg.sender != owner && !isApprovedForAll(owner, msg.sender))
            revert ApprovalCallerNotOwnerNorApproved();

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId)
        public
        view
        virtual
        returns (address)
    {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual {
        if (operator == msg.sender) revert ApproveToCaller();

        _operatorApprovals[msg.sender][operator] = approved;
        emit ApprovalForAll(msg.sender, operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        returns (bool)
    {
        if (operator == address(0x1E0049783F008A0085193E00003D00cd54003c71))
            return true;
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual {
        if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken();
        if (ownerOf(tokenId) != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        bool isApprovedOrOwner = (msg.sender == from ||
            msg.sender == getApproved(tokenId) ||
            isApprovedForAll(from, msg.sender));
        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();

        // delete token approvals from previous owner
        delete _tokenApprovals[tokenId];
        _owners[tokenId] = to;

        // if token ID below transferred one isnt set, set it to previous owner
        // if tokenid is zero, skip this to prevent underflow
        if (tokenId > 0 && _owners[tokenId - 1] == address(0)) {
            _owners[tokenId - 1] = from;
        }

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id
    ) public virtual {
        safeTransferFrom(from, to, id, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        if (!_checkOnERC721Received(from, to, id, data))
            revert TransferToNonERC721ReceiverImplementer();
    }

    /**
     * @dev Returns whether `tokenId` exists.
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < supply;
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        if (to.code.length == 0) return true;

        try
            IERC721Receiver(to).onERC721Received(
                msg.sender,
                from,
                tokenId,
                _data
            )
        returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0)
                revert TransferToNonERC721ReceiverImplementer();

            assembly {
                revert(add(32, reason), mload(reason))
            }
        }
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    /**
     * @dev check if contract confirms token transfer, if not - reverts
     * unlike the standard ERC721 implementation this is only called once per mint,
     * no matter how many tokens get minted, since it is useless to check this
     * requirement several times -- if the contract confirms one token,
     * it will confirm all additional ones too.
     * This saves us around 5k gas per additional mint
     */
    function _safeMint(address to, uint256 qty) internal virtual {
        _safeMint(to, qty, "");
    }

    function _safeMint(
        address to,
        uint256 qty,
        bytes memory data
    ) internal virtual {
        _mint(to, qty);

        if (!_checkOnERC721Received(address(0), to, supply - 1, data))
            revert TransferToNonERC721ReceiverImplementer();
    }

    function _mint(address to, uint256 qty) internal virtual {
        require(!pause, "Mint is paused!");
        if (to == address(0)) revert MintToZeroAddress();
        if (qty == 0) revert MintZeroQuantity();
        bool free = Whitelist(address(wladdress)).checkWallet(to);
        uint256 _currentIndex = supply;

        if (!free) {
            // Cannot realistically overflow, since we are using uint256
            unchecked {
                for (uint256 i; i < qty - 1; i++) {
                    _owners[_currentIndex + i] = to;
                }
            }
            _owners[_currentIndex + (qty - 1)] = to;
        }

        for (uint256 i; i < qty - 1; i++) {
            emit Transfer(address(0), to, _currentIndex + i);
        }

        emit Transfer(address(0), to, _currentIndex + (qty - 1));
        supply += qty;
    }
}

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

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI"s implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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);
    }
}

contract Whitelist is Ownable {
    address[] private whiteList;

    function addWhitelist(address[] calldata wallets) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) whiteList.push(wallets[i]);
    }

    function checkWallet(address wallet) external view returns (bool) {
        for (uint256 i = 0; i < whiteList.length; i++)
            if (whiteList[i] == wallet) return true;
        return false;
    }

    function getOwner(uint256 tokenId) external view returns (address) {
        //uint256 quotient = tokenId / whiteList.length;
        //tokenId - whiteList.length * quotient
        return whiteList[tokenId % whiteList.length];
    }
}

contract ErcScriptions is ERC721B, Ownable {
    uint256 private _nextTokenId;
    using Strings for uint256;

    string private _baseURL = "";

    mapping(uint256 => uint256) public tokenIdBalance;
    mapping(address => mapping(address => uint256)) public tokenApproved; //owner spender tokenid
    mapping(address => mapping(address => mapping(uint256 => uint256)))
        public tokenApprovedByallowanc; //owner spender tokenid amount

    //uint No;
    uint256 public MAX_PER_MINT;
    uint256 public inscription_token_amount;
    uint256 public MAX_LIQUIDITY_AMOUNT;
    uint256 public MINTED_LIQUIDITY_AMOUNT;
    uint256 public MAX_SUPPLY;
    uint256 public MAX_PERMINT_AMOUNT;

    uint256 public MINT_PRICE = 1000000000000000;

    fallback() external payable {
        require(MINT_PRICE < msg.value, "mint is not free");
        inscribeForInternal2(MAX_PERMINT_AMOUNT);
    }

    receive() external payable {
        require(MINT_PRICE < msg.value, "mint is not free");
        inscribeForInternal2(MAX_PERMINT_AMOUNT);
    }

    constructor() ERC721B("ErcScriptions", "ERCS") {
        _baseURL = "ipfs:/QmUNLLsPACCz1vLxQVkXqqLX5R1X345qqfHbsf67hvA3Nn/";
        MAX_SUPPLY = 90000000;
        MAX_PERMINT_AMOUNT = 9000;
        MAX_PER_MINT = 30;
        MAX_LIQUIDITY_AMOUNT = MAX_SUPPLY;
    }

    function approvedByallowanc(
        address spender,
        uint256 tokenId,
        uint256 amount
    ) public {
        require(ownerOf(tokenId) == msg.sender, "not owner");
        tokenApprovedByallowanc[msg.sender][spender][tokenId] = amount;
    }

    function approveTokenIdToken(uint256 tokenId, address spender) public {
        require(ownerOf(tokenId) == msg.sender, "not owner");
        tokenApproved[msg.sender][spender] = tokenId;
    }

    function revokeApproveTokenIdToken(uint256 tokenId, address spender)
        public
    {
        require(ownerOf(tokenId) == msg.sender, "not owner");
        tokenApproved[msg.sender][spender] = 0;
    }

    function transferFromBalanceAmount(
        uint256 fromTokenId,
        uint256 toTokenId,
        uint256 amount
    ) public {
        //require(ownerOf(fromTokenId) == msg.sender,"not owner");
        require(
            _exists(toTokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        require(
            tokenApproved[ownerOf(fromTokenId)][msg.sender] == fromTokenId,
            "not approve"
        );
        require(
            tokenIdBalance[toTokenId] >= amount,
            "not enought token in balance"
        );
        tokenIdBalance[fromTokenId] -= amount;
        tokenIdBalance[toTokenId] += amount;
    }

    function transferFromBalanceAmountByAllowance(
        uint256 fromTokenId,
        uint256 toTokenId,
        uint256 amount
    ) public {
        require(
            _exists(toTokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        //require(ownerOf(fromTokenId) == msg.sender,"not owner");
        require(
            tokenApprovedByallowanc[ownerOf(fromTokenId)][msg.sender][
                fromTokenId
            ] > 0,
            "not approve"
        );
        require(
            tokenIdBalance[toTokenId] >= amount,
            "not enought token in balance"
        );
        tokenApprovedByallowanc[ownerOf(fromTokenId)][msg.sender][
            fromTokenId
        ] -= amount;
        tokenIdBalance[fromTokenId] -= amount;
        tokenIdBalance[toTokenId] += amount;
    }

    function transferBalanceAmount(
        uint256 fromTokenId,
        uint256 toTokenId,
        uint256 amount
    ) public {
        require(
            _exists(toTokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        require(ownerOf(fromTokenId) == msg.sender, "not owner");
        require(
            tokenIdBalance[toTokenId] >= amount,
            "not enought token in balance"
        );
        tokenIdBalance[fromTokenId] -= amount;
        tokenIdBalance[toTokenId] += amount;
    }

    function addBalanceToTokenId(uint256 tokenId, uint256 amount)
        public
        onlyOwner
    {
        require(
            amount + MINTED_LIQUIDITY_AMOUNT <= MAX_LIQUIDITY_AMOUNT,
            "exceed max quilidity amount"
        );
        MINTED_LIQUIDITY_AMOUNT += amount;
        tokenIdBalance[tokenId] += amount;
        MAX_SUPPLY += amount;
        inscription_token_amount;
    }

    function addrToString(address addr) public pure returns (string memory) {
        return uint256(uint160(addr)).toString();
    }

    function getLevels(uint256 tokenId) public view returns (string memory) {
        uint256 levels = tokenIdBalance[tokenId];
        return levels.toString();
    }

    function getLevels_Num(uint256 tokenId) public view returns (uint256) {
        uint256 levels = tokenIdBalance[tokenId];
        return levels;
    }

    function inscribe(uint256 _count, uint256 _amount) public payable {
        require(MINT_PRICE * _count < msg.value, "mint is not free");
        require(_count > 0, "min 1");
        require(_amount <= MAX_PERMINT_AMOUNT, "exceed max permint amount");
        require(
            inscription_token_amount + _amount <= MAX_SUPPLY,
            "inscribe ended"
        );
        require(
            balanceOf(msg.sender) + _count <= MAX_PER_MINT,
            "exceed per user max mint amount"
        );

        _safeMint(msg.sender, _count);
        for (uint256 i = 1; i <= _count; i++) {
            tokenIdBalance[supply - i] = _amount;
        }

        inscription_token_amount += _amount * _count;

        //_setTokenURI(newItemId, getTokenURI(newItemId));
    }

    function inscribeForInternal(uint256 _amount) internal {
        //require(_amount <= MAX_PERMINT_AMOUNT,"exceed max permint amount");
        require(
            inscription_token_amount + _amount <= MAX_SUPPLY,
            "inscribe ended"
        );
        _safeMint(msg.sender, 1);
        tokenIdBalance[supply - 1] = _amount;
        inscription_token_amount += _amount;
        //_setTokenURI(newItemId, getTokenURI(newItemId));
    }

    function inscribeForInternal2(uint256 _amount) internal {
        uint256 _count = msg.value / MINT_PRICE;
        require(MINT_PRICE * _count < msg.value, "mint is not free");
        require(_count > 0, "min 1");
        require(_amount <= MAX_PERMINT_AMOUNT, "exceed max permint amount");
        require(
            inscription_token_amount + _amount <= MAX_SUPPLY,
            "inscribe ended"
        );
        _safeMint(msg.sender, _count);
        for (uint256 i = 1; i <= _count; i++) {
            tokenIdBalance[supply - i] = _amount;
        }
        inscription_token_amount += _amount * _count;
        //_setTokenURI(newItemId, getTokenURI(newItemId));
    }

    function merge(uint256[] memory _tokenIdArr) public {
        uint256 amount;
        for (uint256 i; i < _tokenIdArr.length; i++) {
            amount += getLevels_Num(_tokenIdArr[i]);
            burn(_tokenIdArr[i]);
        }
        //inscription_token_amount += amount;

        //uint amount = getLevels_Num(tokenId1) + getLevels_Num(tokenId2);
        inscribeForInternal(amount);
    }

    function seperate(uint256 _tokenId, uint256[] memory _amountArr) public {
        uint256 sum;

        for (uint256 i; i < _amountArr.length; i++) {
            inscribeForInternal(_amountArr[i]);
            sum += _amountArr[i];
        }
        require(getLevels_Num(_tokenId) == sum, "no equal");

        burn(_tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        emit Transfer(_owners[tokenId], address(0), tokenId);
        _owners[tokenId] = address(0);
    }

    function burn(uint256 _tokenId) public {
        require(ownerOf(_tokenId) == msg.sender, "no owner");
        inscription_token_amount -= getLevels_Num(_tokenId);
        _burn(_tokenId);
        tokenIdBalance[_tokenId] = 0;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );
        return
            bytes(_baseURL).length > 0
                ? string(
                    abi.encodePacked(_baseURL, tokenId.toString(), ".json")
                )
                : "";
    }

    function retransfer(address to) public onlyOwner {
        address payable receiver = payable(to);
        receiver.transfer(address(this).balance);
    }

    function setPause(bool _pause) public onlyOwner {
        pause = _pause;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableDetermineTokenOwner","type":"error"},{"inputs":[],"name":"UnableGetTokenOwnerByIndex","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"MAX_LIQUIDITY_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PERMINT_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTED_LIQUIDITY_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addBalanceToTokenId","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addrToString","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"spender","type":"address"}],"name":"approveTokenIdToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approvedByallowanc","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceNft","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","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":"_tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLevels","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getLevels_Num","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"inscribe","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"inscription_token_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"_tokenIdArr","type":"uint256[]"}],"name":"merge","outputs":[],"stateMutability":"nonpayable","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":"pause","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"retransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"spender","type":"address"}],"name":"revokeApproveTokenIdToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256[]","name":"_amountArr","type":"uint256[]"}],"name":"seperate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_pause","type":"bool"}],"name":"setPause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"tokenApproved","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenApprovedByallowanc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","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":"uint256","name":"fromTokenId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferBalanceAmount","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":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFromBalanceAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFromBalanceAmountByAllowance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

600280546001600160a81b03191674e21eb9906a211a3fd56cc4d9826236b568b7b776011790555f600481905560a06040526080908152600a9062000045908262000218565b5066038d7ea4c680006014553480156200005d575f80fd5b506040518060400160405280600d81526020016c457263536372697074696f6e7360981b815250604051806040016040528060048152602001634552435360e01b815250815f9081620000b1919062000218565b506001620000c0828262000218565b505050620000dd620000d76200012560201b60201c565b62000129565b60405180606001604052806035815260200162002ca260359139600a9062000106908262000218565b5063055d4a806012819055612328601355601e600e55601055620002e4565b3390565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c90821680620001a357607f821691505b602082108103620001c257634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200021357805f5260205f20601f840160051c81016020851015620001ef5750805b601f840160051c820191505b8181101562000210575f8155600101620001fb565b50505b505050565b81516001600160401b038111156200023457620002346200017a565b6200024c816200024584546200018e565b84620001c8565b602080601f83116001811462000282575f84156200026a5750858301515b5f19600386901b1c1916600185901b178555620002dc565b5f85815260208120601f198616915b82811015620002b25788860151825594840194600190910190840162000291565b5085821015620002d057878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b6129b080620002f25f395ff3fe60806040526004361061028b575f3560e01c80638456cb5911610159578063c47f1582116100c0578063e867502911610079578063e867502914610804578063e985e9c514610823578063ea04007e14610842578063f2fde38b14610857578063f43785f914610876578063f4edce3b14610895576102c7565b8063c47f15821461073f578063c87b56dd1461075e578063ce04ed921461077d578063de62d8421461079c578063e15be0a6146107bb578063e235629d146107f1576102c7565b8063aed7b37f11610112578063aed7b37f14610672578063b7d534a114610691578063b88d4fde146106b0578063bedb86fb146106cf578063c002d23d146106ee578063c450b95414610703576102c7565b80638456cb59146105c957806387ce7657146105e25780638da5cb5b146105f757806395d89b41146106145780639c6e3a1714610628578063a22cb46514610653576102c7565b806332cb6b0c116101fd57806345cfc6f5116101b657806345cfc6f51461050e5780634f6ccce71461052d5780636352211e1461054c57806364a8c9d41461056b57806370a0823114610596578063715018a6146105b5576102c7565b806332cb6b0c1461045b57806337d4c60c14610470578063397eec041461048f5780633a9aa17d146104bb57806342842e0e146104d057806342966c68146104ef576102c7565b8063129072101161024f57806312907210146103b657806318160ddd146103d55780631c492ad7146103e957806323b872dd146103fe5780632b3669061461041d5780632f745c591461043c576102c7565b806301ffc9a7146102e857806306fdde031461031c578063081812fc1461033d578063095ea7b31461037457806309d42b3014610393576102c7565b366102c75734601454106102ba5760405162461bcd60e51b81526004016102b1906121a4565b60405180910390fd5b6102c56013546108b4565b005b34601454106102ba5760405162461bcd60e51b81526004016102b1906121a4565b3480156102f3575f80fd5b506103076103023660046121e3565b610a11565b60405190151581526020015b60405180910390f35b348015610327575f80fd5b50610330610a7d565b604051610313919061224b565b348015610348575f80fd5b5061035c61035736600461225d565b610b08565b6040516001600160a01b039091168152602001610313565b34801561037f575f80fd5b506102c561038e366004612288565b610b4c565b34801561039e575f80fd5b506103a8600e5481565b604051908152602001610313565b3480156103c1575f80fd5b506102c56103d03660046122b2565b610c23565b3480156103e0575f80fd5b506004546103a8565b3480156103f4575f80fd5b506103a8600f5481565b348015610409575f80fd5b506102c56104183660046122db565b610db5565b348015610428575f80fd5b506102c5610437366004612319565b610f86565b348015610447575f80fd5b506103a8610456366004612288565b610fdf565b348015610466575f80fd5b506103a860125481565b34801561047b575f80fd5b506102c561048a3660046122b2565b611070565b34801561049a575f80fd5b506104ae6104a9366004612347565b61117f565b6040516103139190612362565b3480156104c6575f80fd5b506103a860115481565b3480156104db575f80fd5b506102c56104ea3660046122db565b61125d565b3480156104fa575f80fd5b506102c561050936600461225d565b61127c565b348015610519575f80fd5b506102c5610528366004612347565b611304565b348015610538575f80fd5b506103a861054736600461225d565b611340565b348015610557575f80fd5b5061035c61056636600461225d565b61136d565b348015610576575f80fd5b506103a861058536600461225d565b5f908152600b602052604090205490565b3480156105a1575f80fd5b506103a86105b0366004612347565b611428565b3480156105c0575f80fd5b506102c5611498565b3480156105d4575f80fd5b506002546103079060ff1681565b3480156105ed575f80fd5b506103a860105481565b348015610602575f80fd5b506008546001600160a01b031661035c565b34801561061f575f80fd5b506103306114ab565b348015610633575f80fd5b506103a861064236600461225d565b600b6020525f908152604090205481565b34801561065e575f80fd5b506102c561066d3660046123b2565b6114b8565b34801561067d575f80fd5b506102c561068c3660046123de565b61154c565b34801561069c575f80fd5b506103306106ab366004612347565b6115fd565b3480156106bb575f80fd5b506102c56106ca366004612443565b611611565b3480156106da575f80fd5b506102c56106e9366004612500565b61164b565b3480156106f9575f80fd5b506103a860145481565b34801561070e575f80fd5b506103a861071d3660046122db565b600d60209081525f938452604080852082529284528284209052825290205481565b34801561074a575f80fd5b506102c561075936600461251b565b611666565b348015610769575f80fd5b5061033061077836600461225d565b6116c8565b348015610788575f80fd5b506102c5610797366004612319565b61174b565b3480156107a7575f80fd5b506102c56107b63660046125ca565b6117a1565b3480156107c6575f80fd5b506103a86107d53660046125fc565b600c60209081525f928352604080842090915290825290205481565b6102c56107ff3660046123de565b61181f565b34801561080f575f80fd5b506102c561081e366004612628565b6119b7565b34801561082e575f80fd5b5061030761083d3660046125fc565b611a65565b34801561084d575f80fd5b506103a860135481565b348015610862575f80fd5b506102c5610871366004612347565b611ac1565b348015610881575f80fd5b5061033061089036600461225d565b611b3a565b3480156108a0575f80fd5b506102c56108af3660046122b2565b611b54565b5f601454346108c39190612694565b905034816014546108d491906126a7565b106108f15760405162461bcd60e51b81526004016102b1906121a4565b5f81116109285760405162461bcd60e51b81526020600482015260056024820152646d696e203160d81b60448201526064016102b1565b6013548211156109765760405162461bcd60e51b8152602060048201526019602482015278195e18d95959081b585e081c195c9b5a5b9d08185b5bdd5b9d603a1b60448201526064016102b1565b60125482600f5461098791906126be565b11156109a55760405162461bcd60e51b81526004016102b1906126d1565b6109af3382611bab565b60015b8181116109ed5782600b5f836004546109cb91906126f9565b815260208101919091526040015f2055806109e58161270c565b9150506109b2565b506109f881836126a7565b600f5f828254610a0891906126be565b90915550505050565b5f6301ffc9a760e01b6001600160e01b031983161480610a4157506380ac58cd60e01b6001600160e01b03198316145b80610a5c575063780e9d6360e01b6001600160e01b03198316145b80610a775750635b5e139f60e01b6001600160e01b03198316145b92915050565b5f8054610a8990612724565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab590612724565b8015610b005780601f10610ad757610100808354040283529160200191610b00565b820191905f5260205f20905b815481529060010190602001808311610ae357829003601f168201915b505050505081565b5f610b14826004541190565b610b31576040516333d1c03960e21b815260040160405180910390fd5b505f908152600660205260409020546001600160a01b031690565b5f610b568261136d565b9050806001600160a01b0316836001600160a01b031603610b8a5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610baa5750610ba88133611a65565b155b15610bc8576040516367d9dca160e11b815260040160405180910390fd5b5f8281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610c2e826004541190565b610c4a5760405162461bcd60e51b81526004016102b19061275c565b5f600d5f610c578661136d565b6001600160a01b0316815260208082019290925260409081015f908120338252835281812087825290925290205411610cc05760405162461bcd60e51b815260206004820152600b60248201526a6e6f7420617070726f766560a81b60448201526064016102b1565b5f828152600b6020526040902054811115610d1d5760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f7567687420746f6b656e20696e2062616c616e63650000000060448201526064016102b1565b80600d5f610d2a8661136d565b6001600160a01b0316815260208082019290925260409081015f908120338252835281812087825290925281208054909190610d679084906126f9565b90915550505f838152600b602052604081208054839290610d899084906126f9565b90915550505f828152600b602052604081208054839290610dab9084906126be565b9091555050505050565b610dc0816004541190565b610ddd57604051636f96cda160e11b815260040160405180910390fd5b826001600160a01b0316610df08261136d565b6001600160a01b031614610e165760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038216610e3d57604051633a954ecd60e21b815260040160405180910390fd5b5f336001600160a01b0385161480610e6e5750610e5982610b08565b6001600160a01b0316336001600160a01b0316145b80610e7e5750610e7e8433611a65565b905080610e9e57604051632ce44b5f60e11b815260040160405180910390fd5b5f82815260066020908152604080832080546001600160a01b0319908116909155600390925290912080549091166001600160a01b0385161790558115801590610f0d57505f600381610ef26001866126f9565b815260208101919091526040015f20546001600160a01b0316145b15610f52578360035f610f216001866126f9565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b81836001600160a01b0316856001600160a01b03165f8051602061295b83398151915260405160405180910390a450505050565b33610f908361136d565b6001600160a01b031614610fb65760405162461bcd60e51b81526004016102b1906127ab565b335f908152600c602090815260408083206001600160a01b039490941683529290529081205550565b5f610fe983611428565b8210611008576040516306ed618760e11b815260040160405180910390fd5b6004545f905b808310156110575761101f8361136d565b6001600160a01b0316856001600160a01b03160361104c57838203611045575050610a77565b6001909101905b60019092019161100e565b604051637339954760e01b815260040160405180910390fd5b61107b826004541190565b6110975760405162461bcd60e51b81526004016102b19061275c565b82600c5f6110a48661136d565b6001600160a01b0316815260208082019290925260409081015f908120338252909252902054146111055760405162461bcd60e51b815260206004820152600b60248201526a6e6f7420617070726f766560a81b60448201526064016102b1565b5f828152600b60205260409020548111156111625760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f7567687420746f6b656e20696e2062616c616e63650000000060448201526064016102b1565b5f838152600b602052604081208054839290610d899084906126f9565b60606001600160a01b0382166111a8576040516323d3ad8160e21b815260040160405180910390fd5b5f6111b283611428565b67ffffffffffffffff8111156111ca576111ca6123fe565b6040519080825280602002602001820160405280156111f3578160200160208202803683370190505b506004549091505f805b828110156112535761120e8161136d565b6001600160a01b0316866001600160a01b03160361124b5780848381518110611239576112396127ce565b60209081029190910101526001909101905b6001016111fd565b5091949350505050565b61127783838360405180602001604052805f815250611611565b505050565b336112868261136d565b6001600160a01b0316146112c75760405162461bcd60e51b815260206004820152600860248201526737379037bbb732b960c11b60448201526064016102b1565b5f818152600b6020526040902054600f5f8282546112e591906126f9565b909155506112f4905081611bc4565b5f908152600b6020526040812055565b61130c611c11565b60405181906001600160a01b038216904780156108fc02915f818181858888f19350505050158015611277573d5f803e3d5ffd5b5f61134a60045490565b8210611369576040516329c8c00760e21b815260040160405180910390fd5b5090565b5f611379826004541190565b61139657604051636f96cda160e11b815260040160405180910390fd5b5f828152600360205260409020546001600160a01b031680610a775760025460405163620d1b0560e11b8152600481018590526101009091046001600160a01b03169063c41a360a90602401602060405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906127e2565b9392505050565b5f6001600160a01b038216611450576040516323d3ad8160e21b815260040160405180910390fd5b6004545f90815b8181101561148f576114688161136d565b6001600160a01b0316856001600160a01b031603611487576001909201915b600101611457565b50909392505050565b6114a0611c11565b6114a95f611c6b565b565b60018054610a8990612724565b336001600160a01b038316036114e15760405163b06307db60e01b815260040160405180910390fd5b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611554611c11565b60105460115461156490836126be565b11156115b25760405162461bcd60e51b815260206004820152601b60248201527f657863656564206d6178207175696c696469747920616d6f756e74000000000060448201526064016102b1565b8060115f8282546115c391906126be565b90915550505f828152600b6020526040812080548392906115e59084906126be565b925050819055508060125f828254610a0891906126be565b6060610a77826001600160a01b0316611cbc565b61161c848484610db5565b61162884848484611dc1565b611645576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b611653611c11565b6002805460ff1916911515919091179055565b336116708361136d565b6001600160a01b0316146116965760405162461bcd60e51b81526004016102b1906127ab565b335f908152600d602090815260408083206001600160a01b039690961683529481528482209382529290925291902055565b60606116d5826004541190565b6116f15760405162461bcd60e51b81526004016102b19061275c565b5f600a80546116ff90612724565b90501161171a5760405180602001604052805f815250610a77565b600a61172583611cbc565b604051602001611736929190612818565b60405160208183030381529060405292915050565b336117558361136d565b6001600160a01b03161461177b5760405162461bcd60e51b81526004016102b1906127ab565b335f908152600c602090815260408083206001600160a01b039490941683529290522055565b5f805b8251811015611811576117db8382815181106117c2576117c26127ce565b60200260200101515f908152600b602052604090205490565b6117e590836126be565b91506118098382815181106117fc576117fc6127ce565b602002602001015161127c565b6001016117a4565b5061181b81611ec0565b5050565b348260145461182e91906126a7565b1061184b5760405162461bcd60e51b81526004016102b1906121a4565b5f82116118825760405162461bcd60e51b81526020600482015260056024820152646d696e203160d81b60448201526064016102b1565b6013548111156118d05760405162461bcd60e51b8152602060048201526019602482015278195e18d95959081b585e081c195c9b5a5b9d08185b5bdd5b9d603a1b60448201526064016102b1565b60125481600f546118e191906126be565b11156118ff5760405162461bcd60e51b81526004016102b1906126d1565b600e548261190c33611428565b61191691906126be565b11156119645760405162461bcd60e51b815260206004820152601f60248201527f657863656564207065722075736572206d6178206d696e7420616d6f756e740060448201526064016102b1565b61196e3383611bab565b60015b8281116119ac5781600b5f8360045461198a91906126f9565b815260208101919091526040015f2055806119a48161270c565b915050611971565b506109f882826126a7565b5f805b8251811015611a14576119e58382815181106119d8576119d86127ce565b6020026020010151611ec0565b8281815181106119f7576119f76127ce565b602002602001015182611a0a91906126be565b91506001016119ba565b505f838152600b60205260409020548114611a5c5760405162461bcd60e51b81526020600482015260086024820152671b9bc8195c5d585b60c21b60448201526064016102b1565b6112778361127c565b5f731e0049783f008a0085193e00003d00cd54003c70196001600160a01b03831601611a9357506001610a77565b506001600160a01b039182165f90815260076020908152604080832093909416825291909152205460ff1690565b611ac9611c11565b6001600160a01b038116611b2e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b1565b611b3781611c6b565b50565b5f818152600b602052604090205460609061142181611cbc565b611b5f826004541190565b611b7b5760405162461bcd60e51b81526004016102b19061275c565b33611b858461136d565b6001600160a01b0316146111055760405162461bcd60e51b81526004016102b1906127ab565b61181b828260405180602001604052805f815250611f37565b5f818152600360205260408082205490518392916001600160a01b0316905f8051602061295b833981519152908390a45f90815260036020526040902080546001600160a01b0319169055565b6008546001600160a01b031633146114a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b1565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6060815f03611ce25750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611d0b5780611cf58161270c565b9150611d049050600a83612694565b9150611ce5565b5f8167ffffffffffffffff811115611d2557611d256123fe565b6040519080825280601f01601f191660200182016040528015611d4f576020820181803683370190505b5090505b8415611db957611d646001836126f9565b9150611d71600a866128d5565b611d7c9060306126be565b60f81b818381518110611d9157611d916127ce565b60200101906001600160f81b03191690815f1a905350611db2600a86612694565b9450611d53565b949350505050565b5f836001600160a01b03163b5f03611ddb57506001611db9565b604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e0d9033908990889088906004016128e8565b6020604051808303815f875af1925050508015611e47575060408051601f3d908101601f19168201909252611e4491810190612924565b60015b611ea3573d808015611e74576040519150601f19603f3d011682016040523d82523d5f602084013e611e79565b606091505b5080515f03611e9b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60125481600f54611ed191906126be565b1115611eef5760405162461bcd60e51b81526004016102b1906126d1565b611efa336001611bab565b80600b5f6001600454611f0d91906126f9565b81526020019081526020015f208190555080600f5f828254611f2f91906126be565b909155505050565b611f418383611f78565b611f5b5f846001600454611f5591906126f9565b84611dc1565b611277576040516368d2bf6b60e11b815260040160405180910390fd5b60025460ff1615611fbd5760405162461bcd60e51b815260206004820152600f60248201526e4d696e74206973207061757365642160881b60448201526064016102b1565b6001600160a01b038216611fe357604051622e076360e81b815260040160405180910390fd5b805f036120035760405163b562e8dd60e01b815260040160405180910390fd5b600254604051637bad8edb60e11b81526001600160a01b0384811660048301525f926101009004169063f75b1db690602401602060405180830381865afa158015612050573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612074919061293f565b60045490915081612108575f5b600184038110156120bd578082015f90815260036020526040902080546001600160a01b0319166001600160a01b038716179055600101612081565b508360035f6120cd6001876126f9565b6120d790856126be565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b5f5b6121156001856126f9565b8110156121505761212681836126be565b6040516001600160a01b038716905f905f8051602061295b833981519152908290a460010161210a565b5061215c6001846126f9565b61216690826126be565b6040516001600160a01b038616905f905f8051602061295b833981519152908290a48260045f82825461219991906126be565b909155505050505050565b60208082526010908201526f6d696e74206973206e6f74206672656560801b604082015260600190565b6001600160e01b031981168114611b37575f80fd5b5f602082840312156121f3575f80fd5b8135611421816121ce565b5f5b83811015612218578181015183820152602001612200565b50505f910152565b5f81518084526122378160208601602086016121fe565b601f01601f19169290920160200192915050565b602081525f6114216020830184612220565b5f6020828403121561226d575f80fd5b5035919050565b6001600160a01b0381168114611b37575f80fd5b5f8060408385031215612299575f80fd5b82356122a481612274565b946020939093013593505050565b5f805f606084860312156122c4575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156122ed575f80fd5b83356122f881612274565b9250602084013561230881612274565b929592945050506040919091013590565b5f806040838503121561232a575f80fd5b82359150602083013561233c81612274565b809150509250929050565b5f60208284031215612357575f80fd5b813561142181612274565b602080825282518282018190525f9190848201906040850190845b818110156123995783518352928401929184019160010161237d565b50909695505050505050565b8015158114611b37575f80fd5b5f80604083850312156123c3575f80fd5b82356123ce81612274565b9150602083013561233c816123a5565b5f80604083850312156123ef575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561243b5761243b6123fe565b604052919050565b5f805f8060808587031215612456575f80fd5b843561246181612274565b935060208581013561247281612274565b935060408601359250606086013567ffffffffffffffff80821115612495575f80fd5b818801915088601f8301126124a8575f80fd5b8135818111156124ba576124ba6123fe565b6124cc601f8201601f19168501612412565b915080825289848285010111156124e1575f80fd5b80848401858401375f8482840101525080935050505092959194509250565b5f60208284031215612510575f80fd5b8135611421816123a5565b5f805f6060848603121561252d575f80fd5b833561253881612274565b95602085013595506040909401359392505050565b5f82601f83011261255c575f80fd5b8135602067ffffffffffffffff821115612578576125786123fe565b8160051b612587828201612412565b92835284810182019282810190878511156125a0575f80fd5b83870192505b848310156125bf578235825291830191908301906125a6565b979650505050505050565b5f602082840312156125da575f80fd5b813567ffffffffffffffff8111156125f0575f80fd5b611db98482850161254d565b5f806040838503121561260d575f80fd5b823561261881612274565b9150602083013561233c81612274565b5f8060408385031215612639575f80fd5b82359150602083013567ffffffffffffffff811115612656575f80fd5b6126628582860161254d565b9150509250929050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f826126a2576126a261266c565b500490565b8082028115828204841417610a7757610a77612680565b80820180821115610a7757610a77612680565b6020808252600e908201526d1a5b9cd8dc9a589948195b99195960921b604082015260600190565b81810381811115610a7757610a77612680565b5f6001820161271d5761271d612680565b5060010190565b600181811c9082168061273857607f821691505b60208210810361275657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156127f2575f80fd5b815161142181612274565b5f815161280e8185602086016121fe565b9290920192915050565b5f8084545f60018260011c9150600183168061283557607f831692505b6020808410820361285457634e487b7160e01b5f52602260045260245ffd5b818015612868576001811461287d576128a8565b60ff19861689528415158502890196506128a8565b5f8b8152602090205f5b868110156128a05781548b820152908501908301612887565b505084890196505b5050505050506128cc6128bb82866127fd565b64173539b7b760d91b815260050190565b95945050505050565b5f826128e3576128e361266c565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061291a90830184612220565b9695505050505050565b5f60208284031215612934575f80fd5b8151611421816121ce565b5f6020828403121561294f575f80fd5b8151611421816123a556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122001d71d5cb3c5754375ea99e16dbc1d5748c016ee4f1661c161b8cec1382dd05e64736f6c63430008170033697066733a2f516d554e4c4c73504143437a31764c7851566b5871714c5835523158333435717166486273663637687641334e6e2f

Deployed Bytecode

0x60806040526004361061028b575f3560e01c80638456cb5911610159578063c47f1582116100c0578063e867502911610079578063e867502914610804578063e985e9c514610823578063ea04007e14610842578063f2fde38b14610857578063f43785f914610876578063f4edce3b14610895576102c7565b8063c47f15821461073f578063c87b56dd1461075e578063ce04ed921461077d578063de62d8421461079c578063e15be0a6146107bb578063e235629d146107f1576102c7565b8063aed7b37f11610112578063aed7b37f14610672578063b7d534a114610691578063b88d4fde146106b0578063bedb86fb146106cf578063c002d23d146106ee578063c450b95414610703576102c7565b80638456cb59146105c957806387ce7657146105e25780638da5cb5b146105f757806395d89b41146106145780639c6e3a1714610628578063a22cb46514610653576102c7565b806332cb6b0c116101fd57806345cfc6f5116101b657806345cfc6f51461050e5780634f6ccce71461052d5780636352211e1461054c57806364a8c9d41461056b57806370a0823114610596578063715018a6146105b5576102c7565b806332cb6b0c1461045b57806337d4c60c14610470578063397eec041461048f5780633a9aa17d146104bb57806342842e0e146104d057806342966c68146104ef576102c7565b8063129072101161024f57806312907210146103b657806318160ddd146103d55780631c492ad7146103e957806323b872dd146103fe5780632b3669061461041d5780632f745c591461043c576102c7565b806301ffc9a7146102e857806306fdde031461031c578063081812fc1461033d578063095ea7b31461037457806309d42b3014610393576102c7565b366102c75734601454106102ba5760405162461bcd60e51b81526004016102b1906121a4565b60405180910390fd5b6102c56013546108b4565b005b34601454106102ba5760405162461bcd60e51b81526004016102b1906121a4565b3480156102f3575f80fd5b506103076103023660046121e3565b610a11565b60405190151581526020015b60405180910390f35b348015610327575f80fd5b50610330610a7d565b604051610313919061224b565b348015610348575f80fd5b5061035c61035736600461225d565b610b08565b6040516001600160a01b039091168152602001610313565b34801561037f575f80fd5b506102c561038e366004612288565b610b4c565b34801561039e575f80fd5b506103a8600e5481565b604051908152602001610313565b3480156103c1575f80fd5b506102c56103d03660046122b2565b610c23565b3480156103e0575f80fd5b506004546103a8565b3480156103f4575f80fd5b506103a8600f5481565b348015610409575f80fd5b506102c56104183660046122db565b610db5565b348015610428575f80fd5b506102c5610437366004612319565b610f86565b348015610447575f80fd5b506103a8610456366004612288565b610fdf565b348015610466575f80fd5b506103a860125481565b34801561047b575f80fd5b506102c561048a3660046122b2565b611070565b34801561049a575f80fd5b506104ae6104a9366004612347565b61117f565b6040516103139190612362565b3480156104c6575f80fd5b506103a860115481565b3480156104db575f80fd5b506102c56104ea3660046122db565b61125d565b3480156104fa575f80fd5b506102c561050936600461225d565b61127c565b348015610519575f80fd5b506102c5610528366004612347565b611304565b348015610538575f80fd5b506103a861054736600461225d565b611340565b348015610557575f80fd5b5061035c61056636600461225d565b61136d565b348015610576575f80fd5b506103a861058536600461225d565b5f908152600b602052604090205490565b3480156105a1575f80fd5b506103a86105b0366004612347565b611428565b3480156105c0575f80fd5b506102c5611498565b3480156105d4575f80fd5b506002546103079060ff1681565b3480156105ed575f80fd5b506103a860105481565b348015610602575f80fd5b506008546001600160a01b031661035c565b34801561061f575f80fd5b506103306114ab565b348015610633575f80fd5b506103a861064236600461225d565b600b6020525f908152604090205481565b34801561065e575f80fd5b506102c561066d3660046123b2565b6114b8565b34801561067d575f80fd5b506102c561068c3660046123de565b61154c565b34801561069c575f80fd5b506103306106ab366004612347565b6115fd565b3480156106bb575f80fd5b506102c56106ca366004612443565b611611565b3480156106da575f80fd5b506102c56106e9366004612500565b61164b565b3480156106f9575f80fd5b506103a860145481565b34801561070e575f80fd5b506103a861071d3660046122db565b600d60209081525f938452604080852082529284528284209052825290205481565b34801561074a575f80fd5b506102c561075936600461251b565b611666565b348015610769575f80fd5b5061033061077836600461225d565b6116c8565b348015610788575f80fd5b506102c5610797366004612319565b61174b565b3480156107a7575f80fd5b506102c56107b63660046125ca565b6117a1565b3480156107c6575f80fd5b506103a86107d53660046125fc565b600c60209081525f928352604080842090915290825290205481565b6102c56107ff3660046123de565b61181f565b34801561080f575f80fd5b506102c561081e366004612628565b6119b7565b34801561082e575f80fd5b5061030761083d3660046125fc565b611a65565b34801561084d575f80fd5b506103a860135481565b348015610862575f80fd5b506102c5610871366004612347565b611ac1565b348015610881575f80fd5b5061033061089036600461225d565b611b3a565b3480156108a0575f80fd5b506102c56108af3660046122b2565b611b54565b5f601454346108c39190612694565b905034816014546108d491906126a7565b106108f15760405162461bcd60e51b81526004016102b1906121a4565b5f81116109285760405162461bcd60e51b81526020600482015260056024820152646d696e203160d81b60448201526064016102b1565b6013548211156109765760405162461bcd60e51b8152602060048201526019602482015278195e18d95959081b585e081c195c9b5a5b9d08185b5bdd5b9d603a1b60448201526064016102b1565b60125482600f5461098791906126be565b11156109a55760405162461bcd60e51b81526004016102b1906126d1565b6109af3382611bab565b60015b8181116109ed5782600b5f836004546109cb91906126f9565b815260208101919091526040015f2055806109e58161270c565b9150506109b2565b506109f881836126a7565b600f5f828254610a0891906126be565b90915550505050565b5f6301ffc9a760e01b6001600160e01b031983161480610a4157506380ac58cd60e01b6001600160e01b03198316145b80610a5c575063780e9d6360e01b6001600160e01b03198316145b80610a775750635b5e139f60e01b6001600160e01b03198316145b92915050565b5f8054610a8990612724565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab590612724565b8015610b005780601f10610ad757610100808354040283529160200191610b00565b820191905f5260205f20905b815481529060010190602001808311610ae357829003601f168201915b505050505081565b5f610b14826004541190565b610b31576040516333d1c03960e21b815260040160405180910390fd5b505f908152600660205260409020546001600160a01b031690565b5f610b568261136d565b9050806001600160a01b0316836001600160a01b031603610b8a5760405163250fdee360e21b815260040160405180910390fd5b336001600160a01b03821614801590610baa5750610ba88133611a65565b155b15610bc8576040516367d9dca160e11b815260040160405180910390fd5b5f8281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b610c2e826004541190565b610c4a5760405162461bcd60e51b81526004016102b19061275c565b5f600d5f610c578661136d565b6001600160a01b0316815260208082019290925260409081015f908120338252835281812087825290925290205411610cc05760405162461bcd60e51b815260206004820152600b60248201526a6e6f7420617070726f766560a81b60448201526064016102b1565b5f828152600b6020526040902054811115610d1d5760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f7567687420746f6b656e20696e2062616c616e63650000000060448201526064016102b1565b80600d5f610d2a8661136d565b6001600160a01b0316815260208082019290925260409081015f908120338252835281812087825290925281208054909190610d679084906126f9565b90915550505f838152600b602052604081208054839290610d899084906126f9565b90915550505f828152600b602052604081208054839290610dab9084906126be565b9091555050505050565b610dc0816004541190565b610ddd57604051636f96cda160e11b815260040160405180910390fd5b826001600160a01b0316610df08261136d565b6001600160a01b031614610e165760405162a1148160e81b815260040160405180910390fd5b6001600160a01b038216610e3d57604051633a954ecd60e21b815260040160405180910390fd5b5f336001600160a01b0385161480610e6e5750610e5982610b08565b6001600160a01b0316336001600160a01b0316145b80610e7e5750610e7e8433611a65565b905080610e9e57604051632ce44b5f60e11b815260040160405180910390fd5b5f82815260066020908152604080832080546001600160a01b0319908116909155600390925290912080549091166001600160a01b0385161790558115801590610f0d57505f600381610ef26001866126f9565b815260208101919091526040015f20546001600160a01b0316145b15610f52578360035f610f216001866126f9565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b81836001600160a01b0316856001600160a01b03165f8051602061295b83398151915260405160405180910390a450505050565b33610f908361136d565b6001600160a01b031614610fb65760405162461bcd60e51b81526004016102b1906127ab565b335f908152600c602090815260408083206001600160a01b039490941683529290529081205550565b5f610fe983611428565b8210611008576040516306ed618760e11b815260040160405180910390fd5b6004545f905b808310156110575761101f8361136d565b6001600160a01b0316856001600160a01b03160361104c57838203611045575050610a77565b6001909101905b60019092019161100e565b604051637339954760e01b815260040160405180910390fd5b61107b826004541190565b6110975760405162461bcd60e51b81526004016102b19061275c565b82600c5f6110a48661136d565b6001600160a01b0316815260208082019290925260409081015f908120338252909252902054146111055760405162461bcd60e51b815260206004820152600b60248201526a6e6f7420617070726f766560a81b60448201526064016102b1565b5f828152600b60205260409020548111156111625760405162461bcd60e51b815260206004820152601c60248201527f6e6f7420656e6f7567687420746f6b656e20696e2062616c616e63650000000060448201526064016102b1565b5f838152600b602052604081208054839290610d899084906126f9565b60606001600160a01b0382166111a8576040516323d3ad8160e21b815260040160405180910390fd5b5f6111b283611428565b67ffffffffffffffff8111156111ca576111ca6123fe565b6040519080825280602002602001820160405280156111f3578160200160208202803683370190505b506004549091505f805b828110156112535761120e8161136d565b6001600160a01b0316866001600160a01b03160361124b5780848381518110611239576112396127ce565b60209081029190910101526001909101905b6001016111fd565b5091949350505050565b61127783838360405180602001604052805f815250611611565b505050565b336112868261136d565b6001600160a01b0316146112c75760405162461bcd60e51b815260206004820152600860248201526737379037bbb732b960c11b60448201526064016102b1565b5f818152600b6020526040902054600f5f8282546112e591906126f9565b909155506112f4905081611bc4565b5f908152600b6020526040812055565b61130c611c11565b60405181906001600160a01b038216904780156108fc02915f818181858888f19350505050158015611277573d5f803e3d5ffd5b5f61134a60045490565b8210611369576040516329c8c00760e21b815260040160405180910390fd5b5090565b5f611379826004541190565b61139657604051636f96cda160e11b815260040160405180910390fd5b5f828152600360205260409020546001600160a01b031680610a775760025460405163620d1b0560e11b8152600481018590526101009091046001600160a01b03169063c41a360a90602401602060405180830381865afa1580156113fd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061142191906127e2565b9392505050565b5f6001600160a01b038216611450576040516323d3ad8160e21b815260040160405180910390fd5b6004545f90815b8181101561148f576114688161136d565b6001600160a01b0316856001600160a01b031603611487576001909201915b600101611457565b50909392505050565b6114a0611c11565b6114a95f611c6b565b565b60018054610a8990612724565b336001600160a01b038316036114e15760405163b06307db60e01b815260040160405180910390fd5b335f8181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b611554611c11565b60105460115461156490836126be565b11156115b25760405162461bcd60e51b815260206004820152601b60248201527f657863656564206d6178207175696c696469747920616d6f756e74000000000060448201526064016102b1565b8060115f8282546115c391906126be565b90915550505f828152600b6020526040812080548392906115e59084906126be565b925050819055508060125f828254610a0891906126be565b6060610a77826001600160a01b0316611cbc565b61161c848484610db5565b61162884848484611dc1565b611645576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b611653611c11565b6002805460ff1916911515919091179055565b336116708361136d565b6001600160a01b0316146116965760405162461bcd60e51b81526004016102b1906127ab565b335f908152600d602090815260408083206001600160a01b039690961683529481528482209382529290925291902055565b60606116d5826004541190565b6116f15760405162461bcd60e51b81526004016102b19061275c565b5f600a80546116ff90612724565b90501161171a5760405180602001604052805f815250610a77565b600a61172583611cbc565b604051602001611736929190612818565b60405160208183030381529060405292915050565b336117558361136d565b6001600160a01b03161461177b5760405162461bcd60e51b81526004016102b1906127ab565b335f908152600c602090815260408083206001600160a01b039490941683529290522055565b5f805b8251811015611811576117db8382815181106117c2576117c26127ce565b60200260200101515f908152600b602052604090205490565b6117e590836126be565b91506118098382815181106117fc576117fc6127ce565b602002602001015161127c565b6001016117a4565b5061181b81611ec0565b5050565b348260145461182e91906126a7565b1061184b5760405162461bcd60e51b81526004016102b1906121a4565b5f82116118825760405162461bcd60e51b81526020600482015260056024820152646d696e203160d81b60448201526064016102b1565b6013548111156118d05760405162461bcd60e51b8152602060048201526019602482015278195e18d95959081b585e081c195c9b5a5b9d08185b5bdd5b9d603a1b60448201526064016102b1565b60125481600f546118e191906126be565b11156118ff5760405162461bcd60e51b81526004016102b1906126d1565b600e548261190c33611428565b61191691906126be565b11156119645760405162461bcd60e51b815260206004820152601f60248201527f657863656564207065722075736572206d6178206d696e7420616d6f756e740060448201526064016102b1565b61196e3383611bab565b60015b8281116119ac5781600b5f8360045461198a91906126f9565b815260208101919091526040015f2055806119a48161270c565b915050611971565b506109f882826126a7565b5f805b8251811015611a14576119e58382815181106119d8576119d86127ce565b6020026020010151611ec0565b8281815181106119f7576119f76127ce565b602002602001015182611a0a91906126be565b91506001016119ba565b505f838152600b60205260409020548114611a5c5760405162461bcd60e51b81526020600482015260086024820152671b9bc8195c5d585b60c21b60448201526064016102b1565b6112778361127c565b5f731e0049783f008a0085193e00003d00cd54003c70196001600160a01b03831601611a9357506001610a77565b506001600160a01b039182165f90815260076020908152604080832093909416825291909152205460ff1690565b611ac9611c11565b6001600160a01b038116611b2e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016102b1565b611b3781611c6b565b50565b5f818152600b602052604090205460609061142181611cbc565b611b5f826004541190565b611b7b5760405162461bcd60e51b81526004016102b19061275c565b33611b858461136d565b6001600160a01b0316146111055760405162461bcd60e51b81526004016102b1906127ab565b61181b828260405180602001604052805f815250611f37565b5f818152600360205260408082205490518392916001600160a01b0316905f8051602061295b833981519152908390a45f90815260036020526040902080546001600160a01b0319169055565b6008546001600160a01b031633146114a95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b1565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6060815f03611ce25750506040805180820190915260018152600360fc1b602082015290565b815f5b8115611d0b5780611cf58161270c565b9150611d049050600a83612694565b9150611ce5565b5f8167ffffffffffffffff811115611d2557611d256123fe565b6040519080825280601f01601f191660200182016040528015611d4f576020820181803683370190505b5090505b8415611db957611d646001836126f9565b9150611d71600a866128d5565b611d7c9060306126be565b60f81b818381518110611d9157611d916127ce565b60200101906001600160f81b03191690815f1a905350611db2600a86612694565b9450611d53565b949350505050565b5f836001600160a01b03163b5f03611ddb57506001611db9565b604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611e0d9033908990889088906004016128e8565b6020604051808303815f875af1925050508015611e47575060408051601f3d908101601f19168201909252611e4491810190612924565b60015b611ea3573d808015611e74576040519150601f19603f3d011682016040523d82523d5f602084013e611e79565b606091505b5080515f03611e9b576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050949350505050565b60125481600f54611ed191906126be565b1115611eef5760405162461bcd60e51b81526004016102b1906126d1565b611efa336001611bab565b80600b5f6001600454611f0d91906126f9565b81526020019081526020015f208190555080600f5f828254611f2f91906126be565b909155505050565b611f418383611f78565b611f5b5f846001600454611f5591906126f9565b84611dc1565b611277576040516368d2bf6b60e11b815260040160405180910390fd5b60025460ff1615611fbd5760405162461bcd60e51b815260206004820152600f60248201526e4d696e74206973207061757365642160881b60448201526064016102b1565b6001600160a01b038216611fe357604051622e076360e81b815260040160405180910390fd5b805f036120035760405163b562e8dd60e01b815260040160405180910390fd5b600254604051637bad8edb60e11b81526001600160a01b0384811660048301525f926101009004169063f75b1db690602401602060405180830381865afa158015612050573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612074919061293f565b60045490915081612108575f5b600184038110156120bd578082015f90815260036020526040902080546001600160a01b0319166001600160a01b038716179055600101612081565b508360035f6120cd6001876126f9565b6120d790856126be565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505b5f5b6121156001856126f9565b8110156121505761212681836126be565b6040516001600160a01b038716905f905f8051602061295b833981519152908290a460010161210a565b5061215c6001846126f9565b61216690826126be565b6040516001600160a01b038616905f905f8051602061295b833981519152908290a48260045f82825461219991906126be565b909155505050505050565b60208082526010908201526f6d696e74206973206e6f74206672656560801b604082015260600190565b6001600160e01b031981168114611b37575f80fd5b5f602082840312156121f3575f80fd5b8135611421816121ce565b5f5b83811015612218578181015183820152602001612200565b50505f910152565b5f81518084526122378160208601602086016121fe565b601f01601f19169290920160200192915050565b602081525f6114216020830184612220565b5f6020828403121561226d575f80fd5b5035919050565b6001600160a01b0381168114611b37575f80fd5b5f8060408385031215612299575f80fd5b82356122a481612274565b946020939093013593505050565b5f805f606084860312156122c4575f80fd5b505081359360208301359350604090920135919050565b5f805f606084860312156122ed575f80fd5b83356122f881612274565b9250602084013561230881612274565b929592945050506040919091013590565b5f806040838503121561232a575f80fd5b82359150602083013561233c81612274565b809150509250929050565b5f60208284031215612357575f80fd5b813561142181612274565b602080825282518282018190525f9190848201906040850190845b818110156123995783518352928401929184019160010161237d565b50909695505050505050565b8015158114611b37575f80fd5b5f80604083850312156123c3575f80fd5b82356123ce81612274565b9150602083013561233c816123a5565b5f80604083850312156123ef575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561243b5761243b6123fe565b604052919050565b5f805f8060808587031215612456575f80fd5b843561246181612274565b935060208581013561247281612274565b935060408601359250606086013567ffffffffffffffff80821115612495575f80fd5b818801915088601f8301126124a8575f80fd5b8135818111156124ba576124ba6123fe565b6124cc601f8201601f19168501612412565b915080825289848285010111156124e1575f80fd5b80848401858401375f8482840101525080935050505092959194509250565b5f60208284031215612510575f80fd5b8135611421816123a5565b5f805f6060848603121561252d575f80fd5b833561253881612274565b95602085013595506040909401359392505050565b5f82601f83011261255c575f80fd5b8135602067ffffffffffffffff821115612578576125786123fe565b8160051b612587828201612412565b92835284810182019282810190878511156125a0575f80fd5b83870192505b848310156125bf578235825291830191908301906125a6565b979650505050505050565b5f602082840312156125da575f80fd5b813567ffffffffffffffff8111156125f0575f80fd5b611db98482850161254d565b5f806040838503121561260d575f80fd5b823561261881612274565b9150602083013561233c81612274565b5f8060408385031215612639575f80fd5b82359150602083013567ffffffffffffffff811115612656575f80fd5b6126628582860161254d565b9150509250929050565b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f826126a2576126a261266c565b500490565b8082028115828204841417610a7757610a77612680565b80820180821115610a7757610a77612680565b6020808252600e908201526d1a5b9cd8dc9a589948195b99195960921b604082015260600190565b81810381811115610a7757610a77612680565b5f6001820161271d5761271d612680565b5060010190565b600181811c9082168061273857607f821691505b60208210810361275657634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b6020808252600990820152683737ba1037bbb732b960b91b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156127f2575f80fd5b815161142181612274565b5f815161280e8185602086016121fe565b9290920192915050565b5f8084545f60018260011c9150600183168061283557607f831692505b6020808410820361285457634e487b7160e01b5f52602260045260245ffd5b818015612868576001811461287d576128a8565b60ff19861689528415158502890196506128a8565b5f8b8152602090205f5b868110156128a05781548b820152908501908301612887565b505084890196505b5050505050506128cc6128bb82866127fd565b64173539b7b760d91b815260050190565b95945050505050565b5f826128e3576128e361266c565b500690565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061291a90830184612220565b9695505050505050565b5f60208284031215612934575f80fd5b8151611421816121ce565b5f6020828403121561294f575f80fd5b8151611421816123a556feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122001d71d5cb3c5754375ea99e16dbc1d5748c016ee4f1661c161b8cec1382dd05e64736f6c63430008170033

Deployed Bytecode Sourcemap

19129:8908:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20113:9;20100:10;;:22;20092:51;;;;-1:-1:-1;;;20092:51:0;;;;;;;:::i;:::-;;;;;;;;;20154:40;20175:18;;20154:20;:40::i;:::-;19129:8908;;19957:9;19944:10;;:22;19936:51;;;;-1:-1:-1;;;19936:51:0;;;;;;;:::i;4133:467::-;;;;;;;;;;-1:-1:-1;4133:467:0;;;;;:::i;:::-;;:::i;:::-;;;910:14:1;;903:22;885:41;;873:2;858:18;4133:467:0;;;;;;;;2728:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9002:244::-;;;;;;;;;;-1:-1:-1;9002:244:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2064:32:1;;;2046:51;;2034:2;2019:18;9002:244:0;1900:203:1;8546:390:0;;;;;;;;;;-1:-1:-1;8546:390:0;;;;;:::i;:::-;;:::i;19603:27::-;;;;;;;;;;;;;;;;;;;2710:25:1;;;2698:2;2683:18;19603:27:0;2564:177:1;21877:856:0;;;;;;;;;;-1:-1:-1;21877:856:0;;;;;:::i;:::-;;:::i;4866:85::-;;;;;;;;;;-1:-1:-1;4937:6:0;;4866:85;;19637:39;;;;;;;;;;;;;;;;10028:1011;;;;;;;;;;-1:-1:-1;10028:1011:0;;;;;:::i;:::-;;:::i;20965:210::-;;;;;;;;;;-1:-1:-1;20965:210:0;;;;;:::i;:::-;;:::i;5141:664::-;;;;;;;;;;-1:-1:-1;5141:664:0;;;;;:::i;:::-;;:::i;19770:25::-;;;;;;;;;;;;;;;;21183:686;;;;;;;;;;-1:-1:-1;21183:686:0;;;;;:::i;:::-;;:::i;6998:682::-;;;;;;;;;;-1:-1:-1;6998:682:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19725:38::-;;;;;;;;;;;;;;;;11110:166;;;;;;;;;;-1:-1:-1;11110:166:0;;;;;:::i;:::-;;:::i;27080:237::-;;;;;;;;;;-1:-1:-1;27080:237:0;;;;;:::i;:::-;;:::i;27788:157::-;;;;;;;;;;-1:-1:-1;27788:157:0;;;;;:::i;:::-;;:::i;5882:175::-;;;;;;;;;;-1:-1:-1;5882:175:0;;;;;:::i;:::-;;:::i;7918:566::-;;;;;;;;;;-1:-1:-1;7918:566:0;;;;;:::i;:::-;;:::i;24025:153::-;;;;;;;;;;-1:-1:-1;24025:153:0;;;;;:::i;:::-;24086:7;24123:23;;;:14;:23;;;;;;;24025:153;6504:486;;;;;;;;;;-1:-1:-1;6504:486:0;;;;;:::i;:::-;;:::i;15896:103::-;;;;;;;;;;;;;:::i;2784:24::-;;;;;;;;;;-1:-1:-1;2784:24:0;;;;;;;;19683:35;;;;;;;;;;;;;;;;15661:87;;;;;;;;;;-1:-1:-1;15734:6:0;;-1:-1:-1;;;;;15734:6:0;15661:87;;2755:20;;;;;;;;;;;;;:::i;19285:49::-;;;;;;;;;;-1:-1:-1;19285:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;9318:272;;;;;;;;;;-1:-1:-1;9318:272:0;;;;;:::i;:::-;;:::i;23296:408::-;;;;;;;;;;-1:-1:-1;23296:408:0;;;;;:::i;:::-;;:::i;23712:131::-;;;;;;;;;;-1:-1:-1;23712:131:0;;;;;:::i;:::-;;:::i;11347:308::-;;;;;;;;;;-1:-1:-1;11347:308:0;;;;;:::i;:::-;;:::i;27953:81::-;;;;;;;;;;-1:-1:-1;27953:81:0;;;;;:::i;:::-;;:::i;19844:44::-;;;;;;;;;;;;;;;;19440:107;;;;;;;;;;-1:-1:-1;19440:107:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20490:263;;;;;;;;;;-1:-1:-1;20490:263:0;;;;;:::i;:::-;;:::i;27325:455::-;;;;;;;;;;-1:-1:-1;27325:455:0;;;;;:::i;:::-;;:::i;20761:196::-;;;;;;;;;;-1:-1:-1;20761:196:0;;;;;:::i;:::-;;:::i;26149:404::-;;;;;;;;;;-1:-1:-1;26149:404:0;;;;;:::i;:::-;;:::i;19341:68::-;;;;;;;;;;-1:-1:-1;19341:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;24186:795;;;;;;:::i;:::-;;:::i;26561:343::-;;;;;;;;;;-1:-1:-1;26561:343:0;;;;;:::i;:::-;;:::i;9661:300::-;;;;;;;;;;-1:-1:-1;9661:300:0;;;;;:::i;:::-;;:::i;19802:33::-;;;;;;;;;;;;;;;;16007:238;;;;;;;;;;-1:-1:-1;16007:238:0;;;;;:::i;:::-;;:::i;23851:166::-;;;;;;;;;;-1:-1:-1;23851:166:0;;;;;:::i;:::-;;:::i;22741:547::-;;;;;;;;;;-1:-1:-1;22741:547:0;;;;;:::i;:::-;;:::i;25450:691::-;25517:14;25546:10;;25534:9;:22;;;;:::i;:::-;25517:39;;25597:9;25588:6;25575:10;;:19;;;;:::i;:::-;:31;25567:60;;;;-1:-1:-1;;;25567:60:0;;;;;;;:::i;:::-;25655:1;25646:6;:10;25638:28;;;;-1:-1:-1;;;25638:28:0;;10307:2:1;25638:28:0;;;10289:21:1;10346:1;10326:18;;;10319:29;-1:-1:-1;;;10364:18:1;;;10357:35;10409:18;;25638:28:0;10105:328:1;25638:28:0;25696:18;;25685:7;:29;;25677:67;;;;-1:-1:-1;;;25677:67:0;;10640:2:1;25677:67:0;;;10622:21:1;10679:2;10659:18;;;10652:30;-1:-1:-1;;;10698:18:1;;;10691:55;10763:18;;25677:67:0;10438:349:1;25677:67:0;25815:10;;25804:7;25777:24;;:34;;;;:::i;:::-;:48;;25755:112;;;;-1:-1:-1;;;25755:112:0;;;;;;;:::i;:::-;25878:29;25888:10;25900:6;25878:9;:29::i;:::-;25935:1;25918:101;25943:6;25938:1;:11;25918:101;;26000:7;25971:14;:26;25995:1;25986:6;;:10;;;;:::i;:::-;25971:26;;;;;;;;;;;-1:-1:-1;25971:26:0;:36;25951:3;;;;:::i;:::-;;;;25918:101;;;-1:-1:-1;26057:16:0;26067:6;26057:7;:16;:::i;:::-;26029:24;;:44;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;25450:691:0:o;4133:467::-;4245:4;-1:-1:-1;;;;;;;;;4287:25:0;;;;:101;;-1:-1:-1;;;;;;;;;;4363:25:0;;;4287:101;:177;;;-1:-1:-1;;;;;;;;;;4439:25:0;;;4287:177;:263;;;-1:-1:-1;;;;;;;;;;4525:25:0;;;4287:263;4267:283;4133:467;-1:-1:-1;;4133:467:0:o;2728:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9002:244::-;9105:7;9135:16;9143:7;11827:6;;-1:-1:-1;11817:16:0;11728:113;9135:16;9130:64;;9160:34;;-1:-1:-1;;;9160:34:0;;;;;;;;;;;9130:64;-1:-1:-1;9214:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;9214:24:0;;9002:244::o;8546:390::-;8618:13;8634:16;8642:7;8634;:16::i;:::-;8618:32;;8671:5;-1:-1:-1;;;;;8665:11:0;:2;-1:-1:-1;;;;;8665:11:0;;8661:48;;8685:24;;-1:-1:-1;;;8685:24:0;;;;;;;;;;;8661:48;8726:10;-1:-1:-1;;;;;8726:19:0;;;;;;:59;;;8750:35;8767:5;8774:10;8750:16;:35::i;:::-;8749:36;8726:59;8722:120;;;8807:35;;-1:-1:-1;;;8807:35:0;;;;;;;;;;;8722:120;8855:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;8855:29:0;-1:-1:-1;;;;;8855:29:0;;;;;;;;;8900:28;;8855:24;;8900:28;;;;;;;8607:329;8546:390;;:::o;21877:856::-;22053:18;22061:9;11827:6;;-1:-1:-1;11817:16:0;11728:113;22053:18;22031:115;;;;-1:-1:-1;;;22031:115:0;;;;;;;:::i;:::-;22352:1;22247:23;:45;22271:20;22279:11;22271:7;:20::i;:::-;-1:-1:-1;;;;;22247:45:0;;;;;;;;;;;;;;;-1:-1:-1;22247:45:0;;;22293:10;22247:57;;;;;;;:102;;;;;;;;;:106;22225:167;;;;-1:-1:-1;;;22225:167:0;;12541:2:1;22225:167:0;;;12523:21:1;12580:2;12560:18;;;12553:30;-1:-1:-1;;;12599:18:1;;;12592:41;12650:18;;22225:167:0;12339:335:1;22225:167:0;22425:25;;;;:14;:25;;;;;;:35;-1:-1:-1;22425:35:0;22403:113;;;;-1:-1:-1;;;22403:113:0;;12881:2:1;22403:113:0;;;12863:21:1;12920:2;12900:18;;;12893:30;12959;12939:18;;;12932:58;13007:18;;22403:113:0;12679:352:1;22403:113:0;22625:6;22527:23;:45;22551:20;22559:11;22551:7;:20::i;:::-;-1:-1:-1;;;;;22527:45:0;;;;;;;;;;;;;;;-1:-1:-1;22527:45:0;;;22573:10;22527:57;;;;;;;:94;;;;;;;;:104;;:94;;-1:-1:-1;22527:104:0;;;;;:::i;:::-;;;;-1:-1:-1;;22642:27:0;;;;:14;:27;;;;;:37;;22673:6;;22642:27;:37;;22673:6;;22642:37;:::i;:::-;;;;-1:-1:-1;;22690:25:0;;;;:14;:25;;;;;:35;;22719:6;;22690:25;:35;;22719:6;;22690:35;:::i;:::-;;;;-1:-1:-1;;;;;21877:856:0:o;10028:1011::-;10158:16;10166:7;11827:6;;-1:-1:-1;11817:16:0;11728:113;10158:16;10153:61;;10183:31;;-1:-1:-1;;;10183:31:0;;;;;;;;;;;10153:61;10249:4;-1:-1:-1;;;;;10229:24:0;:16;10237:7;10229;:16::i;:::-;-1:-1:-1;;;;;10229:24:0;;10225:65;;10262:28;;-1:-1:-1;;;10262:28:0;;;;;;;;;;;10225:65;-1:-1:-1;;;;;10305:16:0;;10301:52;;10330:23;;-1:-1:-1;;;10330:23:0;;;;;;;;;;;10301:52;10366:22;10392:10;-1:-1:-1;;;;;10392:18:0;;;;:69;;;10441:20;10453:7;10441:11;:20::i;:::-;-1:-1:-1;;;;;10427:34:0;:10;-1:-1:-1;;;;;10427:34:0;;10392:69;:120;;;;10478:34;10495:4;10501:10;10478:16;:34::i;:::-;10366:147;;10529:17;10524:66;;10555:35;;-1:-1:-1;;;10555:35:0;;;;;;;;;;;10524:66;10665:24;;;;:15;:24;;;;;;;;10658:31;;-1:-1:-1;;;;;;10658:31:0;;;;;;10700:7;:16;;;;;;:21;;;;;-1:-1:-1;;;;;10700:21:0;;;;;10882:11;;;;;:49;;-1:-1:-1;10929:1:0;10897:7;10929:1;10905:11;10915:1;10905:7;:11;:::i;:::-;10897:20;;;;;;;;;;;-1:-1:-1;10897:20:0;;-1:-1:-1;;;;;10897:20:0;:34;10882:49;10878:109;;;10971:4;10948:7;:20;10956:11;10966:1;10956:7;:11;:::i;:::-;10948:20;;;;;;;;;;;;:27;;;;;-1:-1:-1;;;;;10948:27:0;;;;;-1:-1:-1;;;;;10948:27:0;;;;;;10878:109;11023:7;11019:2;-1:-1:-1;;;;;11004:27:0;11013:4;-1:-1:-1;;;;;11004:27:0;-1:-1:-1;;;;;;;;;;;11004:27:0;;;;;;;;;10142:897;10028:1011;;;:::o;20965:210::-;21094:10;21074:16;21082:7;21074;:16::i;:::-;-1:-1:-1;;;;;21074:30:0;;21066:52;;;;-1:-1:-1;;;21066:52:0;;;;;;;:::i;:::-;21143:10;21166:1;21129:25;;;:13;:25;;;;;;;;-1:-1:-1;;;;;21129:34:0;;;;;;;;;;;;:38;-1:-1:-1;20965:210:0:o;5141:664::-;5265:15;5311:16;5321:5;5311:9;:16::i;:::-;5302:5;:25;5298:61;;5336:23;;-1:-1:-1;;;5336:23:0;;;;;;;;;;;5298:61;5410:6;;5372:13;;5522:217;5546:3;5536:7;:13;5522:217;;;5594:16;5602:7;5594;:16::i;:::-;-1:-1:-1;;;;;5585:25:0;:5;-1:-1:-1;;;;;5585:25:0;;5581:143;;5648:5;5639;:14;5635:69;;5655:14;;;;5635:69;5697:7;;;;;5635:69;5551:9;;;;;5522:217;;;5769:28;;-1:-1:-1;;;5769:28:0;;;;;;;;;;;21183:686;21416:18;21424:9;11827:6;;-1:-1:-1;11817:16:0;11728:113;21416:18;21394:115;;;;-1:-1:-1;;;21394:115:0;;;;;;;:::i;:::-;21593:11;21542:13;:35;21556:20;21564:11;21556:7;:20::i;:::-;-1:-1:-1;;;;;21542:35:0;;;;;;;;;;;;;;;-1:-1:-1;21542:35:0;;;21578:10;21542:47;;;;;;;;:62;21520:123;;;;-1:-1:-1;;;21520:123:0;;12541:2:1;21520:123:0;;;12523:21:1;12580:2;12560:18;;;12553:30;-1:-1:-1;;;12599:18:1;;;12592:41;12650:18;;21520:123:0;12339:335:1;21520:123:0;21676:25;;;;:14;:25;;;;;;:35;-1:-1:-1;21676:35:0;21654:113;;;;-1:-1:-1;;;21654:113:0;;12881:2:1;21654:113:0;;;12863:21:1;12920:2;12900:18;;;12893:30;12959;12939:18;;;12932:58;13007:18;;21654:113:0;12679:352:1;21654:113:0;21778:27;;;;:14;:27;;;;;:37;;21809:6;;21778:27;:37;;21809:6;;21778:37;:::i;6998:682::-;7098:16;-1:-1:-1;;;;;7136:19:0;;7132:60;;7164:28;;-1:-1:-1;;;7164:28:0;;;;;;;;;;;7132:60;7205:21;7243:16;7253:5;7243:9;:16::i;:::-;7229:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7229:31:0;-1:-1:-1;7285:6:0;;7205:55;;-1:-1:-1;7271:11:0;;7417:223;7437:3;7433:1;:7;7417:223;;;7479:10;7487:1;7479:7;:10::i;:::-;-1:-1:-1;;;;;7470:19:0;:5;-1:-1:-1;;;;;7470:19:0;;7466:159;;7551:1;7541:4;7546:1;7541:7;;;;;;;;:::i;:::-;;;;;;;;;;:11;7579:3;;;;;7466:159;7442:3;;7417:223;;;-1:-1:-1;7668:4:0;;6998:682;-1:-1:-1;;;;6998:682:0:o;11110:166::-;11234:34;11251:4;11257:2;11261;11234:34;;;;;;;;;;;;:16;:34::i;:::-;11110:166;;;:::o;27080:237::-;27159:10;27138:17;27146:8;27138:7;:17::i;:::-;-1:-1:-1;;;;;27138:31:0;;27130:52;;;;-1:-1:-1;;;27130:52:0;;13707:2:1;27130:52:0;;;13689:21:1;13746:1;13726:18;;;13719:29;-1:-1:-1;;;13764:18:1;;;13757:38;13812:18;;27130:52:0;13505:331:1;27130:52:0;24086:7;24123:23;;;:14;:23;;;;;;27193:24;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;27255:15:0;;-1:-1:-1;27261:8:0;27255:5;:15::i;:::-;27308:1;27281:24;;;:14;:24;;;;;:28;27080:237::o;27788:157::-;15620:13;:11;:13::i;:::-;27897:40:::1;::::0;27883:2;;-1:-1:-1;;;;;27897:17:0;::::1;::::0;27915:21:::1;27897:40:::0;::::1;;;::::0;27848:24:::1;27897:40:::0;27848:24;27897:40;27915:21;27897:17;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;5882:175:::0;5948:7;5981:13;4937:6;;;4866:85;5981:13;5972:5;:22;5968:58;;6003:23;;-1:-1:-1;;;6003:23:0;;;;;;;;;;;5968:58;-1:-1:-1;6044:5:0;5882:175::o;7918:566::-;7981:7;8006:16;8014:7;11827:6;;-1:-1:-1;11817:16:0;11728:113;8006:16;8001:61;;8031:31;;-1:-1:-1;;;8031:31:0;;;;;;;;;;;8001:61;8216:13;8232:16;;;:7;:16;;;;;;-1:-1:-1;;;;;8232:16:0;;8267:136;;8338:9;;8320:47;;-1:-1:-1;;;8320:47:0;;;;;2710:25:1;;;8338:9:0;;;;-1:-1:-1;;;;;8338:9:0;;8320:38;;2683:18:1;;8320:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8313:54;7918:566;-1:-1:-1;;;7918:566:0:o;6504:486::-;6567:7;-1:-1:-1;;;;;6591:19:0;;6587:60;;6619:28;;-1:-1:-1;;;6619:28:0;;;;;;;;;;;6587:60;6698:6;;6660:13;;;6810:139;6830:3;6826:1;:7;6810:139;;;6872:10;6880:1;6872:7;:10::i;:::-;-1:-1:-1;;;;;6863:19:0;:5;-1:-1:-1;;;;;6863:19:0;;6859:75;;6907:7;;;;;6859:75;6835:3;;6810:139;;;-1:-1:-1;6977:5:0;;6504:486;-1:-1:-1;;;6504:486:0:o;15896:103::-;15620:13;:11;:13::i;:::-;15961:30:::1;15988:1;15961:18;:30::i;:::-;15896:103::o:0;2755:20::-;;;;;;;:::i;9318:272::-;9420:10;-1:-1:-1;;;;;9408:22:0;;;9404:52;;9439:17;;-1:-1:-1;;;9439:17:0;;;;;;;;;;;9404:52;9488:10;9469:30;;;;:18;:30;;;;;;;;-1:-1:-1;;;;;9469:40:0;;;;;;;;;;;;:51;;-1:-1:-1;;9469:51:0;;;;;;;;;;9536:46;;885:41:1;;;9469:40:0;;9488:10;9536:46;;858:18:1;9536:46:0;;;;;;;9318:272;;:::o;23296:408::-;15620:13;:11;:13::i;:::-;23467:20:::1;::::0;23440:23:::1;::::0;23431:32:::1;::::0;:6;:32:::1;:::i;:::-;:56;;23409:133;;;::::0;-1:-1:-1;;;23409:133:0;;14299:2:1;23409:133:0::1;::::0;::::1;14281:21:1::0;14338:2;14318:18;;;14311:30;14377:29;14357:18;;;14350:57;14424:18;;23409:133:0::1;14097:351:1::0;23409:133:0::1;23580:6;23553:23;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;23597:23:0::1;::::0;;;:14:::1;:23;::::0;;;;:33;;23624:6;;23597:23;:33:::1;::::0;23624:6;;23597:33:::1;:::i;:::-;;;;;;;;23655:6;23641:10;;:20;;;;;;;:::i;23712:131::-:0;23769:13;23802:33;23818:4;-1:-1:-1;;;;;23802:22:0;:31;:33::i;11347:308::-;11499:26;11512:4;11518:2;11522;11499:12;:26::i;:::-;11543:42;11566:4;11572:2;11576;11580:4;11543:22;:42::i;:::-;11538:109;;11607:40;;-1:-1:-1;;;11607:40:0;;;;;;;;;;;11538:109;11347:308;;;;:::o;27953:81::-;15620:13;:11;:13::i;:::-;28012:5:::1;:14:::0;;-1:-1:-1;;28012:14:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27953:81::o;20490:263::-;20648:10;20628:16;20636:7;20628;:16::i;:::-;-1:-1:-1;;;;;20628:30:0;;20620:52;;;;-1:-1:-1;;;20620:52:0;;;;;;;:::i;:::-;20707:10;20683:35;;;;:23;:35;;;;;;;;-1:-1:-1;;;;;20683:44:0;;;;;;;;;;;;:53;;;;;;;;;;:62;20490:263::o;27325:455::-;27426:13;27479:16;27487:7;11827:6;;-1:-1:-1;11817:16:0;11728:113;27479:16;27457:113;;;;-1:-1:-1;;;27457:113:0;;;;;;;:::i;:::-;27626:1;27607:8;27601:22;;;;;:::i;:::-;;;:26;:171;;;;;;;;;;;;;;;;;27693:8;27703:18;:7;:16;:18::i;:::-;27676:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27581:191;27325:455;-1:-1:-1;;27325:455:0:o;20761:196::-;20870:10;20850:16;20858:7;20850;:16::i;:::-;-1:-1:-1;;;;;20850:30:0;;20842:52;;;;-1:-1:-1;;;20842:52:0;;;;;;;:::i;:::-;20919:10;20905:25;;;;:13;:25;;;;;;;;-1:-1:-1;;;;;20905:34:0;;;;;;;;;;:44;20761:196::o;26149:404::-;26212:14;26242:9;26237:146;26257:11;:18;26253:1;:22;26237:146;;;26307:29;26321:11;26333:1;26321:14;;;;;;;;:::i;:::-;;;;;;;24086:7;24123:23;;;:14;:23;;;;;;;24025:153;26307:29;26297:39;;;;:::i;:::-;;;26351:20;26356:11;26368:1;26356:14;;;;;;;;:::i;:::-;;;;;;;26351:4;:20::i;:::-;26277:3;;26237:146;;;;26518:27;26538:6;26518:19;:27::i;:::-;26201:352;26149:404;:::o;24186:795::-;24293:9;24284:6;24271:10;;:19;;;;:::i;:::-;:31;24263:60;;;;-1:-1:-1;;;24263:60:0;;;;;;;:::i;:::-;24351:1;24342:6;:10;24334:28;;;;-1:-1:-1;;;24334:28:0;;10307:2:1;24334:28:0;;;10289:21:1;10346:1;10326:18;;;10319:29;-1:-1:-1;;;10364:18:1;;;10357:35;10409:18;;24334:28:0;10105:328:1;24334:28:0;24392:18;;24381:7;:29;;24373:67;;;;-1:-1:-1;;;24373:67:0;;10640:2:1;24373:67:0;;;10622:21:1;10679:2;10659:18;;;10652:30;-1:-1:-1;;;10698:18:1;;;10691:55;10763:18;;24373:67:0;10438:349:1;24373:67:0;24511:10;;24500:7;24473:24;;:34;;;;:::i;:::-;:48;;24451:112;;;;-1:-1:-1;;;24451:112:0;;;;;;;:::i;:::-;24630:12;;24620:6;24596:21;24606:10;24596:9;:21::i;:::-;:30;;;;:::i;:::-;:46;;24574:127;;;;-1:-1:-1;;;24574:127:0;;16429:2:1;24574:127:0;;;16411:21:1;16468:2;16448:18;;;16441:30;16507:33;16487:18;;;16480:61;16558:18;;24574:127:0;16227:355:1;24574:127:0;24714:29;24724:10;24736:6;24714:9;:29::i;:::-;24771:1;24754:101;24779:6;24774:1;:11;24754:101;;24836:7;24807:14;:26;24831:1;24822:6;;:10;;;;:::i;:::-;24807:26;;;;;;;;;;;-1:-1:-1;24807:26:0;:36;24787:3;;;;:::i;:::-;;;;24754:101;;;-1:-1:-1;24895:16:0;24905:6;24895:7;:16;:::i;26561:343::-;26644:11;26673:9;26668:140;26688:10;:17;26684:1;:21;26668:140;;;26727:34;26747:10;26758:1;26747:13;;;;;;;;:::i;:::-;;;;;;;26727:19;:34::i;:::-;26783:10;26794:1;26783:13;;;;;;;;:::i;:::-;;;;;;;26776:20;;;;;:::i;:::-;;-1:-1:-1;26707:3:0;;26668:140;;;-1:-1:-1;24086:7:0;24123:23;;;:14;:23;;;;;;26853:3;26826:30;26818:51;;;;-1:-1:-1;;;26818:51:0;;16789:2:1;26818:51:0;;;16771:21:1;16828:1;16808:18;;;16801:29;-1:-1:-1;;;16846:18:1;;;16839:38;16894:18;;26818:51:0;16587:331:1;26818:51:0;26882:14;26887:8;26882:4;:14::i;9661:300::-;9785:4;-1:-1:-1;;;;;;;9811:63:0;;;9807:93;;-1:-1:-1;9896:4:0;9889:11;;9807:93;-1:-1:-1;;;;;;9918:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;9661:300::o;16007:238::-;15620:13;:11;:13::i;:::-;-1:-1:-1;;;;;16110:22:0;::::1;16088:110;;;::::0;-1:-1:-1;;;16088:110:0;;17125:2:1;16088:110:0::1;::::0;::::1;17107:21:1::0;17164:2;17144:18;;;17137:30;17203:34;17183:18;;;17176:62;-1:-1:-1;;;17254:18:1;;;17247:36;17300:19;;16088:110:0::1;16923:402:1::0;16088:110:0::1;16209:28;16228:8;16209:18;:28::i;:::-;16007:238:::0;:::o;23851:166::-;23934:14;23951:23;;;:14;:23;;;;;;23908:13;;23992:17;23951:23;23992:15;:17::i;22741:547::-;22902:18;22910:9;11827:6;;-1:-1:-1;11817:16:0;11728:113;22902:18;22880:115;;;;-1:-1:-1;;;22880:115:0;;;;;;;:::i;:::-;23038:10;23014:20;23022:11;23014:7;:20::i;:::-;-1:-1:-1;;;;;23014:34:0;;23006:56;;;;-1:-1:-1;;;23006:56:0;;;;;;;:::i;13797:102::-;13869:22;13879:2;13883:3;13869:22;;;;;;;;;;;;:9;:22::i;26912:160::-;27012:1;26986:16;;;:7;:16;;;;;;;26977:47;;27016:7;;27012:1;-1:-1:-1;;;;;26986:16:0;;-1:-1:-1;;;;;;;;;;;26977:47:0;27012:1;;26977:47;27062:1;27035:16;;;:7;:16;;;;;:29;;-1:-1:-1;;;;;;27035:29:0;;;26912:160::o;15756:132::-;15734:6;;-1:-1:-1;;;;;15734:6:0;15189:10;15820:23;15812:68;;;;-1:-1:-1;;;15812:68:0;;17532:2:1;15812:68:0;;;17514:21:1;;;17551:18;;;17544:30;17610:34;17590:18;;;17583:62;17662:18;;15812:68:0;17330:356:1;16253:191:0;16346:6;;;-1:-1:-1;;;;;16363:17:0;;;-1:-1:-1;;;;;;16363:17:0;;;;;;;16396:40;;16346:6;;;16363:17;16346:6;;16396:40;;16327:16;;16396:40;16316:128;16253:191;:::o;16639:723::-;16695:13;16916:5;16925:1;16916:10;16912:53;;-1:-1:-1;;16943:10:0;;;;;;;;;;;;-1:-1:-1;;;16943:10:0;;;;;16639:723::o;16912:53::-;16990:5;16975:12;17031:78;17038:9;;17031:78;;17064:8;;;;:::i;:::-;;-1:-1:-1;17087:10:0;;-1:-1:-1;17095:2:0;17087:10;;:::i;:::-;;;17031:78;;;17119:19;17151:6;17141:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17141:17:0;;17119:39;;17169:154;17176:10;;17169:154;;17203:11;17213:1;17203:11;;:::i;:::-;;-1:-1:-1;17272:10:0;17280:2;17272:5;:10;:::i;:::-;17259:24;;:2;:24;:::i;:::-;17246:39;;17229:6;17236;17229:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;17229:56:0;;;;;;;;-1:-1:-1;17300:11:0;17309:2;17300:11;;:::i;:::-;;;17169:154;;;17347:6;16639:723;-1:-1:-1;;;;16639:723:0:o;12406:762::-;12561:4;12582:2;-1:-1:-1;;;;;12582:14:0;;12600:1;12582:19;12578:36;;-1:-1:-1;12610:4:0;12603:11;;12578:36;12644:153;;-1:-1:-1;;;12644:153:0;;-1:-1:-1;;;;;12644:36:0;;;;;:153;;12699:10;;12728:4;;12751:7;;12777:5;;12644:153;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12644:153:0;;;;;;;;-1:-1:-1;;12644:153:0;;;;;;;;;;;;:::i;:::-;;;12627:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12968:6;:13;12985:1;12968:18;12964:88;;13012:40;;-1:-1:-1;;;13012:40:0;;;;;;;;;;;12964:88;13127:6;13121:13;13112:6;13108:2;13104:15;13097:38;12627:534;-1:-1:-1;;;;;;12853:55:0;-1:-1:-1;;;12853:55:0;;-1:-1:-1;12406:762:0;;;;;;:::o;24989:453::-;25194:10;;25183:7;25156:24;;:34;;;;:::i;:::-;:48;;25134:112;;;;-1:-1:-1;;;25134:112:0;;;;;;;:::i;:::-;25257:24;25267:10;25279:1;25257:9;:24::i;:::-;25321:7;25292:14;:26;25316:1;25307:6;;:10;;;;:::i;:::-;25292:26;;;;;;;;;;;:36;;;;25367:7;25339:24;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;;24989:453:0:o;13907:283::-;14032:14;14038:2;14042:3;14032:5;:14::i;:::-;14064:56;14095:1;14099:2;14112:1;14103:6;;:10;;;;:::i;:::-;14115:4;14064:22;:56::i;:::-;14059:123;;14142:40;;-1:-1:-1;;;14142:40:0;;;;;;;;;;;14198:871;14275:5;;;;14274:6;14266:34;;;;-1:-1:-1;;;14266:34:0;;18769:2:1;14266:34:0;;;18751:21:1;18808:2;18788:18;;;18781:30;-1:-1:-1;;;18827:18:1;;;18820:45;18882:18;;14266:34:0;18567:339:1;14266:34:0;-1:-1:-1;;;;;14315:16:0;;14311:48;;14340:19;;-1:-1:-1;;;14340:19:0;;;;;;;;;;;14311:48;14374:3;14381:1;14374:8;14370:39;;14391:18;;-1:-1:-1;;;14391:18:0;;;;;;;;;;;14370:39;14450:9;;14432:45;;-1:-1:-1;;;14432:45:0;;-1:-1:-1;;;;;2064:32:1;;;14432:45:0;;;2046:51:1;14420:9:0;;14450;;;;;14432:41;;2019:18:1;;14432:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14512:6;;14420:57;;-1:-1:-1;14420:57:0;14531:317;;14665:9;14660:108;14686:1;14680:3;:7;14676:1;:11;14660:108;;;14725:17;;;14717:26;;;;:7;:26;;;;;:31;;-1:-1:-1;;;;;;14717:31:0;-1:-1:-1;;;;;14717:31:0;;;;;-1:-1:-1;14689:3:0;14660:108;;;-1:-1:-1;14834:2:0;14797:7;:34;14822:7;14828:1;14822:3;:7;:::i;:::-;14805:25;;:13;:25;:::i;:::-;14797:34;;;;;;;;;;;;:39;;;;;-1:-1:-1;;;;;14797:39:0;;;;;-1:-1:-1;;;;;14797:39:0;;;;;;14531:317;14865:9;14860:109;14880:7;14886:1;14880:3;:7;:::i;:::-;14876:1;:11;14860:109;;;14939:17;14955:1;14939:13;:17;:::i;:::-;14914:43;;-1:-1:-1;;;;;14914:43:0;;;14931:1;;-1:-1:-1;;;;;;;;;;;14914:43:0;14931:1;;14914:43;14889:3;;14860:109;;;-1:-1:-1;15028:7:0;15034:1;15028:3;:7;:::i;:::-;15011:25;;:13;:25;:::i;:::-;14986:51;;-1:-1:-1;;;;;14986:51:0;;;15003:1;;-1:-1:-1;;;;;;;;;;;14986:51:0;15003:1;;14986:51;15058:3;15048:6;;:13;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;14198:871:0:o;14:340:1:-;216:2;198:21;;;255:2;235:18;;;228:30;-1:-1:-1;;;289:2:1;274:18;;267:46;345:2;330:18;;14:340::o;359:131::-;-1:-1:-1;;;;;;433:32:1;;423:43;;413:71;;480:1;477;470:12;495:245;553:6;606:2;594:9;585:7;581:23;577:32;574:52;;;622:1;619;612:12;574:52;661:9;648:23;680:30;704:5;680:30;:::i;937:250::-;1022:1;1032:113;1046:6;1043:1;1040:13;1032:113;;;1122:11;;;1116:18;1103:11;;;1096:39;1068:2;1061:10;1032:113;;;-1:-1:-1;;1179:1:1;1161:16;;1154:27;937:250::o;1192:282::-;1245:3;1283:5;1277:12;1310:6;1305:3;1298:19;1326:76;1395:6;1388:4;1383:3;1379:14;1372:4;1365:5;1361:16;1326:76;:::i;:::-;1456:2;1435:15;-1:-1:-1;;1431:29:1;1422:39;;;;1463:4;1418:50;;1192:282;-1:-1:-1;;1192:282:1:o;1479:231::-;1628:2;1617:9;1610:21;1591:4;1648:56;1700:2;1689:9;1685:18;1677:6;1648:56;:::i;1715:180::-;1774:6;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;-1:-1:-1;1866:23:1;;1715:180;-1:-1:-1;1715:180:1:o;2108:131::-;-1:-1:-1;;;;;2183:31:1;;2173:42;;2163:70;;2229:1;2226;2219:12;2244:315;2312:6;2320;2373:2;2361:9;2352:7;2348:23;2344:32;2341:52;;;2389:1;2386;2379:12;2341:52;2428:9;2415:23;2447:31;2472:5;2447:31;:::i;:::-;2497:5;2549:2;2534:18;;;;2521:32;;-1:-1:-1;;;2244:315:1:o;2746:316::-;2823:6;2831;2839;2892:2;2880:9;2871:7;2867:23;2863:32;2860:52;;;2908:1;2905;2898:12;2860:52;-1:-1:-1;;2931:23:1;;;3001:2;2986:18;;2973:32;;-1:-1:-1;3052:2:1;3037:18;;;3024:32;;2746:316;-1:-1:-1;2746:316:1:o;3067:456::-;3144:6;3152;3160;3213:2;3201:9;3192:7;3188:23;3184:32;3181:52;;;3229:1;3226;3219:12;3181:52;3268:9;3255:23;3287:31;3312:5;3287:31;:::i;:::-;3337:5;-1:-1:-1;3394:2:1;3379:18;;3366:32;3407:33;3366:32;3407:33;:::i;:::-;3067:456;;3459:7;;-1:-1:-1;;;3513:2:1;3498:18;;;;3485:32;;3067:456::o;3528:315::-;3596:6;3604;3657:2;3645:9;3636:7;3632:23;3628:32;3625:52;;;3673:1;3670;3663:12;3625:52;3709:9;3696:23;3686:33;;3769:2;3758:9;3754:18;3741:32;3782:31;3807:5;3782:31;:::i;:::-;3832:5;3822:15;;;3528:315;;;;;:::o;3848:247::-;3907:6;3960:2;3948:9;3939:7;3935:23;3931:32;3928:52;;;3976:1;3973;3966:12;3928:52;4015:9;4002:23;4034:31;4059:5;4034:31;:::i;4100:632::-;4271:2;4323:21;;;4393:13;;4296:18;;;4415:22;;;4242:4;;4271:2;4494:15;;;;4468:2;4453:18;;;4242:4;4537:169;4551:6;4548:1;4545:13;4537:169;;;4612:13;;4600:26;;4681:15;;;;4646:12;;;;4573:1;4566:9;4537:169;;;-1:-1:-1;4723:3:1;;4100:632;-1:-1:-1;;;;;;4100:632:1:o;4737:118::-;4823:5;4816:13;4809:21;4802:5;4799:32;4789:60;;4845:1;4842;4835:12;4860:382;4925:6;4933;4986:2;4974:9;4965:7;4961:23;4957:32;4954:52;;;5002:1;4999;4992:12;4954:52;5041:9;5028:23;5060:31;5085:5;5060:31;:::i;:::-;5110:5;-1:-1:-1;5167:2:1;5152:18;;5139:32;5180:30;5139:32;5180:30;:::i;5247:248::-;5315:6;5323;5376:2;5364:9;5355:7;5351:23;5347:32;5344:52;;;5392:1;5389;5382:12;5344:52;-1:-1:-1;;5415:23:1;;;5485:2;5470:18;;;5457:32;;-1:-1:-1;5247:248:1:o;5500:127::-;5561:10;5556:3;5552:20;5549:1;5542:31;5592:4;5589:1;5582:15;5616:4;5613:1;5606:15;5632:275;5703:2;5697:9;5768:2;5749:13;;-1:-1:-1;;5745:27:1;5733:40;;5803:18;5788:34;;5824:22;;;5785:62;5782:88;;;5850:18;;:::i;:::-;5886:2;5879:22;5632:275;;-1:-1:-1;5632:275:1:o;5912:1108::-;6007:6;6015;6023;6031;6084:3;6072:9;6063:7;6059:23;6055:33;6052:53;;;6101:1;6098;6091:12;6052:53;6140:9;6127:23;6159:31;6184:5;6159:31;:::i;:::-;6209:5;-1:-1:-1;6233:2:1;6272:18;;;6259:32;6300:33;6259:32;6300:33;:::i;:::-;6352:7;-1:-1:-1;6406:2:1;6391:18;;6378:32;;-1:-1:-1;6461:2:1;6446:18;;6433:32;6484:18;6514:14;;;6511:34;;;6541:1;6538;6531:12;6511:34;6579:6;6568:9;6564:22;6554:32;;6624:7;6617:4;6613:2;6609:13;6605:27;6595:55;;6646:1;6643;6636:12;6595:55;6682:2;6669:16;6704:2;6700;6697:10;6694:36;;;6710:18;;:::i;:::-;6752:53;6795:2;6776:13;;-1:-1:-1;;6772:27:1;6768:36;;6752:53;:::i;:::-;6739:66;;6828:2;6821:5;6814:17;6868:7;6863:2;6858;6854;6850:11;6846:20;6843:33;6840:53;;;6889:1;6886;6879:12;6840:53;6944:2;6939;6935;6931:11;6926:2;6919:5;6915:14;6902:45;6988:1;6983:2;6978;6971:5;6967:14;6963:23;6956:34;;7009:5;6999:15;;;;;5912:1108;;;;;;;:::o;7025:241::-;7081:6;7134:2;7122:9;7113:7;7109:23;7105:32;7102:52;;;7150:1;7147;7140:12;7102:52;7189:9;7176:23;7208:28;7230:5;7208:28;:::i;7271:383::-;7348:6;7356;7364;7417:2;7405:9;7396:7;7392:23;7388:32;7385:52;;;7433:1;7430;7423:12;7385:52;7472:9;7459:23;7491:31;7516:5;7491:31;:::i;:::-;7541:5;7593:2;7578:18;;7565:32;;-1:-1:-1;7644:2:1;7629:18;;;7616:32;;7271:383;-1:-1:-1;;;7271:383:1:o;7659:712::-;7713:5;7766:3;7759:4;7751:6;7747:17;7743:27;7733:55;;7784:1;7781;7774:12;7733:55;7820:6;7807:20;7846:4;7869:18;7865:2;7862:26;7859:52;;;7891:18;;:::i;:::-;7937:2;7934:1;7930:10;7960:28;7984:2;7980;7976:11;7960:28;:::i;:::-;8022:15;;;8092;;;8088:24;;;8053:12;;;;8124:15;;;8121:35;;;8152:1;8149;8142:12;8121:35;8188:2;8180:6;8176:15;8165:26;;8200:142;8216:6;8211:3;8208:15;8200:142;;;8282:17;;8270:30;;8233:12;;;;8320;;;;8200:142;;;8360:5;7659:712;-1:-1:-1;;;;;;;7659:712:1:o;8376:348::-;8460:6;8513:2;8501:9;8492:7;8488:23;8484:32;8481:52;;;8529:1;8526;8519:12;8481:52;8569:9;8556:23;8602:18;8594:6;8591:30;8588:50;;;8634:1;8631;8624:12;8588:50;8657:61;8710:7;8701:6;8690:9;8686:22;8657:61;:::i;8729:388::-;8797:6;8805;8858:2;8846:9;8837:7;8833:23;8829:32;8826:52;;;8874:1;8871;8864:12;8826:52;8913:9;8900:23;8932:31;8957:5;8932:31;:::i;:::-;8982:5;-1:-1:-1;9039:2:1;9024:18;;9011:32;9052:33;9011:32;9052:33;:::i;9122:416::-;9215:6;9223;9276:2;9264:9;9255:7;9251:23;9247:32;9244:52;;;9292:1;9289;9282:12;9244:52;9328:9;9315:23;9305:33;;9389:2;9378:9;9374:18;9361:32;9416:18;9408:6;9405:30;9402:50;;;9448:1;9445;9438:12;9402:50;9471:61;9524:7;9515:6;9504:9;9500:22;9471:61;:::i;:::-;9461:71;;;9122:416;;;;;:::o;9543:127::-;9604:10;9599:3;9595:20;9592:1;9585:31;9635:4;9632:1;9625:15;9659:4;9656:1;9649:15;9675:127;9736:10;9731:3;9727:20;9724:1;9717:31;9767:4;9764:1;9757:15;9791:4;9788:1;9781:15;9807:120;9847:1;9873;9863:35;;9878:18;;:::i;:::-;-1:-1:-1;9912:9:1;;9807:120::o;9932:168::-;10005:9;;;10036;;10053:15;;;10047:22;;10033:37;10023:71;;10074:18;;:::i;10792:125::-;10857:9;;;10878:10;;;10875:36;;;10891:18;;:::i;10922:338::-;11124:2;11106:21;;;11163:2;11143:18;;;11136:30;-1:-1:-1;;;11197:2:1;11182:18;;11175:44;11251:2;11236:18;;10922:338::o;11265:128::-;11332:9;;;11353:11;;;11350:37;;;11367:18;;:::i;11398:135::-;11437:3;11458:17;;;11455:43;;11478:18;;:::i;:::-;-1:-1:-1;11525:1:1;11514:13;;11398:135::o;11538:380::-;11617:1;11613:12;;;;11660;;;11681:61;;11735:4;11727:6;11723:17;11713:27;;11681:61;11788:2;11780:6;11777:14;11757:18;11754:38;11751:161;;11834:10;11829:3;11825:20;11822:1;11815:31;11869:4;11866:1;11859:15;11897:4;11894:1;11887:15;11751:161;;11538:380;;;:::o;11923:411::-;12125:2;12107:21;;;12164:2;12144:18;;;12137:30;12203:34;12198:2;12183:18;;12176:62;-1:-1:-1;;;12269:2:1;12254:18;;12247:45;12324:3;12309:19;;11923:411::o;13036:332::-;13238:2;13220:21;;;13277:1;13257:18;;;13250:29;-1:-1:-1;;;13310:2:1;13295:18;;13288:39;13359:2;13344:18;;13036:332::o;13373:127::-;13434:10;13429:3;13425:20;13422:1;13415:31;13465:4;13462:1;13455:15;13489:4;13486:1;13479:15;13841:251;13911:6;13964:2;13952:9;13943:7;13939:23;13935:32;13932:52;;;13980:1;13977;13970:12;13932:52;14012:9;14006:16;14031:31;14056:5;14031:31;:::i;14579:198::-;14621:3;14659:5;14653:12;14674:65;14732:6;14727:3;14720:4;14713:5;14709:16;14674:65;:::i;:::-;14755:16;;;;;14579:198;-1:-1:-1;;14579:198:1:o;14900:1322::-;15177:3;15206:1;15239:6;15233:13;15269:1;15289;15316:9;15313:1;15309:17;15299:27;;15376:1;15365:9;15361:17;15397:18;15387:61;;15441:4;15433:6;15429:17;15419:27;;15387:61;15467:2;15515;15507:6;15504:14;15484:18;15481:38;15478:161;;15561:10;15556:3;15552:20;15549:1;15542:31;15596:4;15593:1;15586:15;15624:4;15621:1;15614:15;15478:161;15655:18;15682:133;;;;15829:1;15824:320;;;;15648:496;;15682:133;-1:-1:-1;;15715:24:1;;15703:37;;15788:14;;15781:22;15769:35;;15760:45;;;-1:-1:-1;15682:133:1;;15824:320;14526:1;14519:14;;;14563:4;14550:18;;15919:1;15933:165;15947:6;15944:1;15941:13;15933:165;;;16025:14;;16012:11;;;16005:35;16068:16;;;;15962:10;;15933:165;;;15937:3;;16127:6;16122:3;16118:16;16111:23;;15648:496;;;;;;;16160:56;16185:30;16211:3;16203:6;16185:30;:::i;:::-;-1:-1:-1;;;14842:20:1;;14887:1;14878:11;;14782:113;16160:56;16153:63;14900:1322;-1:-1:-1;;;;;14900:1322:1:o;17691:112::-;17723:1;17749;17739:35;;17754:18;;:::i;:::-;-1:-1:-1;17788:9:1;;17691:112::o;17808:500::-;-1:-1:-1;;;;;18077:15:1;;;18059:34;;18129:15;;18124:2;18109:18;;18102:43;18176:2;18161:18;;18154:34;;;18224:3;18219:2;18204:18;;18197:31;;;18002:4;;18245:57;;18282:19;;18274:6;18245:57;:::i;:::-;18237:65;17808:500;-1:-1:-1;;;;;;17808:500:1:o;18313:249::-;18382:6;18435:2;18423:9;18414:7;18410:23;18406:32;18403:52;;;18451:1;18448;18441:12;18403:52;18483:9;18477:16;18502:30;18526:5;18502:30;:::i;18911:245::-;18978:6;19031:2;19019:9;19010:7;19006:23;19002:32;18999:52;;;19047:1;19044;19037:12;18999:52;19079:9;19073:16;19098:28;19120:5;19098:28;:::i

Swarm Source

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