ETH Price: $3,687.44 (+1.39%)
 

Overview

Max Total Supply

1,000,000,000 NPEPE

Holders

195

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000002755937 NPEPE

Value
$0.00
0xce7baddcf117bc391d179f5b9ce165b190265109
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:
NPEPE

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-16
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.25;
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

// pragma solidity ^0.8.0;


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

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





abstract contract Ownable is Context {
    address private _owner;

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

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

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

    uint256 public _maxlSupply;

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

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

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

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

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

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

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

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

    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 Npepe allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    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;

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 pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

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

contract NPEPE is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    address public marketingWallet;
    address public developmentWallet;
    address public liquidityWallet;
    address public constant deadAddress = address(0xdead);

    bool public tradingEnabled;
    bool public swapEnabled;
    bool private _swapping;

    uint256 public swapTokensAtAmount;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyDevelopmentFee;
    uint256 private _buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellDevelopmentFee;
    uint256 private _sellLiquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;  uint256 private _previousFee;

    mapping (address => bool) private _isExcludedFromEnableTrader;
    mapping(address => bool) private _marketMakerPairs;
    

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liquidityWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );


    constructor() ERC20("NPEPE", "NPEPE") {

        uint256 totalSupply = 1000000000 * (10 ** 18);

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _sellMarketingFee = 0;
        _sellDevelopmentFee = 0;
        _sellLiquidityFee = 0;
        sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee;
        _previousFee = sellTotalFees;

        _buyMarketingFee = 0;
        _buyDevelopmentFee = 0;
        _buyLiquidityFee = 0;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;

        _isExcludedFromEnableTrader[owner()] = true;
        _isExcludedFromEnableTrader[address(this)] = true;
        _isExcludedFromEnableTrader[deadAddress] = true;

        _mint(owner(), totalSupply); 
    }

    receive() external payable {}

    function On() public onlyOwner {
        require(!tradingEnabled, "Trading already active.");
        tradingEnabled = true;
        swapEnabled = true;
    }



 function setPools(address[] memory pairs, bool value) public onlyOwner {
    for (uint i = 0; i < pairs.length; i++) {
        _kovbklacx(pairs[i], value);
    }
}


    function _kovbklacx(address pair, bool value) internal {
        _marketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    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(tradingEnabled || _isExcludedFromEnableTrader[from] || _isExcludedFromEnableTrader[to], "Trading not yet enabled!");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }


        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&!_swapping&&_marketMakerPairs[from] &&
            !_isExcludedFromEnableTrader[from] &&
            !_isExcludedFromEnableTrader[to]
        ) {
            _swapping = true;

            _swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

        if (_isExcludedFromEnableTrader[from] || _isExcludedFromEnableTrader[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_marketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                _tokensForLiquidity +=
                    (fees * _sellLiquidityFee) /
                    sellTotalFees;
                _tokensForMarketing +=
                    (fees * _sellMarketingFee) /
                    sellTotalFees;
                _tokensForDevelopment +=
                    (fees * _sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (_marketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees;
                _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees;
                _tokensForDevelopment +=
                    (fees * _buyDevelopmentFee) /
                    buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = _previousFee;
    }

    function _swapTokensForETH(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity +
            _tokensForMarketing +
            _tokensForDevelopment;
        bool success;


        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDevelopment;

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }

}

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"On","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxlSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setPools","outputs":[],"stateMutability":"nonpayable","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":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405234801561000f575f80fd5b506040518060400160405280600581526020017f4e504550450000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4e50455045000000000000000000000000000000000000000000000000000000815250816004908161008b9190610942565b50806005908161009b9190610942565b5050506100ba6100af6102ef60201b60201c565b6102f660201b60201c565b5f6b033b2e3c9fd0803ce80000009050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050610145306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6103b960201b60201c565b5f6011819055505f6012819055505f60138190555060135460125460115461016d9190610a3e565b6101779190610a3e565b6010819055506010546017819055505f600d819055505f600e819055505f600f81905550600f54600e54600d546101ae9190610a3e565b6101b89190610a3e565b600c81905550600160185f6101d161057c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160185f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160185f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506102e96102dd61057c60201b60201c565b826105a460201b60201c565b50610c2d565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161041e90610af1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048c90610b7f565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161056f9190610bac565b60405180910390a3505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610612576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060990610c0f565b60405180910390fd5b6106235f83836106fe60201b60201c565b8060025f8282546106349190610a3e565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516106e19190610bac565b60405180910390a36106fa5f838361070360201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061078357607f821691505b6020821081036107965761079561073f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107f87fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826107bd565b61080286836107bd565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61084661084161083c8461081a565b610823565b61081a565b9050919050565b5f819050919050565b61085f8361082c565b61087361086b8261084d565b8484546107c9565b825550505050565b5f90565b61088761087b565b610892818484610856565b505050565b5b818110156108b5576108aa5f8261087f565b600181019050610898565b5050565b601f8211156108fa576108cb8161079c565b6108d4846107ae565b810160208510156108e3578190505b6108f76108ef856107ae565b830182610897565b50505b505050565b5f82821c905092915050565b5f61091a5f19846008026108ff565b1980831691505092915050565b5f610932838361090b565b9150826002028217905092915050565b61094b82610708565b67ffffffffffffffff81111561096457610963610712565b5b61096e825461076c565b6109798282856108b9565b5f60209050601f8311600181146109aa575f8415610998578287015190505b6109a28582610927565b865550610a09565b601f1984166109b88661079c565b5f5b828110156109df578489015182556001820191506020850194506020810190506109ba565b868310156109fc57848901516109f8601f89168261090b565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610a488261081a565b9150610a538361081a565b9250828201905080821115610a6b57610a6a610a11565b5b92915050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f610adb602483610a71565b9150610ae682610a81565b604082019050919050565b5f6020820190508181035f830152610b0881610acf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f610b69602283610a71565b9150610b7482610b0f565b604082019050919050565b5f6020820190508181035f830152610b9681610b5d565b9050919050565b610ba68161081a565b82525050565b5f602082019050610bbf5f830184610b9d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610bf9601f83610a71565b9150610c0482610bc5565b602082019050919050565b5f6020820190508181035f830152610c2681610bed565b9050919050565b608051612f0a610c685f395f818161076301528181611d0f01528181611dee01528181611e1501528181611eab0152611ed20152612f0a5ff3fe6080604052600436106101ba575f3560e01c8063715018a6116100eb578063a9059cbb11610089578063d85ba06311610063578063d85ba063146105f7578063dd62ed3e14610621578063e2f456051461065d578063f2fde38b14610687576101c1565b8063a9059cbb14610567578063c04a5414146105a3578063d4698016146105cd576101c1565b80638da5cb5b116100c55780638da5cb5b146104ad57806393ec52de146104d757806395d89b4114610501578063a457c2d71461052b576101c1565b8063715018a61461045757806375f0a8741461046d57806385bcb51914610497576101c1565b806339509351116101585780634ada218b116101325780634ada218b1461039d5780636a486a8e146103c75780636ddd1713146103f157806370a082311461041b576101c1565b8063395093511461030f57806349bd5a5e1461034b57806349e38f3214610375576101c1565b806318160ddd1161019457806318160ddd1461025557806323b872dd1461027f57806327c8f835146102bb578063313ce567146102e5576101c1565b806306fdde03146101c5578063095ea7b3146101ef5780631694505e1461022b576101c1565b366101c157005b5f80fd5b3480156101d0575f80fd5b506101d96106af565b6040516101e6919061200d565b60405180910390f35b3480156101fa575f80fd5b50610215600480360381019061021091906120cb565b61073f565b6040516102229190612123565b60405180910390f35b348015610236575f80fd5b5061023f610761565b60405161024c9190612197565b60405180910390f35b348015610260575f80fd5b50610269610785565b60405161027691906121bf565b60405180910390f35b34801561028a575f80fd5b506102a560048036038101906102a091906121d8565b61078e565b6040516102b29190612123565b60405180910390f35b3480156102c6575f80fd5b506102cf6107bc565b6040516102dc9190612237565b60405180910390f35b3480156102f0575f80fd5b506102f96107c2565b604051610306919061226b565b60405180910390f35b34801561031a575f80fd5b50610335600480360381019061033091906120cb565b6107ca565b6040516103429190612123565b60405180910390f35b348015610356575f80fd5b5061035f610800565b60405161036c9190612237565b60405180910390f35b348015610380575f80fd5b5061039b600480360381019061039691906123ee565b610825565b005b3480156103a8575f80fd5b506103b161086e565b6040516103be9190612123565b60405180910390f35b3480156103d2575f80fd5b506103db610881565b6040516103e891906121bf565b60405180910390f35b3480156103fc575f80fd5b50610405610887565b6040516104129190612123565b60405180910390f35b348015610426575f80fd5b50610441600480360381019061043c9190612448565b61089a565b60405161044e91906121bf565b60405180910390f35b348015610462575f80fd5b5061046b6108df565b005b348015610478575f80fd5b506104816108f2565b60405161048e9190612237565b60405180910390f35b3480156104a2575f80fd5b506104ab610917565b005b3480156104b8575f80fd5b506104c16109a7565b6040516104ce9190612237565b60405180910390f35b3480156104e2575f80fd5b506104eb6109cf565b6040516104f891906121bf565b60405180910390f35b34801561050c575f80fd5b506105156109d5565b604051610522919061200d565b60405180910390f35b348015610536575f80fd5b50610551600480360381019061054c91906120cb565b610a65565b60405161055e9190612123565b60405180910390f35b348015610572575f80fd5b5061058d600480360381019061058891906120cb565b610ada565b60405161059a9190612123565b60405180910390f35b3480156105ae575f80fd5b506105b7610afc565b6040516105c49190612237565b60405180910390f35b3480156105d8575f80fd5b506105e1610b21565b6040516105ee9190612237565b60405180910390f35b348015610602575f80fd5b5061060b610b46565b60405161061891906121bf565b60405180910390f35b34801561062c575f80fd5b5061064760048036038101906106429190612473565b610b4c565b60405161065491906121bf565b60405180910390f35b348015610668575f80fd5b50610671610bce565b60405161067e91906121bf565b60405180910390f35b348015610692575f80fd5b506106ad60048036038101906106a89190612448565b610bd4565b005b6060600480546106be906124de565b80601f01602080910402602001604051908101604052809291908181526020018280546106ea906124de565b80156107355780601f1061070c57610100808354040283529160200191610735565b820191905f5260205f20905b81548152906001019060200180831161071857829003601f168201915b5050505050905090565b5f80610749610c56565b9050610756818585610c5d565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b5f80610798610c56565b90506107a5858285610e20565b6107b0858585610eab565b60019150509392505050565b61dead81565b5f6012905090565b5f806107d4610c56565b90506107f58185856107e68589610b4c565b6107f0919061253b565b610c5d565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61082d611552565b5f5b82518110156108695761085c83828151811061084e5761084d61256e565b5b6020026020010151836115d0565b808060010191505061082f565b505050565b600a60149054906101000a900460ff1681565b60105481565b600a60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108e7611552565b6108f05f61166e565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61091f611552565b600a60149054906101000a900460ff161561096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610966906125e5565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff021916908315150217905550565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b6060600580546109e4906124de565b80601f0160208091040260200160405190810160405280929190818152602001828054610a10906124de565b8015610a5b5780601f10610a3257610100808354040283529160200191610a5b565b820191905f5260205f20905b815481529060010190602001808311610a3e57829003601f168201915b5050505050905090565b5f80610a6f610c56565b90505f610a7c8286610b4c565b905083811015610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890612673565b60405180910390fd5b610ace8286868403610c5d565b60019250505092915050565b5f80610ae4610c56565b9050610af1818585610eab565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b610bdc611552565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190612701565b60405180910390fd5b610c538161166e565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc29061278f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d309061281d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e1391906121bf565b60405180910390a3505050565b5f610e2b8484610b4c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ea55781811015610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e906128ab565b60405180910390fd5b610ea48484848403610c5d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090612939565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906129c7565b60405180910390fd5b600a60149054906101000a900460ff1680610fe8575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611039575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90612a2f565b60405180910390fd5b5f810361108f5761108a83835f611731565b61154d565b5f6110993061089a565b90505f600b5482101590508080156110bd5750600a60159054906101000a900460ff165b80156110d65750600a60169054906101000a900460ff16155b8015611128575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561117b575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156111ce575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611211576001600a60166101000a81548160ff0219169083151502179055506111f661199d565b5f600a60166101000a81548160ff0219169083151502179055505b5f600a60169054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806112c0575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156112c9575f90505b5f81156115345760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561132757505f601054115b156113f25761135561271061134760105488611c2990919063ffffffff16565b611c3e90919063ffffffff16565b9050601054601354826113689190612a4d565b6113729190612abb565b60165f828254611382919061253b565b925050819055506010546011548261139a9190612a4d565b6113a49190612abb565b60145f8282546113b4919061253b565b92505081905550601054601254826113cc9190612a4d565b6113d69190612abb565b60155f8282546113e6919061253b565b92505081905550611511565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561144957505f600c54115b1561151057611477612710611469600c5488611c2990919063ffffffff16565b611c3e90919063ffffffff16565b9050600c54600f548261148a9190612a4d565b6114949190612abb565b60165f8282546114a4919061253b565b92505081905550600c54600d54826114bc9190612a4d565b6114c69190612abb565b60145f8282546114d6919061253b565b92505081905550600c54600e54826114ee9190612a4d565b6114f89190612abb565b60155f828254611508919061253b565b925050819055505b5b5f81111561152557611524873083611731565b5b80856115319190612aeb565b94505b61153f878787611731565b601754601081905550505050505b505050565b61155a610c56565b73ffffffffffffffffffffffffffffffffffffffff166115786109a7565b73ffffffffffffffffffffffffffffffffffffffff16146115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c590612b68565b60405180910390fd5b565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690612939565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906129c7565b60405180910390fd5b611818838383611c53565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290612bf6565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161198491906121bf565b60405180910390a3611997848484611c58565b50505050565b5f6119a73061089a565b90505f6015546014546016546119bd919061253b565b6119c7919061253b565b90505f80600283601654866119dc9190612a4d565b6119e69190612abb565b6119f09190612abb565b90505f611a068286611c5d90919063ffffffff16565b90505f479050611a1582611c72565b5f611a298247611c5d90919063ffffffff16565b90505f611a5387611a4560145485611c2990919063ffffffff16565b611c3e90919063ffffffff16565b90505f611a7d88611a6f60155486611c2990919063ffffffff16565b611c3e90919063ffffffff16565b90505f818385611a8d9190612aeb565b611a979190612aeb565b90505f6016819055505f6014819055505f6015819055505f87118015611abc57505f81115b15611b0957611acb8782611ea5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601654604051611b0093929190612c14565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611b4e90612c76565b5f6040518083038185875af1925050503d805f8114611b88576040519150601f19603f3d011682016040523d82523d5f602084013e611b8d565b606091505b50508098505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611bd890612c76565b5f6040518083038185875af1925050503d805f8114611c12576040519150601f19603f3d011682016040523d82523d5f602084013e611c17565b606091505b50508098505050505050505050505050565b5f8183611c369190612a4d565b905092915050565b5f8183611c4b9190612abb565b905092915050565b505050565b505050565b5f8183611c6a9190612aeb565b905092915050565b5f600267ffffffffffffffff811115611c8e57611c8d612288565b5b604051908082528060200260200182016040528015611cbc5781602001602082028036833780820191505090505b50905030815f81518110611cd357611cd261256e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d9a9190612c9e565b81600181518110611dae57611dad61256e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e13307f000000000000000000000000000000000000000000000000000000000000000084610c5d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611e74959493929190612db9565b5f604051808303815f87803b158015611e8b575f80fd5b505af1158015611e9d573d5f803e3d5ffd5b505050505050565b611ed0307f000000000000000000000000000000000000000000000000000000000000000084610c5d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611f5596959493929190612e11565b60606040518083038185885af1158015611f71573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611f969190612e84565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611fdf82611f9d565b611fe98185611fa7565b9350611ff9818560208601611fb7565b61200281611fc5565b840191505092915050565b5f6020820190508181035f8301526120258184611fd5565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6120678261203e565b9050919050565b6120778161205d565b8114612081575f80fd5b50565b5f813590506120928161206e565b92915050565b5f819050919050565b6120aa81612098565b81146120b4575f80fd5b50565b5f813590506120c5816120a1565b92915050565b5f80604083850312156120e1576120e0612036565b5b5f6120ee85828601612084565b92505060206120ff858286016120b7565b9150509250929050565b5f8115159050919050565b61211d81612109565b82525050565b5f6020820190506121365f830184612114565b92915050565b5f819050919050565b5f61215f61215a6121558461203e565b61213c565b61203e565b9050919050565b5f61217082612145565b9050919050565b5f61218182612166565b9050919050565b61219181612177565b82525050565b5f6020820190506121aa5f830184612188565b92915050565b6121b981612098565b82525050565b5f6020820190506121d25f8301846121b0565b92915050565b5f805f606084860312156121ef576121ee612036565b5b5f6121fc86828701612084565b935050602061220d86828701612084565b925050604061221e868287016120b7565b9150509250925092565b6122318161205d565b82525050565b5f60208201905061224a5f830184612228565b92915050565b5f60ff82169050919050565b61226581612250565b82525050565b5f60208201905061227e5f83018461225c565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6122be82611fc5565b810181811067ffffffffffffffff821117156122dd576122dc612288565b5b80604052505050565b5f6122ef61202d565b90506122fb82826122b5565b919050565b5f67ffffffffffffffff82111561231a57612319612288565b5b602082029050602081019050919050565b5f80fd5b5f61234161233c84612300565b6122e6565b905080838252602082019050602084028301858111156123645761236361232b565b5b835b8181101561238d57806123798882612084565b845260208401935050602081019050612366565b5050509392505050565b5f82601f8301126123ab576123aa612284565b5b81356123bb84826020860161232f565b91505092915050565b6123cd81612109565b81146123d7575f80fd5b50565b5f813590506123e8816123c4565b92915050565b5f806040838503121561240457612403612036565b5b5f83013567ffffffffffffffff8111156124215761242061203a565b5b61242d85828601612397565b925050602061243e858286016123da565b9150509250929050565b5f6020828403121561245d5761245c612036565b5b5f61246a84828501612084565b91505092915050565b5f806040838503121561248957612488612036565b5b5f61249685828601612084565b92505060206124a785828601612084565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806124f557607f821691505b602082108103612508576125076124b1565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61254582612098565b915061255083612098565b92508282019050808211156125685761256761250e565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f6125cf601783611fa7565b91506125da8261259b565b602082019050919050565b5f6020820190508181035f8301526125fc816125c3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61265d602583611fa7565b915061266882612603565b604082019050919050565b5f6020820190508181035f83015261268a81612651565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6126eb602683611fa7565b91506126f682612691565b604082019050919050565b5f6020820190508181035f830152612718816126df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612779602483611fa7565b91506127848261271f565b604082019050919050565b5f6020820190508181035f8301526127a68161276d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612807602283611fa7565b9150612812826127ad565b604082019050919050565b5f6020820190508181035f830152612834816127fb565b9050919050565b7f45524332303a20696e73756666696369656e74204e7065706520616c6c6f77615f8201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b5f612895602383611fa7565b91506128a08261283b565b604082019050919050565b5f6020820190508181035f8301526128c281612889565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612923602583611fa7565b915061292e826128c9565b604082019050919050565b5f6020820190508181035f83015261295081612917565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6129b1602383611fa7565b91506129bc82612957565b604082019050919050565b5f6020820190508181035f8301526129de816129a5565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f612a19601883611fa7565b9150612a24826129e5565b602082019050919050565b5f6020820190508181035f830152612a4681612a0d565b9050919050565b5f612a5782612098565b9150612a6283612098565b9250828202612a7081612098565b91508282048414831517612a8757612a8661250e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ac582612098565b9150612ad083612098565b925082612ae057612adf612a8e565b5b828204905092915050565b5f612af582612098565b9150612b0083612098565b9250828203905081811115612b1857612b1761250e565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b52602083611fa7565b9150612b5d82612b1e565b602082019050919050565b5f6020820190508181035f830152612b7f81612b46565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612be0602683611fa7565b9150612beb82612b86565b604082019050919050565b5f6020820190508181035f830152612c0d81612bd4565b9050919050565b5f606082019050612c275f8301866121b0565b612c3460208301856121b0565b612c4160408301846121b0565b949350505050565b5f81905092915050565b50565b5f612c615f83612c49565b9150612c6c82612c53565b5f82019050919050565b5f612c8082612c56565b9150819050919050565b5f81519050612c988161206e565b92915050565b5f60208284031215612cb357612cb2612036565b5b5f612cc084828501612c8a565b91505092915050565b5f819050919050565b5f612cec612ce7612ce284612cc9565b61213c565b612098565b9050919050565b612cfc81612cd2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d348161205d565b82525050565b5f612d458383612d2b565b60208301905092915050565b5f602082019050919050565b5f612d6782612d02565b612d718185612d0c565b9350612d7c83612d1c565b805f5b83811015612dac578151612d938882612d3a565b9750612d9e83612d51565b925050600181019050612d7f565b5085935050505092915050565b5f60a082019050612dcc5f8301886121b0565b612dd96020830187612cf3565b8181036040830152612deb8186612d5d565b9050612dfa6060830185612228565b612e0760808301846121b0565b9695505050505050565b5f60c082019050612e245f830189612228565b612e3160208301886121b0565b612e3e6040830187612cf3565b612e4b6060830186612cf3565b612e586080830185612228565b612e6560a08301846121b0565b979650505050505050565b5f81519050612e7e816120a1565b92915050565b5f805f60608486031215612e9b57612e9a612036565b5b5f612ea886828701612e70565b9350506020612eb986828701612e70565b9250506040612eca86828701612e70565b915050925092509256fea26469706673582212200c5f974f46a68a005146e2edc78d4a31a5c0b3e1d12320cd3f654c3d29f1382564736f6c63430008190033

Deployed Bytecode

0x6080604052600436106101ba575f3560e01c8063715018a6116100eb578063a9059cbb11610089578063d85ba06311610063578063d85ba063146105f7578063dd62ed3e14610621578063e2f456051461065d578063f2fde38b14610687576101c1565b8063a9059cbb14610567578063c04a5414146105a3578063d4698016146105cd576101c1565b80638da5cb5b116100c55780638da5cb5b146104ad57806393ec52de146104d757806395d89b4114610501578063a457c2d71461052b576101c1565b8063715018a61461045757806375f0a8741461046d57806385bcb51914610497576101c1565b806339509351116101585780634ada218b116101325780634ada218b1461039d5780636a486a8e146103c75780636ddd1713146103f157806370a082311461041b576101c1565b8063395093511461030f57806349bd5a5e1461034b57806349e38f3214610375576101c1565b806318160ddd1161019457806318160ddd1461025557806323b872dd1461027f57806327c8f835146102bb578063313ce567146102e5576101c1565b806306fdde03146101c5578063095ea7b3146101ef5780631694505e1461022b576101c1565b366101c157005b5f80fd5b3480156101d0575f80fd5b506101d96106af565b6040516101e6919061200d565b60405180910390f35b3480156101fa575f80fd5b50610215600480360381019061021091906120cb565b61073f565b6040516102229190612123565b60405180910390f35b348015610236575f80fd5b5061023f610761565b60405161024c9190612197565b60405180910390f35b348015610260575f80fd5b50610269610785565b60405161027691906121bf565b60405180910390f35b34801561028a575f80fd5b506102a560048036038101906102a091906121d8565b61078e565b6040516102b29190612123565b60405180910390f35b3480156102c6575f80fd5b506102cf6107bc565b6040516102dc9190612237565b60405180910390f35b3480156102f0575f80fd5b506102f96107c2565b604051610306919061226b565b60405180910390f35b34801561031a575f80fd5b50610335600480360381019061033091906120cb565b6107ca565b6040516103429190612123565b60405180910390f35b348015610356575f80fd5b5061035f610800565b60405161036c9190612237565b60405180910390f35b348015610380575f80fd5b5061039b600480360381019061039691906123ee565b610825565b005b3480156103a8575f80fd5b506103b161086e565b6040516103be9190612123565b60405180910390f35b3480156103d2575f80fd5b506103db610881565b6040516103e891906121bf565b60405180910390f35b3480156103fc575f80fd5b50610405610887565b6040516104129190612123565b60405180910390f35b348015610426575f80fd5b50610441600480360381019061043c9190612448565b61089a565b60405161044e91906121bf565b60405180910390f35b348015610462575f80fd5b5061046b6108df565b005b348015610478575f80fd5b506104816108f2565b60405161048e9190612237565b60405180910390f35b3480156104a2575f80fd5b506104ab610917565b005b3480156104b8575f80fd5b506104c16109a7565b6040516104ce9190612237565b60405180910390f35b3480156104e2575f80fd5b506104eb6109cf565b6040516104f891906121bf565b60405180910390f35b34801561050c575f80fd5b506105156109d5565b604051610522919061200d565b60405180910390f35b348015610536575f80fd5b50610551600480360381019061054c91906120cb565b610a65565b60405161055e9190612123565b60405180910390f35b348015610572575f80fd5b5061058d600480360381019061058891906120cb565b610ada565b60405161059a9190612123565b60405180910390f35b3480156105ae575f80fd5b506105b7610afc565b6040516105c49190612237565b60405180910390f35b3480156105d8575f80fd5b506105e1610b21565b6040516105ee9190612237565b60405180910390f35b348015610602575f80fd5b5061060b610b46565b60405161061891906121bf565b60405180910390f35b34801561062c575f80fd5b5061064760048036038101906106429190612473565b610b4c565b60405161065491906121bf565b60405180910390f35b348015610668575f80fd5b50610671610bce565b60405161067e91906121bf565b60405180910390f35b348015610692575f80fd5b506106ad60048036038101906106a89190612448565b610bd4565b005b6060600480546106be906124de565b80601f01602080910402602001604051908101604052809291908181526020018280546106ea906124de565b80156107355780601f1061070c57610100808354040283529160200191610735565b820191905f5260205f20905b81548152906001019060200180831161071857829003601f168201915b5050505050905090565b5f80610749610c56565b9050610756818585610c5d565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b5f80610798610c56565b90506107a5858285610e20565b6107b0858585610eab565b60019150509392505050565b61dead81565b5f6012905090565b5f806107d4610c56565b90506107f58185856107e68589610b4c565b6107f0919061253b565b610c5d565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61082d611552565b5f5b82518110156108695761085c83828151811061084e5761084d61256e565b5b6020026020010151836115d0565b808060010191505061082f565b505050565b600a60149054906101000a900460ff1681565b60105481565b600a60159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6108e7611552565b6108f05f61166e565b565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61091f611552565b600a60149054906101000a900460ff161561096f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610966906125e5565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff021916908315150217905550565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b6060600580546109e4906124de565b80601f0160208091040260200160405190810160405280929190818152602001828054610a10906124de565b8015610a5b5780601f10610a3257610100808354040283529160200191610a5b565b820191905f5260205f20905b815481529060010190602001808311610a3e57829003601f168201915b5050505050905090565b5f80610a6f610c56565b90505f610a7c8286610b4c565b905083811015610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab890612673565b60405180910390fd5b610ace8286868403610c5d565b60019250505092915050565b5f80610ae4610c56565b9050610af1818585610eab565b600191505092915050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b5481565b610bdc611552565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4190612701565b60405180910390fd5b610c538161166e565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc29061278f565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d309061281d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610e1391906121bf565b60405180910390a3505050565b5f610e2b8484610b4c565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ea55781811015610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e906128ab565b60405180910390fd5b610ea48484848403610c5d565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090612939565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e906129c7565b60405180910390fd5b600a60149054906101000a900460ff1680610fe8575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611039575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106f90612a2f565b60405180910390fd5b5f810361108f5761108a83835f611731565b61154d565b5f6110993061089a565b90505f600b5482101590508080156110bd5750600a60159054906101000a900460ff165b80156110d65750600a60169054906101000a900460ff16155b8015611128575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b801561117b575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156111ce575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15611211576001600a60166101000a81548160ff0219169083151502179055506111f661199d565b5f600a60166101000a81548160ff0219169083151502179055505b5f600a60169054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806112c0575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156112c9575f90505b5f81156115345760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561132757505f601054115b156113f25761135561271061134760105488611c2990919063ffffffff16565b611c3e90919063ffffffff16565b9050601054601354826113689190612a4d565b6113729190612abb565b60165f828254611382919061253b565b925050819055506010546011548261139a9190612a4d565b6113a49190612abb565b60145f8282546113b4919061253b565b92505081905550601054601254826113cc9190612a4d565b6113d69190612abb565b60155f8282546113e6919061253b565b92505081905550611511565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561144957505f600c54115b1561151057611477612710611469600c5488611c2990919063ffffffff16565b611c3e90919063ffffffff16565b9050600c54600f548261148a9190612a4d565b6114949190612abb565b60165f8282546114a4919061253b565b92505081905550600c54600d54826114bc9190612a4d565b6114c69190612abb565b60145f8282546114d6919061253b565b92505081905550600c54600e54826114ee9190612a4d565b6114f89190612abb565b60155f828254611508919061253b565b925050819055505b5b5f81111561152557611524873083611731565b5b80856115319190612aeb565b94505b61153f878787611731565b601754601081905550505050505b505050565b61155a610c56565b73ffffffffffffffffffffffffffffffffffffffff166115786109a7565b73ffffffffffffffffffffffffffffffffffffffff16146115ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c590612b68565b60405180910390fd5b565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361179f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179690612939565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361180d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611804906129c7565b60405180910390fd5b611818838383611c53565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290612bf6565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161198491906121bf565b60405180910390a3611997848484611c58565b50505050565b5f6119a73061089a565b90505f6015546014546016546119bd919061253b565b6119c7919061253b565b90505f80600283601654866119dc9190612a4d565b6119e69190612abb565b6119f09190612abb565b90505f611a068286611c5d90919063ffffffff16565b90505f479050611a1582611c72565b5f611a298247611c5d90919063ffffffff16565b90505f611a5387611a4560145485611c2990919063ffffffff16565b611c3e90919063ffffffff16565b90505f611a7d88611a6f60155486611c2990919063ffffffff16565b611c3e90919063ffffffff16565b90505f818385611a8d9190612aeb565b611a979190612aeb565b90505f6016819055505f6014819055505f6015819055505f87118015611abc57505f81115b15611b0957611acb8782611ea5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601654604051611b0093929190612c14565b60405180910390a15b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051611b4e90612c76565b5f6040518083038185875af1925050503d805f8114611b88576040519150601f19603f3d011682016040523d82523d5f602084013e611b8d565b606091505b50508098505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051611bd890612c76565b5f6040518083038185875af1925050503d805f8114611c12576040519150601f19603f3d011682016040523d82523d5f602084013e611c17565b606091505b50508098505050505050505050505050565b5f8183611c369190612a4d565b905092915050565b5f8183611c4b9190612abb565b905092915050565b505050565b505050565b5f8183611c6a9190612aeb565b905092915050565b5f600267ffffffffffffffff811115611c8e57611c8d612288565b5b604051908082528060200260200182016040528015611cbc5781602001602082028036833780820191505090505b50905030815f81518110611cd357611cd261256e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d76573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d9a9190612c9e565b81600181518110611dae57611dad61256e565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611e13307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610c5d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401611e74959493929190612db9565b5f604051808303815f87803b158015611e8b575f80fd5b505af1158015611e9d573d5f803e3d5ffd5b505050505050565b611ed0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610c5d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611f5596959493929190612e11565b60606040518083038185885af1158015611f71573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611f969190612e84565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611fdf82611f9d565b611fe98185611fa7565b9350611ff9818560208601611fb7565b61200281611fc5565b840191505092915050565b5f6020820190508181035f8301526120258184611fd5565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6120678261203e565b9050919050565b6120778161205d565b8114612081575f80fd5b50565b5f813590506120928161206e565b92915050565b5f819050919050565b6120aa81612098565b81146120b4575f80fd5b50565b5f813590506120c5816120a1565b92915050565b5f80604083850312156120e1576120e0612036565b5b5f6120ee85828601612084565b92505060206120ff858286016120b7565b9150509250929050565b5f8115159050919050565b61211d81612109565b82525050565b5f6020820190506121365f830184612114565b92915050565b5f819050919050565b5f61215f61215a6121558461203e565b61213c565b61203e565b9050919050565b5f61217082612145565b9050919050565b5f61218182612166565b9050919050565b61219181612177565b82525050565b5f6020820190506121aa5f830184612188565b92915050565b6121b981612098565b82525050565b5f6020820190506121d25f8301846121b0565b92915050565b5f805f606084860312156121ef576121ee612036565b5b5f6121fc86828701612084565b935050602061220d86828701612084565b925050604061221e868287016120b7565b9150509250925092565b6122318161205d565b82525050565b5f60208201905061224a5f830184612228565b92915050565b5f60ff82169050919050565b61226581612250565b82525050565b5f60208201905061227e5f83018461225c565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6122be82611fc5565b810181811067ffffffffffffffff821117156122dd576122dc612288565b5b80604052505050565b5f6122ef61202d565b90506122fb82826122b5565b919050565b5f67ffffffffffffffff82111561231a57612319612288565b5b602082029050602081019050919050565b5f80fd5b5f61234161233c84612300565b6122e6565b905080838252602082019050602084028301858111156123645761236361232b565b5b835b8181101561238d57806123798882612084565b845260208401935050602081019050612366565b5050509392505050565b5f82601f8301126123ab576123aa612284565b5b81356123bb84826020860161232f565b91505092915050565b6123cd81612109565b81146123d7575f80fd5b50565b5f813590506123e8816123c4565b92915050565b5f806040838503121561240457612403612036565b5b5f83013567ffffffffffffffff8111156124215761242061203a565b5b61242d85828601612397565b925050602061243e858286016123da565b9150509250929050565b5f6020828403121561245d5761245c612036565b5b5f61246a84828501612084565b91505092915050565b5f806040838503121561248957612488612036565b5b5f61249685828601612084565b92505060206124a785828601612084565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806124f557607f821691505b602082108103612508576125076124b1565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61254582612098565b915061255083612098565b92508282019050808211156125685761256761250e565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f54726164696e6720616c7265616479206163746976652e0000000000000000005f82015250565b5f6125cf601783611fa7565b91506125da8261259b565b602082019050919050565b5f6020820190508181035f8301526125fc816125c3565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61265d602583611fa7565b915061266882612603565b604082019050919050565b5f6020820190508181035f83015261268a81612651565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6126eb602683611fa7565b91506126f682612691565b604082019050919050565b5f6020820190508181035f830152612718816126df565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612779602483611fa7565b91506127848261271f565b604082019050919050565b5f6020820190508181035f8301526127a68161276d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612807602283611fa7565b9150612812826127ad565b604082019050919050565b5f6020820190508181035f830152612834816127fb565b9050919050565b7f45524332303a20696e73756666696369656e74204e7065706520616c6c6f77615f8201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b5f612895602383611fa7565b91506128a08261283b565b604082019050919050565b5f6020820190508181035f8301526128c281612889565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612923602583611fa7565b915061292e826128c9565b604082019050919050565b5f6020820190508181035f83015261295081612917565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6129b1602383611fa7565b91506129bc82612957565b604082019050919050565b5f6020820190508181035f8301526129de816129a5565b9050919050565b7f54726164696e67206e6f742079657420656e61626c65642100000000000000005f82015250565b5f612a19601883611fa7565b9150612a24826129e5565b602082019050919050565b5f6020820190508181035f830152612a4681612a0d565b9050919050565b5f612a5782612098565b9150612a6283612098565b9250828202612a7081612098565b91508282048414831517612a8757612a8661250e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612ac582612098565b9150612ad083612098565b925082612ae057612adf612a8e565b5b828204905092915050565b5f612af582612098565b9150612b0083612098565b9250828203905081811115612b1857612b1761250e565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612b52602083611fa7565b9150612b5d82612b1e565b602082019050919050565b5f6020820190508181035f830152612b7f81612b46565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612be0602683611fa7565b9150612beb82612b86565b604082019050919050565b5f6020820190508181035f830152612c0d81612bd4565b9050919050565b5f606082019050612c275f8301866121b0565b612c3460208301856121b0565b612c4160408301846121b0565b949350505050565b5f81905092915050565b50565b5f612c615f83612c49565b9150612c6c82612c53565b5f82019050919050565b5f612c8082612c56565b9150819050919050565b5f81519050612c988161206e565b92915050565b5f60208284031215612cb357612cb2612036565b5b5f612cc084828501612c8a565b91505092915050565b5f819050919050565b5f612cec612ce7612ce284612cc9565b61213c565b612098565b9050919050565b612cfc81612cd2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d348161205d565b82525050565b5f612d458383612d2b565b60208301905092915050565b5f602082019050919050565b5f612d6782612d02565b612d718185612d0c565b9350612d7c83612d1c565b805f5b83811015612dac578151612d938882612d3a565b9750612d9e83612d51565b925050600181019050612d7f565b5085935050505092915050565b5f60a082019050612dcc5f8301886121b0565b612dd96020830187612cf3565b8181036040830152612deb8186612d5d565b9050612dfa6060830185612228565b612e0760808301846121b0565b9695505050505050565b5f60c082019050612e245f830189612228565b612e3160208301886121b0565b612e3e6040830187612cf3565b612e4b6060830186612cf3565b612e586080830185612228565b612e6560a08301846121b0565b979650505050505050565b5f81519050612e7e816120a1565b92915050565b5f805f60608486031215612e9b57612e9a612036565b5b5f612ea886828701612e70565b9350506020612eb986828701612e70565b9250506040612eca86828701612e70565b915050925092509256fea26469706673582212200c5f974f46a68a005146e2edc78d4a31a5c0b3e1d12320cd3f654c3d29f1382564736f6c63430008190033

Deployed Bytecode Sourcemap

28339:8208:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10395:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28414:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9335:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10645:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28622:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9177:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10948:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28472:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31257:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28684:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28975:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28717:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9506:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1545:103;;;;;;;;;;;;;:::i;:::-;;28509:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31086:162;;;;;;;;;;;;;:::i;:::-;;904:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7745:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8425:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11226:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9889:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28546:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28585:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28820:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10186:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28778:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1803:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8206:100;8260:13;8293:5;8286:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:100;:::o;10395:242::-;10514:4;10536:13;10552:12;:10;:12::i;:::-;10536:28;;10575:32;10584:5;10591:7;10600:6;10575:8;:32::i;:::-;10625:4;10618:11;;;10395:242;;;;:::o;28414:51::-;;;:::o;9335:108::-;9396:7;9423:12;;9416:19;;9335:108;:::o;10645:295::-;10776:4;10793:15;10811:12;:10;:12::i;:::-;10793:30;;10834:38;10850:4;10856:7;10865:6;10834:15;:38::i;:::-;10883:27;10893:4;10899:2;10903:6;10883:9;:27::i;:::-;10928:4;10921:11;;;10645:295;;;;;:::o;28622:53::-;28668:6;28622:53;:::o;9177:93::-;9235:5;9260:2;9253:9;;9177:93;:::o;10948:270::-;11063:4;11085:13;11101:12;:10;:12::i;:::-;11085:28;;11124:64;11133:5;11140:7;11177:10;11149:25;11159:5;11166:7;11149:9;:25::i;:::-;:38;;;;:::i;:::-;11124:8;:64::i;:::-;11206:4;11199:11;;;10948:270;;;;:::o;28472:28::-;;;;;;;;;;;;;:::o;31257:167::-;790:13;:11;:13::i;:::-;31340:6:::1;31335:86;31356:5;:12;31352:1;:16;31335:86;;;31386:27;31397:5;31403:1;31397:8;;;;;;;;:::i;:::-;;;;;;;;31407:5;31386:10;:27::i;:::-;31370:3;;;;;;;31335:86;;;;31257:167:::0;;:::o;28684:26::-;;;;;;;;;;;;;:::o;28975:28::-;;;;:::o;28717:23::-;;;;;;;;;;;;;:::o;9506:177::-;9625:7;9657:9;:18;9667:7;9657:18;;;;;;;;;;;;;;;;9650:25;;9506:177;;;:::o;1545:103::-;790:13;:11;:13::i;:::-;1610:30:::1;1637:1;1610:18;:30::i;:::-;1545:103::o:0;28509:30::-;;;;;;;;;;;;;:::o;31086:162::-;790:13;:11;:13::i;:::-;31137:14:::1;;;;;;;;;;;31136:15;31128:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;31207:4;31190:14;;:21;;;;;;;;;;;;;;;;;;31236:4;31222:11;;:18;;;;;;;;;;;;;;;;;;31086:162::o:0;904:87::-;950:7;977:6;;;;;;;;;;;970:13;;904:87;:::o;7745:26::-;;;;:::o;8425:104::-;8481:13;8514:7;8507:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8425:104;:::o;11226:505::-;11346:4;11368:13;11384:12;:10;:12::i;:::-;11368:28;;11407:24;11434:25;11444:5;11451:7;11434:9;:25::i;:::-;11407:52;;11512:15;11492:16;:35;;11470:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;11628:60;11637:5;11644:7;11672:15;11653:16;:34;11628:8;:60::i;:::-;11719:4;11712:11;;;;11226:505;;;;:::o;9889:234::-;10004:4;10026:13;10042:12;:10;:12::i;:::-;10026:28;;10065;10075:5;10082:2;10086:6;10065:9;:28::i;:::-;10111:4;10104:11;;;9889:234;;;;:::o;28546:32::-;;;;;;;;;;;;;:::o;28585:30::-;;;;;;;;;;;;;:::o;28820:27::-;;;;:::o;10186:201::-;10320:7;10352:11;:18;10364:5;10352:18;;;;;;;;;;;;;;;:27;10371:7;10352:27;;;;;;;;;;;;;;;;10345:34;;10186:201;;;;:::o;28778:33::-;;;;:::o;1803:238::-;790:13;:11;:13::i;:::-;1926:1:::1;1906:22;;:8;:22;;::::0;1884:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2005:28;2024:8;2005:18;:28::i;:::-;1803:238:::0;:::o;181:98::-;234:7;261:10;254:17;;181:98;:::o;13863:380::-;14016:1;13999:19;;:5;:19;;;13991:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14097:1;14078:21;;:7;:21;;;14070:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14181:6;14151:11;:18;14163:5;14151:18;;;;;;;;;;;;;;;:27;14170:7;14151:27;;;;;;;;;;;;;;;:36;;;;14219:7;14203:32;;14212:5;14203:32;;;14228:6;14203:32;;;;;;:::i;:::-;;;;;;;;13863:380;;;:::o;14251:508::-;14386:24;14413:25;14423:5;14430:7;14413:9;:25::i;:::-;14386:52;;14473:17;14453:16;:37;14449:303;;14553:6;14533:16;:26;;14507:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;14674:51;14683:5;14690:7;14718:6;14699:16;:25;14674:8;:51::i;:::-;14449:303;14375:384;14251:508;;;:::o;31603:2433::-;31751:1;31735:18;;:4;:18;;;31727:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31828:1;31814:16;;:2;:16;;;31806:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31889:14;;;;;;;;;;;:51;;;;31907:27;:33;31935:4;31907:33;;;;;;;;;;;;;;;;;;;;;;;;;31889:51;:86;;;;31944:27;:31;31972:2;31944:31;;;;;;;;;;;;;;;;;;;;;;;;;31889:86;31881:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;32029:1;32019:6;:11;32015:93;;32047:28;32063:4;32069:2;32073:1;32047:15;:28::i;:::-;32090:7;;32015:93;32122:28;32153:24;32171:4;32153:9;:24::i;:::-;32122:55;;32190:12;32229:18;;32205:20;:42;;32190:57;;32278:7;:35;;;;;32302:11;;;;;;;;;;;32278:35;:48;;;;;32317:9;;;;;;;;;;;32316:10;32278:48;:73;;;;;32328:17;:23;32346:4;32328:23;;;;;;;;;;;;;;;;;;;;;;;;;32278:73;:124;;;;;32369:27;:33;32397:4;32369:33;;;;;;;;;;;;;;;;;;;;;;;;;32368:34;32278:124;:173;;;;;32420:27;:31;32448:2;32420:31;;;;;;;;;;;;;;;;;;;;;;;;;32419:32;32278:173;32260:308;;;32490:4;32478:9;;:16;;;;;;;;;;;;;;;;;;32511:11;:9;:11::i;:::-;32551:5;32539:9;;:17;;;;;;;;;;;;;;;;;;32260:308;32580:12;32596:9;;;;;;;;;;;32595:10;32580:25;;32622:27;:33;32650:4;32622:33;;;;;;;;;;;;;;;;;;;;;;;;;:68;;;;32659:27;:31;32687:2;32659:31;;;;;;;;;;;;;;;;;;;;;;;;;32622:68;32618:116;;;32717:5;32707:15;;32618:116;32746:12;32779:7;32775:1169;;;32831:17;:21;32849:2;32831:21;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;;32872:1;32856:13;;:17;32831:42;32827:968;;;32901:36;32931:5;32901:25;32912:13;;32901:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;32894:43;;33050:13;;33008:17;;33001:4;:24;;;;:::i;:::-;33000:63;;;;:::i;:::-;32956:19;;:107;;;;;;;:::i;:::-;;;;;;;;33176:13;;33134:17;;33127:4;:24;;;;:::i;:::-;33126:63;;;;:::i;:::-;33082:19;;:107;;;;;;;:::i;:::-;;;;;;;;33306:13;;33262:19;;33255:4;:26;;;;:::i;:::-;33254:65;;;;:::i;:::-;33208:21;;:111;;;;;;;:::i;:::-;;;;;;;;32827:968;;;33381:17;:23;33399:4;33381:23;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;33423:1;33408:12;;:16;33381:43;33377:418;;;33452:35;33481:5;33452:24;33463:12;;33452:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;33445:42;;33557:12;;33537:16;;33530:4;:23;;;;:::i;:::-;33529:40;;;;:::i;:::-;33506:19;;:63;;;;;;;:::i;:::-;;;;;;;;33639:12;;33619:16;;33612:4;:23;;;;:::i;:::-;33611:40;;;;:::i;:::-;33588:19;;:63;;;;;;;:::i;:::-;;;;;;;;33767:12;;33724:18;;33717:4;:25;;;;:::i;:::-;33716:63;;;;:::i;:::-;33670:21;;:109;;;;;;;:::i;:::-;;;;;;;;33377:418;32827:968;33822:1;33815:4;:8;33811:91;;;33844:42;33860:4;33874;33881;33844:15;:42::i;:::-;33811:91;33928:4;33918:14;;;;;:::i;:::-;;;32775:1169;33956:33;33972:4;33978:2;33982:6;33956:15;:33::i;:::-;34016:12;;34000:13;:28;;;;31716:2320;;;;31603:2433;;;;:::o;1069:132::-;1144:12;:10;:12::i;:::-;1133:23;;:7;:5;:7::i;:::-;:23;;;1125:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1069:132::o;31434:161::-;31526:5;31500:17;:23;31518:4;31500:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;31581:5;31547:40;;31575:4;31547:40;;;;;;;;;;;;31434:161;;:::o;2201:191::-;2275:16;2294:6;;;;;;;;;;;2275:25;;2320:8;2311:6;;:17;;;;;;;;;;;;;;;;;;2375:8;2344:40;;2365:8;2344:40;;;;;;;;;;;;2264:128;2201:191;:::o;11739:877::-;11886:1;11870:18;;:4;:18;;;11862:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11963:1;11949:16;;:2;:16;;;11941:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12018:38;12039:4;12045:2;12049:6;12018:20;:38::i;:::-;12069:19;12091:9;:15;12101:4;12091:15;;;;;;;;;;;;;;;;12069:37;;12154:6;12139:11;:21;;12117:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;12294:6;12280:11;:20;12262:9;:15;12272:4;12262:15;;;;;;;;;;;;;;;:38;;;;12497:6;12480:9;:13;12490:2;12480:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12547:2;12532:26;;12541:4;12532:26;;;12551:6;12532:26;;;;;;:::i;:::-;;;;;;;;12571:37;12591:4;12597:2;12601:6;12571:19;:37::i;:::-;11851:765;11739:877;;;:::o;34935:1607::-;34976:23;35002:24;35020:4;35002:9;:24::i;:::-;34976:50;;35037:25;35135:21;;35100:19;;35065;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;35037:119;;35167:12;35194:23;35308:1;35275:17;35239:19;;35221:15;:37;;;;:::i;:::-;35220:72;;;;:::i;:::-;:89;;;;:::i;:::-;35194:115;;35320:26;35349:36;35369:15;35349;:19;;:36;;;;:::i;:::-;35320:65;;35398:25;35426:21;35398:49;;35460:37;35478:18;35460:17;:37::i;:::-;35510:18;35531:44;35557:17;35531:21;:25;;:44;;;;:::i;:::-;35510:65;;35588:23;35614:82;35668:17;35614:35;35629:19;;35614:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;35588:108;;35709:25;35737:84;35793:17;35737:37;35752:21;;35737:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;35709:112;;35834:23;35917:17;35886:15;35860:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;35834:100;;35969:1;35947:19;:23;;;;36003:1;35981:19;:23;;;;36039:1;36015:21;:25;;;;36075:1;36057:15;:19;:42;;;;;36098:1;36080:15;:19;36057:42;36053:280;;;36116:47;36130:15;36147;36116:13;:47::i;:::-;36183:138;36216:18;36253:15;36287:19;;36183:138;;;;;;;;:::i;:::-;;;;;;;;36053:280;36367:17;;;;;;;;;;;36359:31;;36398:17;36359:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36345:75;;;;;36455:15;;;;;;;;;;;36447:29;;36498:21;36447:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36433:101;;;;;34965:1577;;;;;;;;;;34935:1607::o;18386:98::-;18444:7;18475:1;18471;:5;;;;:::i;:::-;18464:12;;18386:98;;;;:::o;18785:::-;18843:7;18874:1;18870;:5;;;;:::i;:::-;18863:12;;18785:98;;;;:::o;14767:125::-;;;;:::o;14900:124::-;;;;:::o;18029:98::-;18087:7;18118:1;18114;:5;;;;:::i;:::-;18107:12;;18029:98;;;;:::o;34044:503::-;34112:21;34150:1;34136:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34112:40;;34181:4;34163;34168:1;34163:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34207:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34197:4;34202:1;34197:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34242:62;34259:4;34274:15;34292:11;34242:8;:62::i;:::-;34343:15;:66;;;34424:11;34450:1;34466:4;34493;34513:15;34343:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34101:446;34044:503;:::o;34555:372::-;34638:62;34655:4;34670:15;34688:11;34638:8;:62::i;:::-;34713:15;:31;;;34752:9;34785:4;34805:11;34831:1;34847;34863:15;;;;;;;;;;;34893;34713:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34555:372;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:60::-;3367:3;3388:5;3381:12;;3339:60;;;:::o;3405:142::-;3455:9;3488:53;3506:34;3515:24;3533:5;3515:24;:::i;:::-;3506:34;:::i;:::-;3488:53;:::i;:::-;3475:66;;3405:142;;;:::o;3553:126::-;3603:9;3636:37;3667:5;3636:37;:::i;:::-;3623:50;;3553:126;;;:::o;3685:153::-;3762:9;3795:37;3826:5;3795:37;:::i;:::-;3782:50;;3685:153;;;:::o;3844:185::-;3958:64;4016:5;3958:64;:::i;:::-;3953:3;3946:77;3844:185;;:::o;4035:276::-;4155:4;4193:2;4182:9;4178:18;4170:26;;4206:98;4301:1;4290:9;4286:17;4277:6;4206:98;:::i;:::-;4035:276;;;;:::o;4317:118::-;4404:24;4422:5;4404:24;:::i;:::-;4399:3;4392:37;4317:118;;:::o;4441:222::-;4534:4;4572:2;4561:9;4557:18;4549:26;;4585:71;4653:1;4642:9;4638:17;4629:6;4585:71;:::i;:::-;4441:222;;;;:::o;4669:619::-;4746:6;4754;4762;4811:2;4799:9;4790:7;4786:23;4782:32;4779:119;;;4817:79;;:::i;:::-;4779:119;4937:1;4962:53;5007:7;4998:6;4987:9;4983:22;4962:53;:::i;:::-;4952:63;;4908:117;5064:2;5090:53;5135:7;5126:6;5115:9;5111:22;5090:53;:::i;:::-;5080:63;;5035:118;5192:2;5218:53;5263:7;5254:6;5243:9;5239:22;5218:53;:::i;:::-;5208:63;;5163:118;4669:619;;;;;:::o;5294:118::-;5381:24;5399:5;5381:24;:::i;:::-;5376:3;5369:37;5294:118;;:::o;5418:222::-;5511:4;5549:2;5538:9;5534:18;5526:26;;5562:71;5630:1;5619:9;5615:17;5606:6;5562:71;:::i;:::-;5418:222;;;;:::o;5646:86::-;5681:7;5721:4;5714:5;5710:16;5699:27;;5646:86;;;:::o;5738:112::-;5821:22;5837:5;5821:22;:::i;:::-;5816:3;5809:35;5738:112;;:::o;5856:214::-;5945:4;5983:2;5972:9;5968:18;5960:26;;5996:67;6060:1;6049:9;6045:17;6036:6;5996:67;:::i;:::-;5856:214;;;;:::o;6076:117::-;6185:1;6182;6175:12;6199:180;6247:77;6244:1;6237:88;6344:4;6341:1;6334:15;6368:4;6365:1;6358:15;6385:281;6468:27;6490:4;6468:27;:::i;:::-;6460:6;6456:40;6598:6;6586:10;6583:22;6562:18;6550:10;6547:34;6544:62;6541:88;;;6609:18;;:::i;:::-;6541:88;6649:10;6645:2;6638:22;6428:238;6385:281;;:::o;6672:129::-;6706:6;6733:20;;:::i;:::-;6723:30;;6762:33;6790:4;6782:6;6762:33;:::i;:::-;6672:129;;;:::o;6807:311::-;6884:4;6974:18;6966:6;6963:30;6960:56;;;6996:18;;:::i;:::-;6960:56;7046:4;7038:6;7034:17;7026:25;;7106:4;7100;7096:15;7088:23;;6807:311;;;:::o;7124:117::-;7233:1;7230;7223:12;7264:710;7360:5;7385:81;7401:64;7458:6;7401:64;:::i;:::-;7385:81;:::i;:::-;7376:90;;7486:5;7515:6;7508:5;7501:21;7549:4;7542:5;7538:16;7531:23;;7602:4;7594:6;7590:17;7582:6;7578:30;7631:3;7623:6;7620:15;7617:122;;;7650:79;;:::i;:::-;7617:122;7765:6;7748:220;7782:6;7777:3;7774:15;7748:220;;;7857:3;7886:37;7919:3;7907:10;7886:37;:::i;:::-;7881:3;7874:50;7953:4;7948:3;7944:14;7937:21;;7824:144;7808:4;7803:3;7799:14;7792:21;;7748:220;;;7752:21;7366:608;;7264:710;;;;;:::o;7997:370::-;8068:5;8117:3;8110:4;8102:6;8098:17;8094:27;8084:122;;8125:79;;:::i;:::-;8084:122;8242:6;8229:20;8267:94;8357:3;8349:6;8342:4;8334:6;8330:17;8267:94;:::i;:::-;8258:103;;8074:293;7997:370;;;;:::o;8373:116::-;8443:21;8458:5;8443:21;:::i;:::-;8436:5;8433:32;8423:60;;8479:1;8476;8469:12;8423:60;8373:116;:::o;8495:133::-;8538:5;8576:6;8563:20;8554:29;;8592:30;8616:5;8592:30;:::i;:::-;8495:133;;;;:::o;8634:678::-;8724:6;8732;8781:2;8769:9;8760:7;8756:23;8752:32;8749:119;;;8787:79;;:::i;:::-;8749:119;8935:1;8924:9;8920:17;8907:31;8965:18;8957:6;8954:30;8951:117;;;8987:79;;:::i;:::-;8951:117;9092:78;9162:7;9153:6;9142:9;9138:22;9092:78;:::i;:::-;9082:88;;8878:302;9219:2;9245:50;9287:7;9278:6;9267:9;9263:22;9245:50;:::i;:::-;9235:60;;9190:115;8634:678;;;;;:::o;9318:329::-;9377:6;9426:2;9414:9;9405:7;9401:23;9397:32;9394:119;;;9432:79;;:::i;:::-;9394:119;9552:1;9577:53;9622:7;9613:6;9602:9;9598:22;9577:53;:::i;:::-;9567:63;;9523:117;9318:329;;;;:::o;9653:474::-;9721:6;9729;9778:2;9766:9;9757:7;9753:23;9749:32;9746:119;;;9784:79;;:::i;:::-;9746:119;9904:1;9929:53;9974:7;9965:6;9954:9;9950:22;9929:53;:::i;:::-;9919:63;;9875:117;10031:2;10057:53;10102:7;10093:6;10082:9;10078:22;10057:53;:::i;:::-;10047:63;;10002:118;9653:474;;;;;:::o;10133:180::-;10181:77;10178:1;10171:88;10278:4;10275:1;10268:15;10302:4;10299:1;10292:15;10319:320;10363:6;10400:1;10394:4;10390:12;10380:22;;10447:1;10441:4;10437:12;10468:18;10458:81;;10524:4;10516:6;10512:17;10502:27;;10458:81;10586:2;10578:6;10575:14;10555:18;10552:38;10549:84;;10605:18;;:::i;:::-;10549:84;10370:269;10319:320;;;:::o;10645:180::-;10693:77;10690:1;10683:88;10790:4;10787:1;10780:15;10814:4;10811:1;10804:15;10831:191;10871:3;10890:20;10908:1;10890:20;:::i;:::-;10885:25;;10924:20;10942:1;10924:20;:::i;:::-;10919:25;;10967:1;10964;10960:9;10953:16;;10988:3;10985:1;10982:10;10979:36;;;10995:18;;:::i;:::-;10979:36;10831:191;;;;:::o;11028:180::-;11076:77;11073:1;11066:88;11173:4;11170:1;11163:15;11197:4;11194:1;11187:15;11214:173;11354:25;11350:1;11342:6;11338:14;11331:49;11214:173;:::o;11393:366::-;11535:3;11556:67;11620:2;11615:3;11556:67;:::i;:::-;11549:74;;11632:93;11721:3;11632:93;:::i;:::-;11750:2;11745:3;11741:12;11734:19;;11393:366;;;:::o;11765:419::-;11931:4;11969:2;11958:9;11954:18;11946:26;;12018:9;12012:4;12008:20;12004:1;11993:9;11989:17;11982:47;12046:131;12172:4;12046:131;:::i;:::-;12038:139;;11765:419;;;:::o;12190:224::-;12330:34;12326:1;12318:6;12314:14;12307:58;12399:7;12394:2;12386:6;12382:15;12375:32;12190:224;:::o;12420:366::-;12562:3;12583:67;12647:2;12642:3;12583:67;:::i;:::-;12576:74;;12659:93;12748:3;12659:93;:::i;:::-;12777:2;12772:3;12768:12;12761:19;;12420:366;;;:::o;12792:419::-;12958:4;12996:2;12985:9;12981:18;12973:26;;13045:9;13039:4;13035:20;13031:1;13020:9;13016:17;13009:47;13073:131;13199:4;13073:131;:::i;:::-;13065:139;;12792:419;;;:::o;13217:225::-;13357:34;13353:1;13345:6;13341:14;13334:58;13426:8;13421:2;13413:6;13409:15;13402:33;13217:225;:::o;13448:366::-;13590:3;13611:67;13675:2;13670:3;13611:67;:::i;:::-;13604:74;;13687:93;13776:3;13687:93;:::i;:::-;13805:2;13800:3;13796:12;13789:19;;13448:366;;;:::o;13820:419::-;13986:4;14024:2;14013:9;14009:18;14001:26;;14073:9;14067:4;14063:20;14059:1;14048:9;14044:17;14037:47;14101:131;14227:4;14101:131;:::i;:::-;14093:139;;13820:419;;;:::o;14245:223::-;14385:34;14381:1;14373:6;14369:14;14362:58;14454:6;14449:2;14441:6;14437:15;14430:31;14245:223;:::o;14474:366::-;14616:3;14637:67;14701:2;14696:3;14637:67;:::i;:::-;14630:74;;14713:93;14802:3;14713:93;:::i;:::-;14831:2;14826:3;14822:12;14815:19;;14474:366;;;:::o;14846:419::-;15012:4;15050:2;15039:9;15035:18;15027:26;;15099:9;15093:4;15089:20;15085:1;15074:9;15070:17;15063:47;15127:131;15253:4;15127:131;:::i;:::-;15119:139;;14846:419;;;:::o;15271:221::-;15411:34;15407:1;15399:6;15395:14;15388:58;15480:4;15475:2;15467:6;15463:15;15456:29;15271:221;:::o;15498:366::-;15640:3;15661:67;15725:2;15720:3;15661:67;:::i;:::-;15654:74;;15737:93;15826:3;15737:93;:::i;:::-;15855:2;15850:3;15846:12;15839:19;;15498:366;;;:::o;15870:419::-;16036:4;16074:2;16063:9;16059:18;16051:26;;16123:9;16117:4;16113:20;16109:1;16098:9;16094:17;16087:47;16151:131;16277:4;16151:131;:::i;:::-;16143:139;;15870:419;;;:::o;16295:222::-;16435:34;16431:1;16423:6;16419:14;16412:58;16504:5;16499:2;16491:6;16487:15;16480:30;16295:222;:::o;16523:366::-;16665:3;16686:67;16750:2;16745:3;16686:67;:::i;:::-;16679:74;;16762:93;16851:3;16762:93;:::i;:::-;16880:2;16875:3;16871:12;16864:19;;16523:366;;;:::o;16895:419::-;17061:4;17099:2;17088:9;17084:18;17076:26;;17148:9;17142:4;17138:20;17134:1;17123:9;17119:17;17112:47;17176:131;17302:4;17176:131;:::i;:::-;17168:139;;16895:419;;;:::o;17320:224::-;17460:34;17456:1;17448:6;17444:14;17437:58;17529:7;17524:2;17516:6;17512:15;17505:32;17320:224;:::o;17550:366::-;17692:3;17713:67;17777:2;17772:3;17713:67;:::i;:::-;17706:74;;17789:93;17878:3;17789:93;:::i;:::-;17907:2;17902:3;17898:12;17891:19;;17550:366;;;:::o;17922:419::-;18088:4;18126:2;18115:9;18111:18;18103:26;;18175:9;18169:4;18165:20;18161:1;18150:9;18146:17;18139:47;18203:131;18329:4;18203:131;:::i;:::-;18195:139;;17922:419;;;:::o;18347:222::-;18487:34;18483:1;18475:6;18471:14;18464:58;18556:5;18551:2;18543:6;18539:15;18532:30;18347:222;:::o;18575:366::-;18717:3;18738:67;18802:2;18797:3;18738:67;:::i;:::-;18731:74;;18814:93;18903:3;18814:93;:::i;:::-;18932:2;18927:3;18923:12;18916:19;;18575:366;;;:::o;18947:419::-;19113:4;19151:2;19140:9;19136:18;19128:26;;19200:9;19194:4;19190:20;19186:1;19175:9;19171:17;19164:47;19228:131;19354:4;19228:131;:::i;:::-;19220:139;;18947:419;;;:::o;19372:174::-;19512:26;19508:1;19500:6;19496:14;19489:50;19372:174;:::o;19552:366::-;19694:3;19715:67;19779:2;19774:3;19715:67;:::i;:::-;19708:74;;19791:93;19880:3;19791:93;:::i;:::-;19909:2;19904:3;19900:12;19893:19;;19552:366;;;:::o;19924:419::-;20090:4;20128:2;20117:9;20113:18;20105:26;;20177:9;20171:4;20167:20;20163:1;20152:9;20148:17;20141:47;20205:131;20331:4;20205:131;:::i;:::-;20197:139;;19924:419;;;:::o;20349:410::-;20389:7;20412:20;20430:1;20412:20;:::i;:::-;20407:25;;20446:20;20464:1;20446:20;:::i;:::-;20441:25;;20501:1;20498;20494:9;20523:30;20541:11;20523:30;:::i;:::-;20512:41;;20702:1;20693:7;20689:15;20686:1;20683:22;20663:1;20656:9;20636:83;20613:139;;20732:18;;:::i;:::-;20613:139;20397:362;20349:410;;;;:::o;20765:180::-;20813:77;20810:1;20803:88;20910:4;20907:1;20900:15;20934:4;20931:1;20924:15;20951:185;20991:1;21008:20;21026:1;21008:20;:::i;:::-;21003:25;;21042:20;21060:1;21042:20;:::i;:::-;21037:25;;21081:1;21071:35;;21086:18;;:::i;:::-;21071:35;21128:1;21125;21121:9;21116:14;;20951:185;;;;:::o;21142:194::-;21182:4;21202:20;21220:1;21202:20;:::i;:::-;21197:25;;21236:20;21254:1;21236:20;:::i;:::-;21231:25;;21280:1;21277;21273:9;21265:17;;21304:1;21298:4;21295:11;21292:37;;;21309:18;;:::i;:::-;21292:37;21142:194;;;;:::o;21342:182::-;21482:34;21478:1;21470:6;21466:14;21459:58;21342:182;:::o;21530:366::-;21672:3;21693:67;21757:2;21752:3;21693:67;:::i;:::-;21686:74;;21769:93;21858:3;21769:93;:::i;:::-;21887:2;21882:3;21878:12;21871:19;;21530:366;;;:::o;21902:419::-;22068:4;22106:2;22095:9;22091:18;22083:26;;22155:9;22149:4;22145:20;22141:1;22130:9;22126:17;22119:47;22183:131;22309:4;22183:131;:::i;:::-;22175:139;;21902:419;;;:::o;22327:225::-;22467:34;22463:1;22455:6;22451:14;22444:58;22536:8;22531:2;22523:6;22519:15;22512:33;22327:225;:::o;22558:366::-;22700:3;22721:67;22785:2;22780:3;22721:67;:::i;:::-;22714:74;;22797:93;22886:3;22797:93;:::i;:::-;22915:2;22910:3;22906:12;22899:19;;22558:366;;;:::o;22930:419::-;23096:4;23134:2;23123:9;23119:18;23111:26;;23183:9;23177:4;23173:20;23169:1;23158:9;23154:17;23147:47;23211:131;23337:4;23211:131;:::i;:::-;23203:139;;22930:419;;;:::o;23355:442::-;23504:4;23542:2;23531:9;23527:18;23519:26;;23555:71;23623:1;23612:9;23608:17;23599:6;23555:71;:::i;:::-;23636:72;23704:2;23693:9;23689:18;23680:6;23636:72;:::i;:::-;23718;23786:2;23775:9;23771:18;23762:6;23718:72;:::i;:::-;23355:442;;;;;;:::o;23803:147::-;23904:11;23941:3;23926:18;;23803:147;;;;:::o;23956:114::-;;:::o;24076:398::-;24235:3;24256:83;24337:1;24332:3;24256:83;:::i;:::-;24249:90;;24348:93;24437:3;24348:93;:::i;:::-;24466:1;24461:3;24457:11;24450:18;;24076:398;;;:::o;24480:379::-;24664:3;24686:147;24829:3;24686:147;:::i;:::-;24679:154;;24850:3;24843:10;;24480:379;;;:::o;24865:143::-;24922:5;24953:6;24947:13;24938:22;;24969:33;24996:5;24969:33;:::i;:::-;24865:143;;;;:::o;25014:351::-;25084:6;25133:2;25121:9;25112:7;25108:23;25104:32;25101:119;;;25139:79;;:::i;:::-;25101:119;25259:1;25284:64;25340:7;25331:6;25320:9;25316:22;25284:64;:::i;:::-;25274:74;;25230:128;25014:351;;;;:::o;25371:85::-;25416:7;25445:5;25434:16;;25371:85;;;:::o;25462:158::-;25520:9;25553:61;25571:42;25580:32;25606:5;25580:32;:::i;:::-;25571:42;:::i;:::-;25553:61;:::i;:::-;25540:74;;25462:158;;;:::o;25626:147::-;25721:45;25760:5;25721:45;:::i;:::-;25716:3;25709:58;25626:147;;:::o;25779:114::-;25846:6;25880:5;25874:12;25864:22;;25779:114;;;:::o;25899:184::-;25998:11;26032:6;26027:3;26020:19;26072:4;26067:3;26063:14;26048:29;;25899:184;;;;:::o;26089:132::-;26156:4;26179:3;26171:11;;26209:4;26204:3;26200:14;26192:22;;26089:132;;;:::o;26227:108::-;26304:24;26322:5;26304:24;:::i;:::-;26299:3;26292:37;26227:108;;:::o;26341:179::-;26410:10;26431:46;26473:3;26465:6;26431:46;:::i;:::-;26509:4;26504:3;26500:14;26486:28;;26341:179;;;;:::o;26526:113::-;26596:4;26628;26623:3;26619:14;26611:22;;26526:113;;;:::o;26675:732::-;26794:3;26823:54;26871:5;26823:54;:::i;:::-;26893:86;26972:6;26967:3;26893:86;:::i;:::-;26886:93;;27003:56;27053:5;27003:56;:::i;:::-;27082:7;27113:1;27098:284;27123:6;27120:1;27117:13;27098:284;;;27199:6;27193:13;27226:63;27285:3;27270:13;27226:63;:::i;:::-;27219:70;;27312:60;27365:6;27312:60;:::i;:::-;27302:70;;27158:224;27145:1;27142;27138:9;27133:14;;27098:284;;;27102:14;27398:3;27391:10;;26799:608;;;26675:732;;;;:::o;27413:831::-;27676:4;27714:3;27703:9;27699:19;27691:27;;27728:71;27796:1;27785:9;27781:17;27772:6;27728:71;:::i;:::-;27809:80;27885:2;27874:9;27870:18;27861:6;27809:80;:::i;:::-;27936:9;27930:4;27926:20;27921:2;27910:9;27906:18;27899:48;27964:108;28067:4;28058:6;27964:108;:::i;:::-;27956:116;;28082:72;28150:2;28139:9;28135:18;28126:6;28082:72;:::i;:::-;28164:73;28232:3;28221:9;28217:19;28208:6;28164:73;:::i;:::-;27413:831;;;;;;;;:::o;28250:807::-;28499:4;28537:3;28526:9;28522:19;28514:27;;28551:71;28619:1;28608:9;28604:17;28595:6;28551:71;:::i;:::-;28632:72;28700:2;28689:9;28685:18;28676:6;28632:72;:::i;:::-;28714:80;28790:2;28779:9;28775:18;28766:6;28714:80;:::i;:::-;28804;28880:2;28869:9;28865:18;28856:6;28804:80;:::i;:::-;28894:73;28962:3;28951:9;28947:19;28938:6;28894:73;:::i;:::-;28977;29045:3;29034:9;29030:19;29021:6;28977:73;:::i;:::-;28250:807;;;;;;;;;:::o;29063:143::-;29120:5;29151:6;29145:13;29136:22;;29167:33;29194:5;29167:33;:::i;:::-;29063:143;;;;:::o;29212:663::-;29300:6;29308;29316;29365:2;29353:9;29344:7;29340:23;29336:32;29333:119;;;29371:79;;:::i;:::-;29333:119;29491:1;29516:64;29572:7;29563:6;29552:9;29548:22;29516:64;:::i;:::-;29506:74;;29462:128;29629:2;29655:64;29711:7;29702:6;29691:9;29687:22;29655:64;:::i;:::-;29645:74;;29600:129;29768:2;29794:64;29850:7;29841:6;29830:9;29826:22;29794:64;:::i;:::-;29784:74;;29739:129;29212:663;;;;;:::o

Swarm Source

ipfs://0c5f974f46a68a005146e2edc78d4a31a5c0b3e1d12320cd3f654c3d29f13825
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.