ETH Price: $3,269.68 (+0.71%)
Gas: 1 Gwei

Token

FlippeningNFT (FLIP)
 

Overview

Max Total Supply

0 FLIP

Holders

17

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
4 FLIP
0x04f90b643c46a581293e5580B9259ef3ce259963
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:
ERC721

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-30
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;


interface AggregatorV3Interface {

    function decimals() external view returns (uint8);
    function description() external view returns (string memory);
    function version() external view returns (uint256);

    // getRoundData and latestRoundData should both raise "No data present"
    // if they do not have data to report, instead of returning unset values
    // which could be misinterpreted as actual reported values.
    function getRoundData(uint80 _roundId)
    external
    view
    returns (
        uint80 roundId,
        int256 answer,
        uint256 startedAt,
        uint256 updatedAt,
        uint80 answeredInRound
    );
    function latestRoundData()
    external
    view
    returns (
        uint80 roundId,
        int256 answer,
        uint256 startedAt,
        uint256 updatedAt,
        uint80 answeredInRound
    );

}

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);

}

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
      * @dev Safely transfers `tokenId` token from `from` to `to`.
      *
      * Requirements:
      *
      * - `from` cannot be the zero address.
      * - `to` cannot be the zero address.
      * - `tokenId` token must exist and be owned by `from`.
      * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
      * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
      *
      * Emits a {Transfer} event.
      */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}


/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant alphabet = "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);
    }

}

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {

    using Strings for uint256;

    AggregatorV3Interface internal priceFeed;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to owner address
    mapping (uint256 => address) private _owners;

    // Mapping owner address to token count
    mapping (address => uint256) private _balances;

    // Mapping tokenId to month
    mapping (uint256 => uint8) private _tokenMonths;

    // 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;

    // How many NFTs have been issued for each period;
    mapping (uint8 => uint16) public madePerPeriod;


    // unix time stamps in seconds for each month for the next 50 months
    // startTimes[49] means that you are predicting no flippening in the next 4 years
    // GMT Time
    uint32[] public startTimes = [1619827200, 1622505600, 1625097600, 1627776000, 1630454400, 1633046400,
    1635724800, 1638320400, 1640998800, 1643677200, 1646096400, 1648771200, 1651363200, 1654041600, 1656633600, 1659312000,
    1661990400, 1664582400, 1667260800, 1669856400, 1672534800, 1675213200, 1677632400, 1680307200, 1682899200, 1685577600,
    1688169600, 1690848000, 1693526400, 1696118400, 1698796800, 1701392400, 1704070800, 1706749200, 1709254800, 1711929600,
    1714521600, 1717200000, 1719792000, 1722470400, 1725148800, 1727740800, 1730419200, 1733014800, 1735693200, 1738371600,
    1740790800, 1743465600, 1746057600, 1748736000];


	// prices[x] represents the price of the xth token purchased that month in wei
    uint64[] public prices = [10000000000000000
    , 12500000000000000
    , 15000000000000000
    , 17500000000000000
    , 20000000000000000
    , 25000000000000000
    , 30000000000000000
    , 35000000000000000
    , 40000000000000000
    , 47500000000000000
    , 55000000000000000
    , 62500000000000000
    , 70000000000000000
    , 80000000000000000
    , 90000000000000000
    , 100000000000000000
    , 110000000000000000
    , 122500000000000000
    , 135000000000000000
    , 147500000000000000
    , 160000000000000000
    , 175000000000000000
    , 190000000000000000
    , 205000000000000000
    , 220000000000000000
    , 237500000000000000
    , 255000000000000000
    , 272500000000000000
    , 290000000000000000
    , 310000000000000000
    , 310000000000000000
    ];

   
    uint256 public numTokens = 0;

    // Which NFTs have already claimed their prize
    mapping (uint256 => bool) idsClaimed;

    // How Many NFTs have successfully claimed their prizes
    uint8 tokenClaimCount;

    address payable contractOwner;

    // The unix timestamp of when the flippening has occured
    // and the contract has been called, or 0.
    uint64 public flippeningTime = 0;

    // Amount [in wei] currently payable to winners
    uint256 public payoutBalance = 0;

    // Amount to be paid to devs and artists
    uint256 public artistBalance = 0;

	// Address of gitcoin's multisig wallet
	// gitcoin balance can only be sent to this address.
    address payable gitcoinMatchingMultiSig =  payable (0xde21F729137C5Af1b01d73aF1dC21eFfa2B8a0d6);

    // Amount [in wei] currently payable to gitcoin matching funds
    uint256 public gitcoinBalance = 0;
    
    // historical amount [in wei] already paid to gitcoin matching funds
    uint256 public gitcoinHistorical = 0;

    //price where ETH market cap flips Btc
    // This is how many wei can be bought for 1 btc
    int256 flippeningRatio = 6179713906000000000;

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor () {
        _name = "FlippeningNFT";
        _symbol = "FLIP";

        // https://data.chain.link/btc-eth
		// Mainnet chainlink address
		// https://etherscan.io/address/0xdeb288F737066589598e9214E782fa5A8eD689e8
        priceFeed = AggregatorV3Interface(0xdeb288F737066589598e9214E782fa5A8eD689e8);
        contractOwner = payable(msg.sender);
    }


    function getLatestPrice() public view returns (int) {
        (
        uint80 roundID,
        int price,
        uint startedAt,
        uint timeStamp,
        uint80 answeredInRound
        ) = priceFeed.latestRoundData();
        return price;
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    function monthOf(uint256 tokenId) public view returns (uint8) {
        return _tokenMonths[tokenId];
    }

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

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0
        ? string(abi.encodePacked(baseURI, tokenId.toString()))
        : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "https://www.ethflippening.com/uri/";
    }

    function createNFT(uint8 period) public payable {

        // Calculate the price and make sure they have sent enough
        require(msg.value >= prices[madePerPeriod[period]], 'You need to send at least the current price');

        // Make sure that the maximum number of tokens have not already been created for that period.
        require(madePerPeriod[period] < 31, 'Max tokens for that period already minted');

        // Tokens can no longer be minted after the flippening has been recorded
        require(flippeningTime == 0, 'Tokens must be created before flippening is recorded');
        
        // Only 50 periods are available
        require(period < 50, 'Only 50 months are available');

        // Create the token
        _mint(msg.sender, numTokens);

        // Update token month
        _tokenMonths[numTokens] = period;

        // Increment
        numTokens ++;

        // Update number per period
        madePerPeriod[period] ++;

        // Handle money sent
        payoutBalance = payoutBalance + msg.value * 45 / 100;
        gitcoinBalance = gitcoinBalance + msg.value * 6 / 100;
        artistBalance = artistBalance + msg.value * 49 / 100;
    }


    // This function is called when someone claims a prize
    // but can also be called by anyone to record the event
    // without claiming.
    function recordFlippening() public {
        int256 ratio = getLatestPrice();
     
       

        require(flippeningTime == 0, 'Flippening has already been recorded');

        // Check if the flippening has happened via the ratio
        // if so, record the current time
        if (ratio <= flippeningRatio) {
            flippeningTime = uint64(block.timestamp);
        }

        // Record the current time if we have already passed the end
        // and no flippening has occured
        if (flippeningTime == 0 && ratio > flippeningRatio && uint32(block.timestamp) > uint32(startTimes[49]) ) {
            flippeningTime = uint64(block.timestamp);
        }
    }


    function tokenClaimed(uint256 tokenId) public view returns(bool)  {
        return idsClaimed[tokenId];
    }

    function claimPrize(uint256 tokenId) public {

        require(msg.sender == ownerOf(tokenId), 'Only the token owner may claim');

        require(idsClaimed[tokenId] == false, 'This token has already claimed the prize');

        // Check if flippening has occured
        // If so, set timestamp
        if (flippeningTime == 0) {
            recordFlippening();
        }

        // Make sure the token is in the correct period
        // Either flippening time is greater than start time of the month you picked and less than the month you picked + 1
        // Or, you have picked the last month and the flippening time is greater than this

        require ((flippeningTime > startTimes[_tokenMonths[tokenId]] && flippeningTime < startTimes[_tokenMonths[tokenId] + 1]) ||
            (flippeningTime > startTimes[49] && _tokenMonths[tokenId] == 49), "You have not won");

        idsClaimed[tokenId] = true;

        // Transfer prize amount to token owner
        uint256 weiToSend = payoutBalance / (madePerPeriod[_tokenMonths[tokenId]] - tokenClaimCount);
        tokenClaimCount++;
        payoutBalance = payoutBalance - weiToSend;
    
        address payable winner = payable(msg.sender);
        (bool success, ) = winner.call{value: weiToSend}("");
        require(success, "Transfer failed.");
       
    }


    // Anyone can call this function to send gitcoin's share to their multisig wallet
    // This can be called with any balance, and the caller will be responsible for the
    // gas fee

    function donateToGitcoin() public {
        if (gitcoinBalance > 0) {
            uint256 toSend = gitcoinBalance;
            gitcoinHistorical += gitcoinBalance;
            gitcoinBalance = 0;
            (bool success, ) = gitcoinMatchingMultiSig.call{value: toSend}("");
            require(success, "Transfer failed.");
        }

    }

    // If called by an owner, withdraw the approriate amount
    function withdraw() public {
        require(payable(msg.sender) == contractOwner, 'Only the owner may call this function');
        uint256 toSend = artistBalance;
        artistBalance = 0;
        (bool success, ) = contractOwner.call{value: toSend}("");
        require(success, "Transfer failed.");
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    ///**
    // * @dev See {IERC721-safeTransferFrom}.k

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
        _transfer(from, to, tokenId);

    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }


    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

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

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"artistBalance","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":"claimPrize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"period","type":"uint8"}],"name":"createNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"donateToGitcoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flippeningTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gitcoinBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gitcoinHistorical","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":"uint8","name":"","type":"uint8"}],"name":"madePerPeriod","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"monthOf","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"payoutBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"prices","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recordFlippening","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"startTimes","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6106c060405263608c9a0060809081526360b5788060a0526360dd058060c052636105e40060e05263612ec280610100526361564f806101205263617f2e00610140526361a6c910610160526361cfa790610180526361f886106101a05263621d70106101c05263624640806101e05263626dcd8061020052636296ac00610220526362be3900610240526362e717806102605263630ff6006102805263633783006102a05263636061806102c052636387fc906102e0526363b0db10610300526363d9b990610320526363fea3906103405263642774006103605263644f010061038052636477df806103a05263649f6c806103c0526364c84b006103e0526364f1298061040052636518b680610420526365419500610440526365693010610460526365920e90610480526365baed106104a0526365e128906104c052636609f9006104e05263663186006105005263665a648061052052636681f180610540526366aad000610560526366d3ae80610580526366fb3b806105a0526367241a006105c05263674bb5106105e05263677493906106005263679d7210610620526367c25c10610640526367eb2c8061066052636812b9806106805263683b98006106a052620001d5906009906032620004bc565b50604080516103e081018252662386f26fc100008152662c68af0bb14000602082015266354a6ba7a1800091810191909152663e2c284391c000606082015266470de4df82000060808201526658d15e1762800060a0820152666a94d74f43000060c0820152667c58508723800060e0820152668e1bc9bf04000061010082015266a8c0ff92d4c00061012082015266c3663566a5800061014082015266de0b6b3a76400061016082015266f8b0a10e47000061018082015267011c37937e0800006101a082015267013fbe85edc900006101c082015267016345785d8a00006101e0820152670186cc6acd4b00006102008201526701b33519d8fc40006102208201526701df9dc8e4ad800061024082015267020c0677f05ec0006102608201526702386f26fc10000061028082015267026db992a3b180006102a08201526702a303fe4b5300006102c08201526702d84e69f2f480006102e082015267030d98d59a96000061030082015267034bc4fdde27c000610320820152670389f12621b980006103408201526703c81d4e654b40006103608201526704064976a8dd000061038082015267044d575b885f00006103a082018190526103c0820152620003a590600a90601f62000572565b506000600b819055600d8054600160a81b600160e81b0319169055600e819055600f819055601080546001600160a01b03191673de21f729137c5af1b01d73af1dc21effa2b8a0d617905560118190556012556755c2c10e54abf4006013553480156200041157600080fd5b5060408051808201909152600d8082526c119b1a5c1c195b9a5b99d39195609a1b602090920191825262000448916001916200061d565b50604080518082019091526004808252630464c49560e41b602090920191825262000476916002916200061d565b50600080546001600160a01b03191673deb288f737066589598e9214e782fa5a8ed689e8179055600d80543361010002610100600160a81b0319909116179055620006ee565b82805482825590600052602060002090600701600890048101928215620005605791602002820160005b838211156200052c57835183826101000a81548163ffffffff021916908363ffffffff1602179055509260200192600401602081600301049283019260010302620004e6565b80156200055e5782816101000a81549063ffffffff02191690556004016020816003010492830192600103026200052c565b505b506200056e9291506200069a565b5090565b82805482825590600052602060002090600301600490048101928215620005605791602002820160005b83821115620005e857835183826101000a8154816001600160401b0302191690836001600160401b0316021790555092602001926008016020816007010492830192600103026200059c565b80156200055e5782816101000a8154906001600160401b030219169055600801602081600701049283019260010302620005e8565b8280546200062b90620006b1565b90600052602060002090601f0160209004810192826200064f576000855562000560565b82601f106200066a57805160ff191683800117855562000560565b8280016001018555821562000560579182015b82811115620005605782518255916020019190600101906200067d565b5b808211156200056e57600081556001016200069b565b600181811c90821680620006c657607f821691505b60208210811415620006e857634e487b7160e01b600052602260045260246000fd5b50919050565b61217880620006fe6000396000f3fe6080604052600436106101cd5760003560e01c806370a08231116100f757806397ea41ca11610095578063c3ddaf5711610064578063c3ddaf5714610572578063c87b56dd14610585578063d7098154146105a5578063e985e9c5146105c557600080fd5b806397ea41ca146104fd578063a22cb46514610512578063b88d4fde14610532578063bc31c1c11461055257600080fd5b8063804ca7d9116100d1578063804ca7d9146104a75780638e15f473146104bd5780638e499bcf146104d257806395d89b41146104e857600080fd5b806370a082311461041057806377bbebe6146104305780637f8196291461046557600080fd5b806320b0554e1161016f5780633ccfd60b1161013e5780633ccfd60b146103a55780633f89a4e6146103ba57806342842e0e146103d05780636352211e146103f057600080fd5b806320b0554e146102fb57806323b872dd1461031157806336a500841461033157806336ee1d8d1461037557600080fd5b8063075b74cf116101ab578063075b74cf14610240578063081812fc14610264578063095ea7b31461029c5780631b456127146102bc57600080fd5b80630129fcf0146101d257806301ffc9a7146101e957806306fdde031461021e575b600080fd5b3480156101de57600080fd5b506101e761060e565b005b3480156101f557600080fd5b50610209610204366004611e4a565b6106df565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b50610233610731565b6040516102159190611f29565b34801561024c57600080fd5b50610256600f5481565b604051908152602001610215565b34801561027057600080fd5b5061028461027f366004611e72565b6107c3565b6040516001600160a01b039091168152602001610215565b3480156102a857600080fd5b506101e76102b7366004611e21565b610858565b3480156102c857600080fd5b50600d546102e390600160a81b90046001600160401b031681565b6040516001600160401b039091168152602001610215565b34801561030757600080fd5b50610256600e5481565b34801561031d57600080fd5b506101e761032c366004611cd8565b61096e565b34801561033d57600080fd5b5061036261034c366004611e8a565b60086020526000908152604090205461ffff1681565b60405161ffff9091168152602001610215565b34801561038157600080fd5b50610209610390366004611e72565b6000908152600c602052604090205460ff1690565b3480156103b157600080fd5b506101e76109e9565b3480156103c657600080fd5b5061025660125481565b3480156103dc57600080fd5b506101e76103eb366004611cd8565b610a80565b3480156103fc57600080fd5b5061028461040b366004611e72565b610a9b565b34801561041c57600080fd5b5061025661042b366004611c8c565b610b12565b34801561043c57600080fd5b5061045061044b366004611e72565b610b99565b60405163ffffffff9091168152602001610215565b34801561047157600080fd5b50610495610480366004611e72565b60009081526005602052604090205460ff1690565b60405160ff9091168152602001610215565b3480156104b357600080fd5b5061025660115481565b3480156104c957600080fd5b50610256610bd3565b3480156104de57600080fd5b50610256600b5481565b3480156104f457600080fd5b50610233610c6f565b34801561050957600080fd5b506101e7610c7e565b34801561051e57600080fd5b506101e761052d366004611de7565b610dd3565b34801561053e57600080fd5b506101e761054d366004611d13565b610e98565b34801561055e57600080fd5b506102e361056d366004611e72565b610eaa565b6101e7610580366004611e8a565b610ee7565b34801561059157600080fd5b506102336105a0366004611e72565b6111e9565b3480156105b157600080fd5b506101e76105c0366004611e72565b6112c4565b3480156105d157600080fd5b506102096105e0366004611ca6565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b601154156106dd576011546012805482919060009061062e908490611f5c565b9091555050600060118190556010546040516001600160a01b039091169083905b60006040518083038185875af1925050503d806000811461068c576040519150601f19603f3d011682016040523d82523d6000602084013e610691565b606091505b50509050806106da5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064015b60405180910390fd5b50505b565b60006001600160e01b031982166380ac58cd60e01b148061071057506001600160e01b03198216635b5e139f60e01b145b8061072b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461074090612032565b80601f016020809104026020016040519081016040528092919081815260200182805461076c90612032565b80156107b95780601f1061078e576101008083540402835291602001916107b9565b820191906000526020600020905b81548152906001019060200180831161079c57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b031661083c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106d1565b506000908152600660205260409020546001600160a01b031690565b600061086382610a9b565b9050806001600160a01b0316836001600160a01b031614156108d15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106d1565b336001600160a01b03821614806108ed57506108ed81336105e0565b61095f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106d1565b61096983836116cb565b505050565b6109783382611739565b6109de5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016106d1565b610969838383611830565b600d5461010090046001600160a01b03163314610a565760405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920746865206f776e6572206d61792063616c6c20746869732066756e60448201526431ba34b7b760d91b60648201526084016106d1565b600f8054600091829055600d546040519192916101009091046001600160a01b031690839061064f565b61096983838360405180602001604052806000815250610e98565b6000818152600360205260408120546001600160a01b03168061072b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106d1565b60006001600160a01b038216610b7d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106d1565b506001600160a01b031660009081526004602052604090205490565b60098181548110610ba957600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b60008060008060008060008054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015610c2857600080fd5b505afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190611eab565b50919998505050505050505050565b60606002805461074090612032565b6000610c88610bd3565b600d54909150600160a81b90046001600160401b031615610cf75760405162461bcd60e51b8152602060048201526024808201527f466c697070656e696e672068617320616c7265616479206265656e207265636f6044820152631c99195960e21b60648201526084016106d1565b6013548113610d2657600d805467ffffffffffffffff60a81b1916600160a81b426001600160401b0316021790555b600d54600160a81b90046001600160401b0316158015610d47575060135481135b8015610da557506009603181548110610d7057634e487b7160e01b600052603260045260246000fd5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff164263ffffffff16115b15610dd057600d805467ffffffffffffffff60a81b1916600160a81b426001600160401b0316021790555b50565b6001600160a01b038216331415610e2c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106d1565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ea4848484846119d0565b50505050565b600a8181548110610eba57600080fd5b9060005260206000209060049182820401919006600802915054906101000a90046001600160401b031681565b60ff8116600090815260086020526040902054600a8054909161ffff16908110610f2157634e487b7160e01b600052603260045260246000fd5b6000918252602090912060048204015460039091166008026101000a90046001600160401b0316341015610fab5760405162461bcd60e51b815260206004820152602b60248201527f596f75206e65656420746f2073656e64206174206c656173742074686520637560448201526a7272656e7420707269636560a81b60648201526084016106d1565b60ff8116600090815260086020526040902054601f61ffff909116106110255760405162461bcd60e51b815260206004820152602960248201527f4d617820746f6b656e7320666f72207468617420706572696f6420616c726561604482015268191e481b5a5b9d195960ba1b60648201526084016106d1565b600d54600160a81b90046001600160401b0316156110a25760405162461bcd60e51b815260206004820152603460248201527f546f6b656e73206d7573742062652063726561746564206265666f726520666c6044820152731a5c1c195b9a5b99c81a5cc81c9958dbdc99195960621b60648201526084016106d1565b60328160ff16106110f55760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79203530206d6f6e7468732061726520617661696c61626c650000000060448201526064016106d1565b61110133600b546119db565b600b80546000908152600560205260408120805460ff191660ff85161790558154919061112d8361208f565b909155505060ff81166000908152600860205260408120805461ffff16916111548361206d565b91906101000a81548161ffff021916908361ffff16021790555050606434602d61117e9190611fad565b6111889190611f99565b600e546111959190611f5c565b600e5560646111a5346006611fad565b6111af9190611f99565b6011546111bc9190611f5c565b60115560646111cc346031611fad565b6111d69190611f99565b600f546111e39190611f5c565b600f5550565b6000818152600360205260409020546060906001600160a01b03166112685760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106d1565b6000611272611b1d565b9050600081511161129257604051806020016040528060008152506112bd565b8061129c84611b3d565b6040516020016112ad929190611efa565b6040516020818303038152906040525b9392505050565b6112cd81610a9b565b6001600160a01b0316336001600160a01b03161461132d5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792074686520746f6b656e206f776e6572206d617920636c61696d000060448201526064016106d1565b6000818152600c602052604090205460ff161561139d5760405162461bcd60e51b815260206004820152602860248201527f5468697320746f6b656e2068617320616c726561647920636c61696d656420746044820152676865207072697a6560c01b60648201526084016106d1565b600d54600160a81b90046001600160401b03166113bc576113bc610c7e565b60008181526005602052604090205460098054909160ff169081106113f157634e487b7160e01b600052603260045260246000fd5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16600d60159054906101000a90046001600160401b03166001600160401b03161180156114d257506000818152600560205260409020546009906114649060ff166001611f74565b60ff168154811061148557634e487b7160e01b600052603260045260246000fd5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16600d60159054906101000a90046001600160401b03166001600160401b0316105b80611563575060096031815481106114fa57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16600d60159054906101000a90046001600160401b03166001600160401b0316118015611563575060008181526005602052604090205460ff166031145b6115a25760405162461bcd60e51b815260206004820152601060248201526f2cb7ba903430bb32903737ba103bb7b760811b60448201526064016106d1565b6000818152600c60209081526040808320805460ff19166001179055600d54600583528184205460ff90811685526008909352908320546115eb92919091169061ffff16611fcc565b61ffff16600e546115fc9190611f99565b600d805491925060ff909116906000611614836120aa565b91906101000a81548160ff021916908360ff1602179055505080600e5461163b9190611fef565b600e556040513390600090829084908381818185875af1925050503d8060008114611682576040519150601f19603f3d011682016040523d82523d6000602084013e611687565b606091505b5050905080610ea45760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016106d1565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155819061170082610a9b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166117b25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106d1565b60006117bd83610a9b565b9050806001600160a01b0316846001600160a01b031614806117f85750836001600160a01b03166117ed846107c3565b6001600160a01b0316145b8061182857506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661184382610a9b565b6001600160a01b0316146118ab5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106d1565b6001600160a01b03821661190d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106d1565b6119186000826116cb565b6001600160a01b0383166000908152600460205260408120805460019290611941908490611fef565b90915550506001600160a01b038216600090815260046020526040812080546001929061196f908490611f5c565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ea4848484611830565b6001600160a01b038216611a315760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106d1565b6000818152600360205260409020546001600160a01b031615611a965760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106d1565b6001600160a01b0382166000908152600460205260408120805460019290611abf908490611f5c565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606060405180606001604052806022815260200161212160229139905090565b606081611b615750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b8b5780611b758161208f565b9150611b849050600a83611f99565b9150611b65565b6000816001600160401b03811115611bb357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611bdd576020820181803683370190505b5090505b841561182857611bf2600183611fef565b9150611bff600a866120ca565b611c0a906030611f5c565b60f81b818381518110611c2d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c4f600a86611f99565b9450611be1565b80356001600160a01b0381168114611c6d57600080fd5b919050565b805169ffffffffffffffffffff81168114611c6d57600080fd5b600060208284031215611c9d578081fd5b6112bd82611c56565b60008060408385031215611cb8578081fd5b611cc183611c56565b9150611ccf60208401611c56565b90509250929050565b600080600060608486031215611cec578081fd5b611cf584611c56565b9250611d0360208501611c56565b9150604084013590509250925092565b60008060008060808587031215611d28578081fd5b611d3185611c56565b9350611d3f60208601611c56565b92506040850135915060608501356001600160401b0380821115611d61578283fd5b818701915087601f830112611d74578283fd5b813581811115611d8657611d8661210a565b604051601f8201601f19908116603f01168101908382118183101715611dae57611dae61210a565b816040528281528a6020848701011115611dc6578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215611df9578182fd5b611e0283611c56565b915060208301358015158114611e16578182fd5b809150509250929050565b60008060408385031215611e33578182fd5b611e3c83611c56565b946020939093013593505050565b600060208284031215611e5b578081fd5b81356001600160e01b0319811681146112bd578182fd5b600060208284031215611e83578081fd5b5035919050565b600060208284031215611e9b578081fd5b813560ff811681146112bd578182fd5b600080600080600060a08688031215611ec2578081fd5b611ecb86611c72565b9450602086015193506040860151925060608601519150611eee60808701611c72565b90509295509295909350565b60008351611f0c818460208801612006565b835190830190611f20818360208801612006565b01949350505050565b6020815260008251806020840152611f48816040850160208701612006565b601f01601f19169190910160400192915050565b60008219821115611f6f57611f6f6120de565b500190565b600060ff821660ff84168060ff03821115611f9157611f916120de565b019392505050565b600082611fa857611fa86120f4565b500490565b6000816000190483118215151615611fc757611fc76120de565b500290565b600061ffff83811690831681811015611fe757611fe76120de565b039392505050565b600082821015612001576120016120de565b500390565b60005b83811015612021578181015183820152602001612009565b83811115610ea45750506000910152565b600181811c9082168061204657607f821691505b6020821081141561206757634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff80831681811415612085576120856120de565b6001019392505050565b60006000198214156120a3576120a36120de565b5060010190565b600060ff821660ff8114156120c1576120c16120de565b60010192915050565b6000826120d9576120d96120f4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe68747470733a2f2f7777772e657468666c697070656e696e672e636f6d2f7572692fa26469706673582212204317d2af5b6969290c5440160f0112582dc901033f6f195e5a97df9ada23d58864736f6c63430008040033

Deployed Bytecode

0x6080604052600436106101cd5760003560e01c806370a08231116100f757806397ea41ca11610095578063c3ddaf5711610064578063c3ddaf5714610572578063c87b56dd14610585578063d7098154146105a5578063e985e9c5146105c557600080fd5b806397ea41ca146104fd578063a22cb46514610512578063b88d4fde14610532578063bc31c1c11461055257600080fd5b8063804ca7d9116100d1578063804ca7d9146104a75780638e15f473146104bd5780638e499bcf146104d257806395d89b41146104e857600080fd5b806370a082311461041057806377bbebe6146104305780637f8196291461046557600080fd5b806320b0554e1161016f5780633ccfd60b1161013e5780633ccfd60b146103a55780633f89a4e6146103ba57806342842e0e146103d05780636352211e146103f057600080fd5b806320b0554e146102fb57806323b872dd1461031157806336a500841461033157806336ee1d8d1461037557600080fd5b8063075b74cf116101ab578063075b74cf14610240578063081812fc14610264578063095ea7b31461029c5780631b456127146102bc57600080fd5b80630129fcf0146101d257806301ffc9a7146101e957806306fdde031461021e575b600080fd5b3480156101de57600080fd5b506101e761060e565b005b3480156101f557600080fd5b50610209610204366004611e4a565b6106df565b60405190151581526020015b60405180910390f35b34801561022a57600080fd5b50610233610731565b6040516102159190611f29565b34801561024c57600080fd5b50610256600f5481565b604051908152602001610215565b34801561027057600080fd5b5061028461027f366004611e72565b6107c3565b6040516001600160a01b039091168152602001610215565b3480156102a857600080fd5b506101e76102b7366004611e21565b610858565b3480156102c857600080fd5b50600d546102e390600160a81b90046001600160401b031681565b6040516001600160401b039091168152602001610215565b34801561030757600080fd5b50610256600e5481565b34801561031d57600080fd5b506101e761032c366004611cd8565b61096e565b34801561033d57600080fd5b5061036261034c366004611e8a565b60086020526000908152604090205461ffff1681565b60405161ffff9091168152602001610215565b34801561038157600080fd5b50610209610390366004611e72565b6000908152600c602052604090205460ff1690565b3480156103b157600080fd5b506101e76109e9565b3480156103c657600080fd5b5061025660125481565b3480156103dc57600080fd5b506101e76103eb366004611cd8565b610a80565b3480156103fc57600080fd5b5061028461040b366004611e72565b610a9b565b34801561041c57600080fd5b5061025661042b366004611c8c565b610b12565b34801561043c57600080fd5b5061045061044b366004611e72565b610b99565b60405163ffffffff9091168152602001610215565b34801561047157600080fd5b50610495610480366004611e72565b60009081526005602052604090205460ff1690565b60405160ff9091168152602001610215565b3480156104b357600080fd5b5061025660115481565b3480156104c957600080fd5b50610256610bd3565b3480156104de57600080fd5b50610256600b5481565b3480156104f457600080fd5b50610233610c6f565b34801561050957600080fd5b506101e7610c7e565b34801561051e57600080fd5b506101e761052d366004611de7565b610dd3565b34801561053e57600080fd5b506101e761054d366004611d13565b610e98565b34801561055e57600080fd5b506102e361056d366004611e72565b610eaa565b6101e7610580366004611e8a565b610ee7565b34801561059157600080fd5b506102336105a0366004611e72565b6111e9565b3480156105b157600080fd5b506101e76105c0366004611e72565b6112c4565b3480156105d157600080fd5b506102096105e0366004611ca6565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b601154156106dd576011546012805482919060009061062e908490611f5c565b9091555050600060118190556010546040516001600160a01b039091169083905b60006040518083038185875af1925050503d806000811461068c576040519150601f19603f3d011682016040523d82523d6000602084013e610691565b606091505b50509050806106da5760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064015b60405180910390fd5b50505b565b60006001600160e01b031982166380ac58cd60e01b148061071057506001600160e01b03198216635b5e139f60e01b145b8061072b57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60606001805461074090612032565b80601f016020809104026020016040519081016040528092919081815260200182805461076c90612032565b80156107b95780601f1061078e576101008083540402835291602001916107b9565b820191906000526020600020905b81548152906001019060200180831161079c57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b031661083c5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106d1565b506000908152600660205260409020546001600160a01b031690565b600061086382610a9b565b9050806001600160a01b0316836001600160a01b031614156108d15760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084016106d1565b336001600160a01b03821614806108ed57506108ed81336105e0565b61095f5760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c000000000000000060648201526084016106d1565b61096983836116cb565b505050565b6109783382611739565b6109de5760405162461bcd60e51b815260206004820152603160248201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6044820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b60648201526084016106d1565b610969838383611830565b600d5461010090046001600160a01b03163314610a565760405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920746865206f776e6572206d61792063616c6c20746869732066756e60448201526431ba34b7b760d91b60648201526084016106d1565b600f8054600091829055600d546040519192916101009091046001600160a01b031690839061064f565b61096983838360405180602001604052806000815250610e98565b6000818152600360205260408120546001600160a01b03168061072b5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b60648201526084016106d1565b60006001600160a01b038216610b7d5760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b60648201526084016106d1565b506001600160a01b031660009081526004602052604090205490565b60098181548110610ba957600080fd5b9060005260206000209060089182820401919006600402915054906101000a900463ffffffff1681565b60008060008060008060008054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b158015610c2857600080fd5b505afa158015610c3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c609190611eab565b50919998505050505050505050565b60606002805461074090612032565b6000610c88610bd3565b600d54909150600160a81b90046001600160401b031615610cf75760405162461bcd60e51b8152602060048201526024808201527f466c697070656e696e672068617320616c7265616479206265656e207265636f6044820152631c99195960e21b60648201526084016106d1565b6013548113610d2657600d805467ffffffffffffffff60a81b1916600160a81b426001600160401b0316021790555b600d54600160a81b90046001600160401b0316158015610d47575060135481135b8015610da557506009603181548110610d7057634e487b7160e01b600052603260045260246000fd5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff164263ffffffff16115b15610dd057600d805467ffffffffffffffff60a81b1916600160a81b426001600160401b0316021790555b50565b6001600160a01b038216331415610e2c5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c65720000000000000060448201526064016106d1565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b610ea4848484846119d0565b50505050565b600a8181548110610eba57600080fd5b9060005260206000209060049182820401919006600802915054906101000a90046001600160401b031681565b60ff8116600090815260086020526040902054600a8054909161ffff16908110610f2157634e487b7160e01b600052603260045260246000fd5b6000918252602090912060048204015460039091166008026101000a90046001600160401b0316341015610fab5760405162461bcd60e51b815260206004820152602b60248201527f596f75206e65656420746f2073656e64206174206c656173742074686520637560448201526a7272656e7420707269636560a81b60648201526084016106d1565b60ff8116600090815260086020526040902054601f61ffff909116106110255760405162461bcd60e51b815260206004820152602960248201527f4d617820746f6b656e7320666f72207468617420706572696f6420616c726561604482015268191e481b5a5b9d195960ba1b60648201526084016106d1565b600d54600160a81b90046001600160401b0316156110a25760405162461bcd60e51b815260206004820152603460248201527f546f6b656e73206d7573742062652063726561746564206265666f726520666c6044820152731a5c1c195b9a5b99c81a5cc81c9958dbdc99195960621b60648201526084016106d1565b60328160ff16106110f55760405162461bcd60e51b815260206004820152601c60248201527f4f6e6c79203530206d6f6e7468732061726520617661696c61626c650000000060448201526064016106d1565b61110133600b546119db565b600b80546000908152600560205260408120805460ff191660ff85161790558154919061112d8361208f565b909155505060ff81166000908152600860205260408120805461ffff16916111548361206d565b91906101000a81548161ffff021916908361ffff16021790555050606434602d61117e9190611fad565b6111889190611f99565b600e546111959190611f5c565b600e5560646111a5346006611fad565b6111af9190611f99565b6011546111bc9190611f5c565b60115560646111cc346031611fad565b6111d69190611f99565b600f546111e39190611f5c565b600f5550565b6000818152600360205260409020546060906001600160a01b03166112685760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b60648201526084016106d1565b6000611272611b1d565b9050600081511161129257604051806020016040528060008152506112bd565b8061129c84611b3d565b6040516020016112ad929190611efa565b6040516020818303038152906040525b9392505050565b6112cd81610a9b565b6001600160a01b0316336001600160a01b03161461132d5760405162461bcd60e51b815260206004820152601e60248201527f4f6e6c792074686520746f6b656e206f776e6572206d617920636c61696d000060448201526064016106d1565b6000818152600c602052604090205460ff161561139d5760405162461bcd60e51b815260206004820152602860248201527f5468697320746f6b656e2068617320616c726561647920636c61696d656420746044820152676865207072697a6560c01b60648201526084016106d1565b600d54600160a81b90046001600160401b03166113bc576113bc610c7e565b60008181526005602052604090205460098054909160ff169081106113f157634e487b7160e01b600052603260045260246000fd5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16600d60159054906101000a90046001600160401b03166001600160401b03161180156114d257506000818152600560205260409020546009906114649060ff166001611f74565b60ff168154811061148557634e487b7160e01b600052603260045260246000fd5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16600d60159054906101000a90046001600160401b03166001600160401b0316105b80611563575060096031815481106114fa57634e487b7160e01b600052603260045260246000fd5b90600052602060002090600891828204019190066004029054906101000a900463ffffffff1663ffffffff16600d60159054906101000a90046001600160401b03166001600160401b0316118015611563575060008181526005602052604090205460ff166031145b6115a25760405162461bcd60e51b815260206004820152601060248201526f2cb7ba903430bb32903737ba103bb7b760811b60448201526064016106d1565b6000818152600c60209081526040808320805460ff19166001179055600d54600583528184205460ff90811685526008909352908320546115eb92919091169061ffff16611fcc565b61ffff16600e546115fc9190611f99565b600d805491925060ff909116906000611614836120aa565b91906101000a81548160ff021916908360ff1602179055505080600e5461163b9190611fef565b600e556040513390600090829084908381818185875af1925050503d8060008114611682576040519150601f19603f3d011682016040523d82523d6000602084013e611687565b606091505b5050905080610ea45760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b60448201526064016106d1565b600081815260066020526040902080546001600160a01b0319166001600160a01b038416908117909155819061170082610a9b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000818152600360205260408120546001600160a01b03166117b25760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084016106d1565b60006117bd83610a9b565b9050806001600160a01b0316846001600160a01b031614806117f85750836001600160a01b03166117ed846107c3565b6001600160a01b0316145b8061182857506001600160a01b0380821660009081526007602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661184382610a9b565b6001600160a01b0316146118ab5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b60648201526084016106d1565b6001600160a01b03821661190d5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b60648201526084016106d1565b6119186000826116cb565b6001600160a01b0383166000908152600460205260408120805460019290611941908490611fef565b90915550506001600160a01b038216600090815260046020526040812080546001929061196f908490611f5c565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610ea4848484611830565b6001600160a01b038216611a315760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f206164647265737360448201526064016106d1565b6000818152600360205260409020546001600160a01b031615611a965760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e7465640000000060448201526064016106d1565b6001600160a01b0382166000908152600460205260408120805460019290611abf908490611f5c565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606060405180606001604052806022815260200161212160229139905090565b606081611b615750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611b8b5780611b758161208f565b9150611b849050600a83611f99565b9150611b65565b6000816001600160401b03811115611bb357634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611bdd576020820181803683370190505b5090505b841561182857611bf2600183611fef565b9150611bff600a866120ca565b611c0a906030611f5c565b60f81b818381518110611c2d57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350611c4f600a86611f99565b9450611be1565b80356001600160a01b0381168114611c6d57600080fd5b919050565b805169ffffffffffffffffffff81168114611c6d57600080fd5b600060208284031215611c9d578081fd5b6112bd82611c56565b60008060408385031215611cb8578081fd5b611cc183611c56565b9150611ccf60208401611c56565b90509250929050565b600080600060608486031215611cec578081fd5b611cf584611c56565b9250611d0360208501611c56565b9150604084013590509250925092565b60008060008060808587031215611d28578081fd5b611d3185611c56565b9350611d3f60208601611c56565b92506040850135915060608501356001600160401b0380821115611d61578283fd5b818701915087601f830112611d74578283fd5b813581811115611d8657611d8661210a565b604051601f8201601f19908116603f01168101908382118183101715611dae57611dae61210a565b816040528281528a6020848701011115611dc6578586fd5b82602086016020830137918201602001949094529598949750929550505050565b60008060408385031215611df9578182fd5b611e0283611c56565b915060208301358015158114611e16578182fd5b809150509250929050565b60008060408385031215611e33578182fd5b611e3c83611c56565b946020939093013593505050565b600060208284031215611e5b578081fd5b81356001600160e01b0319811681146112bd578182fd5b600060208284031215611e83578081fd5b5035919050565b600060208284031215611e9b578081fd5b813560ff811681146112bd578182fd5b600080600080600060a08688031215611ec2578081fd5b611ecb86611c72565b9450602086015193506040860151925060608601519150611eee60808701611c72565b90509295509295909350565b60008351611f0c818460208801612006565b835190830190611f20818360208801612006565b01949350505050565b6020815260008251806020840152611f48816040850160208701612006565b601f01601f19169190910160400192915050565b60008219821115611f6f57611f6f6120de565b500190565b600060ff821660ff84168060ff03821115611f9157611f916120de565b019392505050565b600082611fa857611fa86120f4565b500490565b6000816000190483118215151615611fc757611fc76120de565b500290565b600061ffff83811690831681811015611fe757611fe76120de565b039392505050565b600082821015612001576120016120de565b500390565b60005b83811015612021578181015183820152602001612009565b83811115610ea45750506000910152565b600181811c9082168061204657607f821691505b6020821081141561206757634e487b7160e01b600052602260045260246000fd5b50919050565b600061ffff80831681811415612085576120856120de565b6001019392505050565b60006000198214156120a3576120a36120de565b5060010190565b600060ff821660ff8114156120c1576120c16120de565b60010192915050565b6000826120d9576120d96120f4565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fdfe68747470733a2f2f7777772e657468666c697070656e696e672e636f6d2f7572692fa26469706673582212204317d2af5b6969290c5440160f0112582dc901033f6f195e5a97df9ada23d58864736f6c63430008040033

Deployed Bytecode Sourcemap

9893:17084:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20318:351;;;;;;;;;;;;;:::i;:::-;;14558:284;;;;;;;;;;-1:-1:-1;14558:284:0;;;;;:::i;:::-;;:::i;:::-;;;5370:14:1;;5363:22;5345:41;;5333:2;5318:18;14558:284:0;;;;;;;;15599:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13098:32::-;;;;;;;;;;;;;;;;;;;5541:25:1;;;5529:2;5514:18;13098:32:0;5496:76:1;21579:221:0;;;;;;;;;;-1:-1:-1;21579:221:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;5161:32:1;;;5143:51;;5131:2;5116:18;21579:221:0;5098:102:1;21116:397:0;;;;;;;;;;-1:-1:-1;21116:397:0;;;;;:::i;:::-;;:::i;12917:32::-;;;;;;;;;;-1:-1:-1;12917:32:0;;;;-1:-1:-1;;;12917:32:0;;-1:-1:-1;;;;;12917:32:0;;;;;;-1:-1:-1;;;;;15763:31:1;;;15745:50;;15733:2;15718:18;12917:32:0;15700:101:1;13011:32:0;;;;;;;;;;;;;;;;22469:305;;;;;;;;;;-1:-1:-1;22469:305:0;;;;;:::i;:::-;;:::i;10733:46::-;;;;;;;;;;-1:-1:-1;10733:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15203:6:1;15191:19;;;15173:38;;15161:2;15146:18;10733:46:0;15128:89:1;18642:111:0;;;;;;;;;;-1:-1:-1;18642:111:0;;;;;:::i;:::-;18701:4;18726:19;;;:10;:19;;;;;;;;;18642:111;20739:315;;;;;;;;;;;;;:::i;13528:36::-;;;;;;;;;;;;;;;;22905:151;;;;;;;;;;-1:-1:-1;22905:151:0;;;;;:::i;:::-;;:::i;15293:239::-;;;;;;;;;;-1:-1:-1;15293:239:0;;;;;:::i;:::-;;:::i;14906:208::-;;;;;;;;;;-1:-1:-1;14906:208:0;;;;;:::i;:::-;;:::i;10968:654::-;;;;;;;;;;-1:-1:-1;10968:654:0;;;;;:::i;:::-;;:::i;:::-;;;15578:10:1;15566:23;;;15548:42;;15536:2;15521:18;10968:654:0;15503:93:1;15122:109:0;;;;;;;;;;-1:-1:-1;15122:109:0;;;;;:::i;:::-;15177:5;15202:21;;;:12;:21;;;;;;;;;15122:109;;;;15978:4:1;15966:17;;;15948:36;;15936:2;15921:18;15122:109:0;15903:87:1;13408:33:0;;;;;;;;;;;;;;;;14223:263;;;;;;;;;;;;;:::i;12544:28::-;;;;;;;;;;;;;;;;15768:104;;;;;;;;;;;;;:::i;17939:693::-;;;;;;;;;;;;;:::i;21872:295::-;;;;;;;;;;-1:-1:-1;21872:295:0;;;;;:::i;:::-;;:::i;23127:171::-;;;;;;;;;;-1:-1:-1;23127:171:0;;;;;:::i;:::-;;:::i;11714:816::-;;;;;;;;;;-1:-1:-1;11714:816:0;;;;;:::i;:::-;;:::i;16568:1214::-;;;;;;:::i;:::-;;:::i;15943:352::-;;;;;;;;;;-1:-1:-1;15943:352:0;;;;;:::i;:::-;;:::i;18761:1354::-;;;;;;;;;;-1:-1:-1;18761:1354:0;;;;;:::i;:::-;;:::i;22238:164::-;;;;;;;;;;-1:-1:-1;22238:164:0;;;;;:::i;:::-;-1:-1:-1;;;;;22359:25:0;;;22335:4;22359:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22238:164;20318:351;20367:14;;:18;20363:297;;20419:14;;20448:17;:35;;20419:14;;20448:17;20402:14;;20448:35;;20419:14;;20448:35;:::i;:::-;;;;-1:-1:-1;;20515:1:0;20498:14;:18;;;20550:23;;:47;;-1:-1:-1;;;;;20550:23:0;;;;20586:6;;20550:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20531:66;;;20620:7;20612:36;;;;-1:-1:-1;;;20612:36:0;;12517:2:1;20612:36:0;;;12499:21:1;12556:2;12536:18;;;12529:30;-1:-1:-1;;;12575:18:1;;;12568:46;12631:18;;20612:36:0;;;;;;;;;20363:297;;;20318:351::o;14558:284::-;14660:4;-1:-1:-1;;;;;;14684:40:0;;-1:-1:-1;;;14684:40:0;;:101;;-1:-1:-1;;;;;;;14737:48:0;;-1:-1:-1;;;14737:48:0;14684:101;:150;;;-1:-1:-1;;;;;;;;;;2513:40:0;;;14798:36;14677:157;14558:284;-1:-1:-1;;14558:284:0:o;15599:100::-;15653:13;15686:5;15679:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15599:100;:::o;21579:221::-;21655:7;24734:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24734:16:0;21675:73;;;;-1:-1:-1;;;21675:73:0;;10876:2:1;21675:73:0;;;10858:21:1;10915:2;10895:18;;;10888:30;10954:34;10934:18;;;10927:62;-1:-1:-1;;;11005:18:1;;;10998:42;11057:19;;21675:73:0;10848:234:1;21675:73:0;-1:-1:-1;21768:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;21768:24:0;;21579:221::o;21116:397::-;21197:13;21213:23;21228:7;21213:14;:23::i;:::-;21197:39;;21261:5;-1:-1:-1;;;;;21255:11:0;:2;-1:-1:-1;;;;;21255:11:0;;;21247:57;;;;-1:-1:-1;;;21247:57:0;;12115:2:1;21247:57:0;;;12097:21:1;12154:2;12134:18;;;12127:30;12193:34;12173:18;;;12166:62;-1:-1:-1;;;12244:18:1;;;12237:31;12285:19;;21247:57:0;12087:223:1;21247:57:0;7797:10;-1:-1:-1;;;;;21325:21:0;;;;:62;;-1:-1:-1;21350:37:0;21367:5;7797:10;22238:164;:::i;21350:37::-;21317:154;;;;-1:-1:-1;;;21317:154:0;;8924:2:1;21317:154:0;;;8906:21:1;8963:2;8943:18;;;8936:30;9002:34;8982:18;;;8975:62;9073:26;9053:18;;;9046:54;9117:19;;21317:154:0;8896:246:1;21317:154:0;21484:21;21493:2;21497:7;21484:8;:21::i;:::-;21116:397;;;:::o;22469:305::-;22630:41;7797:10;22663:7;22630:18;:41::i;:::-;22622:103;;;;-1:-1:-1;;;22622:103:0;;12862:2:1;22622:103:0;;;12844:21:1;12901:2;12881:18;;;12874:30;12940:34;12920:18;;;12913:62;-1:-1:-1;;;12991:18:1;;;12984:47;13048:19;;22622:103:0;12834:239:1;22622:103:0;22738:28;22748:4;22754:2;22758:7;22738:9;:28::i;20739:315::-;20808:13;;;;;-1:-1:-1;;;;;20808:13:0;20793:10;20785:36;20777:86;;;;-1:-1:-1;;;20777:86:0;;6577:2:1;20777:86:0;;;6559:21:1;6616:2;6596:18;;;6589:30;6655:34;6635:18;;;6628:62;-1:-1:-1;;;6706:18:1;;;6699:35;6751:19;;20777:86:0;6549:227:1;20777:86:0;20891:13;;;20874:14;20915:17;;;;20962:13;;:37;;20891:13;;20874:14;20962:13;;;;-1:-1:-1;;;;;20962:13:0;;20891;;20962:37;4978:14:1;22905:151:0;23009:39;23026:4;23032:2;23036:7;23009:39;;;;;;;;;;;;:16;:39::i;15293:239::-;15365:7;15401:16;;;:7;:16;;;;;;-1:-1:-1;;;;;15401:16:0;15436:19;15428:73;;;;-1:-1:-1;;;15428:73:0;;9760:2:1;15428:73:0;;;9742:21:1;9799:2;9779:18;;;9772:30;9838:34;9818:18;;;9811:62;-1:-1:-1;;;9889:18:1;;;9882:39;9938:19;;15428:73:0;9732:231:1;14906:208:0;14978:7;-1:-1:-1;;;;;15006:19:0;;14998:74;;;;-1:-1:-1;;;14998:74:0;;9349:2:1;14998:74:0;;;9331:21:1;9388:2;9368:18;;;9361:30;9427:34;9407:18;;;9400:62;-1:-1:-1;;;9478:18:1;;;9471:40;9528:19;;14998:74:0;9321:232:1;14998:74:0;-1:-1:-1;;;;;;15090:16:0;;;;;:9;:16;;;;;;;14906:208::o;10968:654::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14223:263::-;14270:3;14297:14;14322:9;14342:14;14367;14392:22;14428:9;;;;;;;;-1:-1:-1;;;;;14428:9:0;-1:-1:-1;;;;;14428:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;14286:169:0;;14223:263;-1:-1:-1;;;;;;;;;14223:263:0:o;15768:104::-;15824:13;15857:7;15850:14;;;;;:::i;17939:693::-;17985:12;18000:16;:14;:16::i;:::-;18053:14;;17985:31;;-1:-1:-1;;;;18053:14:0;;-1:-1:-1;;;;;18053:14:0;:19;18045:68;;;;-1:-1:-1;;;18045:68:0;;14405:2:1;18045:68:0;;;14387:21:1;14444:2;14424:18;;;14417:30;14483:34;14463:18;;;14456:62;-1:-1:-1;;;14534:18:1;;;14527:34;14578:19;;18045:68:0;14377:226:1;18045:68:0;18245:15;;18236:5;:24;18232:97;;18277:14;:40;;-1:-1:-1;;;;18277:40:0;-1:-1:-1;;;18301:15:0;-1:-1:-1;;;;;18277:40:0;;;;;18232:97;18457:14;;-1:-1:-1;;;18457:14:0;;-1:-1:-1;;;;;18457:14:0;:19;:46;;;;;18488:15;;18480:5;:23;18457:46;:98;;;;;18540:10;18551:2;18540:14;;;;;;-1:-1:-1;;;18540:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18507:48;;18514:15;18507:48;;;18457:98;18453:172;;;18573:14;:40;;-1:-1:-1;;;;18573:40:0;-1:-1:-1;;;18597:15:0;-1:-1:-1;;;;;18573:40:0;;;;;18453:172;17939:693;:::o;21872:295::-;-1:-1:-1;;;;;21975:24:0;;7797:10;21975:24;;21967:62;;;;-1:-1:-1;;;21967:62:0;;7745:2:1;21967:62:0;;;7727:21:1;7784:2;7764:18;;;7757:30;7823:27;7803:18;;;7796:55;7868:18;;21967:62:0;7717:175:1;21967:62:0;7797:10;22042:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22042:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22042:53:0;;;;;;;;;;22111:48;;5345:41:1;;;22042:42:0;;7797:10;22111:48;;5318:18:1;22111:48:0;;;;;;;21872:295;;:::o;23127:171::-;23251:39;23265:4;23271:2;23275:7;23284:5;23251:13;:39::i;:::-;23127:171;;;;:::o;11714:816::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11714:816:0;;:::o;16568:1214::-;16725:21;;;;;;;:13;:21;;;;;;16718:6;:29;;:6;;16725:21;;;16718:29;;;;-1:-1:-1;;;16718:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;16718:29:0;16705:9;:42;;16697:98;;;;-1:-1:-1;;;16697:98:0;;8512:2:1;16697:98:0;;;8494:21:1;8551:2;8531:18;;;8524:30;8590:34;8570:18;;;8563:62;-1:-1:-1;;;8641:18:1;;;8634:41;8692:19;;16697:98:0;8484:233:1;16697:98:0;16919:21;;;;;;;:13;:21;;;;;;16943:2;16919:21;;;;:26;16911:80;;;;-1:-1:-1;;;16911:80:0;;6167:2:1;16911:80:0;;;6149:21:1;6206:2;6186:18;;;6179:30;6245:34;6225:18;;;6218:62;-1:-1:-1;;;6296:18:1;;;6289:39;6345:19;;16911:80:0;6139:231:1;16911:80:0;17094:14;;-1:-1:-1;;;17094:14:0;;-1:-1:-1;;;;;17094:14:0;:19;17086:84;;;;-1:-1:-1;;;17086:84:0;;14810:2:1;17086:84:0;;;14792:21:1;14849:2;14829:18;;;14822:30;14888:34;14868:18;;;14861:62;-1:-1:-1;;;14939:18:1;;;14932:50;14999:19;;17086:84:0;14782:242:1;17086:84:0;17250:2;17241:6;:11;;;17233:52;;;;-1:-1:-1;;;17233:52:0;;13689:2:1;17233:52:0;;;13671:21:1;13728:2;13708:18;;;13701:30;13767;13747:18;;;13740:58;13815:18;;17233:52:0;13661:178:1;17233:52:0;17327:28;17333:10;17345:9;;17327:5;:28::i;:::-;17412:9;;;17399:23;;;;:12;:23;;;;;:32;;-1:-1:-1;;17399:32:0;;;;;;;17466:12;;;17412:9;17466:12;;;:::i;:::-;;;;-1:-1:-1;;17528:21:0;;;;;;;:13;:21;;;;;:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;17644:3;17627:9;17639:2;17627:14;;;;:::i;:::-;:20;;;;:::i;:::-;17611:13;;:36;;;;:::i;:::-;17595:13;:52;17708:3;17692:13;:9;17704:1;17692:13;:::i;:::-;:19;;;;:::i;:::-;17675:14;;:36;;;;:::i;:::-;17658:14;:53;17771:3;17754:14;:9;17766:2;17754:14;:::i;:::-;:20;;;;:::i;:::-;17738:13;;:36;;;;:::i;:::-;17722:13;:52;-1:-1:-1;16568:1214:0:o;15943:352::-;24710:4;24734:16;;;:7;:16;;;;;;16016:13;;-1:-1:-1;;;;;24734:16:0;16042:76;;;;-1:-1:-1;;;16042:76:0;;11699:2:1;16042:76:0;;;11681:21:1;11738:2;11718:18;;;11711:30;11777:34;11757:18;;;11750:62;-1:-1:-1;;;11828:18:1;;;11821:45;11883:19;;16042:76:0;11671:237:1;16042:76:0;16131:21;16155:10;:8;:10::i;:::-;16131:34;;16207:1;16189:7;16183:21;:25;:104;;;;;;;;;;;;;;;;;16244:7;16253:18;:7;:16;:18::i;:::-;16227:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;16183:104;16176:111;15943:352;-1:-1:-1;;;15943:352:0:o;18761:1354::-;18840:16;18848:7;18840;:16::i;:::-;-1:-1:-1;;;;;18826:30:0;:10;-1:-1:-1;;;;;18826:30:0;;18818:73;;;;-1:-1:-1;;;18818:73:0;;14046:2:1;18818:73:0;;;14028:21:1;14085:2;14065:18;;;14058:30;14124:32;14104:18;;;14097:60;14174:18;;18818:73:0;14018:180:1;18818:73:0;18912:19;;;;:10;:19;;;;;;;;:28;18904:81;;;;-1:-1:-1;;;18904:81:0;;13280:2:1;18904:81:0;;;13262:21:1;13319:2;13299:18;;;13292:30;13358:34;13338:18;;;13331:62;-1:-1:-1;;;13409:18:1;;;13402:38;13457:19;;18904:81:0;13252:230:1;18904:81:0;19079:14;;-1:-1:-1;;;19079:14:0;;-1:-1:-1;;;;;19079:14:0;19075:70;;19115:18;:16;:18::i;:::-;19471:21;;;;:12;:21;;;;;;19460:10;:33;;:10;;19471:21;;;19460:33;;;;-1:-1:-1;;;19460:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19443:50;;:14;;;;;;;;;-1:-1:-1;;;;;19443:14:0;-1:-1:-1;;;;;19443:50:0;;:108;;;;-1:-1:-1;19525:21:0;;;;:12;:21;;;;;;19514:10;;19525:25;;:21;;;:25;:::i;:::-;19514:37;;;;;;;;-1:-1:-1;;;19514:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19497:54;;:14;;;;;;;;;-1:-1:-1;;;;;19497:14:0;-1:-1:-1;;;;;19497:54:0;;19443:108;19442:191;;;;19587:10;19598:2;19587:14;;;;;;-1:-1:-1;;;19587:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19570:31;;:14;;;;;;;;;-1:-1:-1;;;;;19570:14:0;-1:-1:-1;;;;;19570:31:0;;:62;;;;-1:-1:-1;19605:21:0;;;;:12;:21;;;;;;;;19630:2;19605:27;19570:62;19433:221;;;;-1:-1:-1;;;19433:221:0;;10170:2:1;19433:221:0;;;10152:21:1;10209:2;10189:18;;;10182:30;-1:-1:-1;;;10228:18:1;;;10221:46;10284:18;;19433:221:0;10142:166:1;19433:221:0;19667:19;;;;:10;:19;;;;;;;;:26;;-1:-1:-1;;19667:26:0;19689:4;19667:26;;;19831:15;;19806:12;:21;;;;;;19667:26;19806:21;;;19792:36;;:13;:36;;;;;;;:54;;19831:15;;;;;19792:36;;:54;:::i;:::-;19775:72;;:13;;:72;;;;:::i;:::-;19858:15;:17;;19755:92;;-1:-1:-1;19858:17:0;;;;;:15;:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;19918:9;19902:13;;:25;;;;:::i;:::-;19886:13;:41;20018:33;;19977:10;;19944:22;;19977:10;;20037:9;;19944:22;20018:33;19944:22;20018:33;20037:9;19977:10;20018:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19999:52;;;20070:7;20062:36;;;;-1:-1:-1;;;20062:36:0;;12517:2:1;20062:36:0;;;12499:21:1;12556:2;12536:18;;;12529:30;-1:-1:-1;;;12575:18:1;;;12568:46;12631:18;;20062:36:0;12489:166:1;26800:174:0;26875:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;26875:29:0;-1:-1:-1;;;;;26875:29:0;;;;;;;;:24;;26929:23;26875:24;26929:14;:23::i;:::-;-1:-1:-1;;;;;26920:46:0;;;;;;;;;;;26800:174;;:::o;24939:348::-;25032:4;24734:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24734:16:0;25049:73;;;;-1:-1:-1;;;25049:73:0;;8099:2:1;25049:73:0;;;8081:21:1;8138:2;8118:18;;;8111:30;8177:34;8157:18;;;8150:62;-1:-1:-1;;;8228:18:1;;;8221:42;8280:19;;25049:73:0;8071:234:1;25049:73:0;25133:13;25149:23;25164:7;25149:14;:23::i;:::-;25133:39;;25202:5;-1:-1:-1;;;;;25191:16:0;:7;-1:-1:-1;;;;;25191:16:0;;:51;;;;25235:7;-1:-1:-1;;;;;25211:31:0;:20;25223:7;25211:11;:20::i;:::-;-1:-1:-1;;;;;25211:31:0;;25191:51;:87;;;-1:-1:-1;;;;;;22359:25:0;;;22335:4;22359:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;25246:32;25183:96;24939:348;-1:-1:-1;;;;24939:348:0:o;26190:492::-;26315:4;-1:-1:-1;;;;;26288:31:0;:23;26303:7;26288:14;:23::i;:::-;-1:-1:-1;;;;;26288:31:0;;26280:85;;;;-1:-1:-1;;;26280:85:0;;11289:2:1;26280:85:0;;;11271:21:1;11328:2;11308:18;;;11301:30;11367:34;11347:18;;;11340:62;-1:-1:-1;;;11418:18:1;;;11411:39;11467:19;;26280:85:0;11261:231:1;26280:85:0;-1:-1:-1;;;;;26384:16:0;;26376:65;;;;-1:-1:-1;;;26376:65:0;;7340:2:1;26376:65:0;;;7322:21:1;7379:2;7359:18;;;7352:30;7418:34;7398:18;;;7391:62;-1:-1:-1;;;7469:18:1;;;7462:34;7513:19;;26376:65:0;7312:226:1;26376:65:0;26506:29;26523:1;26527:7;26506:8;:29::i;:::-;-1:-1:-1;;;;;26548:15:0;;;;;;:9;:15;;;;;:20;;26567:1;;26548:15;:20;;26567:1;;26548:20;:::i;:::-;;;;-1:-1:-1;;;;;;;26579:13:0;;;;;;:9;:13;;;;;:18;;26596:1;;26579:13;:18;;26596:1;;26579:18;:::i;:::-;;;;-1:-1:-1;;26608:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;26608:21:0;-1:-1:-1;;;;;26608:21:0;;;;;;;;;26647:27;;26608:16;;26647:27;;;;;;;26190:492;;;:::o;24180:152::-;24294:28;24304:4;24310:2;24314:7;24294:9;:28::i;25529:324::-;-1:-1:-1;;;;;25609:16:0;;25601:61;;;;-1:-1:-1;;;25601:61:0;;10515:2:1;25601:61:0;;;10497:21:1;;;10534:18;;;10527:30;10593:34;10573:18;;;10566:62;10645:18;;25601:61:0;10487:182:1;25601:61:0;24710:4;24734:16;;;:7;:16;;;;;;-1:-1:-1;;;;;24734:16:0;:30;25673:58;;;;-1:-1:-1;;;25673:58:0;;6983:2:1;25673:58:0;;;6965:21:1;7022:2;7002:18;;;6995:30;7061;7041:18;;;7034:58;7109:18;;25673:58:0;6955:178:1;25673:58:0;-1:-1:-1;;;;;25744:13:0;;;;;;:9;:13;;;;;:18;;25761:1;;25744:13;:18;;25761:1;;25744:18;:::i;:::-;;;;-1:-1:-1;;25773:16:0;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;25773:21:0;-1:-1:-1;;;;;25773:21:0;;;;;;;;25812:33;;25773:16;;;25812:33;;25773:16;;25812:33;25529:324;;:::o;16432:128::-;16483:13;16509:43;;;;;;;;;;;;;;;;;;;16432:128;:::o;8287:723::-;8343:13;8564:10;8560:53;;-1:-1:-1;;8591:10:0;;;;;;;;;;;;-1:-1:-1;;;8591:10:0;;;;;8287:723::o;8560:53::-;8638:5;8623:12;8679:78;8686:9;;8679:78;;8712:8;;;;:::i;:::-;;-1:-1:-1;8735:10:0;;-1:-1:-1;8743:2:0;8735:10;;:::i;:::-;;;8679:78;;;8767:19;8799:6;-1:-1:-1;;;;;8789:17:0;;;;;-1:-1:-1;;;8789:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8789:17:0;;8767:39;;8817:154;8824:10;;8817:154;;8851:11;8861:1;8851:11;;:::i;:::-;;-1:-1:-1;8920:10:0;8928:2;8920:5;:10;:::i;:::-;8907:24;;:2;:24;:::i;:::-;8894:39;;8877:6;8884;8877:14;;;;;;-1:-1:-1;;;8877:14:0;;;;;;;;;;;;:56;-1:-1:-1;;;;;8877:56:0;;;;;;;;-1:-1:-1;8948:11:0;8957:2;8948:11;;:::i;:::-;;;8817:154;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;111:2;63:124;;;:::o;192:179::-;270:13;;323:22;312:34;;302:45;;292:2;;361:1;358;351:12;376:196;435:6;488:2;476:9;467:7;463:23;459:32;456:2;;;509:6;501;494:22;456:2;537:29;556:9;537:29;:::i;577:270::-;645:6;653;706:2;694:9;685:7;681:23;677:32;674:2;;;727:6;719;712:22;674:2;755:29;774:9;755:29;:::i;:::-;745:39;;803:38;837:2;826:9;822:18;803:38;:::i;:::-;793:48;;664:183;;;;;:::o;852:338::-;929:6;937;945;998:2;986:9;977:7;973:23;969:32;966:2;;;1019:6;1011;1004:22;966:2;1047:29;1066:9;1047:29;:::i;:::-;1037:39;;1095:38;1129:2;1118:9;1114:18;1095:38;:::i;:::-;1085:48;;1180:2;1169:9;1165:18;1152:32;1142:42;;956:234;;;;;:::o;1195:1183::-;1290:6;1298;1306;1314;1367:3;1355:9;1346:7;1342:23;1338:33;1335:2;;;1389:6;1381;1374:22;1335:2;1417:29;1436:9;1417:29;:::i;:::-;1407:39;;1465:38;1499:2;1488:9;1484:18;1465:38;:::i;:::-;1455:48;;1550:2;1539:9;1535:18;1522:32;1512:42;;1605:2;1594:9;1590:18;1577:32;-1:-1:-1;;;;;1669:2:1;1661:6;1658:14;1655:2;;;1690:6;1682;1675:22;1655:2;1733:6;1722:9;1718:22;1708:32;;1778:7;1771:4;1767:2;1763:13;1759:27;1749:2;;1805:6;1797;1790:22;1749:2;1846;1833:16;1868:2;1864;1861:10;1858:2;;;1874:18;;:::i;:::-;1949:2;1943:9;1917:2;2003:13;;-1:-1:-1;;1999:22:1;;;2023:2;1995:31;1991:40;1979:53;;;2047:18;;;2067:22;;;2044:46;2041:2;;;2093:18;;:::i;:::-;2133:10;2129:2;2122:22;2168:2;2160:6;2153:18;2208:7;2203:2;2198;2194;2190:11;2186:20;2183:33;2180:2;;;2234:6;2226;2219:22;2180:2;2295;2290;2286;2282:11;2277:2;2269:6;2265:15;2252:46;2318:15;;;2335:2;2314:24;2307:40;;;;1325:1053;;;;-1:-1:-1;1325:1053:1;;-1:-1:-1;;;;1325:1053:1:o;2383:367::-;2448:6;2456;2509:2;2497:9;2488:7;2484:23;2480:32;2477:2;;;2530:6;2522;2515:22;2477:2;2558:29;2577:9;2558:29;:::i;:::-;2548:39;;2637:2;2626:9;2622:18;2609:32;2684:5;2677:13;2670:21;2663:5;2660:32;2650:2;;2711:6;2703;2696:22;2650:2;2739:5;2729:15;;;2467:283;;;;;:::o;2755:264::-;2823:6;2831;2884:2;2872:9;2863:7;2859:23;2855:32;2852:2;;;2905:6;2897;2890:22;2852:2;2933:29;2952:9;2933:29;:::i;:::-;2923:39;3009:2;2994:18;;;;2981:32;;-1:-1:-1;;;2842:177:1:o;3024:306::-;3082:6;3135:2;3123:9;3114:7;3110:23;3106:32;3103:2;;;3156:6;3148;3141:22;3103:2;3187:23;;-1:-1:-1;;;;;;3239:32:1;;3229:43;;3219:2;;3291:6;3283;3276:22;3335:190;3394:6;3447:2;3435:9;3426:7;3422:23;3418:32;3415:2;;;3468:6;3460;3453:22;3415:2;-1:-1:-1;3496:23:1;;3405:120;-1:-1:-1;3405:120:1:o;3530:289::-;3587:6;3640:2;3628:9;3619:7;3615:23;3611:32;3608:2;;;3661:6;3653;3646:22;3608:2;3705:9;3692:23;3755:4;3748:5;3744:16;3737:5;3734:27;3724:2;;3780:6;3772;3765:22;3824:483;3927:6;3935;3943;3951;3959;4012:3;4000:9;3991:7;3987:23;3983:33;3980:2;;;4034:6;4026;4019:22;3980:2;4062:39;4091:9;4062:39;:::i;:::-;4052:49;;4141:2;4130:9;4126:18;4120:25;4110:35;;4185:2;4174:9;4170:18;4164:25;4154:35;;4229:2;4218:9;4214:18;4208:25;4198:35;;4252:49;4296:3;4285:9;4281:19;4252:49;:::i;:::-;4242:59;;3970:337;;;;;;;;:::o;4312:470::-;4491:3;4529:6;4523:13;4545:53;4591:6;4586:3;4579:4;4571:6;4567:17;4545:53;:::i;:::-;4661:13;;4620:16;;;;4683:57;4661:13;4620:16;4717:4;4705:17;;4683:57;:::i;:::-;4756:20;;4499:283;-1:-1:-1;;;;4499:283:1:o;5577:383::-;5726:2;5715:9;5708:21;5689:4;5758:6;5752:13;5801:6;5796:2;5785:9;5781:18;5774:34;5817:66;5876:6;5871:2;5860:9;5856:18;5851:2;5843:6;5839:15;5817:66;:::i;:::-;5944:2;5923:15;-1:-1:-1;;5919:29:1;5904:45;;;;5951:2;5900:54;;5698:262;-1:-1:-1;;5698:262:1:o;15995:128::-;16035:3;16066:1;16062:6;16059:1;16056:13;16053:2;;;16072:18;;:::i;:::-;-1:-1:-1;16108:9:1;;16043:80::o;16128:204::-;16166:3;16202:4;16199:1;16195:12;16234:4;16231:1;16227:12;16269:3;16263:4;16259:14;16254:3;16251:23;16248:2;;;16277:18;;:::i;:::-;16313:13;;16174:158;-1:-1:-1;;;16174:158:1:o;16337:120::-;16377:1;16403;16393:2;;16408:18;;:::i;:::-;-1:-1:-1;16442:9:1;;16383:74::o;16462:168::-;16502:7;16568:1;16564;16560:6;16556:14;16553:1;16550:21;16545:1;16538:9;16531:17;16527:45;16524:2;;;16575:18;;:::i;:::-;-1:-1:-1;16615:9:1;;16514:116::o;16635:217::-;16674:4;16703:6;16759:10;;;;16729;;16781:12;;;16778:2;;;16796:18;;:::i;:::-;16833:13;;16683:169;-1:-1:-1;;;16683:169:1:o;16857:125::-;16897:4;16925:1;16922;16919:8;16916:2;;;16930:18;;:::i;:::-;-1:-1:-1;16967:9:1;;16906:76::o;16987:258::-;17059:1;17069:113;17083:6;17080:1;17077:13;17069:113;;;17159:11;;;17153:18;17140:11;;;17133:39;17105:2;17098:10;17069:113;;;17200:6;17197:1;17194:13;17191:2;;;-1:-1:-1;;17235:1:1;17217:16;;17210:27;17040:205::o;17250:380::-;17329:1;17325:12;;;;17372;;;17393:2;;17447:4;17439:6;17435:17;17425:27;;17393:2;17500;17492:6;17489:14;17469:18;17466:38;17463:2;;;17546:10;17541:3;17537:20;17534:1;17527:31;17581:4;17578:1;17571:15;17609:4;17606:1;17599:15;17463:2;;17305:325;;;:::o;17635:197::-;17673:3;17701:6;17742:2;17735:5;17731:14;17769:2;17760:7;17757:15;17754:2;;;17775:18;;:::i;:::-;17824:1;17811:15;;17681:151;-1:-1:-1;;;17681:151:1:o;17837:135::-;17876:3;-1:-1:-1;;17897:17:1;;17894:2;;;17917:18;;:::i;:::-;-1:-1:-1;17964:1:1;17953:13;;17884:88::o;17977:175::-;18014:3;18058:4;18051:5;18047:16;18087:4;18078:7;18075:17;18072:2;;;18095:18;;:::i;:::-;18144:1;18131:15;;18022:130;-1:-1:-1;;18022:130:1:o;18157:112::-;18189:1;18215;18205:2;;18220:18;;:::i;:::-;-1:-1:-1;18254:9:1;;18195:74::o;18274:127::-;18335:10;18330:3;18326:20;18323:1;18316:31;18366:4;18363:1;18356:15;18390:4;18387:1;18380:15;18406:127;18467:10;18462:3;18458:20;18455:1;18448:31;18498:4;18495:1;18488:15;18522:4;18519:1;18512:15;18538:127;18599:10;18594:3;18590:20;18587:1;18580:31;18630:4;18627:1;18620:15;18654:4;18651:1;18644:15

Swarm Source

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