ETH Price: $3,058.90 (+3.03%)
Gas: 12 Gwei

Token

Croak (CROAK)
 

Overview

Max Total Supply

420,690,000,000,000 CROAK

Holders

155

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,575,865,000,000 CROAK

Value
$0.00
0x244f5ee0A22B65F59863f51456AB8eD89231b722
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CroakToken

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-11
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.20;
pragma experimental ABIEncoderV2;

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

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

// pragma solidity ^0.8.0;

// import "../utils/Context.sol";

/**
 * @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);
    }
}

// OpenZeppelin Contracts (last updated v4.6.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);
}

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

// pragma solidity ^0.8.0;

// import "../IERC20.sol";

/**
 * @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);
}

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

// pragma solidity ^0.8.0;

// import "./IERC20.sol";
// import "./extensions/IERC20Metadata.sol";
// import "../../utils/Context.sol";

/**
 * @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 {}
}

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address uniswapV2Pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB)
        external
        view
        returns (address uniswapV2Pair);

    function allPairs(uint256) external view returns (address uniswapV2Pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address uniswapV2Pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// pragma solidity >=0.6.2;

// import './IUniswapV2Router01.sol';

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

library Address {
    function sendValue(address payable recipient, uint256 amount)
        internal
        returns (bool)
    {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }
}

contract CroakToken is ERC20, Ownable {
    using Address for address payable;

    IUniswapV2Router02 public uniswapV2Router02;
    address public uniswapV2Pair;

    bool private swapping;
    bool public swapEnabled = true;
    bool public tradingEnabled;
    uint256 public startTradingBlock;

    address public constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address public constant PEPE = 0x6982508145454Ce325dDbE47a25d4ec3d2311933;

    address public marketingWallet = 0xDfE70519047CFD730DAA1E792e5B233738c9baa3;
    address public PEPEBurnAddress = 0x000000000000000000000000000000000000dEaD;

    uint8 private constant _decimals = 18;
    uint256 public constant _tTotal = 420690000000000 * 10**_decimals;

    uint256 public swapTokensAtAmount = ((_tTotal * 2) / 1e3);
    uint256 public maxWalletBalance = (_tTotal / 1e2);
    uint256 public maxBuyAmount = (_tTotal / 1e2);
    uint256 public maxSellAmount = (_tTotal / 1e2);

    uint256 public pepeBurned;

    ///////////////
    //   Fees    //
    ///////////////

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 burn;
        uint256 pepeburn;
    }

    Taxes public buyTaxes = Taxes(14, 0, 0, 1);
    Taxes public sellTaxes = Taxes(23, 0, 0, 1);

    ////////////////
    //  Anti Bot  //
    ////////////////

    mapping(address => bool) public _isBot;
    mapping(address => uint256) public lastSell;
    uint256 private antiBotBlocks = 1;
    uint256 public coolDownTime = 0;
    uint256 private launchtax = 49;
    uint256 public coolDownBalance = _tTotal;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;

    ///////////////
    //   Events  //
    ///////////////

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(
        address indexed uniswapV2Pair,
        bool indexed value
    );
    event BuyAndBurnPEPE(uint256 pepeburn);

    constructor() ERC20("Croak", "CROAK") {
        IUniswapV2Router02 _uniswapV2Router02 = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a uniswapV2Pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router02.factory())
            .createPair(address(this), _uniswapV2Router02.WETH());

        uniswapV2Router02 = _uniswapV2Router02;
        uniswapV2Pair = _uniswapV2Pair;

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(DEAD, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), _tTotal);
    }

    receive() external payable {}

    /// @notice Withdraw tokens sent by mistake.
    /// @param tokenAddress The address of the token to withdraw
    function rescueERC20Tokens(address tokenAddress) external onlyOwner {
        IERC20(tokenAddress).transfer(
            msg.sender,
            IERC20(tokenAddress).balanceOf(address(this))
        );
    }

    function forceSend() external {
        uint256 ETHbalance = address(this).balance;
        payable(owner()).sendValue(ETHbalance);
    }

    function updateRouter(address newRouter) external onlyOwner {
        uniswapV2Router02 = IUniswapV2Router02(newRouter);
    }

    /////////////////////////////////
    // Exclude / Include functions //
    /////////////////////////////////

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "PEPEburn: Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = excluded;
        }
        emit ExcludeMultipleAccountsFromFees(accounts, excluded);
    }

    ///////////////////////
    //  Setter Functions //
    ///////////////////////

    function setMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    /// @notice Update the threshold to swap tokens
    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount * 10**9;
    }

    function setBuyTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _burn,
        uint256 _pepeburn
    ) external onlyOwner {
        require(
            (_marketing + _liquidity + _burn + _pepeburn) <= 25,
            "Must keep fees at 25% or less"
        );
        buyTaxes = Taxes(_marketing, _liquidity, _burn, _pepeburn);
    }

    function setSellTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _burn,
        uint256 _pepeburn
    ) external onlyOwner {
        require(
            (_marketing + _liquidity + _burn + _pepeburn) <= 50,
            "Must keep fees at 50% or less"
        );
        sellTaxes = Taxes(_marketing, _liquidity, _burn, _pepeburn);
    }

    function setMaxBuyLimits(uint256 maxBuy) external onlyOwner {
        require(maxBuy >= 1e7, "Cannot set max buy amount lower than 0.1%");
        maxBuyAmount = maxBuy * 10**decimals();
    }

    function setMaxSellLimits(uint256 maxSell) external onlyOwner {
        require(maxSell >= 1e7, "Cannot set max sell amount lower than 0.1%");
        maxSellAmount = maxSell * 10**decimals();
    }

    function setMaxWallet(uint256 maxWallet) external onlyOwner {
        require(
            maxWallet >= 1e7,
            "Cannot set max wallet amount lower than 0.1%"
        );
        maxWalletBalance = maxWallet * 10**9;
    }

    function SetMaxTxLimit(
        uint256 maxBuy,
        uint256 maxSell,
        uint256 maxWallet
    ) external onlyOwner {
        require(maxBuy >= 1e7, "Cannot set max buy amount lower than 0.1%");
        require(maxSell >= 1e7, "Cannot set max sell amount lower than 0.1%");
        require(
            maxWallet >= 1e7,
            "Cannot set max wallet amount lower than 0.1%"
        );
        maxBuyAmount = maxBuy * 10**decimals();
        maxSellAmount = maxSell * 10**decimals();
        maxWalletBalance = maxWallet * 10**9;
    }

    /// @notice Enable or disable internal swaps
    /// @dev Set "true" to enable internal swaps
    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
    }

    function setCooldownTime(uint256 timeInSeconds, uint256 balance)
        external
        onlyOwner
    {
        coolDownTime = timeInSeconds;
        coolDownBalance = balance * 10**decimals();
        require(timeInSeconds <= 60, "cooldown timer cannot exceed 1 minutes");
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        startTradingBlock = block.number;
    }

    function setAntiBotBlocks(uint256 numberOfBlocks) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        antiBotBlocks = numberOfBlocks;
    }

    /// @param bot The bot address
    /// @param value "true" to blacklist, "false" to unblacklist
    function setBot(address bot, bool value) external onlyOwner {
        require(_isBot[bot] != value);
        _isBot[bot] = value;
    }

    function setBulkBot(address[] memory bots, bool value) external onlyOwner {
        for (uint256 i; i < bots.length; i++) {
            _isBot[bots[i]] = value;
        }
    }

    /// @dev Set new pairs created due to listing in new DEX
    function setAutomatedMarketMakerPair(address newPair, bool value)
        external
        onlyOwner
    {
        _setAutomatedMarketMakerPair(newPair, value);
    }

    function _setAutomatedMarketMakerPair(address newPair, bool value) private {
        require(
            automatedMarketMakerPairs[newPair] != value,
            "PEPEburn: Automated market maker uniswapV2Pair is already set to that value"
        );
        automatedMarketMakerPairs[newPair] = value;

        emit SetAutomatedMarketMakerPair(newPair, value);
    }

    //////////////////////
    // Getter Functions //
    //////////////////////

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    ////////////////////////
    // Transfer Functions //
    ////////////////////////

    function airdropTokens(address[] memory accounts, uint256[] memory amounts)
        external
        onlyOwner
    {
        require(
            accounts.length == amounts.length,
            "Arrays must have same size"
        );
        for (uint256 i; i < accounts.length; i++) {
            super._transfer(msg.sender, accounts[i], amounts[i]);
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(
            !_isBot[from] && !_isBot[to],
            "C:\\<windows95\\system32> kill bot"
        );
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            require(tradingEnabled, "Trading no active");
            if (!automatedMarketMakerPairs[to]) {
                require(
                    balanceOf(to) + (amount) <= maxWalletBalance,
                    "Balance is exceeding maxWalletBalance"
                );
            }
            if (
                !automatedMarketMakerPairs[from] &&
                balanceOf(from) >= coolDownBalance
            ) {
                uint256 timePassed = block.timestamp - lastSell[from];
                require(
                    timePassed > coolDownTime,
                    "Cooldown is active. Please wait"
                );
                lastSell[from] = block.timestamp;
            }
            if (automatedMarketMakerPairs[from]) {
                require(
                    amount <= maxBuyAmount,
                    "You are exceeding maxBuyAmount"
                );
            }
            if (!automatedMarketMakerPairs[from]) {
                require(
                    amount <= maxSellAmount,
                    "You are exceeding maxSellAmount"
                );
            }
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        uint256 swapTax = sellTaxes.marketing +
            sellTaxes.liquidity +
            sellTaxes.pepeburn;

        if (
            canSwap &&
            !swapping &&
            swapEnabled &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            if (swapTax > 0) {
                swapAndLiquify(swapTokensAtAmount, swapTax);
            }

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        if (takeFee) {
            bool beforeTradingFee = block.number <=
                startTradingBlock + antiBotBlocks;
            uint256 swapAmt;
            uint256 burnAmt;
            if (automatedMarketMakerPairs[to] && !beforeTradingFee) {
                swapAmt = (amount * swapTax) / 100;
                burnAmt = (amount * sellTaxes.burn) / 100;
            } else if (automatedMarketMakerPairs[from] && !beforeTradingFee) {
                swapAmt =
                    (amount *
                        (buyTaxes.marketing +
                            buyTaxes.liquidity +
                            buyTaxes.pepeburn)) /
                    100;
                burnAmt = (amount * buyTaxes.burn) / 100;
            } else if (beforeTradingFee) {
                swapAmt = (amount * launchtax) / 100;
            }

            amount = amount - (swapAmt + burnAmt);
            super._transfer(from, address(this), swapAmt);
            if (burnAmt > 0) {
                super._transfer(from, DEAD, burnAmt);
            }
        }
        super._transfer(from, to, amount);
    }

    function swapAndLiquify(uint256 tokens, uint256 swapTax) private {
        // Split the contract balance into halves
        uint256 denominator = swapTax * 2;
        uint256 tokensToAddLiquidityWith = (tokens * sellTaxes.liquidity) /
            denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;

        uint256 initialBalance = address(this).balance;

        swapTokensForETH(toSwap);

        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance = deltaBalance /
            (denominator - sellTaxes.liquidity);
        uint256 ethToAddLiquidityWith = unitBalance * sellTaxes.liquidity;

        if (ethToAddLiquidityWith > 0) {
            // Add liquidity to pancake
            addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
        }

        // Send ETH to marketingWallet
        uint256 marketingWalletAmt = unitBalance * 2 * sellTaxes.marketing;
        if (marketingWalletAmt > 0) {
            payable(marketingWallet).sendValue(marketingWalletAmt);
        }

        uint256 pepeburnAmt = unitBalance * 2 * sellTaxes.pepeburn;
        if (pepeburnAmt > 0) {
            swapAndBurnPEPE(pepeburnAmt);
        }
    }

    function swapAndBurnPEPE(uint256 ethAmount) private {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router02.WETH();
        path[1] = PEPE;

        uint256 balBefore = IERC20(PEPE).balanceOf(PEPEBurnAddress);

        uniswapV2Router02.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: ethAmount
        }(
            0, // accept any amount of Tokens
            path,
            PEPEBurnAddress, // Burn address
            block.timestamp
        );

        uint256 burned = IERC20(PEPE).balanceOf(PEPEBurnAddress) - balBefore;
        pepeBurned += burned;
        emit BuyAndBurnPEPE(burned);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router02.WETH();

        _approve(address(this), address(uniswapV2Router02), tokenAmount);

        // make the swap
        uniswapV2Router02.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router02), tokenAmount);

        // add the liquidity
        uniswapV2Router02.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"pepeburn","type":"uint256"}],"name":"BuyAndBurnPEPE","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","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":"uniswapV2Pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PEPE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PEPEBurnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"SetMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"pepeburn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","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":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBalance","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":"pepeBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"pepeburn","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numberOfBlocks","type":"uint256"}],"name":"setAntiBotBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBulkBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_pepeburn","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInSeconds","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"setCooldownTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setMaxBuyLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxSellLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_pepeburn","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router02","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526007805460ff60a81b1916600160a81b179055600980546001600160a01b031990811673dfe70519047cfd730daa1e792e5b233738c9baa317909155600a805490911661dead1781556103e8906200005f90601290620008f5565b620000729066017e9d8602b4006200090c565b6200007f9060026200090c565b6200008b919062000926565b600b5560646200009e6012600a620008f5565b620000b19066017e9d8602b4006200090c565b620000bd919062000926565b600c556064620000d06012600a620008f5565b620000e39066017e9d8602b4006200090c565b620000ef919062000926565b600d556064620001026012600a620008f5565b620001159066017e9d8602b4006200090c565b62000121919062000926565b600e90815560408051608080820183528382525f60208084018290528385018290526001606094850181905260109690965560118290556012828155601387905585519384018652601780855291840183905294830182905291909201849052601481905560158290556016829055839055601a92909255601b919091556031601c55620001b190600a620008f5565b620001c49066017e9d8602b4006200090c565b601d55348015620001d3575f80fd5b506040518060400160405280600581526020016443726f616b60d81b8152506040518060400160405280600581526020016443524f414b60d81b8152508160039081620002219190620009e5565b506004620002308282620009e5565b5050506200024d620002476200046c60201b60201c565b62000470565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c9919062000aad565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000315573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200033b919062000aad565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000386573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003ac919062000aad565b600680546001600160a01b038086166001600160a01b03199283161790925560078054928416929091169190911790559050620003eb816001620004c1565b6200040a620004026005546001600160a01b031690565b6001620005c3565b62000417306001620005c3565b6200042661dead6001620005c3565b620004646200043d6005546001600160a01b031690565b6200044b6012600a620008f5565b6200045e9066017e9d8602b4006200090c565b620006c2565b505062000aeb565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152601f602052604090205481151560ff909116151503620005705760405162461bcd60e51b815260206004820152604b60248201527f504550456275726e3a204175746f6d61746564206d61726b6574206d616b657260448201527f20756e697377617056325061697220697320616c72656164792073657420746f60648201526a20746861742076616c756560a81b608482015260a4015b60405180910390fd5b6001600160a01b0382165f818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b620005cd62000783565b6001600160a01b0382165f908152601e602052604090205481151560ff909116151503620006645760405162461bcd60e51b815260206004820152603460248201527f504550456275726e3a204163636f756e7420697320616c72656164792074686560448201527f2076616c7565206f6620276578636c7564656427000000000000000000000000606482015260840162000567565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200071a5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000567565b8060025f8282546200072d919062000ad5565b90915550506001600160a01b0382165f81815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620007df5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000567565b565b505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200083a57815f19048211156200081e576200081e620007e6565b808516156200082c57918102915b93841c9390800290620007ff565b509250929050565b5f826200085257506001620008ef565b816200086057505f620008ef565b81600181146200087957600281146200088457620008a4565b6001915050620008ef565b60ff841115620008985762000898620007e6565b50506001821b620008ef565b5060208310610133831016604e8410600b8410161715620008c9575081810a620008ef565b620008d58383620007fa565b805f1904821115620008eb57620008eb620007e6565b0290505b92915050565b5f6200090560ff84168362000842565b9392505050565b8082028115828204841417620008ef57620008ef620007e6565b5f826200094157634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200096f57607f821691505b6020821081036200098e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007e1575f81815260208120601f850160051c81016020861015620009bc5750805b601f850160051c820191505b81811015620009dd57828155600101620009c8565b505050505050565b81516001600160401b0381111562000a015762000a0162000946565b62000a198162000a1284546200095a565b8462000994565b602080601f83116001811462000a4f575f841562000a375750858301515b5f19600386901b1c1916600185901b178555620009dd565b5f85815260208120601f198616915b8281101562000a7f5788860151825594840194600190910190840162000a5e565b508582101562000a9d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f6020828403121562000abe575f80fd5b81516001600160a01b038116811462000905575f80fd5b80820180821115620008ef57620008ef620007e6565b6131008062000af95f395ff3fe608060405260043610610374575f3560e01c80638a0bc8e3116101c8578063bbde77c1116100fd578063dd62ed3e1161009d578063e4fbaecb1161006d578063e4fbaecb14610a1e578063f2fde38b14610a45578063f480fec214610a64578063f66895a314610a83575f80fd5b8063dd62ed3e146109ac578063e01af92c146109cb578063e2f45605146109ea578063e4bf1bed146109ff575f80fd5b8063c3e0f5cf116100d8578063c3e0f5cf1461093a578063c492f04614610959578063c851cc3214610978578063d2ce0db214610997575f80fd5b8063bbde77c1146108e7578063c0246668146108fc578063c2c3e4a41461091b575f80fd5b8063a9059cbb11610168578063af465a2711610143578063af465a2714610867578063afa4f3b21461087b578063b62496f51461089a578063b83b297f146108c8575f80fd5b8063a9059cbb146107fb578063abb810521461081a578063ad797d3614610848575f80fd5b806395d89b41116101a357806395d89b411461078a5780639a7a23d61461079e578063a457c2d7146107bd578063a7c6402c146107dc575f80fd5b80638a0bc8e31461073a5780638a8c523c146107595780638da5cb5b1461076d575f80fd5b80634ada218b116102a9578063706f6937116102495780637602a8ce116102195780637602a8ce146106b957806376be96f3146106ce578063864701a5146106e357806388e765ff14610725575f80fd5b8063706f69371461063357806370a0823114610652578063715018a61461068657806375f0a8741461069a575f80fd5b80635d098b38116102845780635d098b38146105b457806366d602ae146105d35780636ddd1713146105e85780636f4ce42814610608575f80fd5b80634ada218b1461053e5780634fbee1931461055e5780635d0044ca14610595575f80fd5b8063300dc4ae1161031457806339509351116102ef57806339509351146104c2578063397843c7146104e1578063475ad0d61461050057806349bd5a5e1461051f575f80fd5b8063300dc4ae14610469578063313ce56714610488578063342aa8b5146104a3575f80fd5b806312b77e8a1161034f57806312b77e8a1461040157806318160ddd14610417578063218257da1461043557806323b872dd1461044a575f80fd5b806303fd2a451461037f57806306fdde03146103b1578063095ea7b3146103d2575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b5061039461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103bc575f80fd5b506103c5610aa5565b6040516103a891906127cc565b3480156103dd575f80fd5b506103f16103ec36600461282b565b610b35565b60405190151581526020016103a8565b34801561040c575f80fd5b50610415610b4e565b005b348015610422575f80fd5b506002545b6040519081526020016103a8565b348015610440575f80fd5b50610427601d5481565b348015610455575f80fd5b506103f1610464366004612855565b610b78565b348015610474575f80fd5b50610415610483366004612893565b610b9b565b348015610493575f80fd5b50604051601281526020016103a8565b3480156104ae575f80fd5b506104156104bd3660046128b7565b610beb565b3480156104cd575f80fd5b506103f16104dc36600461282b565b610c48565b3480156104ec575f80fd5b506104156104fb3660046128ee565b610c69565b34801561050b575f80fd5b5061041561051a36600461290e565b610cef565b34801561052a575f80fd5b50600754610394906001600160a01b031681565b348015610549575f80fd5b506007546103f190600160b01b900460ff1681565b348015610569575f80fd5b506103f1610578366004612937565b6001600160a01b03165f908152601e602052604090205460ff1690565b3480156105a0575f80fd5b506104156105af366004612893565b610da8565b3480156105bf575f80fd5b506104156105ce366004612937565b610de7565b3480156105de575f80fd5b50610427600e5481565b3480156105f3575f80fd5b506007546103f190600160a81b900460ff1681565b348015610613575f80fd5b50610427610622366004612937565b60196020525f908152604090205481565b34801561063e575f80fd5b5061041561064d366004612a32565b610e11565b34801561065d575f80fd5b5061042761066c366004612937565b6001600160a01b03165f9081526020819052604090205490565b348015610691575f80fd5b50610415610ec9565b3480156106a5575f80fd5b50600954610394906001600160a01b031681565b3480156106c4575f80fd5b50610427600f5481565b3480156106d9575f80fd5b5061042760085481565b3480156106ee575f80fd5b506010546011546012546013546107059392919084565b6040805194855260208501939093529183015260608201526080016103a8565b348015610730575f80fd5b50610427600d5481565b348015610745575f80fd5b50610415610754366004612893565b610edc565b348015610764575f80fd5b50610415610f51565b348015610778575f80fd5b506005546001600160a01b0316610394565b348015610795575f80fd5b506103c5610fcc565b3480156107a9575f80fd5b506104156107b83660046128b7565b610fdb565b3480156107c8575f80fd5b506103f16107d736600461282b565b610fed565b3480156107e7575f80fd5b50600654610394906001600160a01b031681565b348015610806575f80fd5b506103f161081536600461282b565b611067565b348015610825575f80fd5b506103f1610834366004612937565b60186020525f908152604090205460ff1681565b348015610853575f80fd5b50600a54610394906001600160a01b031681565b348015610872575f80fd5b50610427611074565b348015610886575f80fd5b50610415610895366004612893565b611094565b3480156108a5575f80fd5b506103f16108b4366004612937565b601f6020525f908152604090205460ff1681565b3480156108d3575f80fd5b506104156108e2366004612ae7565b6110b0565b3480156108f2575f80fd5b50610427600c5481565b348015610907575f80fd5b506104156109163660046128b7565b61111c565b348015610926575f80fd5b50610415610935366004612893565b61120e565b348015610945575f80fd5b50610415610954366004612937565b611255565b348015610964575f80fd5b50610415610973366004612b2b565b611339565b348015610983575f80fd5b50610415610992366004612937565b6113f0565b3480156109a2575f80fd5b50610427601b5481565b3480156109b7575f80fd5b506104276109c6366004612baa565b61141a565b3480156109d6575f80fd5b506104156109e5366004612bd6565b611444565b3480156109f5575f80fd5b50610427600b5481565b348015610a0a575f80fd5b50610415610a19366004612bf1565b61146a565b348015610a29575f80fd5b50610394736982508145454ce325ddbe47a25d4ec3d231193381565b348015610a50575f80fd5b50610415610a5f366004612937565b611516565b348015610a6f575f80fd5b50610415610a7e366004612bf1565b61158f565b348015610a8e575f80fd5b506014546015546016546017546107059392919084565b606060038054610ab490612c20565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090612c20565b8015610b2b5780601f10610b0257610100808354040283529160200191610b2b565b820191905f5260205f20905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b5f33610b4281858561163b565b60019150505b92915050565b47610b7481610b656005546001600160a01b031690565b6001600160a01b03169061175e565b5050565b5f33610b85858285611808565b610b90858585611880565b506001949350505050565b610ba3611f1f565b62989680811015610bcf5760405162461bcd60e51b8152600401610bc690612c58565b60405180910390fd5b610bdb6012600a612d95565b610be59082612da3565b600d5550565b610bf3611f1f565b6001600160a01b0382165f9081526018602052604090205481151560ff909116151503610c1e575f80fd5b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b5f33610b42818585610c5a838361141a565b610c649190612dba565b61163b565b610c71611f1f565b601b829055610c826012600a612d95565b610c8c9082612da3565b601d55603c821115610b745760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642031206d604482015265696e7574657360d01b6064820152608401610bc6565b610cf7611f1f565b62989680831015610d1a5760405162461bcd60e51b8152600401610bc690612c58565b62989680821015610d3d5760405162461bcd60e51b8152600401610bc690612dcd565b62989680811015610d605760405162461bcd60e51b8152600401610bc690612e17565b610d6c6012600a612d95565b610d769084612da3565b600d55610d856012600a612d95565b610d8f9083612da3565b600e55610da081633b9aca00612da3565b600c55505050565b610db0611f1f565b62989680811015610dd35760405162461bcd60e51b8152600401610bc690612e17565b610de181633b9aca00612da3565b600c5550565b610def611f1f565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610e19611f1f565b8051825114610e6a5760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610bc6565b5f5b8251811015610ec457610eb233848381518110610e8b57610e8b612e63565b6020026020010151848481518110610ea557610ea5612e63565b6020026020010151611f79565b80610ebc81612e77565b915050610e6c565b505050565b610ed1611f1f565b610eda5f6120a1565b565b610ee4611f1f565b600754600160b01b900460ff1615610f4c5760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610bc6565b601a55565b610f59611f1f565b600754600160b01b900460ff1615610fb35760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610bc6565b6007805460ff60b01b1916600160b01b17905543600855565b606060048054610ab490612c20565b610fe3611f1f565b610b7482826120f2565b5f3381610ffa828661141a565b90508381101561105a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bc6565b610b90828686840361163b565b5f33610b42818585611880565b6110806012600a612d95565b6110919066017e9d8602b400612da3565b81565b61109c611f1f565b6110aa81633b9aca00612da3565b600b5550565b6110b8611f1f565b5f5b8251811015610ec4578160185f8584815181106110d9576110d9612e63565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061111481612e77565b9150506110ba565b611124611f1f565b6001600160a01b0382165f908152601e602052604090205481151560ff9091161515036111b05760405162461bcd60e51b815260206004820152603460248201527f504550456275726e3a204163636f756e7420697320616c7265616479207468656044820152732076616c7565206f6620276578636c756465642760601b6064820152608401610bc6565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611216611f1f565b629896808110156112395760405162461bcd60e51b8152600401610bc690612dcd565b6112456012600a612d95565b61124f9082612da3565b600e5550565b61125d611f1f565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156112a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cd9190612e8f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611315573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b749190612ea6565b611341611f1f565b5f5b828110156113af5781601e5f86868581811061136157611361612e63565b90506020020160208101906113769190612937565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806113a781612e77565b915050611343565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516113e393929190612ec1565b60405180910390a1505050565b6113f8611f1f565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61144c611f1f565b60078054911515600160a81b0260ff60a81b19909216919091179055565b611472611f1f565b601981836114808688612dba565b61148a9190612dba565b6114949190612dba565b11156114e25760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610bc6565b6040805160808101825285815260208101859052908101839052606001819052601093909355601191909155601255601355565b61151e611f1f565b6001600160a01b0381166115835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc6565b61158c816120a1565b50565b611597611f1f565b603281836115a58688612dba565b6115af9190612dba565b6115b99190612dba565b11156116075760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c6573730000006044820152606401610bc6565b6040805160808101825285815260208101859052908101839052606001819052601493909355601591909155601655601755565b6001600160a01b03831661169d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc6565b6001600160a01b0382166116fe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f814710156117af5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bc6565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f81146117f8576040519150601f19603f3d011682016040523d82523d5f602084013e6117fd565b606091505b509095945050505050565b5f611813848461141a565b90505f19811461187a578181101561186d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bc6565b61187a848484840361163b565b50505050565b6001600160a01b0383166118a65760405162461bcd60e51b8152600401610bc690612f19565b6001600160a01b0382166118cc5760405162461bcd60e51b8152600401610bc690612f5e565b6001600160a01b0383165f9081526018602052604090205460ff1615801561190c57506001600160a01b0382165f9081526018602052604090205460ff16155b6119585760405162461bcd60e51b815260206004820181905260248201527f433a5c3c77696e646f777339355c73797374656d33323e206b696c6c20626f746044820152606401610bc6565b6001600160a01b0383165f908152601e602052604090205460ff1615801561199857506001600160a01b0382165f908152601e602052604090205460ff16155b15611c4b57600754600160b01b900460ff166119ea5760405162461bcd60e51b815260206004820152601160248201527054726164696e67206e6f2061637469766560781b6044820152606401610bc6565b6001600160a01b0382165f908152601f602052604090205460ff16611a9157600c5481611a2b846001600160a01b03165f9081526020819052604090205490565b611a359190612dba565b1115611a915760405162461bcd60e51b815260206004820152602560248201527f42616c616e636520697320657863656564696e67206d617857616c6c657442616044820152646c616e636560d81b6064820152608401610bc6565b6001600160a01b0383165f908152601f602052604090205460ff16158015611ad25750601d546001600160a01b0384165f9081526020819052604090205410155b15611b68576001600160a01b0383165f90815260196020526040812054611af99042612fa1565b9050601b548111611b4c5760405162461bcd60e51b815260206004820152601f60248201527f436f6f6c646f776e206973206163746976652e20506c656173652077616974006044820152606401610bc6565b506001600160a01b0383165f9081526019602052604090204290555b6001600160a01b0383165f908152601f602052604090205460ff1615611bda57600d54811115611bda5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d6178427579416d6f756e7400006044820152606401610bc6565b6001600160a01b0383165f908152601f602052604090205460ff16611c4b57600e54811115611c4b5760405162461bcd60e51b815260206004820152601f60248201527f596f752061726520657863656564696e67206d617853656c6c416d6f756e74006044820152606401610bc6565b805f03611c5d57610ec483835f611f79565b305f90815260208190526040812054600b5460175460155460145493949285101593611c899190612dba565b611c939190612dba565b9050818015611cac5750600754600160a01b900460ff16155b8015611cc15750600754600160a81b900460ff165b8015611ce557506001600160a01b0386165f908152601f602052604090205460ff16155b8015611d0957506001600160a01b0386165f908152601e602052604090205460ff16155b8015611d2d57506001600160a01b0385165f908152601e602052604090205460ff16155b15611d65576007805460ff60a01b1916600160a01b1790558015611d5757611d57600b54826121ee565b6007805460ff60a01b191690555b6007546001600160a01b0387165f908152601e602052604090205460ff600160a01b909204821615911680611db157506001600160a01b0386165f908152601e602052604090205460ff165b15611db957505f5b8015611f0b575f601a54600854611dd09190612dba565b6001600160a01b0388165f908152601f6020526040812054439290921115925090819060ff168015611e00575082155b15611e3f576064611e11868a612da3565b611e1b9190612fb4565b601654909250606490611e2e908a612da3565b611e389190612fb4565b9050611ed3565b6001600160a01b038a165f908152601f602052604090205460ff168015611e64575082155b15611eb05760135460115460105460649291611e7f91612dba565b611e899190612dba565b611e93908a612da3565b611e9d9190612fb4565b601254909250606490611e2e908a612da3565b8215611ed3576064601c5489611ec69190612da3565b611ed09190612fb4565b91505b611edd8183612dba565b611ee79089612fa1565b9750611ef48a3084611f79565b8015611f0757611f078a61dead83611f79565b5050505b611f16878787611f79565b50505050505050565b6005546001600160a01b03163314610eda5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bc6565b6001600160a01b038316611f9f5760405162461bcd60e51b8152600401610bc690612f19565b6001600160a01b038216611fc55760405162461bcd60e51b8152600401610bc690612f5e565b6001600160a01b0383165f908152602081905260409020548181101561203c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bc6565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361187a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152601f602052604090205481151560ff90911615150361219b5760405162461bcd60e51b815260206004820152604b60248201527f504550456275726e3a204175746f6d61746564206d61726b6574206d616b657260448201527f20756e697377617056325061697220697320616c72656164792073657420746f60648201526a20746861742076616c756560a81b608482015260a401610bc6565b6001600160a01b0382165f818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f6121fa826002612da3565b90505f816014600101548561220f9190612da3565b6122199190612fb4565b90505f6122268286612fa1565b905047612232826122ef565b5f61223d8247612fa1565b6015549091505f9061224f9087612fa1565b6122599083612fb4565b6015549091505f9061226b9083612da3565b9050801561227d5761227d868261243f565b6014545f9061228d846002612da3565b6122979190612da3565b905080156122b7576009546122b5906001600160a01b03168261175e565b505b6017545f906122c7856002612da3565b6122d19190612da3565b905080156122e2576122e281612511565b5050505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061232257612322612e63565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612379573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239d9190612fd3565b816001815181106123b0576123b0612e63565b6001600160a01b0392831660209182029290920101526006546123d6913091168461163b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061240e9085905f90869030904290600401613030565b5f604051808303815f87803b158015612425575f80fd5b505af1158015612437573d5f803e3d5ffd5b505050505050565b6006546124579030906001600160a01b03168461163b565b6006546001600160a01b031663f305d7198230855f8061247f6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156124e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061250a919061306b565b5050505050565b6040805160028082526060820183525f926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259c9190612fd3565b815f815181106125ae576125ae612e63565b60200260200101906001600160a01b031690816001600160a01b031681525050736982508145454ce325ddbe47a25d4ec3d2311933816001815181106125f6576125f6612e63565b6001600160a01b039283166020918202929092010152600a546040516370a0823160e01b8152911660048201525f90736982508145454ce325ddbe47a25d4ec3d2311933906370a0823190602401602060405180830381865afa15801561265f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126839190612e8f565b600654600a5460405163b6f9de9560e01b81529293506001600160a01b039182169263b6f9de959287926126c1925f92899216904290600401613096565b5f604051808303818588803b1580156126d8575f80fd5b505af11580156126ea573d5f803e3d5ffd5b5050600a546040516370a0823160e01b81526001600160a01b0390911660048201525f9350849250736982508145454ce325ddbe47a25d4ec3d231193391506370a0823190602401602060405180830381865afa15801561274d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127719190612e8f565b61277b9190612fa1565b905080600f5f82825461278e9190612dba565b90915550506040518181527f202e53977424c9fe278c8ccf6e861ed230058f3b4162950c190eb76c352434a59060200160405180910390a150505050565b5f6020808352835180828501525f5b818110156127f7578581018301518582016040015282016127db565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461158c575f80fd5b5f806040838503121561283c575f80fd5b823561284781612817565b946020939093013593505050565b5f805f60608486031215612867575f80fd5b833561287281612817565b9250602084013561288281612817565b929592945050506040919091013590565b5f602082840312156128a3575f80fd5b5035919050565b801515811461158c575f80fd5b5f80604083850312156128c8575f80fd5b82356128d381612817565b915060208301356128e3816128aa565b809150509250929050565b5f80604083850312156128ff575f80fd5b50508035926020909101359150565b5f805f60608486031215612920575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612947575f80fd5b813561295281612817565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561299657612996612959565b604052919050565b5f67ffffffffffffffff8211156129b7576129b7612959565b5060051b60200190565b5f82601f8301126129d0575f80fd5b813560206129e56129e08361299e565b61296d565b82815260059290921b84018101918181019086841115612a03575f80fd5b8286015b84811015612a27578035612a1a81612817565b8352918301918301612a07565b509695505050505050565b5f8060408385031215612a43575f80fd5b823567ffffffffffffffff80821115612a5a575f80fd5b612a66868387016129c1565b9350602091508185013581811115612a7c575f80fd5b85019050601f81018613612a8e575f80fd5b8035612a9c6129e08261299e565b81815260059190911b82018301908381019088831115612aba575f80fd5b928401925b82841015612ad857833582529284019290840190612abf565b80955050505050509250929050565b5f8060408385031215612af8575f80fd5b823567ffffffffffffffff811115612b0e575f80fd5b612b1a858286016129c1565b92505060208301356128e3816128aa565b5f805f60408486031215612b3d575f80fd5b833567ffffffffffffffff80821115612b54575f80fd5b818601915086601f830112612b67575f80fd5b813581811115612b75575f80fd5b8760208260051b8501011115612b89575f80fd5b60209283019550935050840135612b9f816128aa565b809150509250925092565b5f8060408385031215612bbb575f80fd5b8235612bc681612817565b915060208301356128e381612817565b5f60208284031215612be6575f80fd5b8135612952816128aa565b5f805f8060808587031215612c04575f80fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680612c3457607f821691505b602082108103612c5257634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e312560b81b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612cef57815f1904821115612cd557612cd5612ca1565b80851615612ce257918102915b93841c9390800290612cba565b509250929050565b5f82612d0557506001610b48565b81612d1157505f610b48565b8160018114612d275760028114612d3157612d4d565b6001915050610b48565b60ff841115612d4257612d42612ca1565b50506001821b610b48565b5060208310610133831016604e8410600b8410161715612d70575081810a610b48565b612d7a8383612cb5565b805f1904821115612d8d57612d8d612ca1565b029392505050565b5f61295260ff841683612cf7565b8082028115828204841417610b4857610b48612ca1565b80820180821115610b4857610b48612ca1565b6020808252602a908201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604082015269207468616e20302e312560b01b606082015260800190565b6020808252602c908201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760408201526b6572207468616e20302e312560a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612e8857612e88612ca1565b5060010190565b5f60208284031215612e9f575f80fd5b5051919050565b5f60208284031215612eb6575f80fd5b8151612952816128aa565b604080825281018390525f8460608301825b86811015612f03578235612ee681612817565b6001600160a01b0316825260209283019290910190600101612ed3565b5080925050508215156020830152949350505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b4857610b48612ca1565b5f82612fce57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612fe3575f80fd5b815161295281612817565b5f8151808452602080850194508084015f5b838110156130255781516001600160a01b031687529582019590820190600101613000565b509495945050505050565b85815284602082015260a060408201525f61304e60a0830186612fee565b6001600160a01b0394909416606083015250608001529392505050565b5f805f6060848603121561307d575f80fd5b8351925060208401519150604084015190509250925092565b848152608060208201525f6130ae6080830186612fee565b6001600160a01b0394909416604083015250606001529291505056fea264697066735822122014a97a0a8d310e57c5a3678dd36e9c74a691f248ba38d29baba89c2751690aee64736f6c63430008140033

Deployed Bytecode

0x608060405260043610610374575f3560e01c80638a0bc8e3116101c8578063bbde77c1116100fd578063dd62ed3e1161009d578063e4fbaecb1161006d578063e4fbaecb14610a1e578063f2fde38b14610a45578063f480fec214610a64578063f66895a314610a83575f80fd5b8063dd62ed3e146109ac578063e01af92c146109cb578063e2f45605146109ea578063e4bf1bed146109ff575f80fd5b8063c3e0f5cf116100d8578063c3e0f5cf1461093a578063c492f04614610959578063c851cc3214610978578063d2ce0db214610997575f80fd5b8063bbde77c1146108e7578063c0246668146108fc578063c2c3e4a41461091b575f80fd5b8063a9059cbb11610168578063af465a2711610143578063af465a2714610867578063afa4f3b21461087b578063b62496f51461089a578063b83b297f146108c8575f80fd5b8063a9059cbb146107fb578063abb810521461081a578063ad797d3614610848575f80fd5b806395d89b41116101a357806395d89b411461078a5780639a7a23d61461079e578063a457c2d7146107bd578063a7c6402c146107dc575f80fd5b80638a0bc8e31461073a5780638a8c523c146107595780638da5cb5b1461076d575f80fd5b80634ada218b116102a9578063706f6937116102495780637602a8ce116102195780637602a8ce146106b957806376be96f3146106ce578063864701a5146106e357806388e765ff14610725575f80fd5b8063706f69371461063357806370a0823114610652578063715018a61461068657806375f0a8741461069a575f80fd5b80635d098b38116102845780635d098b38146105b457806366d602ae146105d35780636ddd1713146105e85780636f4ce42814610608575f80fd5b80634ada218b1461053e5780634fbee1931461055e5780635d0044ca14610595575f80fd5b8063300dc4ae1161031457806339509351116102ef57806339509351146104c2578063397843c7146104e1578063475ad0d61461050057806349bd5a5e1461051f575f80fd5b8063300dc4ae14610469578063313ce56714610488578063342aa8b5146104a3575f80fd5b806312b77e8a1161034f57806312b77e8a1461040157806318160ddd14610417578063218257da1461043557806323b872dd1461044a575f80fd5b806303fd2a451461037f57806306fdde03146103b1578063095ea7b3146103d2575f80fd5b3661037b57005b5f80fd5b34801561038a575f80fd5b5061039461dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103bc575f80fd5b506103c5610aa5565b6040516103a891906127cc565b3480156103dd575f80fd5b506103f16103ec36600461282b565b610b35565b60405190151581526020016103a8565b34801561040c575f80fd5b50610415610b4e565b005b348015610422575f80fd5b506002545b6040519081526020016103a8565b348015610440575f80fd5b50610427601d5481565b348015610455575f80fd5b506103f1610464366004612855565b610b78565b348015610474575f80fd5b50610415610483366004612893565b610b9b565b348015610493575f80fd5b50604051601281526020016103a8565b3480156104ae575f80fd5b506104156104bd3660046128b7565b610beb565b3480156104cd575f80fd5b506103f16104dc36600461282b565b610c48565b3480156104ec575f80fd5b506104156104fb3660046128ee565b610c69565b34801561050b575f80fd5b5061041561051a36600461290e565b610cef565b34801561052a575f80fd5b50600754610394906001600160a01b031681565b348015610549575f80fd5b506007546103f190600160b01b900460ff1681565b348015610569575f80fd5b506103f1610578366004612937565b6001600160a01b03165f908152601e602052604090205460ff1690565b3480156105a0575f80fd5b506104156105af366004612893565b610da8565b3480156105bf575f80fd5b506104156105ce366004612937565b610de7565b3480156105de575f80fd5b50610427600e5481565b3480156105f3575f80fd5b506007546103f190600160a81b900460ff1681565b348015610613575f80fd5b50610427610622366004612937565b60196020525f908152604090205481565b34801561063e575f80fd5b5061041561064d366004612a32565b610e11565b34801561065d575f80fd5b5061042761066c366004612937565b6001600160a01b03165f9081526020819052604090205490565b348015610691575f80fd5b50610415610ec9565b3480156106a5575f80fd5b50600954610394906001600160a01b031681565b3480156106c4575f80fd5b50610427600f5481565b3480156106d9575f80fd5b5061042760085481565b3480156106ee575f80fd5b506010546011546012546013546107059392919084565b6040805194855260208501939093529183015260608201526080016103a8565b348015610730575f80fd5b50610427600d5481565b348015610745575f80fd5b50610415610754366004612893565b610edc565b348015610764575f80fd5b50610415610f51565b348015610778575f80fd5b506005546001600160a01b0316610394565b348015610795575f80fd5b506103c5610fcc565b3480156107a9575f80fd5b506104156107b83660046128b7565b610fdb565b3480156107c8575f80fd5b506103f16107d736600461282b565b610fed565b3480156107e7575f80fd5b50600654610394906001600160a01b031681565b348015610806575f80fd5b506103f161081536600461282b565b611067565b348015610825575f80fd5b506103f1610834366004612937565b60186020525f908152604090205460ff1681565b348015610853575f80fd5b50600a54610394906001600160a01b031681565b348015610872575f80fd5b50610427611074565b348015610886575f80fd5b50610415610895366004612893565b611094565b3480156108a5575f80fd5b506103f16108b4366004612937565b601f6020525f908152604090205460ff1681565b3480156108d3575f80fd5b506104156108e2366004612ae7565b6110b0565b3480156108f2575f80fd5b50610427600c5481565b348015610907575f80fd5b506104156109163660046128b7565b61111c565b348015610926575f80fd5b50610415610935366004612893565b61120e565b348015610945575f80fd5b50610415610954366004612937565b611255565b348015610964575f80fd5b50610415610973366004612b2b565b611339565b348015610983575f80fd5b50610415610992366004612937565b6113f0565b3480156109a2575f80fd5b50610427601b5481565b3480156109b7575f80fd5b506104276109c6366004612baa565b61141a565b3480156109d6575f80fd5b506104156109e5366004612bd6565b611444565b3480156109f5575f80fd5b50610427600b5481565b348015610a0a575f80fd5b50610415610a19366004612bf1565b61146a565b348015610a29575f80fd5b50610394736982508145454ce325ddbe47a25d4ec3d231193381565b348015610a50575f80fd5b50610415610a5f366004612937565b611516565b348015610a6f575f80fd5b50610415610a7e366004612bf1565b61158f565b348015610a8e575f80fd5b506014546015546016546017546107059392919084565b606060038054610ab490612c20565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae090612c20565b8015610b2b5780601f10610b0257610100808354040283529160200191610b2b565b820191905f5260205f20905b815481529060010190602001808311610b0e57829003601f168201915b5050505050905090565b5f33610b4281858561163b565b60019150505b92915050565b47610b7481610b656005546001600160a01b031690565b6001600160a01b03169061175e565b5050565b5f33610b85858285611808565b610b90858585611880565b506001949350505050565b610ba3611f1f565b62989680811015610bcf5760405162461bcd60e51b8152600401610bc690612c58565b60405180910390fd5b610bdb6012600a612d95565b610be59082612da3565b600d5550565b610bf3611f1f565b6001600160a01b0382165f9081526018602052604090205481151560ff909116151503610c1e575f80fd5b6001600160a01b03919091165f908152601860205260409020805460ff1916911515919091179055565b5f33610b42818585610c5a838361141a565b610c649190612dba565b61163b565b610c71611f1f565b601b829055610c826012600a612d95565b610c8c9082612da3565b601d55603c821115610b745760405162461bcd60e51b815260206004820152602660248201527f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642031206d604482015265696e7574657360d01b6064820152608401610bc6565b610cf7611f1f565b62989680831015610d1a5760405162461bcd60e51b8152600401610bc690612c58565b62989680821015610d3d5760405162461bcd60e51b8152600401610bc690612dcd565b62989680811015610d605760405162461bcd60e51b8152600401610bc690612e17565b610d6c6012600a612d95565b610d769084612da3565b600d55610d856012600a612d95565b610d8f9083612da3565b600e55610da081633b9aca00612da3565b600c55505050565b610db0611f1f565b62989680811015610dd35760405162461bcd60e51b8152600401610bc690612e17565b610de181633b9aca00612da3565b600c5550565b610def611f1f565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b610e19611f1f565b8051825114610e6a5760405162461bcd60e51b815260206004820152601a60248201527f417272617973206d75737420686176652073616d652073697a650000000000006044820152606401610bc6565b5f5b8251811015610ec457610eb233848381518110610e8b57610e8b612e63565b6020026020010151848481518110610ea557610ea5612e63565b6020026020010151611f79565b80610ebc81612e77565b915050610e6c565b505050565b610ed1611f1f565b610eda5f6120a1565b565b610ee4611f1f565b600754600160b01b900460ff1615610f4c5760405162461bcd60e51b815260206004820152602560248201527f43616e2774206368616e6765207768656e2074726164696e6720686173207374604482015264185c9d195960da1b6064820152608401610bc6565b601a55565b610f59611f1f565b600754600160b01b900460ff1615610fb35760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610bc6565b6007805460ff60b01b1916600160b01b17905543600855565b606060048054610ab490612c20565b610fe3611f1f565b610b7482826120f2565b5f3381610ffa828661141a565b90508381101561105a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610bc6565b610b90828686840361163b565b5f33610b42818585611880565b6110806012600a612d95565b6110919066017e9d8602b400612da3565b81565b61109c611f1f565b6110aa81633b9aca00612da3565b600b5550565b6110b8611f1f565b5f5b8251811015610ec4578160185f8584815181106110d9576110d9612e63565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790558061111481612e77565b9150506110ba565b611124611f1f565b6001600160a01b0382165f908152601e602052604090205481151560ff9091161515036111b05760405162461bcd60e51b815260206004820152603460248201527f504550456275726e3a204163636f756e7420697320616c7265616479207468656044820152732076616c7565206f6620276578636c756465642760601b6064820152608401610bc6565b6001600160a01b0382165f818152601e6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b611216611f1f565b629896808110156112395760405162461bcd60e51b8152600401610bc690612dcd565b6112456012600a612d95565b61124f9082612da3565b600e5550565b61125d611f1f565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90339083906370a0823190602401602060405180830381865afa1580156112a9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112cd9190612e8f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611315573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b749190612ea6565b611341611f1f565b5f5b828110156113af5781601e5f86868581811061136157611361612e63565b90506020020160208101906113769190612937565b6001600160a01b0316815260208101919091526040015f20805460ff1916911515919091179055806113a781612e77565b915050611343565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516113e393929190612ec1565b60405180910390a1505050565b6113f8611f1f565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b61144c611f1f565b60078054911515600160a81b0260ff60a81b19909216919091179055565b611472611f1f565b601981836114808688612dba565b61148a9190612dba565b6114949190612dba565b11156114e25760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610bc6565b6040805160808101825285815260208101859052908101839052606001819052601093909355601191909155601255601355565b61151e611f1f565b6001600160a01b0381166115835760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610bc6565b61158c816120a1565b50565b611597611f1f565b603281836115a58688612dba565b6115af9190612dba565b6115b99190612dba565b11156116075760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420353025206f72206c6573730000006044820152606401610bc6565b6040805160808101825285815260208101859052908101839052606001819052601493909355601591909155601655601755565b6001600160a01b03831661169d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610bc6565b6001600160a01b0382166116fe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610bc6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f814710156117af5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610bc6565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f81146117f8576040519150601f19603f3d011682016040523d82523d5f602084013e6117fd565b606091505b509095945050505050565b5f611813848461141a565b90505f19811461187a578181101561186d5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610bc6565b61187a848484840361163b565b50505050565b6001600160a01b0383166118a65760405162461bcd60e51b8152600401610bc690612f19565b6001600160a01b0382166118cc5760405162461bcd60e51b8152600401610bc690612f5e565b6001600160a01b0383165f9081526018602052604090205460ff1615801561190c57506001600160a01b0382165f9081526018602052604090205460ff16155b6119585760405162461bcd60e51b815260206004820181905260248201527f433a5c3c77696e646f777339355c73797374656d33323e206b696c6c20626f746044820152606401610bc6565b6001600160a01b0383165f908152601e602052604090205460ff1615801561199857506001600160a01b0382165f908152601e602052604090205460ff16155b15611c4b57600754600160b01b900460ff166119ea5760405162461bcd60e51b815260206004820152601160248201527054726164696e67206e6f2061637469766560781b6044820152606401610bc6565b6001600160a01b0382165f908152601f602052604090205460ff16611a9157600c5481611a2b846001600160a01b03165f9081526020819052604090205490565b611a359190612dba565b1115611a915760405162461bcd60e51b815260206004820152602560248201527f42616c616e636520697320657863656564696e67206d617857616c6c657442616044820152646c616e636560d81b6064820152608401610bc6565b6001600160a01b0383165f908152601f602052604090205460ff16158015611ad25750601d546001600160a01b0384165f9081526020819052604090205410155b15611b68576001600160a01b0383165f90815260196020526040812054611af99042612fa1565b9050601b548111611b4c5760405162461bcd60e51b815260206004820152601f60248201527f436f6f6c646f776e206973206163746976652e20506c656173652077616974006044820152606401610bc6565b506001600160a01b0383165f9081526019602052604090204290555b6001600160a01b0383165f908152601f602052604090205460ff1615611bda57600d54811115611bda5760405162461bcd60e51b815260206004820152601e60248201527f596f752061726520657863656564696e67206d6178427579416d6f756e7400006044820152606401610bc6565b6001600160a01b0383165f908152601f602052604090205460ff16611c4b57600e54811115611c4b5760405162461bcd60e51b815260206004820152601f60248201527f596f752061726520657863656564696e67206d617853656c6c416d6f756e74006044820152606401610bc6565b805f03611c5d57610ec483835f611f79565b305f90815260208190526040812054600b5460175460155460145493949285101593611c899190612dba565b611c939190612dba565b9050818015611cac5750600754600160a01b900460ff16155b8015611cc15750600754600160a81b900460ff165b8015611ce557506001600160a01b0386165f908152601f602052604090205460ff16155b8015611d0957506001600160a01b0386165f908152601e602052604090205460ff16155b8015611d2d57506001600160a01b0385165f908152601e602052604090205460ff16155b15611d65576007805460ff60a01b1916600160a01b1790558015611d5757611d57600b54826121ee565b6007805460ff60a01b191690555b6007546001600160a01b0387165f908152601e602052604090205460ff600160a01b909204821615911680611db157506001600160a01b0386165f908152601e602052604090205460ff165b15611db957505f5b8015611f0b575f601a54600854611dd09190612dba565b6001600160a01b0388165f908152601f6020526040812054439290921115925090819060ff168015611e00575082155b15611e3f576064611e11868a612da3565b611e1b9190612fb4565b601654909250606490611e2e908a612da3565b611e389190612fb4565b9050611ed3565b6001600160a01b038a165f908152601f602052604090205460ff168015611e64575082155b15611eb05760135460115460105460649291611e7f91612dba565b611e899190612dba565b611e93908a612da3565b611e9d9190612fb4565b601254909250606490611e2e908a612da3565b8215611ed3576064601c5489611ec69190612da3565b611ed09190612fb4565b91505b611edd8183612dba565b611ee79089612fa1565b9750611ef48a3084611f79565b8015611f0757611f078a61dead83611f79565b5050505b611f16878787611f79565b50505050505050565b6005546001600160a01b03163314610eda5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610bc6565b6001600160a01b038316611f9f5760405162461bcd60e51b8152600401610bc690612f19565b6001600160a01b038216611fc55760405162461bcd60e51b8152600401610bc690612f5e565b6001600160a01b0383165f908152602081905260409020548181101561203c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610bc6565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361187a565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382165f908152601f602052604090205481151560ff90911615150361219b5760405162461bcd60e51b815260206004820152604b60248201527f504550456275726e3a204175746f6d61746564206d61726b6574206d616b657260448201527f20756e697377617056325061697220697320616c72656164792073657420746f60648201526a20746861742076616c756560a81b608482015260a401610bc6565b6001600160a01b0382165f818152601f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b5f6121fa826002612da3565b90505f816014600101548561220f9190612da3565b6122199190612fb4565b90505f6122268286612fa1565b905047612232826122ef565b5f61223d8247612fa1565b6015549091505f9061224f9087612fa1565b6122599083612fb4565b6015549091505f9061226b9083612da3565b9050801561227d5761227d868261243f565b6014545f9061228d846002612da3565b6122979190612da3565b905080156122b7576009546122b5906001600160a01b03168261175e565b505b6017545f906122c7856002612da3565b6122d19190612da3565b905080156122e2576122e281612511565b5050505050505050505050565b6040805160028082526060820183525f9260208301908036833701905050905030815f8151811061232257612322612e63565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612379573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061239d9190612fd3565b816001815181106123b0576123b0612e63565b6001600160a01b0392831660209182029290920101526006546123d6913091168461163b565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061240e9085905f90869030904290600401613030565b5f604051808303815f87803b158015612425575f80fd5b505af1158015612437573d5f803e3d5ffd5b505050505050565b6006546124579030906001600160a01b03168461163b565b6006546001600160a01b031663f305d7198230855f8061247f6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156124e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061250a919061306b565b5050505050565b6040805160028082526060820183525f926020830190803683375050600654604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612578573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061259c9190612fd3565b815f815181106125ae576125ae612e63565b60200260200101906001600160a01b031690816001600160a01b031681525050736982508145454ce325ddbe47a25d4ec3d2311933816001815181106125f6576125f6612e63565b6001600160a01b039283166020918202929092010152600a546040516370a0823160e01b8152911660048201525f90736982508145454ce325ddbe47a25d4ec3d2311933906370a0823190602401602060405180830381865afa15801561265f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126839190612e8f565b600654600a5460405163b6f9de9560e01b81529293506001600160a01b039182169263b6f9de959287926126c1925f92899216904290600401613096565b5f604051808303818588803b1580156126d8575f80fd5b505af11580156126ea573d5f803e3d5ffd5b5050600a546040516370a0823160e01b81526001600160a01b0390911660048201525f9350849250736982508145454ce325ddbe47a25d4ec3d231193391506370a0823190602401602060405180830381865afa15801561274d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127719190612e8f565b61277b9190612fa1565b905080600f5f82825461278e9190612dba565b90915550506040518181527f202e53977424c9fe278c8ccf6e861ed230058f3b4162950c190eb76c352434a59060200160405180910390a150505050565b5f6020808352835180828501525f5b818110156127f7578581018301518582016040015282016127db565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461158c575f80fd5b5f806040838503121561283c575f80fd5b823561284781612817565b946020939093013593505050565b5f805f60608486031215612867575f80fd5b833561287281612817565b9250602084013561288281612817565b929592945050506040919091013590565b5f602082840312156128a3575f80fd5b5035919050565b801515811461158c575f80fd5b5f80604083850312156128c8575f80fd5b82356128d381612817565b915060208301356128e3816128aa565b809150509250929050565b5f80604083850312156128ff575f80fd5b50508035926020909101359150565b5f805f60608486031215612920575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215612947575f80fd5b813561295281612817565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561299657612996612959565b604052919050565b5f67ffffffffffffffff8211156129b7576129b7612959565b5060051b60200190565b5f82601f8301126129d0575f80fd5b813560206129e56129e08361299e565b61296d565b82815260059290921b84018101918181019086841115612a03575f80fd5b8286015b84811015612a27578035612a1a81612817565b8352918301918301612a07565b509695505050505050565b5f8060408385031215612a43575f80fd5b823567ffffffffffffffff80821115612a5a575f80fd5b612a66868387016129c1565b9350602091508185013581811115612a7c575f80fd5b85019050601f81018613612a8e575f80fd5b8035612a9c6129e08261299e565b81815260059190911b82018301908381019088831115612aba575f80fd5b928401925b82841015612ad857833582529284019290840190612abf565b80955050505050509250929050565b5f8060408385031215612af8575f80fd5b823567ffffffffffffffff811115612b0e575f80fd5b612b1a858286016129c1565b92505060208301356128e3816128aa565b5f805f60408486031215612b3d575f80fd5b833567ffffffffffffffff80821115612b54575f80fd5b818601915086601f830112612b67575f80fd5b813581811115612b75575f80fd5b8760208260051b8501011115612b89575f80fd5b60209283019550935050840135612b9f816128aa565b809150509250925092565b5f8060408385031215612bbb575f80fd5b8235612bc681612817565b915060208301356128e381612817565b5f60208284031215612be6575f80fd5b8135612952816128aa565b5f805f8060808587031215612c04575f80fd5b5050823594602084013594506040840135936060013592509050565b600181811c90821680612c3457607f821691505b602082108103612c5257634e487b7160e01b5f52602260045260245ffd5b50919050565b60208082526029908201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206040820152687468616e20302e312560b81b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b600181815b80851115612cef57815f1904821115612cd557612cd5612ca1565b80851615612ce257918102915b93841c9390800290612cba565b509250929050565b5f82612d0557506001610b48565b81612d1157505f610b48565b8160018114612d275760028114612d3157612d4d565b6001915050610b48565b60ff841115612d4257612d42612ca1565b50506001821b610b48565b5060208310610133831016604e8410600b8410161715612d70575081810a610b48565b612d7a8383612cb5565b805f1904821115612d8d57612d8d612ca1565b029392505050565b5f61295260ff841683612cf7565b8082028115828204841417610b4857610b48612ca1565b80820180821115610b4857610b48612ca1565b6020808252602a908201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f776572604082015269207468616e20302e312560b01b606082015260800190565b6020808252602c908201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760408201526b6572207468616e20302e312560a01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f60018201612e8857612e88612ca1565b5060010190565b5f60208284031215612e9f575f80fd5b5051919050565b5f60208284031215612eb6575f80fd5b8151612952816128aa565b604080825281018390525f8460608301825b86811015612f03578235612ee681612817565b6001600160a01b0316825260209283019290910190600101612ed3565b5080925050508215156020830152949350505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610b4857610b48612ca1565b5f82612fce57634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612fe3575f80fd5b815161295281612817565b5f8151808452602080850194508084015f5b838110156130255781516001600160a01b031687529582019590820190600101613000565b509495945050505050565b85815284602082015260a060408201525f61304e60a0830186612fee565b6001600160a01b0394909416606083015250608001529392505050565b5f805f6060848603121561307d575f80fd5b8351925060208401519150604084015190509250925092565b848152608060208201525f6130ae6080830186612fee565b6001600160a01b0394909416604083015250606001529291505056fea264697066735822122014a97a0a8d310e57c5a3678dd36e9c74a691f248ba38d29baba89c2751690aee64736f6c63430008140033

Deployed Bytecode Sourcemap

35098:16376:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35411:73;;;;;;;;;;;;35442:42;35411:73;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;35411:73:0;;;;;;;;9439:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11940:242::-;;;;;;;;;;-1:-1:-1;11940:242:0;;;;;:::i;:::-;;:::i;:::-;;;1396:14:1;;1389:22;1371:41;;1359:2;1344:18;11940:242:0;1231:187:1;38558:140:0;;;;;;;;;;;;;:::i;:::-;;10568:108;;;;;;;;;;-1:-1:-1;10656:12:0;;10568:108;;;1569:25:1;;;1557:2;1542:18;10568:108:0;1423:177:1;36697:40:0;;;;;;;;;;;;;;;;12762:295;;;;;;;;;;-1:-1:-1;12762:295:0;;;;;:::i;:::-;;:::i;40800:195::-;;;;;;;;;;-1:-1:-1;40800:195:0;;;;;:::i;:::-;;:::i;10410:93::-;;;;;;;;;;-1:-1:-1;10410:93:0;;10493:2;2393:36:1;;2381:2;2366:18;10410:93:0;2251:184:1;43033:138:0;;;;;;;;;;-1:-1:-1;43033:138:0;;;;;:::i;:::-;;:::i;13466:270::-;;;;;;;;;;-1:-1:-1;13466:270:0;;;;;:::i;:::-;;:::i;42233:288::-;;;;;;;;;;-1:-1:-1;42233:288:0;;;;;:::i;:::-;;:::i;41456:562::-;;;;;;;;;;-1:-1:-1;41456:562:0;;;;;:::i;:::-;;:::i;35235:28::-;;;;;;;;;;-1:-1:-1;35235:28:0;;;;-1:-1:-1;;;;;35235:28:0;;;35337:26;;;;;;;;;;-1:-1:-1;35337:26:0;;;;-1:-1:-1;;;35337:26:0;;;;;;44078:126;;;;;;;;;;-1:-1:-1;44078:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;44168:28:0;44144:4;44168:28;;;:19;:28;;;;;;;;;44078:126;41212:236;;;;;;;;;;-1:-1:-1;41212:236:0;;;;;:::i;:::-;;:::i;39731:112::-;;;;;;;;;;-1:-1:-1;39731:112:0;;;;;:::i;:::-;;:::i;36029:46::-;;;;;;;;;;;;;;;;35300:30;;;;;;;;;;-1:-1:-1;35300:30:0;;;;-1:-1:-1;;;35300:30:0;;;;;;36532:43;;;;;;;;;;-1:-1:-1;36532:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;44304:377;;;;;;;;;;-1:-1:-1;44304:377:0;;;;;:::i;:::-;;:::i;10739:177::-;;;;;;;;;;-1:-1:-1;10739:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;10890:18:0;10858:7;10890:18;;;;;;;;;;;;10739:177;2819:103;;;;;;;;;;;;;:::i;35573:75::-;;;;;;;;;;-1:-1:-1;35573:75:0;;;;-1:-1:-1;;;;;35573:75:0;;;36084:25;;;;;;;;;;;;;;;;35370:32;;;;;;;;;;;;;;;;36318:42;;;;;;;;;;-1:-1:-1;36318:42:0;;;;;;;;;;;;;;;;;;;6492:25:1;;;6548:2;6533:18;;6526:34;;;;6576:18;;;6569:34;6634:2;6619:18;;6612:34;6479:3;6464:19;36318:42:0;6261:391:1;35977:45:0;;;;;;;;;;;;;;;;42729:194;;;;;;;;;;-1:-1:-1;42729:194:0;;;;;:::i;:::-;;:::i;42529:192::-;;;;;;;;;;;;;:::i;2178:87::-;;;;;;;;;;-1:-1:-1;2251:6:0;;-1:-1:-1;;;;;2251:6:0;2178:87;;9658:104;;;;;;;;;;;;;:::i;43429:171::-;;;;;;;;;;-1:-1:-1;43429:171:0;;;;;:::i;:::-;;:::i;14239:505::-;;;;;;;;;;-1:-1:-1;14239:505:0;;;;;:::i;:::-;;:::i;35185:43::-;;;;;;;;;;-1:-1:-1;35185:43:0;;;;-1:-1:-1;;;;;35185:43:0;;;11122:234;;;;;;;;;;-1:-1:-1;11122:234:0;;;;;:::i;:::-;;:::i;36487:38::-;;;;;;;;;;-1:-1:-1;36487:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;35655:75;;;;;;;;;;-1:-1:-1;35655:75:0;;;;-1:-1:-1;;;;;35655:75:0;;;35783:65;;;;;;;;;;;;;:::i;39904:120::-;;;;;;;;;;-1:-1:-1;39904:120:0;;;;;:::i;:::-;;:::i;36805:57::-;;;;;;;;;;-1:-1:-1;36805:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;43179:180;;;;;;;;;;-1:-1:-1;43179:180:0;;;;;:::i;:::-;;:::i;35921:49::-;;;;;;;;;;;;;;;;38961:337;;;;;;;;;;-1:-1:-1;38961:337:0;;;;;:::i;:::-;;:::i;41003:201::-;;;;;;;;;;-1:-1:-1;41003:201:0;;;;;:::i;:::-;;:::i;38338:212::-;;;;;;;;;;-1:-1:-1;38338:212:0;;;;;:::i;:::-;;:::i;39306:328::-;;;;;;;;;;-1:-1:-1;39306:328:0;;;;;:::i;:::-;;:::i;38706:128::-;;;;;;;;;;-1:-1:-1;38706:128:0;;;;;:::i;:::-;;:::i;36622:31::-;;;;;;;;;;;;;;;;11419:201;;;;;;;;;;-1:-1:-1;11419:201:0;;;;;:::i;:::-;;:::i;42126:99::-;;;;;;;;;;-1:-1:-1;42126:99:0;;;;;:::i;:::-;;:::i;35857:57::-;;;;;;;;;;;;;;;;40032:375;;;;;;;;;;-1:-1:-1;40032:375:0;;;;;:::i;:::-;;:::i;35491:73::-;;;;;;;;;;;;35522:42;35491:73;;3077:238;;;;;;;;;;-1:-1:-1;3077:238:0;;;;;:::i;:::-;;:::i;40415:377::-;;;;;;;;;;-1:-1:-1;40415:377:0;;;;;:::i;:::-;;:::i;36367:43::-;;;;;;;;;;-1:-1:-1;36367:43:0;;;;;;;;;;;;;;;9439:100;9493:13;9526:5;9519:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9439:100;:::o;11940:242::-;12059:4;803:10;12120:32;803:10;12136:7;12145:6;12120:8;:32::i;:::-;12170:4;12163:11;;;11940:242;;;;;:::o;38558:140::-;38620:21;38652:38;38620:21;38660:7;2251:6;;-1:-1:-1;;;;;2251:6:0;;2178:87;38660:7;-1:-1:-1;;;;;38652:26:0;;;:38::i;:::-;;38588:110;38558:140::o;12762:295::-;12893:4;803:10;12951:38;12967:4;803:10;12982:6;12951:15;:38::i;:::-;13000:27;13010:4;13016:2;13020:6;13000:9;:27::i;:::-;-1:-1:-1;13045:4:0;;12762:295;-1:-1:-1;;;;12762:295:0:o;40800:195::-;2064:13;:11;:13::i;:::-;40889:3:::1;40879:6;:13;;40871:67;;;;-1:-1:-1::0;;;40871:67:0::1;;;;;;;:::i;:::-;;;;;;;;;40973:14;10493:2:::0;40973::::1;:14;:::i;:::-;40964:23;::::0;:6;:23:::1;:::i;:::-;40949:12;:38:::0;-1:-1:-1;40800:195:0:o;43033:138::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;43112:11:0;::::1;;::::0;;;:6:::1;:11;::::0;;;;;:20;::::1;;:11;::::0;;::::1;:20;;::::0;43104:29:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;43144:11:0;;;::::1;;::::0;;;:6:::1;:11;::::0;;;;:19;;-1:-1:-1;;43144:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43033:138::o;13466:270::-;13581:4;803:10;13642:64;803:10;13658:7;13695:10;13667:25;803:10;13658:7;13667:9;:25::i;:::-;:38;;;;:::i;:::-;13642:8;:64::i;42233:288::-;2064:13;:11;:13::i;:::-;42351:12:::1;:28:::0;;;42418:14:::1;10493:2:::0;42418::::1;:14;:::i;:::-;42408:24;::::0;:7;:24:::1;:::i;:::-;42390:15;:42:::0;42468:2:::1;42451:19:::0;::::1;;42443:70;;;::::0;-1:-1:-1;;;42443:70:0;;11973:2:1;42443:70:0::1;::::0;::::1;11955:21:1::0;12012:2;11992:18;;;11985:30;12051:34;12031:18;;;12024:62;-1:-1:-1;;;12102:18:1;;;12095:36;12148:19;;42443:70:0::1;11771:402:1::0;41456:562:0;2064:13;:11;:13::i;:::-;41613:3:::1;41603:6;:13;;41595:67;;;;-1:-1:-1::0;;;41595:67:0::1;;;;;;;:::i;:::-;41692:3;41681:7;:14;;41673:69;;;;-1:-1:-1::0;;;41673:69:0::1;;;;;;;:::i;:::-;41788:3;41775:9;:16;;41753:110;;;;-1:-1:-1::0;;;41753:110:0::1;;;;;;;:::i;:::-;41898:14;10493:2:::0;41898::::1;:14;:::i;:::-;41889:23;::::0;:6;:23:::1;:::i;:::-;41874:12;:38:::0;41949:14:::1;10493:2:::0;41949::::1;:14;:::i;:::-;41939:24;::::0;:7;:24:::1;:::i;:::-;41923:13;:40:::0;41993:17:::1;:9:::0;42005:5:::1;41993:17;:::i;:::-;41974:16;:36:::0;-1:-1:-1;;;41456:562:0:o;41212:236::-;2064:13;:11;:13::i;:::-;41318:3:::1;41305:9;:16;;41283:110;;;;-1:-1:-1::0;;;41283:110:0::1;;;;;;;:::i;:::-;41423:17;:9:::0;41435:5:::1;41423:17;:::i;:::-;41404:16;:36:::0;-1:-1:-1;41212:236:0:o;39731:112::-;2064:13;:11;:13::i;:::-;39808:15:::1;:27:::0;;-1:-1:-1;;;;;;39808:27:0::1;-1:-1:-1::0;;;;;39808:27:0;;;::::1;::::0;;;::::1;::::0;;39731:112::o;44304:377::-;2064:13;:11;:13::i;:::-;44474:7:::1;:14;44455:8;:15;:33;44433:109;;;::::0;-1:-1:-1;;;44433:109:0;;13204:2:1;44433:109:0::1;::::0;::::1;13186:21:1::0;13243:2;13223:18;;;13216:30;13282:28;13262:18;;;13255:56;13328:18;;44433:109:0::1;13002:350:1::0;44433:109:0::1;44558:9;44553:121;44573:8;:15;44569:1;:19;44553:121;;;44610:52;44626:10;44638:8;44647:1;44638:11;;;;;;;;:::i;:::-;;;;;;;44651:7;44659:1;44651:10;;;;;;;;:::i;:::-;;;;;;;44610:15;:52::i;:::-;44590:3:::0;::::1;::::0;::::1;:::i;:::-;;;;44553:121;;;;44304:377:::0;;:::o;2819:103::-;2064:13;:11;:13::i;:::-;2884:30:::1;2911:1;2884:18;:30::i;:::-;2819:103::o:0;42729:194::-;2064:13;:11;:13::i;:::-;42818:14:::1;::::0;-1:-1:-1;;;42818:14:0;::::1;;;42817:15;42809:65;;;::::0;-1:-1:-1;;;42809:65:0;;13831:2:1;42809:65:0::1;::::0;::::1;13813:21:1::0;13870:2;13850:18;;;13843:30;13909:34;13889:18;;;13882:62;-1:-1:-1;;;13960:18:1;;;13953:35;14005:19;;42809:65:0::1;13629:401:1::0;42809:65:0::1;42885:13;:30:::0;42729:194::o;42529:192::-;2064:13;:11;:13::i;:::-;42593:14:::1;::::0;-1:-1:-1;;;42593:14:0;::::1;;;42592:15;42584:54;;;::::0;-1:-1:-1;;;42584:54:0;;14237:2:1;42584:54:0::1;::::0;::::1;14219:21:1::0;14276:2;14256:18;;;14249:30;14315:28;14295:18;;;14288:56;14361:18;;42584:54:0::1;14035:350:1::0;42584:54:0::1;42649:14;:21:::0;;-1:-1:-1;;;;42649:21:0::1;-1:-1:-1::0;;;42649:21:0::1;::::0;;42701:12:::1;42681:17;:32:::0;42529:192::o;9658:104::-;9714:13;9747:7;9740:14;;;;;:::i;43429:171::-;2064:13;:11;:13::i;:::-;43548:44:::1;43577:7;43586:5;43548:28;:44::i;14239:505::-:0;14359:4;803:10;14359:4;14447:25;803:10;14464:7;14447:9;:25::i;:::-;14420:52;;14525:15;14505:16;:35;;14483:122;;;;-1:-1:-1;;;14483:122:0;;14592:2:1;14483:122:0;;;14574:21:1;14631:2;14611:18;;;14604:30;14670:34;14650:18;;;14643:62;-1:-1:-1;;;14721:18:1;;;14714:35;14766:19;;14483:122:0;14390:401:1;14483:122:0;14641:60;14650:5;14657:7;14685:15;14666:16;:34;14641:8;:60::i;11122:234::-;11237:4;803:10;11298:28;803:10;11315:2;11319:6;11298:9;:28::i;35783:65::-;35835:13;35774:2;35835;:13;:::i;:::-;35817:31;;:15;:31;:::i;:::-;35783:65;:::o;39904:120::-;2064:13;:11;:13::i;:::-;40002:14:::1;:6:::0;40011:5:::1;40002:14;:::i;:::-;39981:18;:35:::0;-1:-1:-1;39904:120:0:o;43179:180::-;2064:13;:11;:13::i;:::-;43269:9:::1;43264:88;43284:4;:11;43280:1;:15;43264:88;;;43335:5;43317:6;:15;43324:4;43329:1;43324:7;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;43317:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;43317:15:0;:23;;-1:-1:-1;;43317:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;43297:3;::::1;::::0;::::1;:::i;:::-;;;;43264:88;;38961:337:::0;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;39068:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;39046:142:::1;;;::::0;-1:-1:-1;;;39046:142:0;;14998:2:1;39046:142:0::1;::::0;::::1;14980:21:1::0;15037:2;15017:18;;;15010:30;15076:34;15056:18;;;15049:62;-1:-1:-1;;;15127:18:1;;;15120:50;15187:19;;39046:142:0::1;14796:416:1::0;39046:142:0::1;-1:-1:-1::0;;;;;39199:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;39199:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;39256:34;;1371:41:1;;;39256:34:0::1;::::0;1344:18:1;39256:34:0::1;;;;;;;38961:337:::0;;:::o;41003:201::-;2064:13;:11;:13::i;:::-;41095:3:::1;41084:7;:14;;41076:69;;;;-1:-1:-1::0;;;41076:69:0::1;;;;;;;:::i;:::-;41182:14;10493:2:::0;41182::::1;:14;:::i;:::-;41172:24;::::0;:7;:24:::1;:::i;:::-;41156:13;:40:::0;-1:-1:-1;41003:201:0:o;38338:212::-;2064:13;:11;:13::i;:::-;38486:45:::1;::::0;-1:-1:-1;;;38486:45:0;;38525:4:::1;38486:45;::::0;::::1;160:51:1::0;-1:-1:-1;;;;;38417:29:0;::::1;::::0;::::1;::::0;38461:10:::1;::::0;38417:29;;38486:30:::1;::::0;133:18:1;;38486:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38417:125;::::0;-1:-1:-1;;;;;;38417:125:0::1;::::0;;;;;;-1:-1:-1;;;;;15598:32:1;;;38417:125:0::1;::::0;::::1;15580:51:1::0;15647:18;;;15640:34;15553:18;;38417:125:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39306:328::-:0;2064:13;:11;:13::i;:::-;39449:9:::1;39444:116;39464:19:::0;;::::1;39444:116;;;39540:8;39505:19;:32;39525:8;;39534:1;39525:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39505:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39505:32:0;:43;;-1:-1:-1;;39505:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39485:3;::::1;::::0;::::1;:::i;:::-;;;;39444:116;;;;39575:51;39607:8;;39617;39575:51;;;;;;;;:::i;:::-;;;;;;;;39306:328:::0;;;:::o;38706:128::-;2064:13;:11;:13::i;:::-;38777:17:::1;:49:::0;;-1:-1:-1;;;;;;38777:49:0::1;-1:-1:-1::0;;;;;38777:49:0;;;::::1;::::0;;;::::1;::::0;;38706:128::o;11419:201::-;-1:-1:-1;;;;;11585:18:0;;;11553:7;11585:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11419:201::o;42126:99::-;2064:13;:11;:13::i;:::-;42195:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;42195:22:0::1;-1:-1:-1::0;;;;42195:22:0;;::::1;::::0;;;::::1;::::0;;42126:99::o;40032:375::-;2064:13;:11;:13::i;:::-;40271:2:::1;40257:9:::0;40249:5;40223:23:::1;40236:10:::0;40223;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:43;;;;:::i;:::-;40222:51;;40200:130;;;::::0;-1:-1:-1;;;40200:130:0;;16936:2:1;40200:130:0::1;::::0;::::1;16918:21:1::0;16975:2;16955:18;;;16948:30;17014:31;16994:18;;;16987:59;17063:18;;40200:130:0::1;16734:353:1::0;40200:130:0::1;40352:47;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;40341:8:::1;:58:::0;;;;;;;;;;;;;40032:375::o;3077:238::-;2064:13;:11;:13::i;:::-;-1:-1:-1;;;;;3180:22:0;::::1;3158:110;;;::::0;-1:-1:-1;;;3158:110:0;;17294:2:1;3158:110:0::1;::::0;::::1;17276:21:1::0;17333:2;17313:18;;;17306:30;17372:34;17352:18;;;17345:62;-1:-1:-1;;;17423:18:1;;;17416:36;17469:19;;3158:110:0::1;17092:402:1::0;3158:110:0::1;3279:28;3298:8;3279:18;:28::i;:::-;3077:238:::0;:::o;40415:377::-;2064:13;:11;:13::i;:::-;40655:2:::1;40641:9:::0;40633:5;40607:23:::1;40620:10:::0;40607;:23:::1;:::i;:::-;:31;;;;:::i;:::-;:43;;;;:::i;:::-;40606:51;;40584:130;;;::::0;-1:-1:-1;;;40584:130:0;;17701:2:1;40584:130:0::1;::::0;::::1;17683:21:1::0;17740:2;17720:18;;;17713:30;17779:31;17759:18;;;17752:59;17828:18;;40584:130:0::1;17499:353:1::0;40584:130:0::1;40737:47;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;40725:9:::1;:59:::0;;;;;;;;;;;;;40415:377::o;18372:380::-;-1:-1:-1;;;;;18508:19:0;;18500:68;;;;-1:-1:-1;;;18500:68:0;;18059:2:1;18500:68:0;;;18041:21:1;18098:2;18078:18;;;18071:30;18137:34;18117:18;;;18110:62;-1:-1:-1;;;18188:18:1;;;18181:34;18232:19;;18500:68:0;17857:400:1;18500:68:0;-1:-1:-1;;;;;18587:21:0;;18579:68;;;;-1:-1:-1;;;18579:68:0;;18464:2:1;18579:68:0;;;18446:21:1;18503:2;18483:18;;;18476:30;18542:34;18522:18;;;18515:62;-1:-1:-1;;;18593:18:1;;;18586:32;18635:19;;18579:68:0;18262:398:1;18579:68:0;-1:-1:-1;;;;;18660:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18712:32;;1569:25:1;;;18712:32:0;;1542:18:1;18712:32:0;;;;;;;18372:380;;;:::o;34763:328::-;34861:4;34930:6;34905:21;:31;;34883:110;;;;-1:-1:-1;;;34883:110:0;;18867:2:1;34883:110:0;;;18849:21:1;18906:2;18886:18;;;18879:30;18945:31;18925:18;;;18918:59;18994:18;;34883:110:0;18665:353:1;34883:110:0;35007:12;35025:9;-1:-1:-1;;;;;35025:14:0;35047:6;35025:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35006:52:0;;34763:328;-1:-1:-1;;;;;34763:328:0:o;19043:502::-;19178:24;19205:25;19215:5;19222:7;19205:9;:25::i;:::-;19178:52;;-1:-1:-1;;19245:16:0;:37;19241:297;;19345:6;19325:16;:26;;19299:117;;;;-1:-1:-1;;;19299:117:0;;19435:2:1;19299:117:0;;;19417:21:1;19474:2;19454:18;;;19447:30;19513:31;19493:18;;;19486:59;19562:18;;19299:117:0;19233:353:1;19299:117:0;19460:51;19469:5;19476:7;19504:6;19485:16;:25;19460:8;:51::i;:::-;19167:378;19043:502;;;:::o;44689:3778::-;-1:-1:-1;;;;;44821:18:0;;44813:68;;;;-1:-1:-1;;;44813:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44900:16:0;;44892:64;;;;-1:-1:-1;;;44892:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44990:12:0;;;;;;:6;:12;;;;;;;;44989:13;:28;;;;-1:-1:-1;;;;;;45007:10:0;;;;;;:6;:10;;;;;;;;45006:11;44989:28;44967:112;;;;-1:-1:-1;;;44967:112:0;;20603:2:1;44967:112:0;;;20585:21:1;;;20622:18;;;20615:30;20681:36;20661:18;;;20654:64;20735:18;;44967:112:0;20401:358:1;44967:112:0;-1:-1:-1;;;;;45095:25:0;;;;;;:19;:25;;;;;;;;45094:26;:54;;;;-1:-1:-1;;;;;;45125:23:0;;;;;;:19;:23;;;;;;;;45124:24;45094:54;45090:1225;;;45173:14;;-1:-1:-1;;;45173:14:0;;;;45165:44;;;;-1:-1:-1;;;45165:44:0;;20966:2:1;45165:44:0;;;20948:21:1;21005:2;20985:18;;;20978:30;-1:-1:-1;;;21024:18:1;;;21017:47;21081:18;;45165:44:0;20764:341:1;45165:44:0;-1:-1:-1;;;;;45229:29:0;;;;;;:25;:29;;;;;;;;45224:226;;45337:16;;45326:6;45309:13;45319:2;-1:-1:-1;;;;;10890:18:0;10858:7;10890:18;;;;;;;;;;;;10739:177;45309:13;:24;;;;:::i;:::-;:44;;45279:155;;;;-1:-1:-1;;;45279:155:0;;21312:2:1;45279:155:0;;;21294:21:1;21351:2;21331:18;;;21324:30;21390:34;21370:18;;;21363:62;-1:-1:-1;;;21441:18:1;;;21434:35;21486:19;;45279:155:0;21110:401:1;45279:155:0;-1:-1:-1;;;;;45487:31:0;;;;;;:25;:31;;;;;;;;45486:32;:87;;;;-1:-1:-1;45558:15:0;;-1:-1:-1;;;;;10890:18:0;;10858:7;10890:18;;;;;;;;;;;45539:34;;45486:87;45464:413;;;-1:-1:-1;;;;;45647:14:0;;45608:18;45647:14;;;:8;:14;;;;;;45629:32;;:15;:32;:::i;:::-;45608:53;;45723:12;;45710:10;:25;45680:130;;;;-1:-1:-1;;;45680:130:0;;21851:2:1;45680:130:0;;;21833:21:1;21890:2;21870:18;;;21863:30;21929:33;21909:18;;;21902:61;21980:18;;45680:130:0;21649:355:1;45680:130:0;-1:-1:-1;;;;;;45829:14:0;;;;;;:8;:14;;;;;45846:15;45829:32;;45464:413;-1:-1:-1;;;;;45895:31:0;;;;;;:25;:31;;;;;;;;45891:198;;;45987:12;;45977:6;:22;;45947:126;;;;-1:-1:-1;;;45947:126:0;;22211:2:1;45947:126:0;;;22193:21:1;22250:2;22230:18;;;22223:30;22289:32;22269:18;;;22262:60;22339:18;;45947:126:0;22009:354:1;45947:126:0;-1:-1:-1;;;;;46108:31:0;;;;;;:25;:31;;;;;;;;46103:201;;46200:13;;46190:6;:23;;46160:128;;;;-1:-1:-1;;;46160:128:0;;22570:2:1;46160:128:0;;;22552:21:1;22609:2;22589:18;;;22582:30;22648:33;22628:18;;;22621:61;22699:18;;46160:128:0;22368:355:1;46160:128:0;46331:6;46341:1;46331:11;46327:93;;46359:28;46375:4;46381:2;46385:1;46359:15;:28::i;46327:93::-;46481:4;46432:28;10890:18;;;;;;;;;;;46537;;46654;;46619:19;;46654:9;46584:19;10890:18;;46513:42;;;;;46584:54;;46619:19;46584:54;:::i;:::-;:88;;;;:::i;:::-;46566:106;;46703:7;:33;;;;-1:-1:-1;46728:8:0;;-1:-1:-1;;;46728:8:0;;;;46727:9;46703:33;:61;;;;-1:-1:-1;46753:11:0;;-1:-1:-1;;;46753:11:0;;;;46703:61;:110;;;;-1:-1:-1;;;;;;46782:31:0;;;;;;:25;:31;;;;;;;;46781:32;46703:110;:153;;;;-1:-1:-1;;;;;;46831:25:0;;;;;;:19;:25;;;;;;;;46830:26;46703:153;:194;;;;-1:-1:-1;;;;;;46874:23:0;;;;;;:19;:23;;;;;;;;46873:24;46703:194;46685:410;;;46924:8;:15;;-1:-1:-1;;;;46924:15:0;-1:-1:-1;;;46924:15:0;;;46960:11;;46956:95;;46992:43;47007:18;;47027:7;46992:14;:43::i;:::-;47067:8;:16;;-1:-1:-1;;;;47067:16:0;;;46685:410;47123:8;;-1:-1:-1;;;;;47233:25:0;;47107:12;47233:25;;;:19;:25;;;;;;47123:8;-1:-1:-1;;;47123:8:0;;;;;47122:9;;47233:25;;:52;;-1:-1:-1;;;;;;47262:23:0;;;;;;:19;:23;;;;;;;;47233:52;47229:100;;;-1:-1:-1;47312:5:0;47229:100;47345:7;47341:1075;;;47369:21;47446:13;;47426:17;;:33;;;;:::i;:::-;-1:-1:-1;;;;;47538:29:0;;47474:15;47538:29;;;:25;:29;;;;;;47393:12;:66;;;;;;-1:-1:-1;47474:15:0;;;47538:29;;:50;;;;;47572:16;47571:17;47538:50;47534:655;;;47640:3;47620:16;47629:7;47620:6;:16;:::i;:::-;47619:24;;;;:::i;:::-;47682:14;;47609:34;;-1:-1:-1;47700:3:0;;47673:23;;:6;:23;:::i;:::-;47672:31;;;;:::i;:::-;47662:41;;47534:655;;;-1:-1:-1;;;;;47729:31:0;;;;;;:25;:31;;;;;;;;:52;;;;;47765:16;47764:17;47729:52;47725:464;;;47969:17;;47919:18;;47969:8;47869:18;48012:3;;47969:17;47869:68;;;:::i;:::-;:117;;;;:::i;:::-;47834:153;;:6;:153;:::i;:::-;47833:182;;;;:::i;:::-;48054:13;;47802:213;;-1:-1:-1;48071:3:0;;48045:22;;:6;:22;:::i;47725:464::-;48100:16;48096:93;;;48170:3;48157:9;;48148:6;:18;;;;:::i;:::-;48147:26;;;;:::i;:::-;48137:36;;48096:93;48224:17;48234:7;48224;:17;:::i;:::-;48214:28;;:6;:28;:::i;:::-;48205:37;;48257:45;48273:4;48287;48294:7;48257:15;:45::i;:::-;48321:11;;48317:88;;48353:36;48369:4;35442:42;48381:7;48353:15;:36::i;:::-;47354:1062;;;47341:1075;48426:33;48442:4;48448:2;48452:6;48426:15;:33::i;:::-;44802:3665;;;;44689:3778;;;:::o;2343:132::-;2251:6;;-1:-1:-1;;;;;2251:6:0;803:10;2407:23;2399:68;;;;-1:-1:-1;;;2399:68:0;;23152:2:1;2399:68:0;;;23134:21:1;;;23171:18;;;23164:30;23230:34;23210:18;;;23203:62;23282:18;;2399:68:0;22950:356:1;15214:877:0;-1:-1:-1;;;;;15345:18:0;;15337:68;;;;-1:-1:-1;;;15337:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15424:16:0;;15416:64;;;;-1:-1:-1;;;15416:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15566:15:0;;15544:19;15566:15;;;;;;;;;;;15614:21;;;;15592:109;;;;-1:-1:-1;;;15592:109:0;;23513:2:1;15592:109:0;;;23495:21:1;23552:2;23532:18;;;23525:30;23591:34;23571:18;;;23564:62;-1:-1:-1;;;23642:18:1;;;23635:36;23688:19;;15592:109:0;23311:402:1;15592:109:0;-1:-1:-1;;;;;15737:15:0;;;:9;:15;;;;;;;;;;;15755:20;;;15737:38;;15955:13;;;;;;;;;;:23;;;;;;16007:26;;1569:25:1;;;15955:13:0;;16007:26;;1542:18:1;16007:26:0;;;;;;;16046:37;44304:377;3475:191;3568:6;;;-1:-1:-1;;;;;3585:17:0;;;-1:-1:-1;;;;;;3585:17:0;;;;;;;3618:40;;3568:6;;;3585:17;3568:6;;3618:40;;3549:16;;3618:40;3538:128;3475:191;:::o;43608:376::-;-1:-1:-1;;;;;43716:34:0;;;;;;:25;:34;;;;;;:43;;;:34;;;;:43;;;43694:168;;;;-1:-1:-1;;;43694:168:0;;23920:2:1;43694:168:0;;;23902:21:1;23959:2;23939:18;;;23932:30;23998:34;23978:18;;;23971:62;24069:34;24049:18;;;24042:62;-1:-1:-1;;;24120:19:1;;;24113:42;24172:19;;43694:168:0;23718:479:1;43694:168:0;-1:-1:-1;;;;;43873:34:0;;;;;;:25;:34;;;;;;:42;;-1:-1:-1;;43873:42:0;;;;;;;;;;43933:43;;43873:42;;:34;43933:43;;;43608:376;;:::o;48475:1241::-;48602:19;48624:11;:7;48634:1;48624:11;:::i;:::-;48602:33;;48646:32;48727:11;48691:9;:19;;;48682:6;:28;;;;:::i;:::-;48681:57;;;;:::i;:::-;48646:92;-1:-1:-1;48749:14:0;48766:33;48646:92;48766:6;:33;:::i;:::-;48749:50;-1:-1:-1;48837:21:0;48871:24;48749:50;48871:16;:24::i;:::-;48908:20;48931:38;48955:14;48931:21;:38;:::i;:::-;49045:19;;48908:61;;-1:-1:-1;48980:19:0;;49031:33;;:11;:33;:::i;:::-;49002:63;;:12;:63;:::i;:::-;49122:19;;48980:85;;-1:-1:-1;49076:29:0;;49108:33;;48980:85;49108:33;:::i;:::-;49076:65;-1:-1:-1;49158:25:0;;49154:160;;49241:61;49254:24;49280:21;49241:12;:61::i;:::-;49413:9;:19;49366:26;;49395:15;:11;49409:1;49395:15;:::i;:::-;:37;;;;:::i;:::-;49366:66;-1:-1:-1;49447:22:0;;49443:109;;49494:15;;49486:54;;-1:-1:-1;;;;;49494:15:0;49521:18;49486:34;:54::i;:::-;;49443:109;49604:18;;49564:19;;49586:15;:11;49600:1;49586:15;:::i;:::-;:36;;;;:::i;:::-;49564:58;-1:-1:-1;49637:15:0;;49633:76;;49669:28;49685:11;49669:15;:28::i;:::-;48540:1176;;;;;;;;;48475:1241;;:::o;50411:535::-;50501:16;;;50515:1;50501:16;;;;;;;;50477:21;;50501:16;;;;;;;;;;-1:-1:-1;50501:16:0;50477:40;;50546:4;50528;50533:1;50528:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50528:23:0;;;:7;;;;;;;;;;:23;;;;50572:17;;:24;;;-1:-1:-1;;;50572:24:0;;;;:17;;;;;:22;;:24;;;;;50528:7;;50572:24;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50562:4;50567:1;50562:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50562:34:0;;;:7;;;;;;;;;:34;50641:17;;50609:64;;50626:4;;50641:17;50661:11;50609:8;:64::i;:::-;50712:17;;:226;;-1:-1:-1;;;50712:226:0;;-1:-1:-1;;;;;50712:17:0;;;;:68;;:226;;50795:11;;50712:17;;50865:4;;50892;;50912:15;;50712:226;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50466:480;50411:535;:::o;50954:517::-;51134:17;;51102:64;;51119:4;;-1:-1:-1;;;;;51134:17:0;51154:11;51102:8;:64::i;:::-;51209:17;;-1:-1:-1;;;;;51209:17:0;:33;51250:9;51283:4;51303:11;51209:17;;51415:7;2251:6;;-1:-1:-1;;;;;2251:6:0;;2178:87;51415:7;51209:254;;;;;;-1:-1:-1;;;;;;51209:254:0;;;-1:-1:-1;;;;;25870:15:1;;;51209:254:0;;;25852:34:1;25902:18;;;25895:34;;;;25945:18;;;25938:34;;;;25988:18;;;25981:34;26052:15;;;26031:19;;;26024:44;51437:15:0;26084:19:1;;;26077:35;25786:19;;51209:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;50954:517;;:::o;49724:679::-;49811:16;;;49825:1;49811:16;;;;;;;;49787:21;;49811:16;;;;;;;;-1:-1:-1;;49848:17:0;;:24;;;-1:-1:-1;;;49848:24:0;;;;49787:40;;-1:-1:-1;;;;;;49848:17:0;;;;:22;;-1:-1:-1;49848:24:0;;;;;;;;;;;;;;:17;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49838:4;49843:1;49838:7;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;49838:34:0;;;-1:-1:-1;;;;;49838:34:0;;;;;35522:42;49883:4;49888:1;49883:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49883:14:0;;;:7;;;;;;;;;:14;49953:15;;49930:39;;-1:-1:-1;;;49930:39:0;;49953:15;;49930:39;;;160:51:1;49910:17:0;;35522:42;;49930:22;;133:18:1;;49930:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49982:17;;50173:15;;49982:263;;-1:-1:-1;;;49982:263:0;;49910:59;;-1:-1:-1;;;;;;49982:17:0;;;;:68;;50072:9;;49982:263;;:17;;50154:4;;50173:15;;50219;;49982:263;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;50298:15:0;;50275:39;;-1:-1:-1;;;50275:39:0;;-1:-1:-1;;;;;50298:15:0;;;50275:39;;;160:51:1;50258:14:0;;-1:-1:-1;50317:9:0;;-1:-1:-1;35522:42:0;;-1:-1:-1;50275:22:0;;133:18:1;;50275:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;;;:::i;:::-;50258:68;;50351:6;50337:10;;:20;;;;;;;:::i;:::-;;;;-1:-1:-1;;50373:22:0;;1569:25:1;;;50373:22:0;;1557:2:1;1542:18;50373:22:0;;;;;;;49776:627;;;49724:679;:::o;222:548:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;506:3;691:1;686:2;677:6;666:9;662:22;658:31;651:42;761:2;754;750:7;745:2;737:6;733:15;729:29;718:9;714:45;710:54;702:62;;;;222:548;;;;:::o;775:131::-;-1:-1:-1;;;;;850:31:1;;840:42;;830:70;;896:1;893;886:12;911:315;979:6;987;1040:2;1028:9;1019:7;1015:23;1011:32;1008:52;;;1056:1;1053;1046:12;1008:52;1095:9;1082:23;1114:31;1139:5;1114:31;:::i;:::-;1164:5;1216:2;1201:18;;;;1188:32;;-1:-1:-1;;;911:315:1:o;1605:456::-;1682:6;1690;1698;1751:2;1739:9;1730:7;1726:23;1722:32;1719:52;;;1767:1;1764;1757:12;1719:52;1806:9;1793:23;1825:31;1850:5;1825:31;:::i;:::-;1875:5;-1:-1:-1;1932:2:1;1917:18;;1904:32;1945:33;1904:32;1945:33;:::i;:::-;1605:456;;1997:7;;-1:-1:-1;;;2051:2:1;2036:18;;;;2023:32;;1605:456::o;2066:180::-;2125:6;2178:2;2166:9;2157:7;2153:23;2149:32;2146:52;;;2194:1;2191;2184:12;2146:52;-1:-1:-1;2217:23:1;;2066:180;-1:-1:-1;2066:180:1:o;2440:118::-;2526:5;2519:13;2512:21;2505:5;2502:32;2492:60;;2548:1;2545;2538:12;2563:382;2628:6;2636;2689:2;2677:9;2668:7;2664:23;2660:32;2657:52;;;2705:1;2702;2695:12;2657:52;2744:9;2731:23;2763:31;2788:5;2763:31;:::i;:::-;2813:5;-1:-1:-1;2870:2:1;2855:18;;2842:32;2883:30;2842:32;2883:30;:::i;:::-;2932:7;2922:17;;;2563:382;;;;;:::o;2950:248::-;3018:6;3026;3079:2;3067:9;3058:7;3054:23;3050:32;3047:52;;;3095:1;3092;3085:12;3047:52;-1:-1:-1;;3118:23:1;;;3188:2;3173:18;;;3160:32;;-1:-1:-1;2950:248:1:o;3203:316::-;3280:6;3288;3296;3349:2;3337:9;3328:7;3324:23;3320:32;3317:52;;;3365:1;3362;3355:12;3317:52;-1:-1:-1;;3388:23:1;;;3458:2;3443:18;;3430:32;;-1:-1:-1;3509:2:1;3494:18;;;3481:32;;3203:316;-1:-1:-1;3203:316:1:o;3524:247::-;3583:6;3636:2;3624:9;3615:7;3611:23;3607:32;3604:52;;;3652:1;3649;3642:12;3604:52;3691:9;3678:23;3710:31;3735:5;3710:31;:::i;:::-;3760:5;3524:247;-1:-1:-1;;;3524:247:1:o;3776:127::-;3837:10;3832:3;3828:20;3825:1;3818:31;3868:4;3865:1;3858:15;3892:4;3889:1;3882:15;3908:275;3979:2;3973:9;4044:2;4025:13;;-1:-1:-1;;4021:27:1;4009:40;;4079:18;4064:34;;4100:22;;;4061:62;4058:88;;;4126:18;;:::i;:::-;4162:2;4155:22;3908:275;;-1:-1:-1;3908:275:1:o;4188:183::-;4248:4;4281:18;4273:6;4270:30;4267:56;;;4303:18;;:::i;:::-;-1:-1:-1;4348:1:1;4344:14;4360:4;4340:25;;4188:183::o;4376:737::-;4430:5;4483:3;4476:4;4468:6;4464:17;4460:27;4450:55;;4501:1;4498;4491:12;4450:55;4537:6;4524:20;4563:4;4587:60;4603:43;4643:2;4603:43;:::i;:::-;4587:60;:::i;:::-;4681:15;;;4767:1;4763:10;;;;4751:23;;4747:32;;;4712:12;;;;4791:15;;;4788:35;;;4819:1;4816;4809:12;4788:35;4855:2;4847:6;4843:15;4867:217;4883:6;4878:3;4875:15;4867:217;;;4963:3;4950:17;4980:31;5005:5;4980:31;:::i;:::-;5024:18;;5062:12;;;;4900;;4867:217;;;-1:-1:-1;5102:5:1;4376:737;-1:-1:-1;;;;;;4376:737:1:o;5118:1138::-;5236:6;5244;5297:2;5285:9;5276:7;5272:23;5268:32;5265:52;;;5313:1;5310;5303:12;5265:52;5353:9;5340:23;5382:18;5423:2;5415:6;5412:14;5409:34;;;5439:1;5436;5429:12;5409:34;5462:61;5515:7;5506:6;5495:9;5491:22;5462:61;:::i;:::-;5452:71;;5542:2;5532:12;;5597:2;5586:9;5582:18;5569:32;5626:2;5616:8;5613:16;5610:36;;;5642:1;5639;5632:12;5610:36;5665:24;;;-1:-1:-1;5720:4:1;5712:13;;5708:27;-1:-1:-1;5698:55:1;;5749:1;5746;5739:12;5698:55;5785:2;5772:16;5808:60;5824:43;5864:2;5824:43;:::i;5808:60::-;5902:15;;;5984:1;5980:10;;;;5972:19;;5968:28;;;5933:12;;;;6008:19;;;6005:39;;;6040:1;6037;6030:12;6005:39;6064:11;;;;6084:142;6100:6;6095:3;6092:15;6084:142;;;6166:17;;6154:30;;6117:12;;;;6204;;;;6084:142;;;6245:5;6235:15;;;;;;;5118:1138;;;;;:::o;6892:477::-;6982:6;6990;7043:2;7031:9;7022:7;7018:23;7014:32;7011:52;;;7059:1;7056;7049:12;7011:52;7099:9;7086:23;7132:18;7124:6;7121:30;7118:50;;;7164:1;7161;7154:12;7118:50;7187:61;7240:7;7231:6;7220:9;7216:22;7187:61;:::i;:::-;7177:71;;;7298:2;7287:9;7283:18;7270:32;7311:28;7333:5;7311:28;:::i;7374:750::-;7466:6;7474;7482;7535:2;7523:9;7514:7;7510:23;7506:32;7503:52;;;7551:1;7548;7541:12;7503:52;7591:9;7578:23;7620:18;7661:2;7653:6;7650:14;7647:34;;;7677:1;7674;7667:12;7647:34;7715:6;7704:9;7700:22;7690:32;;7760:7;7753:4;7749:2;7745:13;7741:27;7731:55;;7782:1;7779;7772:12;7731:55;7822:2;7809:16;7848:2;7840:6;7837:14;7834:34;;;7864:1;7861;7854:12;7834:34;7919:7;7912:4;7902:6;7899:1;7895:14;7891:2;7887:23;7883:34;7880:47;7877:67;;;7940:1;7937;7930:12;7877:67;7971:4;7963:13;;;;-1:-1:-1;7995:6:1;-1:-1:-1;;8036:20:1;;8023:34;8066:28;8023:34;8066:28;:::i;:::-;8113:5;8103:15;;;7374:750;;;;;:::o;8129:388::-;8197:6;8205;8258:2;8246:9;8237:7;8233:23;8229:32;8226:52;;;8274:1;8271;8264:12;8226:52;8313:9;8300:23;8332:31;8357:5;8332:31;:::i;:::-;8382:5;-1:-1:-1;8439:2:1;8424:18;;8411:32;8452:33;8411:32;8452:33;:::i;8522:241::-;8578:6;8631:2;8619:9;8610:7;8606:23;8602:32;8599:52;;;8647:1;8644;8637:12;8599:52;8686:9;8673:23;8705:28;8727:5;8705:28;:::i;8768:385::-;8854:6;8862;8870;8878;8931:3;8919:9;8910:7;8906:23;8902:33;8899:53;;;8948:1;8945;8938:12;8899:53;-1:-1:-1;;8971:23:1;;;9041:2;9026:18;;9013:32;;-1:-1:-1;9092:2:1;9077:18;;9064:32;;9143:2;9128:18;9115:32;;-1:-1:-1;8768:385:1;-1:-1:-1;8768:385:1:o;9158:380::-;9237:1;9233:12;;;;9280;;;9301:61;;9355:4;9347:6;9343:17;9333:27;;9301:61;9408:2;9400:6;9397:14;9377:18;9374:38;9371:161;;9454:10;9449:3;9445:20;9442:1;9435:31;9489:4;9486:1;9479:15;9517:4;9514:1;9507:15;9371:161;;9158:380;;;:::o;9543:405::-;9745:2;9727:21;;;9784:2;9764:18;;;9757:30;9823:34;9818:2;9803:18;;9796:62;-1:-1:-1;;;9889:2:1;9874:18;;9867:39;9938:3;9923:19;;9543:405::o;9953:127::-;10014:10;10009:3;10005:20;10002:1;9995:31;10045:4;10042:1;10035:15;10069:4;10066:1;10059:15;10085:422;10174:1;10217:5;10174:1;10231:270;10252:7;10242:8;10239:21;10231:270;;;10311:4;10307:1;10303:6;10299:17;10293:4;10290:27;10287:53;;;10320:18;;:::i;:::-;10370:7;10360:8;10356:22;10353:55;;;10390:16;;;;10353:55;10469:22;;;;10429:15;;;;10231:270;;;10235:3;10085:422;;;;;:::o;10512:806::-;10561:5;10591:8;10581:80;;-1:-1:-1;10632:1:1;10646:5;;10581:80;10680:4;10670:76;;-1:-1:-1;10717:1:1;10731:5;;10670:76;10762:4;10780:1;10775:59;;;;10848:1;10843:130;;;;10755:218;;10775:59;10805:1;10796:10;;10819:5;;;10843:130;10880:3;10870:8;10867:17;10864:43;;;10887:18;;:::i;:::-;-1:-1:-1;;10943:1:1;10929:16;;10958:5;;10755:218;;11057:2;11047:8;11044:16;11038:3;11032:4;11029:13;11025:36;11019:2;11009:8;11006:16;11001:2;10995:4;10992:12;10988:35;10985:77;10982:159;;;-1:-1:-1;11094:19:1;;;11126:5;;10982:159;11173:34;11198:8;11192:4;11173:34;:::i;:::-;11243:6;11239:1;11235:6;11231:19;11222:7;11219:32;11216:58;;;11254:18;;:::i;:::-;11292:20;;10512:806;-1:-1:-1;;;10512:806:1:o;11323:140::-;11381:5;11410:47;11451:4;11441:8;11437:19;11431:4;11410:47;:::i;11468:168::-;11541:9;;;11572;;11589:15;;;11583:22;;11569:37;11559:71;;11610:18;;:::i;11641:125::-;11706:9;;;11727:10;;;11724:36;;;11740:18;;:::i;12178:406::-;12380:2;12362:21;;;12419:2;12399:18;;;12392:30;12458:34;12453:2;12438:18;;12431:62;-1:-1:-1;;;12524:2:1;12509:18;;12502:40;12574:3;12559:19;;12178:406::o;12589:408::-;12791:2;12773:21;;;12830:2;12810:18;;;12803:30;12869:34;12864:2;12849:18;;12842:62;-1:-1:-1;;;12935:2:1;12920:18;;12913:42;12987:3;12972:19;;12589:408::o;13357:127::-;13418:10;13413:3;13409:20;13406:1;13399:31;13449:4;13446:1;13439:15;13473:4;13470:1;13463:15;13489:135;13528:3;13549:17;;;13546:43;;13569:18;;:::i;:::-;-1:-1:-1;13616:1:1;13605:13;;13489:135::o;15217:184::-;15287:6;15340:2;15328:9;15319:7;15315:23;15311:32;15308:52;;;15356:1;15353;15346:12;15308:52;-1:-1:-1;15379:16:1;;15217:184;-1:-1:-1;15217:184:1:o;15685:245::-;15752:6;15805:2;15793:9;15784:7;15780:23;15776:32;15773:52;;;15821:1;15818;15811:12;15773:52;15853:9;15847:16;15872:28;15894:5;15872:28;:::i;15935:794::-;16157:2;16169:21;;;16142:18;;16225:22;;;16109:4;16304:6;16278:2;16263:18;;16109:4;16338:304;16352:6;16349:1;16346:13;16338:304;;;16427:6;16414:20;16447:31;16472:5;16447:31;:::i;:::-;-1:-1:-1;;;;;16503:31:1;16491:44;;16558:4;16617:15;;;;16582:12;;;;16531:1;16367:9;16338:304;;;16342:3;16659;16651:11;;;;16714:6;16707:14;16700:22;16693:4;16682:9;16678:20;16671:52;15935:794;;;;;;:::o;19591:401::-;19793:2;19775:21;;;19832:2;19812:18;;;19805:30;19871:34;19866:2;19851:18;;19844:62;-1:-1:-1;;;19937:2:1;19922:18;;19915:35;19982:3;19967:19;;19591:401::o;19997:399::-;20199:2;20181:21;;;20238:2;20218:18;;;20211:30;20277:34;20272:2;20257:18;;20250:62;-1:-1:-1;;;20343:2:1;20328:18;;20321:33;20386:3;20371:19;;19997:399::o;21516:128::-;21583:9;;;21604:11;;;21601:37;;;21618:18;;:::i;22728:217::-;22768:1;22794;22784:132;;22838:10;22833:3;22829:20;22826:1;22819:31;22873:4;22870:1;22863:15;22901:4;22898:1;22891:15;22784:132;-1:-1:-1;22930:9:1;;22728:217::o;24202:251::-;24272:6;24325:2;24313:9;24304:7;24300:23;24296:32;24293:52;;;24341:1;24338;24331:12;24293:52;24373:9;24367:16;24392:31;24417:5;24392:31;:::i;24458:461::-;24511:3;24549:5;24543:12;24576:6;24571:3;24564:19;24602:4;24631:2;24626:3;24622:12;24615:19;;24668:2;24661:5;24657:14;24689:1;24699:195;24713:6;24710:1;24707:13;24699:195;;;24778:13;;-1:-1:-1;;;;;24774:39:1;24762:52;;24834:12;;;;24869:15;;;;24810:1;24728:9;24699:195;;;-1:-1:-1;24910:3:1;;24458:461;-1:-1:-1;;;;;24458:461:1:o;24924:582::-;25223:6;25212:9;25205:25;25266:6;25261:2;25250:9;25246:18;25239:34;25309:3;25304:2;25293:9;25289:18;25282:31;25186:4;25330:57;25382:3;25371:9;25367:19;25359:6;25330:57;:::i;:::-;-1:-1:-1;;;;;25423:32:1;;;;25418:2;25403:18;;25396:60;-1:-1:-1;25487:3:1;25472:19;25465:35;25322:65;24924:582;-1:-1:-1;;;24924:582:1:o;26123:306::-;26211:6;26219;26227;26280:2;26268:9;26259:7;26255:23;26251:32;26248:52;;;26296:1;26293;26286:12;26248:52;26325:9;26319:16;26309:26;;26375:2;26364:9;26360:18;26354:25;26344:35;;26419:2;26408:9;26404:18;26398:25;26388:35;;26123:306;;;;;:::o;26434:510::-;26705:6;26694:9;26687:25;26748:3;26743:2;26732:9;26728:18;26721:31;26668:4;26769:57;26821:3;26810:9;26806:19;26798:6;26769:57;:::i;:::-;-1:-1:-1;;;;;26862:32:1;;;;26857:2;26842:18;;26835:60;-1:-1:-1;26926:2:1;26911:18;26904:34;26761:65;26434:510;-1:-1:-1;;26434:510:1:o

Swarm Source

ipfs://14a97a0a8d310e57c5a3678dd36e9c74a691f248ba38d29baba89c2751690aee
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.