ETH Price: $2,169.11 (-6.99%)

Token

THE CUM WAR (TCUMW)
 

Overview

Max Total Supply

100,000,000 TCUMW

Holders

8

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
CumWar

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-26
*/

// File: src/contracts/uniswap/IUniswapV2Router01.sol



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,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
// File: src/contracts/uniswap/IUniswapV2Router02.sol



pragma solidity >=0.6.2;


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
// File: src/contracts/uniswap/IUniswapV2Pair.sol



pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}
// File: src/contracts/uniswap/IUniswapV2Factory.sol



pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
// File: src/contracts/math/SafeMath.sol



pragma solidity ^0.8.0;

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

    /**
     * @dev Returns the substraction 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) {
        if (b == 0) return ~uint120(0);
        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 {
            if (b == 0) return ~uint120(0);
            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;
        }
    }
}
// File: src/contracts/utils/Context.sol



pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
// File: src/contracts/access/Ownable.sol



pragma solidity ^0.8.0;


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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

// File: src/contracts/utils/IERC20.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @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);
}
// File: src/contracts/utils/IERC20Metadata.sol



pragma solidity ^0.8.0;


interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
// File: src/contracts/utils/ERC20.sol



pragma solidity ^0.8.0;





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

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

    uint256 public _totalSupply;

    string public _name;
    string public _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * 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 value {ERC20} uses, unless this function is
     * 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:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        _balances[account] = _balances[account].sub(amount);
        _totalSupply -= amount;

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

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

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

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

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

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



pragma solidity 0.8.10;
pragma experimental ABIEncoderV2;







contract CumWar is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    bool private swapping = false;
    uint256 public marketingFee = 0;
    address public marketingWallet = address(0x55402Bf1A1337A7489c23d970BAA67E3Be31076a);
    uint256 public maxWallet = 2_000_000 * 1e18;
    uint256 public maxTransactionAmount = 2_000_000 * 1e18;
    uint256 public genesis_block = block.number;
    uint256 public tokensForLiquidity;
    uint256 public tokensForMarketing;
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;
    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("THE CUM WAR", "TCUMW") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 100_000_000 * 1e18;

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx) private {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function excludeFromFees(address account, bool excluded) private {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function burnMarketing(uint256 amount) public {
        _burn(marketingWallet, amount);
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(from != address(0), "Transfer from the zero address");
        require(to != address(0), "Transfer to the zero address");
        bool takeFee = true;
        if (!_isExcludedMaxTransactionAmount[from] || !_isExcludedMaxTransactionAmount[to]) {
            require(amount <= maxTransactionAmount, "[_transfer]: Max Transaction Limit");
        }
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        } 
        if (takeFee && marketingFee > 0) {
            uint256 fees = amount.mul(marketingFee).div(100);
            if (fees > 0) {
                super._transfer(from, marketingWallet, fees);
            }
            amount -= fees;
        }
        super._transfer(from, to, amount);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"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":"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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnMarketing","outputs":[],"stateMutability":"nonpayable","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":"genesis_block","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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"}]

60806040526000600760146101000a81548160ff02191690831515021790555060006008557355402bf1a1337a7489c23d970baa67e3be31076a600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a01a784379d99db42000000600a556a01a784379d99db42000000600b5543600c55348015620000a857600080fd5b506040518060400160405280600b81526020017f5448452043554d205741520000000000000000000000000000000000000000008152506040518060400160405280600581526020017f5443554d5700000000000000000000000000000000000000000000000000000081525081600390805190602001906200012d9291906200092f565b508060049080519060200190620001469291906200092f565b505050620001696200015d6200050d60201b60201c565b6200051560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200020f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000235919062000a49565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200029d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c3919062000a49565b6040518363ffffffff1660e01b8152600401620002e292919062000a8c565b6020604051808303816000875af115801562000302573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000328919062000a49565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200039d600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620005db60201b60201c565b60006a52b7d2dcc80cd2e40000009050620003cf620003c16200067c60201b60201c565b6001620006a660201b60201c565b62000404600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006a660201b60201c565b62000417306001620006a660201b60201c565b6200042c61dead6001620006a660201b60201c565b6200043f826001620006a660201b60201c565b62000474600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006a660201b60201c565b62000496620004886200067c60201b60201c565b60016200070160201b60201c565b620004cb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200070160201b60201c565b620004de3060016200070160201b60201c565b620004f361dead60016200070160201b60201c565b620005053382620007ac60201b60201c565b505062000c9f565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007a0919062000ad6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200081f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008169062000b54565b60405180910390fd5b62000833600083836200092560201b60201c565b806002600082825462000847919062000baf565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200089e919062000baf565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000905919062000c1d565b60405180910390a362000921600083836200092a60201b60201c565b5050565b505050565b505050565b8280546200093d9062000c69565b90600052602060002090601f016020900481019282620009615760008555620009ad565b82601f106200097c57805160ff1916838001178555620009ad565b82800160010185558215620009ad579182015b82811115620009ac5782518255916020019190600101906200098f565b5b509050620009bc9190620009c0565b5090565b5b80821115620009db576000816000905550600101620009c1565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a1182620009e4565b9050919050565b62000a238162000a04565b811462000a2f57600080fd5b50565b60008151905062000a438162000a18565b92915050565b60006020828403121562000a625762000a61620009df565b5b600062000a728482850162000a32565b91505092915050565b62000a868162000a04565b82525050565b600060408201905062000aa3600083018562000a7b565b62000ab2602083018462000a7b565b9392505050565b60008115159050919050565b62000ad08162000ab9565b82525050565b600060208201905062000aed600083018462000ac5565b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000b3c601f8362000af3565b915062000b498262000b04565b602082019050919050565b6000602082019050818103600083015262000b6f8162000b2d565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000bbc8262000b76565b915062000bc98362000b76565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c015762000c0062000b80565b5b828201905092915050565b62000c178162000b76565b82525050565b600060208201905062000c34600083018462000c0c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c8257607f821691505b6020821081141562000c995762000c9862000c3a565b5b50919050565b6129bd8062000caf6000396000f3fe6080604052600436106101dc5760003560e01c80634fbee19311610102578063a9059cbb11610095578063d28d885211610064578063d28d8852146106fd578063dd62ed3e14610728578063f2fde38b14610765578063f8b45b051461078e576101e3565b8063a9059cbb1461062d578063b09f12661461066a578063b62496f514610695578063c8c8ebe4146106d2576101e3565b806375f0a874116100d157806375f0a8741461056f5780638da5cb5b1461059a57806395d89b41146105c5578063a457c2d7146105f0576101e3565b80634fbee193146104b35780636b67c4df146104f057806370a082311461051b578063715018a614610558576101e3565b80631f3fed8f1161017a578063313ce56711610149578063313ce567146103f557806339509351146104205780633eaaf86b1461045d57806349bd5a5e14610488576101e3565b80631f3fed8f1461033757806323b872dd14610362578063274a533c1461039f57806327c8f835146103ca576101e3565b806310d5de53116101b657806310d5de53146102795780631694505e146102b657806318160ddd146102e15780631a8145bb1461030c576101e3565b806306fdde03146101e8578063095ea7b3146102135780631095793c14610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6107b9565b60405161020a9190611c74565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190611d2f565b61084b565b6040516102479190611d8a565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190611da5565b610869565b005b34801561028557600080fd5b506102a0600480360381019061029b9190611dd2565b610898565b6040516102ad9190611d8a565b60405180910390f35b3480156102c257600080fd5b506102cb6108b8565b6040516102d89190611e5e565b60405180910390f35b3480156102ed57600080fd5b506102f66108de565b6040516103039190611e88565b60405180910390f35b34801561031857600080fd5b506103216108e8565b60405161032e9190611e88565b60405180910390f35b34801561034357600080fd5b5061034c6108ee565b6040516103599190611e88565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190611ea3565b6108f4565b6040516103969190611d8a565b60405180910390f35b3480156103ab57600080fd5b506103b46109f5565b6040516103c19190611e88565b60405180910390f35b3480156103d657600080fd5b506103df6109fb565b6040516103ec9190611f05565b60405180910390f35b34801561040157600080fd5b5061040a610a01565b6040516104179190611f3c565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190611d2f565b610a0a565b6040516104549190611d8a565b60405180910390f35b34801561046957600080fd5b50610472610ab6565b60405161047f9190611e88565b60405180910390f35b34801561049457600080fd5b5061049d610abc565b6040516104aa9190611f05565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190611dd2565b610ae2565b6040516104e79190611d8a565b60405180910390f35b3480156104fc57600080fd5b50610505610b38565b6040516105129190611e88565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190611dd2565b610b3e565b60405161054f9190611e88565b60405180910390f35b34801561056457600080fd5b5061056d610b86565b005b34801561057b57600080fd5b50610584610c0e565b6040516105919190611f05565b60405180910390f35b3480156105a657600080fd5b506105af610c34565b6040516105bc9190611f05565b60405180910390f35b3480156105d157600080fd5b506105da610c5e565b6040516105e79190611c74565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190611d2f565b610cf0565b6040516106249190611d8a565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190611d2f565b610de4565b6040516106619190611d8a565b60405180910390f35b34801561067657600080fd5b5061067f610e02565b60405161068c9190611c74565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190611dd2565b610e90565b6040516106c99190611d8a565b60405180910390f35b3480156106de57600080fd5b506106e7610eb0565b6040516106f49190611e88565b60405180910390f35b34801561070957600080fd5b50610712610eb6565b60405161071f9190611c74565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190611f57565b610f44565b60405161075c9190611e88565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190611dd2565b610fcb565b005b34801561079a57600080fd5b506107a36110c3565b6040516107b09190611e88565b60405180910390f35b6060600380546107c890611fc6565b80601f01602080910402602001604051908101604052809291908181526020018280546107f490611fc6565b80156108415780601f1061081657610100808354040283529160200191610841565b820191906000526020600020905b81548152906001019060200180831161082457829003601f168201915b5050505050905090565b600061085f6108586110c9565b84846110d1565b6001905092915050565b610895600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261129c565b50565b60106020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600d5481565b600e5481565b60006109018484846114c1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061094c6110c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c39061206a565b60405180910390fd5b6109e9856109d86110c9565b85846109e491906120b9565b6110d1565b60019150509392505050565b600c5481565b61dead81565b60006012905090565b6000610aac610a176110c9565b848460016000610a256110c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aa791906120ed565b6110d1565b6001905092915050565b60025481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b8e6110c9565b73ffffffffffffffffffffffffffffffffffffffff16610bac610c34565b73ffffffffffffffffffffffffffffffffffffffff1614610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf99061218f565b60405180910390fd5b610c0c600061181b565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c6d90611fc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9990611fc6565b8015610ce65780601f10610cbb57610100808354040283529160200191610ce6565b820191906000526020600020905b815481529060010190602001808311610cc957829003601f168201915b5050505050905090565b60008060016000610cff6110c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390612221565b60405180910390fd5b610dd9610dc76110c9565b858584610dd491906120b9565b6110d1565b600191505092915050565b6000610df8610df16110c9565b84846114c1565b6001905092915050565b60048054610e0f90611fc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b90611fc6565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b505050505081565b60116020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60038054610ec390611fc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610eef90611fc6565b8015610f3c5780601f10610f1157610100808354040283529160200191610f3c565b820191906000526020600020905b815481529060010190602001808311610f1f57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610fd36110c9565b73ffffffffffffffffffffffffffffffffffffffff16610ff1610c34565b73ffffffffffffffffffffffffffffffffffffffff1614611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e9061218f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906122b3565b60405180910390fd5b6110c08161181b565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113890612345565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a8906123d7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161128f9190611e88565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561130c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130390612469565b60405180910390fd5b611318826000836118e1565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561139e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611395906124fb565b60405180910390fd5b6113ef826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118e690919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461144391906120b9565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a89190611e88565b60405180910390a36114bc83600084611920565b505050565b60008111611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061258d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b906125f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612665565b60405180910390fd5b600060019050601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158061168d5750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116d857600b548211156116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce906126f7565b60405180910390fd5b5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117795750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561178357600090505b80801561179257506000600854115b1561180a5760006117c160646117b36008548661192590919063ffffffff16565b61193b90919063ffffffff16565b905060008111156117fa576117f985600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611951565b5b808361180691906120b9565b9250505b611815848484611951565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b60008082141561190b576000196effffffffffffffffffffffffffffff16905061191a565b818361191791906120b9565b90505b92915050565b505050565b600081836119339190612717565b905092915050565b6000818361194991906127a0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890612843565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a28906128d5565b60405180910390fd5b611a3c8383836118e1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990612967565b60405180910390fd5b8181611ace91906120b9565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b5e91906120ed565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bc29190611e88565b60405180910390a3611bd5848484611920565b50505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c15578082015181840152602081019050611bfa565b83811115611c24576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c4682611bdb565b611c508185611be6565b9350611c60818560208601611bf7565b611c6981611c2a565b840191505092915050565b60006020820190508181036000830152611c8e8184611c3b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cc682611c9b565b9050919050565b611cd681611cbb565b8114611ce157600080fd5b50565b600081359050611cf381611ccd565b92915050565b6000819050919050565b611d0c81611cf9565b8114611d1757600080fd5b50565b600081359050611d2981611d03565b92915050565b60008060408385031215611d4657611d45611c96565b5b6000611d5485828601611ce4565b9250506020611d6585828601611d1a565b9150509250929050565b60008115159050919050565b611d8481611d6f565b82525050565b6000602082019050611d9f6000830184611d7b565b92915050565b600060208284031215611dbb57611dba611c96565b5b6000611dc984828501611d1a565b91505092915050565b600060208284031215611de857611de7611c96565b5b6000611df684828501611ce4565b91505092915050565b6000819050919050565b6000611e24611e1f611e1a84611c9b565b611dff565b611c9b565b9050919050565b6000611e3682611e09565b9050919050565b6000611e4882611e2b565b9050919050565b611e5881611e3d565b82525050565b6000602082019050611e736000830184611e4f565b92915050565b611e8281611cf9565b82525050565b6000602082019050611e9d6000830184611e79565b92915050565b600080600060608486031215611ebc57611ebb611c96565b5b6000611eca86828701611ce4565b9350506020611edb86828701611ce4565b9250506040611eec86828701611d1a565b9150509250925092565b611eff81611cbb565b82525050565b6000602082019050611f1a6000830184611ef6565b92915050565b600060ff82169050919050565b611f3681611f20565b82525050565b6000602082019050611f516000830184611f2d565b92915050565b60008060408385031215611f6e57611f6d611c96565b5b6000611f7c85828601611ce4565b9250506020611f8d85828601611ce4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611fde57607f821691505b60208210811415611ff257611ff1611f97565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612054602883611be6565b915061205f82611ff8565b604082019050919050565b6000602082019050818103600083015261208381612047565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120c482611cf9565b91506120cf83611cf9565b9250828210156120e2576120e161208a565b5b828203905092915050565b60006120f882611cf9565b915061210383611cf9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121385761213761208a565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612179602083611be6565b915061218482612143565b602082019050919050565b600060208201905081810360008301526121a88161216c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061220b602583611be6565b9150612216826121af565b604082019050919050565b6000602082019050818103600083015261223a816121fe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061229d602683611be6565b91506122a882612241565b604082019050919050565b600060208201905081810360008301526122cc81612290565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061232f602483611be6565b915061233a826122d3565b604082019050919050565b6000602082019050818103600083015261235e81612322565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006123c1602283611be6565b91506123cc82612365565b604082019050919050565b600060208201905081810360008301526123f0816123b4565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612453602183611be6565b915061245e826123f7565b604082019050919050565b6000602082019050818103600083015261248281612446565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006124e5602283611be6565b91506124f082612489565b604082019050919050565b60006020820190508181036000830152612514816124d8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612577602983611be6565b91506125828261251b565b604082019050919050565b600060208201905081810360008301526125a68161256a565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006125e3601e83611be6565b91506125ee826125ad565b602082019050919050565b60006020820190508181036000830152612612816125d6565b9050919050565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b600061264f601c83611be6565b915061265a82612619565b602082019050919050565b6000602082019050818103600083015261267e81612642565b9050919050565b7f5b5f7472616e736665725d3a204d6178205472616e73616374696f6e204c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b60006126e1602283611be6565b91506126ec82612685565b604082019050919050565b60006020820190508181036000830152612710816126d4565b9050919050565b600061272282611cf9565b915061272d83611cf9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127665761276561208a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127ab82611cf9565b91506127b683611cf9565b9250826127c6576127c5612771565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061282d602583611be6565b9150612838826127d1565b604082019050919050565b6000602082019050818103600083015261285c81612820565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006128bf602383611be6565b91506128ca82612863565b604082019050919050565b600060208201905081810360008301526128ee816128b2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612951602683611be6565b915061295c826128f5565b604082019050919050565b6000602082019050818103600083015261298081612944565b905091905056fea2646970667358221220b8cce770bb505d9bae6206a3086b29c009f687a4c9b559137f11f9a1a4685ccd64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106101dc5760003560e01c80634fbee19311610102578063a9059cbb11610095578063d28d885211610064578063d28d8852146106fd578063dd62ed3e14610728578063f2fde38b14610765578063f8b45b051461078e576101e3565b8063a9059cbb1461062d578063b09f12661461066a578063b62496f514610695578063c8c8ebe4146106d2576101e3565b806375f0a874116100d157806375f0a8741461056f5780638da5cb5b1461059a57806395d89b41146105c5578063a457c2d7146105f0576101e3565b80634fbee193146104b35780636b67c4df146104f057806370a082311461051b578063715018a614610558576101e3565b80631f3fed8f1161017a578063313ce56711610149578063313ce567146103f557806339509351146104205780633eaaf86b1461045d57806349bd5a5e14610488576101e3565b80631f3fed8f1461033757806323b872dd14610362578063274a533c1461039f57806327c8f835146103ca576101e3565b806310d5de53116101b657806310d5de53146102795780631694505e146102b657806318160ddd146102e15780631a8145bb1461030c576101e3565b806306fdde03146101e8578063095ea7b3146102135780631095793c14610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6107b9565b60405161020a9190611c74565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190611d2f565b61084b565b6040516102479190611d8a565b60405180910390f35b34801561025c57600080fd5b5061027760048036038101906102729190611da5565b610869565b005b34801561028557600080fd5b506102a0600480360381019061029b9190611dd2565b610898565b6040516102ad9190611d8a565b60405180910390f35b3480156102c257600080fd5b506102cb6108b8565b6040516102d89190611e5e565b60405180910390f35b3480156102ed57600080fd5b506102f66108de565b6040516103039190611e88565b60405180910390f35b34801561031857600080fd5b506103216108e8565b60405161032e9190611e88565b60405180910390f35b34801561034357600080fd5b5061034c6108ee565b6040516103599190611e88565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190611ea3565b6108f4565b6040516103969190611d8a565b60405180910390f35b3480156103ab57600080fd5b506103b46109f5565b6040516103c19190611e88565b60405180910390f35b3480156103d657600080fd5b506103df6109fb565b6040516103ec9190611f05565b60405180910390f35b34801561040157600080fd5b5061040a610a01565b6040516104179190611f3c565b60405180910390f35b34801561042c57600080fd5b5061044760048036038101906104429190611d2f565b610a0a565b6040516104549190611d8a565b60405180910390f35b34801561046957600080fd5b50610472610ab6565b60405161047f9190611e88565b60405180910390f35b34801561049457600080fd5b5061049d610abc565b6040516104aa9190611f05565b60405180910390f35b3480156104bf57600080fd5b506104da60048036038101906104d59190611dd2565b610ae2565b6040516104e79190611d8a565b60405180910390f35b3480156104fc57600080fd5b50610505610b38565b6040516105129190611e88565b60405180910390f35b34801561052757600080fd5b50610542600480360381019061053d9190611dd2565b610b3e565b60405161054f9190611e88565b60405180910390f35b34801561056457600080fd5b5061056d610b86565b005b34801561057b57600080fd5b50610584610c0e565b6040516105919190611f05565b60405180910390f35b3480156105a657600080fd5b506105af610c34565b6040516105bc9190611f05565b60405180910390f35b3480156105d157600080fd5b506105da610c5e565b6040516105e79190611c74565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190611d2f565b610cf0565b6040516106249190611d8a565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190611d2f565b610de4565b6040516106619190611d8a565b60405180910390f35b34801561067657600080fd5b5061067f610e02565b60405161068c9190611c74565b60405180910390f35b3480156106a157600080fd5b506106bc60048036038101906106b79190611dd2565b610e90565b6040516106c99190611d8a565b60405180910390f35b3480156106de57600080fd5b506106e7610eb0565b6040516106f49190611e88565b60405180910390f35b34801561070957600080fd5b50610712610eb6565b60405161071f9190611c74565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190611f57565b610f44565b60405161075c9190611e88565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190611dd2565b610fcb565b005b34801561079a57600080fd5b506107a36110c3565b6040516107b09190611e88565b60405180910390f35b6060600380546107c890611fc6565b80601f01602080910402602001604051908101604052809291908181526020018280546107f490611fc6565b80156108415780601f1061081657610100808354040283529160200191610841565b820191906000526020600020905b81548152906001019060200180831161082457829003601f168201915b5050505050905090565b600061085f6108586110c9565b84846110d1565b6001905092915050565b610895600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168261129c565b50565b60106020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600d5481565b600e5481565b60006109018484846114c1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061094c6110c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156109cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c39061206a565b60405180910390fd5b6109e9856109d86110c9565b85846109e491906120b9565b6110d1565b60019150509392505050565b600c5481565b61dead81565b60006012905090565b6000610aac610a176110c9565b848460016000610a256110c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610aa791906120ed565b6110d1565b6001905092915050565b60025481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b8e6110c9565b73ffffffffffffffffffffffffffffffffffffffff16610bac610c34565b73ffffffffffffffffffffffffffffffffffffffff1614610c02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf99061218f565b60405180910390fd5b610c0c600061181b565b565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c6d90611fc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9990611fc6565b8015610ce65780601f10610cbb57610100808354040283529160200191610ce6565b820191906000526020600020905b815481529060010190602001808311610cc957829003601f168201915b5050505050905090565b60008060016000610cff6110c9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db390612221565b60405180910390fd5b610dd9610dc76110c9565b858584610dd491906120b9565b6110d1565b600191505092915050565b6000610df8610df16110c9565b84846114c1565b6001905092915050565b60048054610e0f90611fc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3b90611fc6565b8015610e885780601f10610e5d57610100808354040283529160200191610e88565b820191906000526020600020905b815481529060010190602001808311610e6b57829003601f168201915b505050505081565b60116020528060005260406000206000915054906101000a900460ff1681565b600b5481565b60038054610ec390611fc6565b80601f0160208091040260200160405190810160405280929190818152602001828054610eef90611fc6565b8015610f3c5780601f10610f1157610100808354040283529160200191610f3c565b820191906000526020600020905b815481529060010190602001808311610f1f57829003601f168201915b505050505081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610fd36110c9565b73ffffffffffffffffffffffffffffffffffffffff16610ff1610c34565b73ffffffffffffffffffffffffffffffffffffffff1614611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e9061218f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ae906122b3565b60405180910390fd5b6110c08161181b565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113890612345565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a8906123d7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161128f9190611e88565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561130c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130390612469565b60405180910390fd5b611318826000836118e1565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561139e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611395906124fb565b60405180910390fd5b6113ef826000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546118e690919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461144391906120b9565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a89190611e88565b60405180910390a36114bc83600084611920565b505050565b60008111611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb9061258d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611574576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156b906125f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612665565b60405180910390fd5b600060019050601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158061168d5750601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156116d857600b548211156116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce906126f7565b60405180910390fd5b5b600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806117795750600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561178357600090505b80801561179257506000600854115b1561180a5760006117c160646117b36008548661192590919063ffffffff16565b61193b90919063ffffffff16565b905060008111156117fa576117f985600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611951565b5b808361180691906120b9565b9250505b611815848484611951565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b60008082141561190b576000196effffffffffffffffffffffffffffff16905061191a565b818361191791906120b9565b90505b92915050565b505050565b600081836119339190612717565b905092915050565b6000818361194991906127a0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890612843565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a28906128d5565b60405180910390fd5b611a3c8383836118e1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990612967565b60405180910390fd5b8181611ace91906120b9565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b5e91906120ed565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611bc29190611e88565b60405180910390a3611bd5848484611920565b50505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c15578082015181840152602081019050611bfa565b83811115611c24576000848401525b50505050565b6000601f19601f8301169050919050565b6000611c4682611bdb565b611c508185611be6565b9350611c60818560208601611bf7565b611c6981611c2a565b840191505092915050565b60006020820190508181036000830152611c8e8184611c3b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611cc682611c9b565b9050919050565b611cd681611cbb565b8114611ce157600080fd5b50565b600081359050611cf381611ccd565b92915050565b6000819050919050565b611d0c81611cf9565b8114611d1757600080fd5b50565b600081359050611d2981611d03565b92915050565b60008060408385031215611d4657611d45611c96565b5b6000611d5485828601611ce4565b9250506020611d6585828601611d1a565b9150509250929050565b60008115159050919050565b611d8481611d6f565b82525050565b6000602082019050611d9f6000830184611d7b565b92915050565b600060208284031215611dbb57611dba611c96565b5b6000611dc984828501611d1a565b91505092915050565b600060208284031215611de857611de7611c96565b5b6000611df684828501611ce4565b91505092915050565b6000819050919050565b6000611e24611e1f611e1a84611c9b565b611dff565b611c9b565b9050919050565b6000611e3682611e09565b9050919050565b6000611e4882611e2b565b9050919050565b611e5881611e3d565b82525050565b6000602082019050611e736000830184611e4f565b92915050565b611e8281611cf9565b82525050565b6000602082019050611e9d6000830184611e79565b92915050565b600080600060608486031215611ebc57611ebb611c96565b5b6000611eca86828701611ce4565b9350506020611edb86828701611ce4565b9250506040611eec86828701611d1a565b9150509250925092565b611eff81611cbb565b82525050565b6000602082019050611f1a6000830184611ef6565b92915050565b600060ff82169050919050565b611f3681611f20565b82525050565b6000602082019050611f516000830184611f2d565b92915050565b60008060408385031215611f6e57611f6d611c96565b5b6000611f7c85828601611ce4565b9250506020611f8d85828601611ce4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611fde57607f821691505b60208210811415611ff257611ff1611f97565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000612054602883611be6565b915061205f82611ff8565b604082019050919050565b6000602082019050818103600083015261208381612047565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120c482611cf9565b91506120cf83611cf9565b9250828210156120e2576120e161208a565b5b828203905092915050565b60006120f882611cf9565b915061210383611cf9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121385761213761208a565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612179602083611be6565b915061218482612143565b602082019050919050565b600060208201905081810360008301526121a88161216c565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061220b602583611be6565b9150612216826121af565b604082019050919050565b6000602082019050818103600083015261223a816121fe565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061229d602683611be6565b91506122a882612241565b604082019050919050565b600060208201905081810360008301526122cc81612290565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061232f602483611be6565b915061233a826122d3565b604082019050919050565b6000602082019050818103600083015261235e81612322565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006123c1602283611be6565b91506123cc82612365565b604082019050919050565b600060208201905081810360008301526123f0816123b4565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612453602183611be6565b915061245e826123f7565b604082019050919050565b6000602082019050818103600083015261248281612446565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006124e5602283611be6565b91506124f082612489565b604082019050919050565b60006020820190508181036000830152612514816124d8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612577602983611be6565b91506125828261251b565b604082019050919050565b600060208201905081810360008301526125a68161256a565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f20616464726573730000600082015250565b60006125e3601e83611be6565b91506125ee826125ad565b602082019050919050565b60006020820190508181036000830152612612816125d6565b9050919050565b7f5472616e7366657220746f20746865207a65726f206164647265737300000000600082015250565b600061264f601c83611be6565b915061265a82612619565b602082019050919050565b6000602082019050818103600083015261267e81612642565b9050919050565b7f5b5f7472616e736665725d3a204d6178205472616e73616374696f6e204c696d60008201527f6974000000000000000000000000000000000000000000000000000000000000602082015250565b60006126e1602283611be6565b91506126ec82612685565b604082019050919050565b60006020820190508181036000830152612710816126d4565b9050919050565b600061272282611cf9565b915061272d83611cf9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156127665761276561208a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127ab82611cf9565b91506127b683611cf9565b9250826127c6576127c5612771565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061282d602583611be6565b9150612838826127d1565b604082019050919050565b6000602082019050818103600083015261285c81612820565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006128bf602383611be6565b91506128ca82612863565b604082019050919050565b600060208201905081810360008301526128ee816128b2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612951602683611be6565b915061295c826128f5565b604082019050919050565b6000602082019050818103600083015261298081612944565b905091905056fea2646970667358221220b8cce770bb505d9bae6206a3086b29c009f687a4c9b559137f11f9a1a4685ccd64736f6c634300080a0033

Deployed Bytecode Sourcemap

33820:4084:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23884:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26051:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36654:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34502:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33894:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25004:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34363:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34403;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26702:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34313:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33977:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24846:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27567:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23294:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33942:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36757:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34073:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25175:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17661:103;;;;;;;;;;;;;:::i;:::-;;34111:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17010:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24103:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28285:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25515:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23356:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34572:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34252:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23330:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25753:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17919:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34202:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23884:100;23938:13;23971:5;23964:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23884:100;:::o;26051:169::-;26134:4;26151:39;26160:12;:10;:12::i;:::-;26174:7;26183:6;26151:8;:39::i;:::-;26208:4;26201:11;;26051:169;;;;:::o;36654:95::-;36711:30;36717:15;;;;;;;;;;;36734:6;36711:5;:30::i;:::-;36654:95;:::o;34502:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;33894:41::-;;;;;;;;;;;;;:::o;25004:108::-;25065:7;25092:12;;25085:19;;25004:108;:::o;34363:33::-;;;;:::o;34403:::-;;;;:::o;26702:456::-;26842:4;26859:36;26869:6;26877:9;26888:6;26859:9;:36::i;:::-;26908:24;26935:11;:19;26947:6;26935:19;;;;;;;;;;;;;;;:33;26955:12;:10;:12::i;:::-;26935:33;;;;;;;;;;;;;;;;26908:60;;27007:6;26987:16;:26;;26979:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27069:57;27078:6;27086:12;:10;:12::i;:::-;27119:6;27100:16;:25;;;;:::i;:::-;27069:8;:57::i;:::-;27146:4;27139:11;;;26702:456;;;;;:::o;34313:43::-;;;;:::o;33977:53::-;34023:6;33977:53;:::o;24846:93::-;24904:5;24929:2;24922:9;;24846:93;:::o;27567:215::-;27655:4;27672:80;27681:12;:10;:12::i;:::-;27695:7;27741:10;27704:11;:25;27716:12;:10;:12::i;:::-;27704:25;;;;;;;;;;;;;;;:34;27730:7;27704:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;27672:8;:80::i;:::-;27770:4;27763:11;;27567:215;;;;:::o;23294:27::-;;;;:::o;33942:28::-;;;;;;;;;;;;;:::o;36757:126::-;36823:4;36847:19;:28;36867:7;36847:28;;;;;;;;;;;;;;;;;;;;;;;;;36840:35;;36757:126;;;:::o;34073:31::-;;;;:::o;25175:127::-;25249:7;25276:9;:18;25286:7;25276:18;;;;;;;;;;;;;;;;25269:25;;25175:127;;;:::o;17661:103::-;17241:12;:10;:12::i;:::-;17230:23;;:7;:5;:7::i;:::-;:23;;;17222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17726:30:::1;17753:1;17726:18;:30::i;:::-;17661:103::o:0;34111:84::-;;;;;;;;;;;;;:::o;17010:87::-;17056:7;17083:6;;;;;;;;;;;17076:13;;17010:87;:::o;24103:104::-;24159:13;24192:7;24185:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24103:104;:::o;28285:377::-;28378:4;28395:24;28422:11;:25;28434:12;:10;:12::i;:::-;28422:25;;;;;;;;;;;;;;;:34;28448:7;28422:34;;;;;;;;;;;;;;;;28395:61;;28495:15;28475:16;:35;;28467:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;28563:67;28572:12;:10;:12::i;:::-;28586:7;28614:15;28595:16;:34;;;;:::i;:::-;28563:8;:67::i;:::-;28650:4;28643:11;;;28285:377;;;;:::o;25515:175::-;25601:4;25618:42;25628:12;:10;:12::i;:::-;25642:9;25653:6;25618:9;:42::i;:::-;25678:4;25671:11;;25515:175;;;;:::o;23356:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34572:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34252:54::-;;;;:::o;23330:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25753:151::-;25842:7;25869:11;:18;25881:5;25869:18;;;;;;;;;;;;;;;:27;25888:7;25869:27;;;;;;;;;;;;;;;;25862:34;;25753:151;;;;:::o;17919:201::-;17241:12;:10;:12::i;:::-;17230:23;;:7;:5;:7::i;:::-;:23;;;17222:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18028:1:::1;18008:22;;:8;:22;;;;18000:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18084:28;18103:8;18084:18;:28::i;:::-;17919:201:::0;:::o;34202:43::-;;;;:::o;15801:98::-;15854:7;15881:10;15874:17;;15801:98;:::o;31868:380::-;32021:1;32004:19;;:5;:19;;;;31996:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32102:1;32083:21;;:7;:21;;;;32075:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32186:6;32156:11;:18;32168:5;32156:18;;;;;;;;;;;;;;;:27;32175:7;32156:27;;;;;;;;;;;;;;;:36;;;;32224:7;32208:32;;32217:5;32208:32;;;32233:6;32208:32;;;;;;:::i;:::-;;;;;;;;31868:380;;;:::o;30868:562::-;30971:1;30952:21;;:7;:21;;;;30944:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31024:49;31045:7;31062:1;31066:6;31024:20;:49::i;:::-;31086:22;31111:9;:18;31121:7;31111:18;;;;;;;;;;;;;;;;31086:43;;31166:6;31148:14;:24;;31140:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31243:30;31266:6;31243:9;:18;31253:7;31243:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;31222:9;:18;31232:7;31222:18;;;;;;;;;;;;;;;:51;;;;31300:6;31284:12;;:22;;;;;;;:::i;:::-;;;;;;;;31350:1;31324:37;;31333:7;31324:37;;;31354:6;31324:37;;;;;;:::i;:::-;;;;;;;;31374:48;31394:7;31411:1;31415:6;31374:19;:48::i;:::-;30933:497;30868:562;;:::o;36891:973::-;37032:1;37023:6;:10;37015:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37114:1;37098:18;;:4;:18;;;;37090:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37184:1;37170:16;;:2;:16;;;;37162:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;37230:12;37245:4;37230:19;;37265:31;:37;37297:4;37265:37;;;;;;;;;;;;;;;;;;;;;;;;;37264:38;:78;;;;37307:31;:35;37339:2;37307:35;;;;;;;;;;;;;;;;;;;;;;;;;37306:36;37264:78;37260:188;;;37377:20;;37367:6;:30;;37359:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;37260:188;37462:19;:25;37482:4;37462:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37491:19;:23;37511:2;37491:23;;;;;;;;;;;;;;;;;;;;;;;;;37462:52;37458:100;;;37541:5;37531:15;;37458:100;37573:7;:27;;;;;37599:1;37584:12;;:16;37573:27;37569:244;;;37617:12;37632:33;37661:3;37632:24;37643:12;;37632:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;37617:48;;37691:1;37684:4;:8;37680:93;;;37713:44;37729:4;37735:15;;;;;;;;;;;37752:4;37713:15;:44::i;:::-;37680:93;37797:4;37787:14;;;;;:::i;:::-;;;37602:211;37569:244;37823:33;37839:4;37845:2;37849:6;37823:15;:33::i;:::-;37004:860;36891:973;;;:::o;18280:191::-;18354:16;18373:6;;;;;;;;;;;18354:25;;18399:8;18390:6;;:17;;;;;;;;;;;;;;;;;;18454:8;18423:40;;18444:8;18423:40;;;;;;;;;;;;18343:128;18280:191;:::o;32848:125::-;;;;:::o;11318:139::-;11376:7;11405:1;11400;:6;11396:30;;;11424:1;11415:11;11408:18;;;;;;11396:30;11448:1;11444;:5;;;;:::i;:::-;11437:12;;11318:139;;;;;:::o;33577:124::-;;;;:::o;11716:98::-;11774:7;11805:1;11801;:5;;;;:::i;:::-;11794:12;;11716:98;;;;:::o;12115:::-;12173:7;12204:1;12200;:5;;;;:::i;:::-;12193:12;;12115:98;;;;:::o;29152:697::-;29310:1;29292:20;;:6;:20;;;;29284:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;29394:1;29373:23;;:9;:23;;;;29365:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;29449:47;29470:6;29478:9;29489:6;29449:20;:47::i;:::-;29509:21;29533:9;:17;29543:6;29533:17;;;;;;;;;;;;;;;;29509:41;;29586:6;29569:13;:23;;29561:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29682:6;29666:13;:22;;;;:::i;:::-;29646:9;:17;29656:6;29646:17;;;;;;;;;;;;;;;:42;;;;29723:6;29699:9;:20;29709:9;29699:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;29764:9;29747:35;;29756:6;29747:35;;;29775:6;29747:35;;;;;;:::i;:::-;;;;;;;;29795:46;29815:6;29823:9;29834:6;29795:19;:46::i;:::-;29273:576;29152:697;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:60::-;4192:3;4213:5;4206:12;;4164:60;;;:::o;4230:142::-;4280:9;4313:53;4331:34;4340:24;4358:5;4340:24;:::i;:::-;4331:34;:::i;:::-;4313:53;:::i;:::-;4300:66;;4230:142;;;:::o;4378:126::-;4428:9;4461:37;4492:5;4461:37;:::i;:::-;4448:50;;4378:126;;;:::o;4510:152::-;4586:9;4619:37;4650:5;4619:37;:::i;:::-;4606:50;;4510:152;;;:::o;4668:183::-;4781:63;4838:5;4781:63;:::i;:::-;4776:3;4769:76;4668:183;;:::o;4857:274::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:97;5121:1;5110:9;5106:17;5097:6;5027:97;:::i;:::-;4857:274;;;;:::o;5137:118::-;5224:24;5242:5;5224:24;:::i;:::-;5219:3;5212:37;5137:118;;:::o;5261:222::-;5354:4;5392:2;5381:9;5377:18;5369:26;;5405:71;5473:1;5462:9;5458:17;5449:6;5405:71;:::i;:::-;5261:222;;;;:::o;5489:619::-;5566:6;5574;5582;5631:2;5619:9;5610:7;5606:23;5602:32;5599:119;;;5637:79;;:::i;:::-;5599:119;5757:1;5782:53;5827:7;5818:6;5807:9;5803:22;5782:53;:::i;:::-;5772:63;;5728:117;5884:2;5910:53;5955:7;5946:6;5935:9;5931:22;5910:53;:::i;:::-;5900:63;;5855:118;6012:2;6038:53;6083:7;6074:6;6063:9;6059:22;6038:53;:::i;:::-;6028:63;;5983:118;5489:619;;;;;:::o;6114:118::-;6201:24;6219:5;6201:24;:::i;:::-;6196:3;6189:37;6114:118;;:::o;6238:222::-;6331:4;6369:2;6358:9;6354:18;6346:26;;6382:71;6450:1;6439:9;6435:17;6426:6;6382:71;:::i;:::-;6238:222;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:474::-;6964:6;6972;7021:2;7009:9;7000:7;6996:23;6992:32;6989:119;;;7027:79;;:::i;:::-;6989:119;7147:1;7172:53;7217:7;7208:6;7197:9;7193:22;7172:53;:::i;:::-;7162:63;;7118:117;7274:2;7300:53;7345:7;7336:6;7325:9;7321:22;7300:53;:::i;:::-;7290:63;;7245:118;6896:474;;;;;:::o;7376:180::-;7424:77;7421:1;7414:88;7521:4;7518:1;7511:15;7545:4;7542:1;7535:15;7562:320;7606:6;7643:1;7637:4;7633:12;7623:22;;7690:1;7684:4;7680:12;7711:18;7701:81;;7767:4;7759:6;7755:17;7745:27;;7701:81;7829:2;7821:6;7818:14;7798:18;7795:38;7792:84;;;7848:18;;:::i;:::-;7792:84;7613:269;7562:320;;;:::o;7888:227::-;8028:34;8024:1;8016:6;8012:14;8005:58;8097:10;8092:2;8084:6;8080:15;8073:35;7888:227;:::o;8121:366::-;8263:3;8284:67;8348:2;8343:3;8284:67;:::i;:::-;8277:74;;8360:93;8449:3;8360:93;:::i;:::-;8478:2;8473:3;8469:12;8462:19;;8121:366;;;:::o;8493:419::-;8659:4;8697:2;8686:9;8682:18;8674:26;;8746:9;8740:4;8736:20;8732:1;8721:9;8717:17;8710:47;8774:131;8900:4;8774:131;:::i;:::-;8766:139;;8493:419;;;:::o;8918:180::-;8966:77;8963:1;8956:88;9063:4;9060:1;9053:15;9087:4;9084:1;9077:15;9104:191;9144:4;9164:20;9182:1;9164:20;:::i;:::-;9159:25;;9198:20;9216:1;9198:20;:::i;:::-;9193:25;;9237:1;9234;9231:8;9228:34;;;9242:18;;:::i;:::-;9228:34;9287:1;9284;9280:9;9272:17;;9104:191;;;;:::o;9301:305::-;9341:3;9360:20;9378:1;9360:20;:::i;:::-;9355:25;;9394:20;9412:1;9394:20;:::i;:::-;9389:25;;9548:1;9480:66;9476:74;9473:1;9470:81;9467:107;;;9554:18;;:::i;:::-;9467:107;9598:1;9595;9591:9;9584:16;;9301:305;;;;:::o;9612:182::-;9752:34;9748:1;9740:6;9736:14;9729:58;9612:182;:::o;9800:366::-;9942:3;9963:67;10027:2;10022:3;9963:67;:::i;:::-;9956:74;;10039:93;10128:3;10039:93;:::i;:::-;10157:2;10152:3;10148:12;10141:19;;9800:366;;;:::o;10172:419::-;10338:4;10376:2;10365:9;10361:18;10353:26;;10425:9;10419:4;10415:20;10411:1;10400:9;10396:17;10389:47;10453:131;10579:4;10453:131;:::i;:::-;10445:139;;10172:419;;;:::o;10597:224::-;10737:34;10733:1;10725:6;10721:14;10714:58;10806:7;10801:2;10793:6;10789:15;10782:32;10597:224;:::o;10827:366::-;10969:3;10990:67;11054:2;11049:3;10990:67;:::i;:::-;10983:74;;11066:93;11155:3;11066:93;:::i;:::-;11184:2;11179:3;11175:12;11168:19;;10827:366;;;:::o;11199:419::-;11365:4;11403:2;11392:9;11388:18;11380:26;;11452:9;11446:4;11442:20;11438:1;11427:9;11423:17;11416:47;11480:131;11606:4;11480:131;:::i;:::-;11472:139;;11199:419;;;:::o;11624:225::-;11764:34;11760:1;11752:6;11748:14;11741:58;11833:8;11828:2;11820:6;11816:15;11809:33;11624:225;:::o;11855:366::-;11997:3;12018:67;12082:2;12077:3;12018:67;:::i;:::-;12011:74;;12094:93;12183:3;12094:93;:::i;:::-;12212:2;12207:3;12203:12;12196:19;;11855:366;;;:::o;12227:419::-;12393:4;12431:2;12420:9;12416:18;12408:26;;12480:9;12474:4;12470:20;12466:1;12455:9;12451:17;12444:47;12508:131;12634:4;12508:131;:::i;:::-;12500:139;;12227:419;;;:::o;12652:223::-;12792:34;12788:1;12780:6;12776:14;12769:58;12861:6;12856:2;12848:6;12844:15;12837:31;12652:223;:::o;12881:366::-;13023:3;13044:67;13108:2;13103:3;13044:67;:::i;:::-;13037:74;;13120:93;13209:3;13120:93;:::i;:::-;13238:2;13233:3;13229:12;13222:19;;12881:366;;;:::o;13253:419::-;13419:4;13457:2;13446:9;13442:18;13434:26;;13506:9;13500:4;13496:20;13492:1;13481:9;13477:17;13470:47;13534:131;13660:4;13534:131;:::i;:::-;13526:139;;13253:419;;;:::o;13678:221::-;13818:34;13814:1;13806:6;13802:14;13795:58;13887:4;13882:2;13874:6;13870:15;13863:29;13678:221;:::o;13905:366::-;14047:3;14068:67;14132:2;14127:3;14068:67;:::i;:::-;14061:74;;14144:93;14233:3;14144:93;:::i;:::-;14262:2;14257:3;14253:12;14246:19;;13905:366;;;:::o;14277:419::-;14443:4;14481:2;14470:9;14466:18;14458:26;;14530:9;14524:4;14520:20;14516:1;14505:9;14501:17;14494:47;14558:131;14684:4;14558:131;:::i;:::-;14550:139;;14277:419;;;:::o;14702:220::-;14842:34;14838:1;14830:6;14826:14;14819:58;14911:3;14906:2;14898:6;14894:15;14887:28;14702:220;:::o;14928:366::-;15070:3;15091:67;15155:2;15150:3;15091:67;:::i;:::-;15084:74;;15167:93;15256:3;15167:93;:::i;:::-;15285:2;15280:3;15276:12;15269:19;;14928:366;;;:::o;15300:419::-;15466:4;15504:2;15493:9;15489:18;15481:26;;15553:9;15547:4;15543:20;15539:1;15528:9;15524:17;15517:47;15581:131;15707:4;15581:131;:::i;:::-;15573:139;;15300:419;;;:::o;15725:221::-;15865:34;15861:1;15853:6;15849:14;15842:58;15934:4;15929:2;15921:6;15917:15;15910:29;15725:221;:::o;15952:366::-;16094:3;16115:67;16179:2;16174:3;16115:67;:::i;:::-;16108:74;;16191:93;16280:3;16191:93;:::i;:::-;16309:2;16304:3;16300:12;16293:19;;15952:366;;;:::o;16324:419::-;16490:4;16528:2;16517:9;16513:18;16505:26;;16577:9;16571:4;16567:20;16563:1;16552:9;16548:17;16541:47;16605:131;16731:4;16605:131;:::i;:::-;16597:139;;16324:419;;;:::o;16749:228::-;16889:34;16885:1;16877:6;16873:14;16866:58;16958:11;16953:2;16945:6;16941:15;16934:36;16749:228;:::o;16983:366::-;17125:3;17146:67;17210:2;17205:3;17146:67;:::i;:::-;17139:74;;17222:93;17311:3;17222:93;:::i;:::-;17340:2;17335:3;17331:12;17324:19;;16983:366;;;:::o;17355:419::-;17521:4;17559:2;17548:9;17544:18;17536:26;;17608:9;17602:4;17598:20;17594:1;17583:9;17579:17;17572:47;17636:131;17762:4;17636:131;:::i;:::-;17628:139;;17355:419;;;:::o;17780:180::-;17920:32;17916:1;17908:6;17904:14;17897:56;17780:180;:::o;17966:366::-;18108:3;18129:67;18193:2;18188:3;18129:67;:::i;:::-;18122:74;;18205:93;18294:3;18205:93;:::i;:::-;18323:2;18318:3;18314:12;18307:19;;17966:366;;;:::o;18338:419::-;18504:4;18542:2;18531:9;18527:18;18519:26;;18591:9;18585:4;18581:20;18577:1;18566:9;18562:17;18555:47;18619:131;18745:4;18619:131;:::i;:::-;18611:139;;18338:419;;;:::o;18763:178::-;18903:30;18899:1;18891:6;18887:14;18880:54;18763:178;:::o;18947:366::-;19089:3;19110:67;19174:2;19169:3;19110:67;:::i;:::-;19103:74;;19186:93;19275:3;19186:93;:::i;:::-;19304:2;19299:3;19295:12;19288:19;;18947:366;;;:::o;19319:419::-;19485:4;19523:2;19512:9;19508:18;19500:26;;19572:9;19566:4;19562:20;19558:1;19547:9;19543:17;19536:47;19600:131;19726:4;19600:131;:::i;:::-;19592:139;;19319:419;;;:::o;19744:221::-;19884:34;19880:1;19872:6;19868:14;19861:58;19953:4;19948:2;19940:6;19936:15;19929:29;19744:221;:::o;19971:366::-;20113:3;20134:67;20198:2;20193:3;20134:67;:::i;:::-;20127:74;;20210:93;20299:3;20210:93;:::i;:::-;20328:2;20323:3;20319:12;20312:19;;19971:366;;;:::o;20343:419::-;20509:4;20547:2;20536:9;20532:18;20524:26;;20596:9;20590:4;20586:20;20582:1;20571:9;20567:17;20560:47;20624:131;20750:4;20624:131;:::i;:::-;20616:139;;20343:419;;;:::o;20768:348::-;20808:7;20831:20;20849:1;20831:20;:::i;:::-;20826:25;;20865:20;20883:1;20865:20;:::i;:::-;20860:25;;21053:1;20985:66;20981:74;20978:1;20975:81;20970:1;20963:9;20956:17;20952:105;20949:131;;;21060:18;;:::i;:::-;20949:131;21108:1;21105;21101:9;21090:20;;20768:348;;;;:::o;21122:180::-;21170:77;21167:1;21160:88;21267:4;21264:1;21257:15;21291:4;21288:1;21281:15;21308:185;21348:1;21365:20;21383:1;21365:20;:::i;:::-;21360:25;;21399:20;21417:1;21399:20;:::i;:::-;21394:25;;21438:1;21428:35;;21443:18;;:::i;:::-;21428:35;21485:1;21482;21478:9;21473:14;;21308:185;;;;:::o;21499:224::-;21639:34;21635:1;21627:6;21623:14;21616:58;21708:7;21703:2;21695:6;21691:15;21684:32;21499:224;:::o;21729:366::-;21871:3;21892:67;21956:2;21951:3;21892:67;:::i;:::-;21885:74;;21968:93;22057:3;21968:93;:::i;:::-;22086:2;22081:3;22077:12;22070:19;;21729:366;;;:::o;22101:419::-;22267:4;22305:2;22294:9;22290:18;22282:26;;22354:9;22348:4;22344:20;22340:1;22329:9;22325:17;22318:47;22382:131;22508:4;22382:131;:::i;:::-;22374:139;;22101:419;;;:::o;22526:222::-;22666:34;22662:1;22654:6;22650:14;22643:58;22735:5;22730:2;22722:6;22718:15;22711:30;22526:222;:::o;22754:366::-;22896:3;22917:67;22981:2;22976:3;22917:67;:::i;:::-;22910:74;;22993:93;23082:3;22993:93;:::i;:::-;23111:2;23106:3;23102:12;23095:19;;22754:366;;;:::o;23126:419::-;23292:4;23330:2;23319:9;23315:18;23307:26;;23379:9;23373:4;23369:20;23365:1;23354:9;23350:17;23343:47;23407:131;23533:4;23407:131;:::i;:::-;23399:139;;23126:419;;;:::o;23551:225::-;23691:34;23687:1;23679:6;23675:14;23668:58;23760:8;23755:2;23747:6;23743:15;23736:33;23551:225;:::o;23782:366::-;23924:3;23945:67;24009:2;24004:3;23945:67;:::i;:::-;23938:74;;24021:93;24110:3;24021:93;:::i;:::-;24139:2;24134:3;24130:12;24123:19;;23782:366;;;:::o;24154:419::-;24320:4;24358:2;24347:9;24343:18;24335:26;;24407:9;24401:4;24397:20;24393:1;24382:9;24378:17;24371:47;24435:131;24561:4;24435:131;:::i;:::-;24427:139;;24154:419;;;:::o

Swarm Source

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