BNB Price: $622.87 (+2.74%)
 

Overview

Max Total Supply

38,100PT

Holders

31

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
OKX: DEX Token Approval 5
Balance
0.75 PT

Value
$0.00
0x2c34a2fb1d0b4f55de51e1d0bdefaddce6b7cdd6
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Pteridophyta_now

Compiler Version
v0.8.30+commit.73712a01

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at BscScan.com on 2025-06-17
*/

// File: @openzeppelin/[email protected]/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

// File: @openzeppelin/[email protected]/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/[email protected]/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @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) {
        return msg.data;
    }
}

// File: @openzeppelin/[email protected]/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

// File: @openzeppelin/[email protected]/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: pteridophyta.sol


pragma solidity ^0.8.20;



contract Pteridophyta_now is ERC20, Ownable {
    address public immutable developer;
    uint256 public lastUnlockBlock;
    
    // 解锁配置
    uint256 public constant UNLOCK_INTERVAL = 7200; // 7200 区块 ≈ 3 小时
    uint256 public constant UNLOCK_AMOUNT = 100 * 10**18; // 100 枚代币
    uint256 public constant USER_REWARD_PERCENT = 15; // 0.15% (15/10000)
    uint256 public constant MIN_TRANSFER_AMOUNT = 10 * 10**18; // 最小挖矿转账 10 PT
    uint256 public constant UNLOCK_FEE = 0.0002 ether; // 尝试手续费 0.0002 BNB
    
    // 状态跟踪
    uint256 public totalUnlocked;
    uint256 public totalUserRewards;
    uint256 public totalBNBFeeCollected;
    
    // BNB 支付记录
    struct BNBFeePayment {
        address payer;
        uint256 blockNumber;
        uint256 fee;
    }
    BNBFeePayment[] public recentBNBFeePayments;
    uint256 public constant BNB_PAYMENTS_REQUIRED = 3; // 需要 3 笔 BNB 支付触发奖励
    
    // 伪随机数种子
    uint256 private nonce;
    
    // 解锁事件
    event TokensUnlocked(
        address indexed trigger, 
        uint256 blockNumber, 
        uint256 totalUnlocked, 
        uint256 userReward,
        uint256 bnbFee
    );
    // 尝试支付事件
    event AttemptFeePaid(
        address indexed payer,
        uint256 bnbFee,
        bool rewardTriggered
    );

    constructor(address _developer) ERC20("Pteridophyta Token", "PT") Ownable() {
        require(_developer != address(0), "Invalid developer address");
        developer = _developer; 
        lastUnlockBlock = block.number;
        _mint(_developer, 5_000 * 10**18); // 初始铸造
    }

    // 伪随机选择函数
    function _randomSelect(uint256 maxIndex) private returns (uint256) {
        if (maxIndex == 0) return 0;
        nonce++;
        return uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, nonce, msg.sender))) % maxIndex;
    }

    // 用户支付 0.0002 BNB 触发奖励
    function payFeeToUnlock() external payable {
        require(msg.value >= UNLOCK_FEE, "Insufficient BNB fee");

        // 记录 BNB 支付
        recentBNBFeePayments.push(BNBFeePayment({
            payer: msg.sender,
            blockNumber: block.number,
            fee: msg.value
        }));
        totalBNBFeeCollected += msg.value;

        // 转移 BNB 给开发者
        (bool sent, ) = developer.call{value: msg.value}("");
        require(sent, "BNB transfer failed");

        // 检查是否达到 3 笔支付
        bool rewardTriggered = recentBNBFeePayments.length >= BNB_PAYMENTS_REQUIRED;
        emit AttemptFeePaid(msg.sender, msg.value, rewardTriggered);

        // 触发奖励
        if (rewardTriggered) {
            // 随机选择支付者
            uint256 randomIndex = _randomSelect(recentBNBFeePayments.length);
            address randomBNBRecipient = recentBNBFeePayments[randomIndex].payer;

            // 检查是否满足正常解锁周期
            bool isNormalUnlock = block.number >= lastUnlockBlock + UNLOCK_INTERVAL;
            _distributeBNBReward(randomBNBRecipient, msg.value, isNormalUnlock);

            // 清空 BNB 支付记录
            delete recentBNBFeePayments;
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);
        if (from == address(0) || to == address(0)) {
            return; // 铸造或销毁不触发解锁
        }
        if (amount < MIN_TRANSFER_AMOUNT) {
            return; // 低于 10 PT 不触发解锁
        }
        // 通过转账触发解锁
        if (block.number >= lastUnlockBlock + UNLOCK_INTERVAL) {
            _checkAndUnlock(msg.sender, 0);
        }
    }

    function _checkAndUnlock(address trigger, uint256 bnbFee) private {
        uint256 blocksPassed = block.number - lastUnlockBlock;
        if (blocksPassed >= UNLOCK_INTERVAL) {
            uint256 unlockCount = blocksPassed / UNLOCK_INTERVAL;
            uint256 totalUnlock = unlockCount * UNLOCK_AMOUNT;
            
            lastUnlockBlock = block.number;
            uint256 userReward = totalUnlock * USER_REWARD_PERCENT / 10000; // 0.15%
            uint256 developerAmount = totalUnlock - userReward;
            
            _mint(trigger, userReward);
            _mint(developer, developerAmount);
            
            totalUnlocked += totalUnlock;
            totalUserRewards += userReward;
            
            emit TokensUnlocked(trigger, block.number, totalUnlock, userReward, bnbFee);
        }
    }

    function _distributeBNBReward(address recipient, uint256 bnbFee, bool isNormalUnlock) private {
        uint256 totalUnlock;
        uint256 userReward;
        uint256 developerAmount;

        if (isNormalUnlock) {
            // 正常解锁
            uint256 blocksPassed = block.number - lastUnlockBlock;
            uint256 unlockCount = blocksPassed / UNLOCK_INTERVAL;
            totalUnlock = unlockCount * UNLOCK_AMOUNT;
            lastUnlockBlock = block.number;

            userReward = totalUnlock * USER_REWARD_PERCENT / 10000; // 0.15%
            developerAmount = totalUnlock - userReward;
        } else {
            // 特殊解锁
            totalUnlock = UNLOCK_AMOUNT; // 100 PT
            userReward = totalUnlock * USER_REWARD_PERCENT / 10000; // 0.15%
            developerAmount = totalUnlock - userReward;
        }

        // 铸造奖励
        _mint(recipient, userReward);
        _mint(developer, developerAmount);

        // 更新状态
        totalUnlocked += totalUnlock;
        totalUserRewards += userReward;

        // 发出事件
        emit TokensUnlocked(recipient, block.number, totalUnlock, userReward, bnbFee);
    }

    function unlockStatus() public view returns (
        uint256 nextUnlockBlock,
        uint256 blocksLeft,
        uint256 timeLeft,
        uint256 nextUnlockAmount,
        uint256 userReward,
        uint256 unlockFee,
        uint256 bnbPaymentsLeft
    ) {
        nextUnlockBlock = lastUnlockBlock + UNLOCK_INTERVAL;
        blocksLeft = block.number >= nextUnlockBlock ? 0 : nextUnlockBlock - block.number;
        timeLeft = blocksLeft * 3; // BSC 平均 3 秒一区块
        nextUnlockAmount = UNLOCK_AMOUNT;
        userReward = UNLOCK_AMOUNT * USER_REWARD_PERCENT / 10000; // 0.15%
        unlockFee = UNLOCK_FEE;
        bnbPaymentsLeft = recentBNBFeePayments.length >= BNB_PAYMENTS_REQUIRED ? 0 : BNB_PAYMENTS_REQUIRED - recentBNBFeePayments.length;
    }

    function globalStats() public view returns (
        uint256 _totalUnlocked,
        uint256 _totalUserRewards,
        uint256 _totalBNBFeeCollected,
        uint256 currentTotalSupply
    ) {
        _totalUnlocked = totalUnlocked;
        _totalUserRewards = totalUserRewards;
        _totalBNBFeeCollected = totalBNBFeeCollected;
        currentTotalSupply = totalSupply();
    }

    function withdrawBNB() external onlyOwner {
        uint256 balance = address(this).balance;
        if (balance > 0) {
            (bool sent, ) = msg.sender.call{value: balance}("");
            require(sent, "BNB withdrawal failed");
        }
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"_developer","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"payer","type":"address"},{"indexed":false,"internalType":"uint256","name":"bnbFee","type":"uint256"},{"indexed":false,"internalType":"bool","name":"rewardTriggered","type":"bool"}],"name":"AttemptFeePaid","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":"trigger","type":"address"},{"indexed":false,"internalType":"uint256","name":"blockNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalUnlocked","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"userReward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbFee","type":"uint256"}],"name":"TokensUnlocked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BNB_PAYMENTS_REQUIRED","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_TRANSFER_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNLOCK_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNLOCK_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNLOCK_INTERVAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USER_REWARD_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalStats","outputs":[{"internalType":"uint256","name":"_totalUnlocked","type":"uint256"},{"internalType":"uint256","name":"_totalUserRewards","type":"uint256"},{"internalType":"uint256","name":"_totalBNBFeeCollected","type":"uint256"},{"internalType":"uint256","name":"currentTotalSupply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastUnlockBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"payFeeToUnlock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"recentBNBFeePayments","outputs":[{"internalType":"address","name":"payer","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBNBFeeCollected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUnlocked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUserRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unlockStatus","outputs":[{"internalType":"uint256","name":"nextUnlockBlock","type":"uint256"},{"internalType":"uint256","name":"blocksLeft","type":"uint256"},{"internalType":"uint256","name":"timeLeft","type":"uint256"},{"internalType":"uint256","name":"nextUnlockAmount","type":"uint256"},{"internalType":"uint256","name":"userReward","type":"uint256"},{"internalType":"uint256","name":"unlockFee","type":"uint256"},{"internalType":"uint256","name":"bnbPaymentsLeft","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawBNB","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801561000f575f5ffd5b5060405161352f38038061352f8339818101604052810190610031919061060c565b6040518060400160405280601281526020017f5074657269646f706879746120546f6b656e00000000000000000000000000008152506040518060400160405280600281526020017f505400000000000000000000000000000000000000000000000000000000000081525081600390816100ac9190610874565b5080600490816100bc9190610874565b5050506100db6100d06101a460201b60201c565b6101ab60201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610149576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101409061099d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250504360068190555061019e8169010f0cf064dd5920000061026e60201b60201c565b50610bbf565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102d390610a05565b60405180910390fd5b6102ed5f83836103c860201b60201c565b8060025f8282546102fe9190610a50565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103ab9190610a92565b60405180910390a36103c45f838361047e60201b60201c565b5050565b6103d983838361048360201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061043e57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61047957678ac7230489e80000811061047957611c206006546104619190610a50565b431061047857610477335f61048860201b60201c565b5b5b505050565b505050565b505050565b5f600654436104979190610aab565b9050611c2081106105a9575f611c20826104b19190610b0b565b90505f68056bc75e2d63100000826104c99190610b3b565b9050436006819055505f612710600f836104e39190610b3b565b6104ed9190610b0b565b90505f81836104fc9190610aab565b905061050e878361026e60201b60201c565b6105206080518261026e60201b60201c565b8260075f8282546105319190610a50565b925050819055508160085f8282546105499190610a50565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f2acd471ebaa1f9810a58990e6dfe1d12c2005ae96ac811877c5f2a139b3bf03b4385858a60405161059c9493929190610b7c565b60405180910390a2505050505b505050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6105db826105b2565b9050919050565b6105eb816105d1565b81146105f5575f5ffd5b50565b5f81519050610606816105e2565b92915050565b5f60208284031215610621576106206105ae565b5b5f61062e848285016105f8565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806106b257607f821691505b6020821081036106c5576106c461066e565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106ec565b61073186836106ec565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61077561077061076b84610749565b610752565b610749565b9050919050565b5f819050919050565b61078e8361075b565b6107a261079a8261077c565b8484546106f8565b825550505050565b5f5f905090565b6107b96107aa565b6107c4818484610785565b505050565b5b818110156107e7576107dc5f826107b1565b6001810190506107ca565b5050565b601f82111561082c576107fd816106cb565b610806846106dd565b81016020851015610815578190505b610829610821856106dd565b8301826107c9565b50505b505050565b5f82821c905092915050565b5f61084c5f1984600802610831565b1980831691505092915050565b5f610864838361083d565b9150826002028217905092915050565b61087d82610637565b67ffffffffffffffff81111561089657610895610641565b5b6108a0825461069b565b6108ab8282856107eb565b5f60209050601f8311600181146108dc575f84156108ca578287015190505b6108d48582610859565b86555061093b565b601f1984166108ea866106cb565b5f5b82811015610911578489015182556001820191506020850194506020810190506108ec565b8683101561092e578489015161092a601f89168261083d565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f496e76616c696420646576656c6f7065722061646472657373000000000000005f82015250565b5f610987601983610943565b915061099282610953565b602082019050919050565b5f6020820190508181035f8301526109b48161097b565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6109ef601f83610943565b91506109fa826109bb565b602082019050919050565b5f6020820190508181035f830152610a1c816109e3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610a5a82610749565b9150610a6583610749565b9250828201905080821115610a7d57610a7c610a23565b5b92915050565b610a8c81610749565b82525050565b5f602082019050610aa55f830184610a83565b92915050565b5f610ab582610749565b9150610ac083610749565b9250828203905081811115610ad857610ad7610a23565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610b1582610749565b9150610b2083610749565b925082610b3057610b2f610ade565b5b828204905092915050565b5f610b4582610749565b9150610b5083610749565b9250828202610b5e81610749565b91508282048414831517610b7557610b74610a23565b5b5092915050565b5f608082019050610b8f5f830187610a83565b610b9c6020830186610a83565b610ba96040830185610a83565b610bb66060830184610a83565b95945050505050565b608051612943610bec5f395f8181610c8201528181610eb40152818161173a0152611a7201526129435ff3fe6080604052600436106101d0575f3560e01c80638da5cb5b116100f6578063acde345211610094578063f02c4f6f11610063578063f02c4f6f14610672578063f2fde38b1461069c578063fd8bfafc146106c4578063ff6ff140146106ee576101d7565b8063acde3452146105a1578063ca4b208b146105df578063dd62ed3e14610609578063e4dc4efc14610645576101d7565b8063a457c2d7116100d0578063a457c2d7146104f5578063a4a5e19914610531578063a779d0801461053b578063a9059cbb14610565576101d7565b80638da5cb5b1461047757806395d89b41146104a157806398779c6e146104cb576101d7565b8063395093511161016e5780635ce105211161013d5780635ce10521146103d1578063703341a9146103fb57806370a0823114610425578063715018a614610461576101d7565b806339509351146103175780633c3dbbc71461035357806355482e721461037d5780635ae18744146103a7576101d7565b80631d111d13116101aa5780631d111d131461026b57806323b872dd146102815780632fb9e41f146102bd578063313ce567146102ed576101d7565b806306fdde03146101db578063095ea7b31461020557806318160ddd14610241576101d7565b366101d757005b5f5ffd5b3480156101e6575f5ffd5b506101ef610718565b6040516101fc9190611c00565b60405180910390f35b348015610210575f5ffd5b5061022b60048036038101906102269190611cb1565b6107a8565b6040516102389190611d09565b60405180910390f35b34801561024c575f5ffd5b506102556107ca565b6040516102629190611d31565b60405180910390f35b348015610276575f5ffd5b5061027f6107d3565b005b34801561028c575f5ffd5b506102a760048036038101906102a29190611d4a565b610894565b6040516102b49190611d09565b60405180910390f35b3480156102c8575f5ffd5b506102d16108c2565b6040516102e49796959493929190611d9a565b60405180910390f35b3480156102f8575f5ffd5b50610301610973565b60405161030e9190611e22565b60405180910390f35b348015610322575f5ffd5b5061033d60048036038101906103389190611cb1565b61097b565b60405161034a9190611d09565b60405180910390f35b34801561035e575f5ffd5b506103676109b1565b6040516103749190611d31565b60405180910390f35b348015610388575f5ffd5b506103916109bd565b60405161039e9190611d31565b60405180910390f35b3480156103b2575f5ffd5b506103bb6109c7565b6040516103c89190611d31565b60405180910390f35b3480156103dc575f5ffd5b506103e56109d4565b6040516103f29190611d31565b60405180910390f35b348015610406575f5ffd5b5061040f6109da565b60405161041c9190611d31565b60405180910390f35b348015610430575f5ffd5b5061044b60048036038101906104469190611e3b565b6109e0565b6040516104589190611d31565b60405180910390f35b34801561046c575f5ffd5b50610475610a25565b005b348015610482575f5ffd5b5061048b610a38565b6040516104989190611e75565b60405180910390f35b3480156104ac575f5ffd5b506104b5610a60565b6040516104c29190611c00565b60405180910390f35b3480156104d6575f5ffd5b506104df610af0565b6040516104ec9190611d31565b60405180910390f35b348015610500575f5ffd5b5061051b60048036038101906105169190611cb1565b610af6565b6040516105289190611d09565b60405180910390f35b610539610b6b565b005b348015610546575f5ffd5b5061054f610e36565b60405161055c9190611d31565b60405180910390f35b348015610570575f5ffd5b5061058b60048036038101906105869190611cb1565b610e3c565b6040516105989190611d09565b60405180910390f35b3480156105ac575f5ffd5b506105c760048036038101906105c29190611e8e565b610e5e565b6040516105d693929190611eb9565b60405180910390f35b3480156105ea575f5ffd5b506105f3610eb2565b6040516106009190611e75565b60405180910390f35b348015610614575f5ffd5b5061062f600480360381019061062a9190611eee565b610ed6565b60405161063c9190611d31565b60405180910390f35b348015610650575f5ffd5b50610659610f58565b6040516106699493929190611f2c565b60405180910390f35b34801561067d575f5ffd5b50610686610f7b565b6040516106939190611d31565b60405180910390f35b3480156106a7575f5ffd5b506106c260048036038101906106bd9190611e3b565b610f80565b005b3480156106cf575f5ffd5b506106d8611002565b6040516106e59190611d31565b60405180910390f35b3480156106f9575f5ffd5b50610702611008565b60405161070f9190611d31565b60405180910390f35b60606003805461072790611f9c565b80601f016020809104026020016040519081016040528092919081815260200182805461075390611f9c565b801561079e5780601f106107755761010080835404028352916020019161079e565b820191905f5260205f20905b81548152906001019060200180831161078157829003601f168201915b5050505050905090565b5f5f6107b261100d565b90506107bf818585611014565b600191505092915050565b5f600254905090565b6107db6111d7565b5f4790505f811115610891575f3373ffffffffffffffffffffffffffffffffffffffff168260405161080c90611ff9565b5f6040518083038185875af1925050503d805f8114610846576040519150601f19603f3d011682016040523d82523d5f602084013e61084b565b606091505b505090508061088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690612057565b60405180910390fd5b505b50565b5f5f61089e61100d565b90506108ab858285611255565b6108b68585856112e0565b60019150509392505050565b5f5f5f5f5f5f5f611c206006546108d991906120a2565b9650864310156108f45743876108ef91906120d5565b6108f6565b5f5b95506003866109059190612108565b945068056bc75e2d631000009350612710600f68056bc75e2d6310000061092c9190612108565b6109369190612176565b925065b5e620f4800091506003600a80549050101561096657600a80549050600361096191906120d5565b610968565b5f5b905090919293949596565b5f6012905090565b5f5f61098561100d565b90506109a68185856109978589610ed6565b6109a191906120a2565b611014565b600191505092915050565b678ac7230489e8000081565b65b5e620f4800081565b68056bc75e2d6310000081565b611c2081565b60095481565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610a2d6111d7565b610a365f61154c565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a6f90611f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9b90611f9c565b8015610ae65780601f10610abd57610100808354040283529160200191610ae6565b820191905f5260205f20905b815481529060010190602001808311610ac957829003601f168201915b5050505050905090565b60065481565b5f5f610b0061100d565b90505f610b0d8286610ed6565b905083811015610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4990612216565b60405180910390fd5b610b5f8286868403611014565b60019250505092915050565b65b5e620f48000341015610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab9061227e565b60405180910390fd5b600a60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200143815260200134815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015550503460095f828254610c7891906120a2565b925050819055505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1634604051610cc490611ff9565b5f6040518083038185875af1925050503d805f8114610cfe576040519150601f19603f3d011682016040523d82523d5f602084013e610d03565b606091505b5050905080610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906122e6565b60405180910390fd5b5f6003600a80549050101590503373ffffffffffffffffffffffffffffffffffffffff167f619fea2ee0dcf34bd4b54cc514fefcf3b6581d90b0e9565ebf11c5783a7476bb3483604051610d9c929190612304565b60405180910390a28015610e32575f610db9600a8054905061160f565b90505f600a8281548110610dd057610dcf61232b565b5b905f5260205f2090600302015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f611c20600654610e1191906120a2565b4310159050610e2182348361167a565b600a5f610e2e9190611b25565b5050505b5050565b60075481565b5f5f610e4661100d565b9050610e538185856112e0565b600191505092915050565b600a8181548110610e6d575f80fd5b905f5260205f2090600302015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f5f5f5f600754935060085492506009549150610f736107ca565b905090919293565b600f81565b610f886111d7565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed906123c8565b60405180910390fd5b610fff8161154c565b50565b60085481565b600381565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990612456565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e7906124e4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ca9190611d31565b60405180910390a3505050565b6111df61100d565b73ffffffffffffffffffffffffffffffffffffffff166111fd610a38565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a9061254c565b60405180910390fd5b565b5f6112608484610ed6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112da57818110156112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906125b4565b60405180910390fd5b6112d98484848403611014565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590612642565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b3906126d0565b60405180910390fd5b6113c78383836117eb565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561144a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114419061275e565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115339190611d31565b60405180910390a3611546848484611895565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f820361161f575f9050611675565b600b5f8154809291906116319061277c565b9190505550814244600b54336040516020016116509493929190612828565b604051602081830303815290604052805190602001205f1c6116729190612875565b90505b919050565b5f5f5f83156116f4575f6006544361169291906120d5565b90505f611c20826116a39190612176565b905068056bc75e2d63100000816116ba9190612108565b945043600681905550612710600f866116d39190612108565b6116dd9190612176565b935083856116eb91906120d5565b9250505061172b565b68056bc75e2d631000009250612710600f846117109190612108565b61171a9190612176565b9150818361172891906120d5565b90505b611735868361189a565b61175f7f00000000000000000000000000000000000000000000000000000000000000008261189a565b8260075f82825461177091906120a2565b925050819055508160085f82825461178891906120a2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff167f2acd471ebaa1f9810a58990e6dfe1d12c2005ae96ac811877c5f2a139b3bf03b438585896040516117db9493929190611f2c565b60405180910390a2505050505050565b6117f68383836119e8565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061185b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61189057678ac7230489e80000811061189057611c2060065461187e91906120a2565b431061188f5761188e335f6119ed565b5b5b505050565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff906128ef565b60405180910390fd5b6119135f83836117eb565b8060025f82825461192491906120a2565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119d19190611d31565b60405180910390a36119e45f8383611895565b5050565b505050565b5f600654436119fc91906120d5565b9050611c208110611b20575f611c2082611a169190612176565b90505f68056bc75e2d6310000082611a2e9190612108565b9050436006819055505f612710600f83611a489190612108565b611a529190612176565b90505f8183611a6191906120d5565b9050611a6d878361189a565b611a977f00000000000000000000000000000000000000000000000000000000000000008261189a565b8260075f828254611aa891906120a2565b925050819055508160085f828254611ac091906120a2565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f2acd471ebaa1f9810a58990e6dfe1d12c2005ae96ac811877c5f2a139b3bf03b4385858a604051611b139493929190611f2c565b60405180910390a2505050505b505050565b5080545f8255600302905f5260205f2090810190611b439190611b46565b50565b5b80821115611b8c575f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f905550600301611b47565b5090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611bd282611b90565b611bdc8185611b9a565b9350611bec818560208601611baa565b611bf581611bb8565b840191505092915050565b5f6020820190508181035f830152611c188184611bc8565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c4d82611c24565b9050919050565b611c5d81611c43565b8114611c67575f5ffd5b50565b5f81359050611c7881611c54565b92915050565b5f819050919050565b611c9081611c7e565b8114611c9a575f5ffd5b50565b5f81359050611cab81611c87565b92915050565b5f5f60408385031215611cc757611cc6611c20565b5b5f611cd485828601611c6a565b9250506020611ce585828601611c9d565b9150509250929050565b5f8115159050919050565b611d0381611cef565b82525050565b5f602082019050611d1c5f830184611cfa565b92915050565b611d2b81611c7e565b82525050565b5f602082019050611d445f830184611d22565b92915050565b5f5f5f60608486031215611d6157611d60611c20565b5b5f611d6e86828701611c6a565b9350506020611d7f86828701611c6a565b9250506040611d9086828701611c9d565b9150509250925092565b5f60e082019050611dad5f83018a611d22565b611dba6020830189611d22565b611dc76040830188611d22565b611dd46060830187611d22565b611de16080830186611d22565b611dee60a0830185611d22565b611dfb60c0830184611d22565b98975050505050505050565b5f60ff82169050919050565b611e1c81611e07565b82525050565b5f602082019050611e355f830184611e13565b92915050565b5f60208284031215611e5057611e4f611c20565b5b5f611e5d84828501611c6a565b91505092915050565b611e6f81611c43565b82525050565b5f602082019050611e885f830184611e66565b92915050565b5f60208284031215611ea357611ea2611c20565b5b5f611eb084828501611c9d565b91505092915050565b5f606082019050611ecc5f830186611e66565b611ed96020830185611d22565b611ee66040830184611d22565b949350505050565b5f5f60408385031215611f0457611f03611c20565b5b5f611f1185828601611c6a565b9250506020611f2285828601611c6a565b9150509250929050565b5f608082019050611f3f5f830187611d22565b611f4c6020830186611d22565b611f596040830185611d22565b611f666060830184611d22565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611fb357607f821691505b602082108103611fc657611fc5611f6f565b5b50919050565b5f81905092915050565b50565b5f611fe45f83611fcc565b9150611fef82611fd6565b5f82019050919050565b5f61200382611fd9565b9150819050919050565b7f424e42207769746864726177616c206661696c656400000000000000000000005f82015250565b5f612041601583611b9a565b915061204c8261200d565b602082019050919050565b5f6020820190508181035f83015261206e81612035565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6120ac82611c7e565b91506120b783611c7e565b92508282019050808211156120cf576120ce612075565b5b92915050565b5f6120df82611c7e565b91506120ea83611c7e565b925082820390508181111561210257612101612075565b5b92915050565b5f61211282611c7e565b915061211d83611c7e565b925082820261212b81611c7e565b9150828204841483151761214257612141612075565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61218082611c7e565b915061218b83611c7e565b92508261219b5761219a612149565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612200602583611b9a565b915061220b826121a6565b604082019050919050565b5f6020820190508181035f83015261222d816121f4565b9050919050565b7f496e73756666696369656e7420424e42206665650000000000000000000000005f82015250565b5f612268601483611b9a565b915061227382612234565b602082019050919050565b5f6020820190508181035f8301526122958161225c565b9050919050565b7f424e42207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f6122d0601383611b9a565b91506122db8261229c565b602082019050919050565b5f6020820190508181035f8301526122fd816122c4565b9050919050565b5f6040820190506123175f830185611d22565b6123246020830184611cfa565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6123b2602683611b9a565b91506123bd82612358565b604082019050919050565b5f6020820190508181035f8301526123df816123a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612440602483611b9a565b915061244b826123e6565b604082019050919050565b5f6020820190508181035f83015261246d81612434565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6124ce602283611b9a565b91506124d982612474565b604082019050919050565b5f6020820190508181035f8301526124fb816124c2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612536602083611b9a565b915061254182612502565b602082019050919050565b5f6020820190508181035f8301526125638161252a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61259e601d83611b9a565b91506125a98261256a565b602082019050919050565b5f6020820190508181035f8301526125cb81612592565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61262c602583611b9a565b9150612637826125d2565b604082019050919050565b5f6020820190508181035f83015261265981612620565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6126ba602383611b9a565b91506126c582612660565b604082019050919050565b5f6020820190508181035f8301526126e7816126ae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612748602683611b9a565b9150612753826126ee565b604082019050919050565b5f6020820190508181035f8301526127758161273c565b9050919050565b5f61278682611c7e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127b8576127b7612075565b5b600182019050919050565b5f819050919050565b6127dd6127d882611c7e565b6127c3565b82525050565b5f8160601b9050919050565b5f6127f9826127e3565b9050919050565b5f61280a826127ef565b9050919050565b61282261281d82611c43565b612800565b82525050565b5f61283382876127cc565b60208201915061284382866127cc565b60208201915061285382856127cc565b6020820191506128638284612811565b60148201915081905095945050505050565b5f61287f82611c7e565b915061288a83611c7e565b92508261289a57612899612149565b5b828206905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6128d9601f83611b9a565b91506128e4826128a5565b602082019050919050565b5f6020820190508181035f830152612906816128cd565b905091905056fea2646970667358221220058cb1778804912a5a6658cb72278b4cbadcfa97dfdfb424105af5ec9d957b7864736f6c634300081e00330000000000000000000000004fdfcfc03a5416eb5d9b85f4bad282e6dac19783

Deployed Bytecode

0x6080604052600436106101d0575f3560e01c80638da5cb5b116100f6578063acde345211610094578063f02c4f6f11610063578063f02c4f6f14610672578063f2fde38b1461069c578063fd8bfafc146106c4578063ff6ff140146106ee576101d7565b8063acde3452146105a1578063ca4b208b146105df578063dd62ed3e14610609578063e4dc4efc14610645576101d7565b8063a457c2d7116100d0578063a457c2d7146104f5578063a4a5e19914610531578063a779d0801461053b578063a9059cbb14610565576101d7565b80638da5cb5b1461047757806395d89b41146104a157806398779c6e146104cb576101d7565b8063395093511161016e5780635ce105211161013d5780635ce10521146103d1578063703341a9146103fb57806370a0823114610425578063715018a614610461576101d7565b806339509351146103175780633c3dbbc71461035357806355482e721461037d5780635ae18744146103a7576101d7565b80631d111d13116101aa5780631d111d131461026b57806323b872dd146102815780632fb9e41f146102bd578063313ce567146102ed576101d7565b806306fdde03146101db578063095ea7b31461020557806318160ddd14610241576101d7565b366101d757005b5f5ffd5b3480156101e6575f5ffd5b506101ef610718565b6040516101fc9190611c00565b60405180910390f35b348015610210575f5ffd5b5061022b60048036038101906102269190611cb1565b6107a8565b6040516102389190611d09565b60405180910390f35b34801561024c575f5ffd5b506102556107ca565b6040516102629190611d31565b60405180910390f35b348015610276575f5ffd5b5061027f6107d3565b005b34801561028c575f5ffd5b506102a760048036038101906102a29190611d4a565b610894565b6040516102b49190611d09565b60405180910390f35b3480156102c8575f5ffd5b506102d16108c2565b6040516102e49796959493929190611d9a565b60405180910390f35b3480156102f8575f5ffd5b50610301610973565b60405161030e9190611e22565b60405180910390f35b348015610322575f5ffd5b5061033d60048036038101906103389190611cb1565b61097b565b60405161034a9190611d09565b60405180910390f35b34801561035e575f5ffd5b506103676109b1565b6040516103749190611d31565b60405180910390f35b348015610388575f5ffd5b506103916109bd565b60405161039e9190611d31565b60405180910390f35b3480156103b2575f5ffd5b506103bb6109c7565b6040516103c89190611d31565b60405180910390f35b3480156103dc575f5ffd5b506103e56109d4565b6040516103f29190611d31565b60405180910390f35b348015610406575f5ffd5b5061040f6109da565b60405161041c9190611d31565b60405180910390f35b348015610430575f5ffd5b5061044b60048036038101906104469190611e3b565b6109e0565b6040516104589190611d31565b60405180910390f35b34801561046c575f5ffd5b50610475610a25565b005b348015610482575f5ffd5b5061048b610a38565b6040516104989190611e75565b60405180910390f35b3480156104ac575f5ffd5b506104b5610a60565b6040516104c29190611c00565b60405180910390f35b3480156104d6575f5ffd5b506104df610af0565b6040516104ec9190611d31565b60405180910390f35b348015610500575f5ffd5b5061051b60048036038101906105169190611cb1565b610af6565b6040516105289190611d09565b60405180910390f35b610539610b6b565b005b348015610546575f5ffd5b5061054f610e36565b60405161055c9190611d31565b60405180910390f35b348015610570575f5ffd5b5061058b60048036038101906105869190611cb1565b610e3c565b6040516105989190611d09565b60405180910390f35b3480156105ac575f5ffd5b506105c760048036038101906105c29190611e8e565b610e5e565b6040516105d693929190611eb9565b60405180910390f35b3480156105ea575f5ffd5b506105f3610eb2565b6040516106009190611e75565b60405180910390f35b348015610614575f5ffd5b5061062f600480360381019061062a9190611eee565b610ed6565b60405161063c9190611d31565b60405180910390f35b348015610650575f5ffd5b50610659610f58565b6040516106699493929190611f2c565b60405180910390f35b34801561067d575f5ffd5b50610686610f7b565b6040516106939190611d31565b60405180910390f35b3480156106a7575f5ffd5b506106c260048036038101906106bd9190611e3b565b610f80565b005b3480156106cf575f5ffd5b506106d8611002565b6040516106e59190611d31565b60405180910390f35b3480156106f9575f5ffd5b50610702611008565b60405161070f9190611d31565b60405180910390f35b60606003805461072790611f9c565b80601f016020809104026020016040519081016040528092919081815260200182805461075390611f9c565b801561079e5780601f106107755761010080835404028352916020019161079e565b820191905f5260205f20905b81548152906001019060200180831161078157829003601f168201915b5050505050905090565b5f5f6107b261100d565b90506107bf818585611014565b600191505092915050565b5f600254905090565b6107db6111d7565b5f4790505f811115610891575f3373ffffffffffffffffffffffffffffffffffffffff168260405161080c90611ff9565b5f6040518083038185875af1925050503d805f8114610846576040519150601f19603f3d011682016040523d82523d5f602084013e61084b565b606091505b505090508061088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690612057565b60405180910390fd5b505b50565b5f5f61089e61100d565b90506108ab858285611255565b6108b68585856112e0565b60019150509392505050565b5f5f5f5f5f5f5f611c206006546108d991906120a2565b9650864310156108f45743876108ef91906120d5565b6108f6565b5f5b95506003866109059190612108565b945068056bc75e2d631000009350612710600f68056bc75e2d6310000061092c9190612108565b6109369190612176565b925065b5e620f4800091506003600a80549050101561096657600a80549050600361096191906120d5565b610968565b5f5b905090919293949596565b5f6012905090565b5f5f61098561100d565b90506109a68185856109978589610ed6565b6109a191906120a2565b611014565b600191505092915050565b678ac7230489e8000081565b65b5e620f4800081565b68056bc75e2d6310000081565b611c2081565b60095481565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610a2d6111d7565b610a365f61154c565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a6f90611f9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9b90611f9c565b8015610ae65780601f10610abd57610100808354040283529160200191610ae6565b820191905f5260205f20905b815481529060010190602001808311610ac957829003601f168201915b5050505050905090565b60065481565b5f5f610b0061100d565b90505f610b0d8286610ed6565b905083811015610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4990612216565b60405180910390fd5b610b5f8286868403611014565b60019250505092915050565b65b5e620f48000341015610bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bab9061227e565b60405180910390fd5b600a60405180606001604052803373ffffffffffffffffffffffffffffffffffffffff16815260200143815260200134815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015550503460095f828254610c7891906120a2565b925050819055505f7f0000000000000000000000004fdfcfc03a5416eb5d9b85f4bad282e6dac1978373ffffffffffffffffffffffffffffffffffffffff1634604051610cc490611ff9565b5f6040518083038185875af1925050503d805f8114610cfe576040519150601f19603f3d011682016040523d82523d5f602084013e610d03565b606091505b5050905080610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906122e6565b60405180910390fd5b5f6003600a80549050101590503373ffffffffffffffffffffffffffffffffffffffff167f619fea2ee0dcf34bd4b54cc514fefcf3b6581d90b0e9565ebf11c5783a7476bb3483604051610d9c929190612304565b60405180910390a28015610e32575f610db9600a8054905061160f565b90505f600a8281548110610dd057610dcf61232b565b5b905f5260205f2090600302015f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f611c20600654610e1191906120a2565b4310159050610e2182348361167a565b600a5f610e2e9190611b25565b5050505b5050565b60075481565b5f5f610e4661100d565b9050610e538185856112e0565b600191505092915050565b600a8181548110610e6d575f80fd5b905f5260205f2090600302015f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154905083565b7f0000000000000000000000004fdfcfc03a5416eb5d9b85f4bad282e6dac1978381565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f5f5f5f600754935060085492506009549150610f736107ca565b905090919293565b600f81565b610f886111d7565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fed906123c8565b60405180910390fd5b610fff8161154c565b50565b60085481565b600381565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611082576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107990612456565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036110f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e7906124e4565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516111ca9190611d31565b60405180910390a3505050565b6111df61100d565b73ffffffffffffffffffffffffffffffffffffffff166111fd610a38565b73ffffffffffffffffffffffffffffffffffffffff1614611253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124a9061254c565b60405180910390fd5b565b5f6112608484610ed6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146112da57818110156112cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c3906125b4565b60405180910390fd5b6112d98484848403611014565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134590612642565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b3906126d0565b60405180910390fd5b6113c78383836117eb565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561144a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114419061275e565b60405180910390fd5b8181035f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115339190611d31565b60405180910390a3611546848484611895565b50505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f820361161f575f9050611675565b600b5f8154809291906116319061277c565b9190505550814244600b54336040516020016116509493929190612828565b604051602081830303815290604052805190602001205f1c6116729190612875565b90505b919050565b5f5f5f83156116f4575f6006544361169291906120d5565b90505f611c20826116a39190612176565b905068056bc75e2d63100000816116ba9190612108565b945043600681905550612710600f866116d39190612108565b6116dd9190612176565b935083856116eb91906120d5565b9250505061172b565b68056bc75e2d631000009250612710600f846117109190612108565b61171a9190612176565b9150818361172891906120d5565b90505b611735868361189a565b61175f7f0000000000000000000000004fdfcfc03a5416eb5d9b85f4bad282e6dac197838261189a565b8260075f82825461177091906120a2565b925050819055508160085f82825461178891906120a2565b925050819055508573ffffffffffffffffffffffffffffffffffffffff167f2acd471ebaa1f9810a58990e6dfe1d12c2005ae96ac811877c5f2a139b3bf03b438585896040516117db9493929190611f2c565b60405180910390a2505050505050565b6117f68383836119e8565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061185b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61189057678ac7230489e80000811061189057611c2060065461187e91906120a2565b431061188f5761188e335f6119ed565b5b5b505050565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff906128ef565b60405180910390fd5b6119135f83836117eb565b8060025f82825461192491906120a2565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119d19190611d31565b60405180910390a36119e45f8383611895565b5050565b505050565b5f600654436119fc91906120d5565b9050611c208110611b20575f611c2082611a169190612176565b90505f68056bc75e2d6310000082611a2e9190612108565b9050436006819055505f612710600f83611a489190612108565b611a529190612176565b90505f8183611a6191906120d5565b9050611a6d878361189a565b611a977f0000000000000000000000004fdfcfc03a5416eb5d9b85f4bad282e6dac197838261189a565b8260075f828254611aa891906120a2565b925050819055508160085f828254611ac091906120a2565b925050819055508673ffffffffffffffffffffffffffffffffffffffff167f2acd471ebaa1f9810a58990e6dfe1d12c2005ae96ac811877c5f2a139b3bf03b4385858a604051611b139493929190611f2c565b60405180910390a2505050505b505050565b5080545f8255600302905f5260205f2090810190611b439190611b46565b50565b5b80821115611b8c575f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f905550600301611b47565b5090565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611bd282611b90565b611bdc8185611b9a565b9350611bec818560208601611baa565b611bf581611bb8565b840191505092915050565b5f6020820190508181035f830152611c188184611bc8565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611c4d82611c24565b9050919050565b611c5d81611c43565b8114611c67575f5ffd5b50565b5f81359050611c7881611c54565b92915050565b5f819050919050565b611c9081611c7e565b8114611c9a575f5ffd5b50565b5f81359050611cab81611c87565b92915050565b5f5f60408385031215611cc757611cc6611c20565b5b5f611cd485828601611c6a565b9250506020611ce585828601611c9d565b9150509250929050565b5f8115159050919050565b611d0381611cef565b82525050565b5f602082019050611d1c5f830184611cfa565b92915050565b611d2b81611c7e565b82525050565b5f602082019050611d445f830184611d22565b92915050565b5f5f5f60608486031215611d6157611d60611c20565b5b5f611d6e86828701611c6a565b9350506020611d7f86828701611c6a565b9250506040611d9086828701611c9d565b9150509250925092565b5f60e082019050611dad5f83018a611d22565b611dba6020830189611d22565b611dc76040830188611d22565b611dd46060830187611d22565b611de16080830186611d22565b611dee60a0830185611d22565b611dfb60c0830184611d22565b98975050505050505050565b5f60ff82169050919050565b611e1c81611e07565b82525050565b5f602082019050611e355f830184611e13565b92915050565b5f60208284031215611e5057611e4f611c20565b5b5f611e5d84828501611c6a565b91505092915050565b611e6f81611c43565b82525050565b5f602082019050611e885f830184611e66565b92915050565b5f60208284031215611ea357611ea2611c20565b5b5f611eb084828501611c9d565b91505092915050565b5f606082019050611ecc5f830186611e66565b611ed96020830185611d22565b611ee66040830184611d22565b949350505050565b5f5f60408385031215611f0457611f03611c20565b5b5f611f1185828601611c6a565b9250506020611f2285828601611c6a565b9150509250929050565b5f608082019050611f3f5f830187611d22565b611f4c6020830186611d22565b611f596040830185611d22565b611f666060830184611d22565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680611fb357607f821691505b602082108103611fc657611fc5611f6f565b5b50919050565b5f81905092915050565b50565b5f611fe45f83611fcc565b9150611fef82611fd6565b5f82019050919050565b5f61200382611fd9565b9150819050919050565b7f424e42207769746864726177616c206661696c656400000000000000000000005f82015250565b5f612041601583611b9a565b915061204c8261200d565b602082019050919050565b5f6020820190508181035f83015261206e81612035565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6120ac82611c7e565b91506120b783611c7e565b92508282019050808211156120cf576120ce612075565b5b92915050565b5f6120df82611c7e565b91506120ea83611c7e565b925082820390508181111561210257612101612075565b5b92915050565b5f61211282611c7e565b915061211d83611c7e565b925082820261212b81611c7e565b9150828204841483151761214257612141612075565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61218082611c7e565b915061218b83611c7e565b92508261219b5761219a612149565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612200602583611b9a565b915061220b826121a6565b604082019050919050565b5f6020820190508181035f83015261222d816121f4565b9050919050565b7f496e73756666696369656e7420424e42206665650000000000000000000000005f82015250565b5f612268601483611b9a565b915061227382612234565b602082019050919050565b5f6020820190508181035f8301526122958161225c565b9050919050565b7f424e42207472616e73666572206661696c6564000000000000000000000000005f82015250565b5f6122d0601383611b9a565b91506122db8261229c565b602082019050919050565b5f6020820190508181035f8301526122fd816122c4565b9050919050565b5f6040820190506123175f830185611d22565b6123246020830184611cfa565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6123b2602683611b9a565b91506123bd82612358565b604082019050919050565b5f6020820190508181035f8301526123df816123a6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612440602483611b9a565b915061244b826123e6565b604082019050919050565b5f6020820190508181035f83015261246d81612434565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6124ce602283611b9a565b91506124d982612474565b604082019050919050565b5f6020820190508181035f8301526124fb816124c2565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612536602083611b9a565b915061254182612502565b602082019050919050565b5f6020820190508181035f8301526125638161252a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61259e601d83611b9a565b91506125a98261256a565b602082019050919050565b5f6020820190508181035f8301526125cb81612592565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61262c602583611b9a565b9150612637826125d2565b604082019050919050565b5f6020820190508181035f83015261265981612620565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6126ba602383611b9a565b91506126c582612660565b604082019050919050565b5f6020820190508181035f8301526126e7816126ae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612748602683611b9a565b9150612753826126ee565b604082019050919050565b5f6020820190508181035f8301526127758161273c565b9050919050565b5f61278682611c7e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036127b8576127b7612075565b5b600182019050919050565b5f819050919050565b6127dd6127d882611c7e565b6127c3565b82525050565b5f8160601b9050919050565b5f6127f9826127e3565b9050919050565b5f61280a826127ef565b9050919050565b61282261281d82611c43565b612800565b82525050565b5f61283382876127cc565b60208201915061284382866127cc565b60208201915061285382856127cc565b6020820191506128638284612811565b60148201915081905095945050505050565b5f61287f82611c7e565b915061288a83611c7e565b92508261289a57612899612149565b5b828206905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6128d9601f83611b9a565b91506128e4826128a5565b602082019050919050565b5f6020820190508181035f830152612906816128cd565b905091905056fea2646970667358221220058cb1778804912a5a6658cb72278b4cbadcfa97dfdfb424105af5ec9d957b7864736f6c634300081e0033

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

0000000000000000000000004fdfcfc03a5416eb5d9b85f4bad282e6dac19783

-----Decoded View---------------
Arg [0] : _developer (address): 0x4FdFCfc03A5416EB5d9B85F4bad282e6DaC19783

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000004fdfcfc03a5416eb5d9b85f4bad282e6dac19783


Deployed Bytecode Sourcemap

20400:7468:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6645:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9005:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7774:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27570:258;;;;;;;;;;;;;:::i;:::-;;9786:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26375:786;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;7616:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10456:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20788:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20880:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20637:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20556:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21066:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7945:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19520:103;;;;;;;;;;;;;:::i;:::-;;18879:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6864:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20492:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11197:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22454:1285;;;:::i;:::-;;20993:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8278:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21250:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20451:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8534:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27169:393;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;20713:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19778:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21028:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21300:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6645:100;6699:13;6732:5;6725:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6645:100;:::o;9005:201::-;9088:4;9105:13;9121:12;:10;:12::i;:::-;9105:28;;9144:32;9153:5;9160:7;9169:6;9144:8;:32::i;:::-;9194:4;9187:11;;;9005:201;;;;:::o;7774:108::-;7835:7;7862:12;;7855:19;;7774:108;:::o;27570:258::-;18765:13;:11;:13::i;:::-;27623:15:::1;27641:21;27623:39;;27687:1;27677:7;:11;27673:148;;;27706:9;27721:10;:15;;27744:7;27721:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27705:51;;;27779:4;27771:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;27690:131;27673:148;27612:216;27570:258::o:0;9786:261::-;9883:4;9900:15;9918:12;:10;:12::i;:::-;9900:30;;9941:38;9957:4;9963:7;9972:6;9941:15;:38::i;:::-;9990:27;10000:4;10006:2;10010:6;9990:9;:27::i;:::-;10035:4;10028:11;;;9786:261;;;;;:::o;26375:786::-;26430:23;26464:18;26493:16;26520:24;26555:18;26584:17;26612:23;20598:4;26672:15;;:33;;;;:::i;:::-;26654:51;;26745:15;26729:12;:31;;:68;;26785:12;26767:15;:30;;;;:::i;:::-;26729:68;;;26763:1;26729:68;26716:81;;26832:1;26819:10;:14;;;;:::i;:::-;26808:25;;20677:12;26873:32;;26967:5;20759:2;20677:12;26929:35;;;;:::i;:::-;:43;;;;:::i;:::-;26916:56;;20917:12;26992:22;;21348:1;27043:20;:27;;;;:52;;:110;;27126:20;:27;;;;21348:1;27102:51;;;;:::i;:::-;27043:110;;;27098:1;27043:110;27025:128;;26375:786;;;;;;;:::o;7616:93::-;7674:5;7699:2;7692:9;;7616:93;:::o;10456:238::-;10544:4;10561:13;10577:12;:10;:12::i;:::-;10561:28;;10600:64;10609:5;10616:7;10653:10;10625:25;10635:5;10642:7;10625:9;:25::i;:::-;:38;;;;:::i;:::-;10600:8;:64::i;:::-;10682:4;10675:11;;;10456:238;;;;:::o;20788:57::-;20834:11;20788:57;:::o;20880:49::-;20917:12;20880:49;:::o;20637:52::-;20677:12;20637:52;:::o;20556:46::-;20598:4;20556:46;:::o;21066:35::-;;;;:::o;7945:127::-;8019:7;8046:9;:18;8056:7;8046:18;;;;;;;;;;;;;;;;8039:25;;7945:127;;;:::o;19520:103::-;18765:13;:11;:13::i;:::-;19585:30:::1;19612:1;19585:18;:30::i;:::-;19520:103::o:0;18879:87::-;18925:7;18952:6;;;;;;;;;;;18945:13;;18879:87;:::o;6864:104::-;6920:13;6953:7;6946:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6864:104;:::o;20492:30::-;;;;:::o;11197:436::-;11290:4;11307:13;11323:12;:10;:12::i;:::-;11307:28;;11346:24;11373:25;11383:5;11390:7;11373:9;:25::i;:::-;11346:52;;11437:15;11417:16;:35;;11409:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11530:60;11539:5;11546:7;11574:15;11555:16;:34;11530:8;:60::i;:::-;11621:4;11614:11;;;;11197:436;;;;:::o;22454:1285::-;20917:12;22516:9;:23;;22508:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;22607:20;22633:127;;;;;;;;22669:10;22633:127;;;;;;22707:12;22633:127;;;;22739:9;22633:127;;;22607:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22796:9;22772:20;;:33;;;;;;;:::i;:::-;;;;;;;;22855:9;22870;:14;;22892:9;22870:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22854:52;;;22925:4;22917:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;23009:20;21348:1;23032:20;:27;;;;:52;;23009:75;;23115:10;23100:54;;;23127:9;23138:15;23100:54;;;;;;;:::i;:::-;;;;;;;;23196:15;23192:540;;;23266:19;23288:42;23302:20;:27;;;;23288:13;:42::i;:::-;23266:64;;23345:26;23374:20;23395:11;23374:33;;;;;;;;:::i;:::-;;;;;;;;;;;;:39;;;;;;;;;;;;23345:68;;23483:19;20598:4;23521:15;;:33;;;;:::i;:::-;23505:12;:49;;23483:71;;23569:67;23590:18;23610:9;23621:14;23569:20;:67::i;:::-;23700:20;;23693:27;;;;:::i;:::-;23213:519;;;23192:540;22497:1242;;22454:1285::o;20993:28::-;;;;:::o;8278:193::-;8357:4;8374:13;8390:12;:10;:12::i;:::-;8374:28;;8413;8423:5;8430:2;8434:6;8413:9;:28::i;:::-;8459:4;8452:11;;;8278:193;;;;:::o;21250:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20451:34::-;;;:::o;8534:151::-;8623:7;8650:11;:18;8662:5;8650:18;;;;;;;;;;;;;;;:27;8669:7;8650:27;;;;;;;;;;;;;;;;8643:34;;8534:151;;;;:::o;27169:393::-;27223:22;27256:25;27292:29;27332:26;27394:13;;27377:30;;27438:16;;27418:36;;27489:20;;27465:44;;27541:13;:11;:13::i;:::-;27520:34;;27169:393;;;;:::o;20713:48::-;20759:2;20713:48;:::o;19778:201::-;18765:13;:11;:13::i;:::-;19887:1:::1;19867:22;;:8;:22;;::::0;19859:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19943:28;19962:8;19943:18;:28::i;:::-;19778:201:::0;:::o;21028:31::-;;;;:::o;21300:49::-;21348:1;21300:49;:::o;4277:98::-;4330:7;4357:10;4350:17;;4277:98;:::o;15190:346::-;15309:1;15292:19;;:5;:19;;;15284:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15390:1;15371:21;;:7;:21;;;15363:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15474:6;15444:11;:18;15456:5;15444:18;;;;;;;;;;;;;;;:27;15463:7;15444:27;;;;;;;;;;;;;;;:36;;;;15512:7;15496:32;;15505:5;15496:32;;;15521:6;15496:32;;;;;;:::i;:::-;;;;;;;;15190:346;;;:::o;19044:132::-;19119:12;:10;:12::i;:::-;19108:23;;:7;:5;:7::i;:::-;:23;;;19100:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19044:132::o;15827:419::-;15928:24;15955:25;15965:5;15972:7;15955:9;:25::i;:::-;15928:52;;16015:17;15995:16;:37;15991:248;;16077:6;16057:16;:26;;16049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16161:51;16170:5;16177:7;16205:6;16186:16;:25;16161:8;:51::i;:::-;15991:248;15917:329;15827:419;;;:::o;12103:806::-;12216:1;12200:18;;:4;:18;;;12192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12293:1;12279:16;;:2;:16;;;12271:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12348:38;12369:4;12375:2;12379:6;12348:20;:38::i;:::-;12399:19;12421:9;:15;12431:4;12421:15;;;;;;;;;;;;;;;;12399:37;;12470:6;12455:11;:21;;12447:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12587:6;12573:11;:20;12555:9;:15;12565:4;12555:15;;;;;;;;;;;;;;;:38;;;;12790:6;12773:9;:13;12783:2;12773:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12840:2;12825:26;;12834:4;12825:26;;;12844:6;12825:26;;;;;;:::i;:::-;;;;;;;;12864:37;12884:4;12890:2;12894:6;12864:19;:37::i;:::-;12181:728;12103:806;;;:::o;20139:191::-;20213:16;20232:6;;;;;;;;;;;20213:25;;20258:8;20249:6;;:17;;;;;;;;;;;;;;;;;;20313:8;20282:40;;20303:8;20282:40;;;;;;;;;;;;20202:128;20139:191;:::o;22151:250::-;22209:7;22245:1;22233:8;:13;22229:27;;22255:1;22248:8;;;;22229:27;22267:5;;:7;;;;;;;;;:::i;:::-;;;;;;22385:8;22327:15;22344:16;22362:5;;22369:10;22310:70;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22300:81;;;;;;22292:90;;:101;;;;:::i;:::-;22285:108;;22151:250;;;;:::o;25160:1207::-;25265:19;25295:18;25324:23;25364:14;25360:668;;;25424:20;25462:15;;25447:12;:30;;;;:::i;:::-;25424:53;;25492:19;20598:4;25514:12;:30;;;;:::i;:::-;25492:52;;20677:12;25573:11;:27;;;;:::i;:::-;25559:41;;25633:12;25615:15;:30;;;;25711:5;20759:2;25675:11;:33;;;;:::i;:::-;:41;;;;:::i;:::-;25662:54;;25772:10;25758:11;:24;;;;:::i;:::-;25740:42;;25380:414;;25360:668;;;20677:12;25844:27;;25945:5;20759:2;25909:11;:33;;;;:::i;:::-;:41;;;;:::i;:::-;25896:54;;26006:10;25992:11;:24;;;;:::i;:::-;25974:42;;25360:668;26065:28;26071:9;26082:10;26065:5;:28::i;:::-;26104:33;26110:9;26121:15;26104:5;:33::i;:::-;26192:11;26175:13;;:28;;;;;;;:::i;:::-;;;;;;;;26234:10;26214:16;;:30;;;;;;;:::i;:::-;;;;;;;;26302:9;26287:72;;;26313:12;26327:11;26340:10;26352:6;26287:72;;;;;;;;;:::i;:::-;;;;;;;;25254:1113;;;25160:1207;;;:::o;23747:550::-;23856:44;23883:4;23889:2;23893:6;23856:26;:44::i;:::-;23931:1;23915:18;;:4;:18;;;:38;;;;23951:1;23937:16;;:2;:16;;;23915:38;23970:7;23911:111;20834:11;24036:6;:28;24081:7;24032:99;20598:4;24198:15;;:33;;;;:::i;:::-;24182:12;:49;24178:112;;24248:30;24264:10;24276:1;24248:15;:30::i;:::-;24178:112;23747:550;;;;:::o;17541:90::-;;;;:::o;13196:548::-;13299:1;13280:21;;:7;:21;;;13272:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13350:49;13379:1;13383:7;13392:6;13350:20;:49::i;:::-;13428:6;13412:12;;:22;;;;;;;:::i;:::-;;;;;;;;13605:6;13583:9;:18;13593:7;13583:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;13659:7;13638:37;;13655:1;13638:37;;;13668:6;13638:37;;;;;;:::i;:::-;;;;;;;;13688:48;13716:1;13720:7;13729:6;13688:19;:48::i;:::-;13196:548;;:::o;16846:91::-;;;;:::o;24305:847::-;24382:20;24420:15;;24405:12;:30;;;;:::i;:::-;24382:53;;20598:4;24450:12;:31;24446:699;;24498:19;20598:4;24520:12;:30;;;;:::i;:::-;24498:52;;24565:19;20677:12;24587:11;:27;;;;:::i;:::-;24565:49;;24661:12;24643:15;:30;;;;24688:18;24745:5;20759:2;24709:11;:33;;;;:::i;:::-;:41;;;;:::i;:::-;24688:62;;24774:23;24814:10;24800:11;:24;;;;:::i;:::-;24774:50;;24853:26;24859:7;24868:10;24853:5;:26::i;:::-;24894:33;24900:9;24911:15;24894:5;:33::i;:::-;24973:11;24956:13;;:28;;;;;;;:::i;:::-;;;;;;;;25019:10;24999:16;;:30;;;;;;;:::i;:::-;;;;;;;;25078:7;25063:70;;;25087:12;25101:11;25114:10;25126:6;25063:70;;;;;;;;;:::i;:::-;;;;;;;;24483:662;;;;24446:699;24371:781;24305:847;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:886::-;4577:4;4615:3;4604:9;4600:19;4592:27;;4629:71;4697:1;4686:9;4682:17;4673:6;4629:71;:::i;:::-;4710:72;4778:2;4767:9;4763:18;4754:6;4710:72;:::i;:::-;4792;4860:2;4849:9;4845:18;4836:6;4792:72;:::i;:::-;4874;4942:2;4931:9;4927:18;4918:6;4874:72;:::i;:::-;4956:73;5024:3;5013:9;5009:19;5000:6;4956:73;:::i;:::-;5039;5107:3;5096:9;5092:19;5083:6;5039:73;:::i;:::-;5122;5190:3;5179:9;5175:19;5166:6;5122:73;:::i;:::-;4316:886;;;;;;;;;;:::o;5208:86::-;5243:7;5283:4;5276:5;5272:16;5261:27;;5208:86;;;:::o;5300:112::-;5383:22;5399:5;5383:22;:::i;:::-;5378:3;5371:35;5300:112;;:::o;5418:214::-;5507:4;5545:2;5534:9;5530:18;5522:26;;5558:67;5622:1;5611:9;5607:17;5598:6;5558:67;:::i;:::-;5418:214;;;;:::o;5638:329::-;5697:6;5746:2;5734:9;5725:7;5721:23;5717:32;5714:119;;;5752:79;;:::i;:::-;5714:119;5872:1;5897:53;5942:7;5933:6;5922:9;5918:22;5897:53;:::i;:::-;5887:63;;5843:117;5638:329;;;;:::o;5973:118::-;6060:24;6078:5;6060:24;:::i;:::-;6055:3;6048:37;5973:118;;:::o;6097:222::-;6190:4;6228:2;6217:9;6213:18;6205:26;;6241:71;6309:1;6298:9;6294:17;6285:6;6241:71;:::i;:::-;6097:222;;;;:::o;6325:329::-;6384:6;6433:2;6421:9;6412:7;6408:23;6404:32;6401:119;;;6439:79;;:::i;:::-;6401:119;6559:1;6584:53;6629:7;6620:6;6609:9;6605:22;6584:53;:::i;:::-;6574:63;;6530:117;6325:329;;;;:::o;6660:442::-;6809:4;6847:2;6836:9;6832:18;6824:26;;6860:71;6928:1;6917:9;6913:17;6904:6;6860:71;:::i;:::-;6941:72;7009:2;6998:9;6994:18;6985:6;6941:72;:::i;:::-;7023;7091:2;7080:9;7076:18;7067:6;7023:72;:::i;:::-;6660:442;;;;;;:::o;7108:474::-;7176:6;7184;7233:2;7221:9;7212:7;7208:23;7204:32;7201:119;;;7239:79;;:::i;:::-;7201:119;7359:1;7384:53;7429:7;7420:6;7409:9;7405:22;7384:53;:::i;:::-;7374:63;;7330:117;7486:2;7512:53;7557:7;7548:6;7537:9;7533:22;7512:53;:::i;:::-;7502:63;;7457:118;7108:474;;;;;:::o;7588:553::-;7765:4;7803:3;7792:9;7788:19;7780:27;;7817:71;7885:1;7874:9;7870:17;7861:6;7817:71;:::i;:::-;7898:72;7966:2;7955:9;7951:18;7942:6;7898:72;:::i;:::-;7980;8048:2;8037:9;8033:18;8024:6;7980:72;:::i;:::-;8062;8130:2;8119:9;8115:18;8106:6;8062:72;:::i;:::-;7588:553;;;;;;;:::o;8147:180::-;8195:77;8192:1;8185:88;8292:4;8289:1;8282:15;8316:4;8313:1;8306:15;8333:320;8377:6;8414:1;8408:4;8404:12;8394:22;;8461:1;8455:4;8451:12;8482:18;8472:81;;8538:4;8530:6;8526:17;8516:27;;8472:81;8600:2;8592:6;8589:14;8569:18;8566:38;8563:84;;8619:18;;:::i;:::-;8563:84;8384:269;8333:320;;;:::o;8659:147::-;8760:11;8797:3;8782:18;;8659:147;;;;:::o;8812:114::-;;:::o;8932:398::-;9091:3;9112:83;9193:1;9188:3;9112:83;:::i;:::-;9105:90;;9204:93;9293:3;9204:93;:::i;:::-;9322:1;9317:3;9313:11;9306:18;;8932:398;;;:::o;9336:379::-;9520:3;9542:147;9685:3;9542:147;:::i;:::-;9535:154;;9706:3;9699:10;;9336:379;;;:::o;9721:171::-;9861:23;9857:1;9849:6;9845:14;9838:47;9721:171;:::o;9898:366::-;10040:3;10061:67;10125:2;10120:3;10061:67;:::i;:::-;10054:74;;10137:93;10226:3;10137:93;:::i;:::-;10255:2;10250:3;10246:12;10239:19;;9898:366;;;:::o;10270:419::-;10436:4;10474:2;10463:9;10459:18;10451:26;;10523:9;10517:4;10513:20;10509:1;10498:9;10494:17;10487:47;10551:131;10677:4;10551:131;:::i;:::-;10543:139;;10270:419;;;:::o;10695:180::-;10743:77;10740:1;10733:88;10840:4;10837:1;10830:15;10864:4;10861:1;10854:15;10881:191;10921:3;10940:20;10958:1;10940:20;:::i;:::-;10935:25;;10974:20;10992:1;10974:20;:::i;:::-;10969:25;;11017:1;11014;11010:9;11003:16;;11038:3;11035:1;11032:10;11029:36;;;11045:18;;:::i;:::-;11029:36;10881:191;;;;:::o;11078:194::-;11118:4;11138:20;11156:1;11138:20;:::i;:::-;11133:25;;11172:20;11190:1;11172:20;:::i;:::-;11167:25;;11216:1;11213;11209:9;11201:17;;11240:1;11234:4;11231:11;11228:37;;;11245:18;;:::i;:::-;11228:37;11078:194;;;;:::o;11278:410::-;11318:7;11341:20;11359:1;11341:20;:::i;:::-;11336:25;;11375:20;11393:1;11375:20;:::i;:::-;11370:25;;11430:1;11427;11423:9;11452:30;11470:11;11452:30;:::i;:::-;11441:41;;11631:1;11622:7;11618:15;11615:1;11612:22;11592:1;11585:9;11565:83;11542:139;;11661:18;;:::i;:::-;11542:139;11326:362;11278:410;;;;:::o;11694:180::-;11742:77;11739:1;11732:88;11839:4;11836:1;11829:15;11863:4;11860:1;11853:15;11880:185;11920:1;11937:20;11955:1;11937:20;:::i;:::-;11932:25;;11971:20;11989:1;11971:20;:::i;:::-;11966:25;;12010:1;12000:35;;12015:18;;:::i;:::-;12000:35;12057:1;12054;12050:9;12045:14;;11880:185;;;;:::o;12071:224::-;12211:34;12207:1;12199:6;12195:14;12188:58;12280:7;12275:2;12267:6;12263:15;12256:32;12071:224;:::o;12301:366::-;12443:3;12464:67;12528:2;12523:3;12464:67;:::i;:::-;12457:74;;12540:93;12629:3;12540:93;:::i;:::-;12658:2;12653:3;12649:12;12642:19;;12301:366;;;:::o;12673:419::-;12839:4;12877:2;12866:9;12862:18;12854:26;;12926:9;12920:4;12916:20;12912:1;12901:9;12897:17;12890:47;12954:131;13080:4;12954:131;:::i;:::-;12946:139;;12673:419;;;:::o;13098:170::-;13238:22;13234:1;13226:6;13222:14;13215:46;13098:170;:::o;13274:366::-;13416:3;13437:67;13501:2;13496:3;13437:67;:::i;:::-;13430:74;;13513:93;13602:3;13513:93;:::i;:::-;13631:2;13626:3;13622:12;13615:19;;13274:366;;;:::o;13646:419::-;13812:4;13850:2;13839:9;13835:18;13827:26;;13899:9;13893:4;13889:20;13885:1;13874:9;13870:17;13863:47;13927:131;14053:4;13927:131;:::i;:::-;13919:139;;13646:419;;;:::o;14071:169::-;14211:21;14207:1;14199:6;14195:14;14188:45;14071:169;:::o;14246:366::-;14388:3;14409:67;14473:2;14468:3;14409:67;:::i;:::-;14402:74;;14485:93;14574:3;14485:93;:::i;:::-;14603:2;14598:3;14594:12;14587:19;;14246:366;;;:::o;14618:419::-;14784:4;14822:2;14811:9;14807:18;14799:26;;14871:9;14865:4;14861:20;14857:1;14846:9;14842:17;14835:47;14899:131;15025:4;14899:131;:::i;:::-;14891:139;;14618:419;;;:::o;15043:320::-;15158:4;15196:2;15185:9;15181:18;15173:26;;15209:71;15277:1;15266:9;15262:17;15253:6;15209:71;:::i;:::-;15290:66;15352:2;15341:9;15337:18;15328:6;15290:66;:::i;:::-;15043:320;;;;;:::o;15369:180::-;15417:77;15414:1;15407:88;15514:4;15511:1;15504:15;15538:4;15535:1;15528:15;15555:225;15695:34;15691:1;15683:6;15679:14;15672:58;15764:8;15759:2;15751:6;15747:15;15740:33;15555:225;:::o;15786:366::-;15928:3;15949:67;16013:2;16008:3;15949:67;:::i;:::-;15942:74;;16025:93;16114:3;16025:93;:::i;:::-;16143:2;16138:3;16134:12;16127:19;;15786:366;;;:::o;16158:419::-;16324:4;16362:2;16351:9;16347:18;16339:26;;16411:9;16405:4;16401:20;16397:1;16386:9;16382:17;16375:47;16439:131;16565:4;16439:131;:::i;:::-;16431:139;;16158:419;;;:::o;16583:223::-;16723:34;16719:1;16711:6;16707:14;16700:58;16792:6;16787:2;16779:6;16775:15;16768:31;16583:223;:::o;16812:366::-;16954:3;16975:67;17039:2;17034:3;16975:67;:::i;:::-;16968:74;;17051:93;17140:3;17051:93;:::i;:::-;17169:2;17164:3;17160:12;17153:19;;16812:366;;;:::o;17184:419::-;17350:4;17388:2;17377:9;17373:18;17365:26;;17437:9;17431:4;17427:20;17423:1;17412:9;17408:17;17401:47;17465:131;17591:4;17465:131;:::i;:::-;17457:139;;17184:419;;;:::o;17609:221::-;17749:34;17745:1;17737:6;17733:14;17726:58;17818:4;17813:2;17805:6;17801:15;17794:29;17609:221;:::o;17836:366::-;17978:3;17999:67;18063:2;18058:3;17999:67;:::i;:::-;17992:74;;18075:93;18164:3;18075:93;:::i;:::-;18193:2;18188:3;18184:12;18177:19;;17836:366;;;:::o;18208:419::-;18374:4;18412:2;18401:9;18397:18;18389:26;;18461:9;18455:4;18451:20;18447:1;18436:9;18432:17;18425:47;18489:131;18615:4;18489:131;:::i;:::-;18481:139;;18208:419;;;:::o;18633:182::-;18773:34;18769:1;18761:6;18757:14;18750:58;18633:182;:::o;18821:366::-;18963:3;18984:67;19048:2;19043:3;18984:67;:::i;:::-;18977:74;;19060:93;19149:3;19060:93;:::i;:::-;19178:2;19173:3;19169:12;19162:19;;18821:366;;;:::o;19193:419::-;19359:4;19397:2;19386:9;19382:18;19374:26;;19446:9;19440:4;19436:20;19432:1;19421:9;19417:17;19410:47;19474:131;19600:4;19474:131;:::i;:::-;19466:139;;19193:419;;;:::o;19618:179::-;19758:31;19754:1;19746:6;19742:14;19735:55;19618:179;:::o;19803:366::-;19945:3;19966:67;20030:2;20025:3;19966:67;:::i;:::-;19959:74;;20042:93;20131:3;20042:93;:::i;:::-;20160:2;20155:3;20151:12;20144:19;;19803:366;;;:::o;20175:419::-;20341:4;20379:2;20368:9;20364:18;20356:26;;20428:9;20422:4;20418:20;20414:1;20403:9;20399:17;20392:47;20456:131;20582:4;20456:131;:::i;:::-;20448:139;;20175:419;;;:::o;20600:224::-;20740:34;20736:1;20728:6;20724:14;20717:58;20809:7;20804:2;20796:6;20792:15;20785:32;20600:224;:::o;20830:366::-;20972:3;20993:67;21057:2;21052:3;20993:67;:::i;:::-;20986:74;;21069:93;21158:3;21069:93;:::i;:::-;21187:2;21182:3;21178:12;21171:19;;20830:366;;;:::o;21202:419::-;21368:4;21406:2;21395:9;21391:18;21383:26;;21455:9;21449:4;21445:20;21441:1;21430:9;21426:17;21419:47;21483:131;21609:4;21483:131;:::i;:::-;21475:139;;21202:419;;;:::o;21627:222::-;21767:34;21763:1;21755:6;21751:14;21744:58;21836:5;21831:2;21823:6;21819:15;21812:30;21627:222;:::o;21855:366::-;21997:3;22018:67;22082:2;22077:3;22018:67;:::i;:::-;22011:74;;22094:93;22183:3;22094:93;:::i;:::-;22212:2;22207:3;22203:12;22196:19;;21855:366;;;:::o;22227:419::-;22393:4;22431:2;22420:9;22416:18;22408:26;;22480:9;22474:4;22470:20;22466:1;22455:9;22451:17;22444:47;22508:131;22634:4;22508:131;:::i;:::-;22500:139;;22227:419;;;:::o;22652:225::-;22792:34;22788:1;22780:6;22776:14;22769:58;22861:8;22856:2;22848:6;22844:15;22837:33;22652:225;:::o;22883:366::-;23025:3;23046:67;23110:2;23105:3;23046:67;:::i;:::-;23039:74;;23122:93;23211:3;23122:93;:::i;:::-;23240:2;23235:3;23231:12;23224:19;;22883:366;;;:::o;23255:419::-;23421:4;23459:2;23448:9;23444:18;23436:26;;23508:9;23502:4;23498:20;23494:1;23483:9;23479:17;23472:47;23536:131;23662:4;23536:131;:::i;:::-;23528:139;;23255:419;;;:::o;23680:233::-;23719:3;23742:24;23760:5;23742:24;:::i;:::-;23733:33;;23788:66;23781:5;23778:77;23775:103;;23858:18;;:::i;:::-;23775:103;23905:1;23898:5;23894:13;23887:20;;23680:233;;;:::o;23919:79::-;23958:7;23987:5;23976:16;;23919:79;;;:::o;24004:157::-;24109:45;24129:24;24147:5;24129:24;:::i;:::-;24109:45;:::i;:::-;24104:3;24097:58;24004:157;;:::o;24167:94::-;24200:8;24248:5;24244:2;24240:14;24219:35;;24167:94;;;:::o;24267:::-;24306:7;24335:20;24349:5;24335:20;:::i;:::-;24324:31;;24267:94;;;:::o;24367:100::-;24406:7;24435:26;24455:5;24435:26;:::i;:::-;24424:37;;24367:100;;;:::o;24473:157::-;24578:45;24598:24;24616:5;24598:24;:::i;:::-;24578:45;:::i;:::-;24573:3;24566:58;24473:157;;:::o;24636:679::-;24832:3;24847:75;24918:3;24909:6;24847:75;:::i;:::-;24947:2;24942:3;24938:12;24931:19;;24960:75;25031:3;25022:6;24960:75;:::i;:::-;25060:2;25055:3;25051:12;25044:19;;25073:75;25144:3;25135:6;25073:75;:::i;:::-;25173:2;25168:3;25164:12;25157:19;;25186:75;25257:3;25248:6;25186:75;:::i;:::-;25286:2;25281:3;25277:12;25270:19;;25306:3;25299:10;;24636:679;;;;;;;:::o;25321:176::-;25353:1;25370:20;25388:1;25370:20;:::i;:::-;25365:25;;25404:20;25422:1;25404:20;:::i;:::-;25399:25;;25443:1;25433:35;;25448:18;;:::i;:::-;25433:35;25489:1;25486;25482:9;25477:14;;25321:176;;;;:::o;25503:181::-;25643:33;25639:1;25631:6;25627:14;25620:57;25503:181;:::o;25690:366::-;25832:3;25853:67;25917:2;25912:3;25853:67;:::i;:::-;25846:74;;25929:93;26018:3;25929:93;:::i;:::-;26047:2;26042:3;26038:12;26031:19;;25690:366;;;:::o;26062:419::-;26228:4;26266:2;26255:9;26251:18;26243:26;;26315:9;26309:4;26305:20;26301:1;26290:9;26286:17;26279:47;26343:131;26469:4;26343:131;:::i;:::-;26335:139;;26062:419;;;:::o

Swarm Source

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