ETH Price: $3,030.19 (+2.39%)
Gas: 1 Gwei

Token

Assassin (Assassin)
 

Overview

Max Total Supply

1,000,000,000 Assassin

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
19,166,194.6658839017 Assassin

Value
$0.00
0x4485d0ff9500efd5fad82a8e80693defa3592582
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:
Assassin

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-27
*/

//TG: https://t.me/AssassinERC

//Twitter: https://twitter.com/AssassinERC

//Website: https://assasinerc.com/

//Medium: https://medium.com/@assassin-erc

//SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.17;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
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 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;
}
 
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;
}
 
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);
}
 
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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * 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);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(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 to 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 {}
}
 
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @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) {
        // 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 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
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);
}
 
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;
}
 
contract Assassin is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private marketingWallet;
    address private devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;
 
    
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public partners;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event Setpartner(address indexed pair, bool indexed value);
 
    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Assassin","Assassin") {
                                     
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setpartner(address(uniswapV2Pair), true);
 
        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 40;
        uint256 _sellDevFee = 0;
 
        uint256 totalSupply = 1 * 1e9 * 1e18;
 
        maxTransactionAmount = totalSupply * 20 / 1000; // 2%
        maxWallet = totalSupply * 20 / 1000; // 2% 
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.1%
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        marketingWallet = 0x50C3bCe527064512D74c10c79fe29890A012B8a4; 
        devWallet = 0x805b9A1E02506aCeA67dd7D92344647244cFda24; 
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
     
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

          function updateBuyFees(
        uint256 _devFee,
        uint256 _liquidityFee,
        uint256 _marketingFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyLiquidityFee = _liquidityFee;
        buyMarketingFee = _marketingFee;
        buyTotalFees = buyDevFee + buyLiquidityFee + buyMarketingFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }

    function updateSellFees(
        uint256 _devFee,
        uint256 _liquidityFee,
        uint256 _marketingFee
    ) external onlyOwner {
        sellDevFee = _devFee;
        sellLiquidityFee = _liquidityFee;
        sellMarketingFee = _marketingFee;
        sellTotalFees = sellDevFee + sellLiquidityFee + sellMarketingFee;
        require(sellTotalFees <= 90, "Must keep fees at 90% or less");
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
 
    function setpartner(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from partners");
 
        _setpartner(pair, value);
    }
 
    function _setpartner(address pair, bool value) private {
        partners[pair] = value;
 
        emit Setpartner(pair, value);
    }
 
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
  
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
            if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                //when buy
                if (partners[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                else if (partners[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !partners[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
 
            swapBack();
 
            swapping = false;
        }
 
        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (partners[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(partners[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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":"Setpartner","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"partners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setpartner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600881526020017f417373617373696e0000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f417373617373696e0000000000000000000000000000000000000000000000008152508160039081620000e0919062000de2565b508060049081620000f2919062000de2565b5050506000620001076200063560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001d28160016200063d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000306919062000f33565b6040518363ffffffff1660e01b81526004016200032592919062000f76565b6020604051808303816000875af115801562000345573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036b919062000f33565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003b360a05160016200063d60201b60201c565b620003c860a05160016200073a60201b60201c565b600060039050600060019050600080602890506000602890506000806b033b2e3c9fd0803ce800000090506103e860148262000405919062000fd2565b6200041191906200104c565b6008819055506103e860148262000429919062000fd2565b6200043591906200104c565b600a819055506127106005826200044d919062000fd2565b6200045991906200104c565b60098190555086600d8190555085600e8190555084600f81905550600f54600e54600d5462000489919062001084565b62000495919062001084565b600c81905550836011819055508260128190555081601381905550601354601254601154620004c5919062001084565b620004d1919062001084565b6010819055507350c3bce527064512d74c10c79fe29890a012b8a4600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073805b9a1e02506acea67dd7d92344647244cfda24600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005a362000595620007db60201b60201c565b60016200080560201b60201c565b620005b63060016200080560201b60201c565b620005cb61dead60016200080560201b60201c565b620005ed620005df620007db60201b60201c565b60016200063d60201b60201c565b620006003060016200063d60201b60201c565b6200061561dead60016200063d60201b60201c565b6200062733826200095260201b60201c565b50505050505050506200128e565b600033905090565b6200064d6200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006df576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d69062001120565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008156200063560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200089e9062001120565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200094691906200115f565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009c4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009bb90620011cc565b60405180910390fd5b620009d86000838362000b0060201b60201c565b620009f48160025462000b0560201b6200231f1790919060201c565b60028190555062000a52816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b0560201b6200231f1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af49190620011ff565b60405180910390a35050565b505050565b600080828462000b16919062001084565b90508381101562000b5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b55906200126c565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bea57607f821691505b60208210810362000c005762000bff62000ba2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c6a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c2b565b62000c76868362000c2b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cc362000cbd62000cb78462000c8e565b62000c98565b62000c8e565b9050919050565b6000819050919050565b62000cdf8362000ca2565b62000cf762000cee8262000cca565b84845462000c38565b825550505050565b600090565b62000d0e62000cff565b62000d1b81848462000cd4565b505050565b5b8181101562000d435762000d3760008262000d04565b60018101905062000d21565b5050565b601f82111562000d925762000d5c8162000c06565b62000d678462000c1b565b8101602085101562000d77578190505b62000d8f62000d868562000c1b565b83018262000d20565b50505b505050565b600082821c905092915050565b600062000db76000198460080262000d97565b1980831691505092915050565b600062000dd2838362000da4565b9150826002028217905092915050565b62000ded8262000b68565b67ffffffffffffffff81111562000e095762000e0862000b73565b5b62000e15825462000bd1565b62000e2282828562000d47565b600060209050601f83116001811462000e5a576000841562000e45578287015190505b62000e51858262000dc4565b86555062000ec1565b601f19841662000e6a8662000c06565b60005b8281101562000e945784890151825560018201915060208501945060208101905062000e6d565b8683101562000eb4578489015162000eb0601f89168262000da4565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000efb8262000ece565b9050919050565b62000f0d8162000eee565b811462000f1957600080fd5b50565b60008151905062000f2d8162000f02565b92915050565b60006020828403121562000f4c5762000f4b62000ec9565b5b600062000f5c8482850162000f1c565b91505092915050565b62000f708162000eee565b82525050565b600060408201905062000f8d600083018562000f65565b62000f9c602083018462000f65565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fdf8262000c8e565b915062000fec8362000c8e565b925082820262000ffc8162000c8e565b9150828204841483151762001016576200101562000fa3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010598262000c8e565b9150620010668362000c8e565b9250826200107957620010786200101d565b5b828204905092915050565b6000620010918262000c8e565b91506200109e8362000c8e565b9250828201905080821115620010b957620010b862000fa3565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001108602083620010bf565b91506200111582620010d0565b602082019050919050565b600060208201905081810360008301526200113b81620010f9565b9050919050565b60008115159050919050565b620011598162001142565b82525050565b60006020820190506200117660008301846200114e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011b4601f83620010bf565b9150620011c1826200117c565b602082019050919050565b60006020820190508181036000830152620011e781620011a5565b9050919050565b620011f98162000c8e565b82525050565b6000602082019050620012166000830184620011ee565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001254601b83620010bf565b915062001261826200121c565b602082019050919050565b60006020820190508181036000830152620012878162001245565b9050919050565b60805160a051614f35620012de60003960008181610e7501526111d6015260008181610c530152818161384e0152818161392f01528181613956015281816139f20152613a190152614f356000f3fe6080604052600436106102b25760003560e01c80638a8c523c11610175578063bbc0c742116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063d85ba06314610a44578063dd62ed3e14610a6f578063e2f4560514610aac576102b9565b8063bbc0c74214610936578063c024666814610961578063c17b5b8c1461098a578063c18bc195146109b3578063c8c8ebe4146109dc578063d257b34f14610a07576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108125780639fccce321461083d578063a0d82dc514610868578063a457c2d714610893578063a9059cbb146108d0578063aacebbe31461090d576102b9565b80638a8c523c146107145780638da5cb5b1461072b5780639213691314610756578063924de9b71461078157806395c33652146107aa57806395d89b41146107e7576102b9565b8063395093511161021957806370a08231116101d257806370a0823114610618578063715018a614610655578063751039fc1461066c5780637571336a146106975780637bce5a04146106c05780638095d564146106eb576102b9565b806339509351146104f257806349bd5a5e1461052f5780634a62bb651461055a5780634fbee193146105855780636a486a8e146105c25780636ddd1713146105ed576102b9565b80631a8145bb1161026b5780631a8145bb146103e25780631a89e9471461040d5780631f3fed8f14610436578063203e727e1461046157806323b872dd1461048a578063313ce567146104c7576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631816467f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e09190613bb9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613c74565b610c13565b60405161031d9190613ccf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613cea565b610c31565b60405161035a9190613ccf565b60405180910390f35b34801561036f57600080fd5b50610378610c51565b6040516103859190613d76565b60405180910390f35b34801561039a57600080fd5b506103a3610c75565b6040516103b09190613da0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613cea565b610c7f565b005b3480156103ee57600080fd5b506103f7610dd6565b6040516104049190613da0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613de7565b610ddc565b005b34801561044257600080fd5b5061044b610f0f565b6040516104589190613da0565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613e27565b610f15565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613e54565b61103f565b6040516104be9190613ccf565b60405180910390f35b3480156104d357600080fd5b506104dc611118565b6040516104e99190613ec3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613c74565b611121565b6040516105269190613ccf565b60405180910390f35b34801561053b57600080fd5b506105446111d4565b6040516105519190613eed565b60405180910390f35b34801561056657600080fd5b5061056f6111f8565b60405161057c9190613ccf565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613cea565b61120b565b6040516105b99190613ccf565b60405180910390f35b3480156105ce57600080fd5b506105d7611261565b6040516105e49190613da0565b60405180910390f35b3480156105f957600080fd5b50610602611267565b60405161060f9190613ccf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613cea565b61127a565b60405161064c9190613da0565b60405180910390f35b34801561066157600080fd5b5061066a6112c2565b005b34801561067857600080fd5b5061068161141a565b60405161068e9190613ccf565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613de7565b6114d5565b005b3480156106cc57600080fd5b506106d56115c7565b6040516106e29190613da0565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613f08565b6115cd565b005b34801561072057600080fd5b506107296116e7565b005b34801561073757600080fd5b506107406117bd565b60405161074d9190613eed565b60405180910390f35b34801561076257600080fd5b5061076b6117e7565b6040516107789190613da0565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613f5b565b6117ed565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613cea565b6118a1565b6040516107de9190613ccf565b60405180910390f35b3480156107f357600080fd5b506107fc6118c1565b6040516108099190613bb9565b60405180910390f35b34801561081e57600080fd5b50610827611953565b6040516108349190613da0565b60405180910390f35b34801561084957600080fd5b50610852611959565b60405161085f9190613da0565b60405180910390f35b34801561087457600080fd5b5061087d61195f565b60405161088a9190613da0565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613c74565b611965565b6040516108c79190613ccf565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613c74565b611a32565b6040516109049190613ccf565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613cea565b611a50565b005b34801561094257600080fd5b5061094b611ba7565b6040516109589190613ccf565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613de7565b611bba565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613f08565b611cfa565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613e27565b611e14565b005b3480156109e857600080fd5b506109f1611f3e565b6040516109fe9190613da0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613e27565b611f44565b604051610a3b9190613ccf565b60405180910390f35b348015610a5057600080fd5b50610a596120b4565b604051610a669190613da0565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190613f88565b6120ba565b604051610aa39190613da0565b60405180910390f35b348015610ab857600080fd5b50610ac1612141565b604051610ace9190613da0565b60405180910390f35b348015610ae357600080fd5b50610aec612147565b604051610af99190613da0565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613cea565b61214d565b005b348015610b3757600080fd5b50610b40612313565b604051610b4d9190613da0565b60405180910390f35b348015610b6257600080fd5b50610b6b612319565b604051610b789190613da0565b60405180910390f35b606060038054610b9090613ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc90613ff7565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c2061237d565b8484612385565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610c8761237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614074565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610de461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614074565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614106565b60405180910390fd5b610f0b828261254e565b5050565b60145481565b610f1d61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614074565b60405180910390fd5b670de0b6b3a76400006103e86001610fc2610c75565b610fcc9190614155565b610fd691906141c6565b610fe091906141c6565b811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614269565b60405180910390fd5b670de0b6b3a7640000816110369190614155565b60088190555050565b600061104c8484846125ef565b61110d8461105861237d565b61110885604051806060016040528060288152602001614eb360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110be61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b600190509392505050565b60006012905090565b60006111ca61112e61237d565b846111c5856001600061113f61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b612385565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061142461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614074565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114dd61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6115d561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614074565b60405180910390fd5b82600f8190555081600e8190555080600d81905550600d54600e54600f5461168c9190614289565b6116969190614289565b600c819055506014600c5411156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614309565b60405180910390fd5b505050565b6116ef61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614074565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117f561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614074565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6060600480546118d090613ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546118fc90613ff7565b80156119495780601f1061191e57610100808354040283529160200191611949565b820191906000526020600020905b81548152906001019060200180831161192c57829003601f168201915b5050505050905090565b600f5481565b60165481565b60135481565b6000611a2861197261237d565b84611a2385604051806060016040528060258152602001614edb602591396001600061199c61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b6001905092915050565b6000611a46611a3f61237d565b84846125ef565b6001905092915050565b611a5861237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614074565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611bc261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cee9190613ccf565b60405180910390a25050565b611d0261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614074565b60405180910390fd5b826013819055508160128190555080601181905550601154601254601354611db99190614289565b611dc39190614289565b601081905550605a6010541115611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614375565b60405180910390fd5b505050565b611e1c61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614074565b60405180910390fd5b670de0b6b3a76400006103e86005611ec1610c75565b611ecb9190614155565b611ed591906141c6565b611edf91906141c6565b811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614407565b60405180910390fd5b670de0b6b3a764000081611f359190614155565b600a8190555050565b60085481565b6000611f4e61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614074565b60405180910390fd5b620186a06001611feb610c75565b611ff59190614155565b611fff91906141c6565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614499565b60405180910390fd5b6103e8600561204e610c75565b6120589190614155565b61206291906141c6565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061452b565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61215561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906145bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461232e9190614289565b905083811015612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614629565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906146bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a9061474d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125419190613da0565b60405180910390a3505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612655906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614871565b60405180910390fd5b600081036126e6576126e183836000613122565b6130b9565b600b60009054906101000a900460ff1615612be1576127036117bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561277157506127416117bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127e4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127fd5750600560149054906101000a900460ff16155b15612be057600b60019054906101000a900460ff166128f757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906148dd565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576008548111156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061496f565b60405180910390fd5b600a546129f08361127a565b826129fb9190614289565b1115612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a33906149db565b60405180910390fd5b612bdf565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae45750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3357600854811115612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590614a6d565b60405180910390fd5b612bde565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bdd57600a54612b908361127a565b82612b9b9190614289565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906149db565b60405180910390fd5b5b5b5b5b5b6000612bec3061127a565b905060006009548210159050808015612c115750600b60029054906101000a900460ff165b8015612c2a5750600560149054906101000a900460ff16155b8015612c805750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d2c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d70576001600560146101000a81548160ff021916908315150217905550612d546133b5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e265750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057600090505b600081156130a957601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9357506000601054115b15612f6057612ec06064612eb26010548861369c90919063ffffffff16565b61371690919063ffffffff16565b905060105460125482612ed39190614155565b612edd91906141c6565b60156000828254612eee9190614289565b9250508190555060105460135482612f069190614155565b612f1091906141c6565b60166000828254612f219190614289565b9250508190555060105460115482612f399190614155565b612f4391906141c6565b60146000828254612f549190614289565b92505081905550613085565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fbb57506000600c54115b1561308457612fe86064612fda600c548861369c90919063ffffffff16565b61371690919063ffffffff16565b9050600c54600e5482612ffb9190614155565b61300591906141c6565b601560008282546130169190614289565b92505081905550600c54600f548261302e9190614155565b61303891906141c6565b601660008282546130499190614289565b92505081905550600c54600d54826130619190614155565b61306b91906141c6565b6014600082825461307c9190614289565b925050819055505b5b600081111561309a57613099873083613122565b5b80856130a69190614a8d565b94505b6130b4878787613122565b505050505b505050565b6000838311158290613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9190613bb9565b60405180910390fd5b50600083856131159190614a8d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614871565b60405180910390fd5b61320b838383613760565b61327681604051806060016040528060268152602001614e8d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133a89190613da0565b60405180910390a3505050565b60006133c03061127a565b905060006016546014546015546133d79190614289565b6133e19190614289565b90506000808314806133f35750600082145b156134005750505061369a565b601460095461340f9190614155565b8311156134285760146009546134259190614155565b92505b60006002836015548661343b9190614155565b61344591906141c6565b61344f91906141c6565b90506000613466828661376590919063ffffffff16565b90506000479050613476826137af565b600061348b824761376590919063ffffffff16565b905060006134b6876134a86014548561369c90919063ffffffff16565b61371690919063ffffffff16565b905060006134e1886134d36016548661369c90919063ffffffff16565b61371690919063ffffffff16565b905060008183856134f29190614a8d565b6134fc9190614a8d565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161355c90614af2565b60006040518083038185875af1925050503d8060008114613599576040519150601f19603f3d011682016040523d82523d6000602084013e61359e565b606091505b5050809850506000871180156135b45750600081115b15613601576135c387826139ec565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826015546040516135f893929190614b07565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364790614af2565b60006040518083038185875af1925050503d8060008114613684576040519150601f19603f3d011682016040523d82523d6000602084013e613689565b606091505b505080985050505050505050505050505b565b60008083036136ae5760009050613710565b600082846136bc9190614155565b90508284826136cb91906141c6565b1461370b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370290614bb0565b60405180910390fd5b809150505b92915050565b600061375883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ac6565b905092915050565b505050565b60006137a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130be565b905092915050565b6000600267ffffffffffffffff8111156137cc576137cb614bd0565b5b6040519080825280602002602001820160405280156137fa5781602001602082028036833780820191505090505b509050308160008151811061381257613811614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614c43565b816001815181106138ef576138ee614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613954307f000000000000000000000000000000000000000000000000000000000000000084612385565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b6959493929190614d69565b600060405180830381600087803b1580156139d057600080fd5b505af11580156139e4573d6000803e3d6000fd5b505050505050565b613a17307f000000000000000000000000000000000000000000000000000000000000000084612385565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613a7c96959493929190614dc3565b60606040518083038185885af1158015613a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613abf9190614e39565b5050505050565b60008083118290613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b049190613bb9565b60405180910390fd5b5060008385613b1c91906141c6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b63578082015181840152602081019050613b48565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b8b82613b29565b613b958185613b34565b9350613ba5818560208601613b45565b613bae81613b6f565b840191505092915050565b60006020820190508181036000830152613bd38184613b80565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c0b82613be0565b9050919050565b613c1b81613c00565b8114613c2657600080fd5b50565b600081359050613c3881613c12565b92915050565b6000819050919050565b613c5181613c3e565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613bdb565b5b6000613c9985828601613c29565b9250506020613caa85828601613c5f565b9150509250929050565b60008115159050919050565b613cc981613cb4565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600060208284031215613d0057613cff613bdb565b5b6000613d0e84828501613c29565b91505092915050565b6000819050919050565b6000613d3c613d37613d3284613be0565b613d17565b613be0565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613c3e565b82525050565b6000602082019050613db56000830184613d91565b92915050565b613dc481613cb4565b8114613dcf57600080fd5b50565b600081359050613de181613dbb565b92915050565b60008060408385031215613dfe57613dfd613bdb565b5b6000613e0c85828601613c29565b9250506020613e1d85828601613dd2565b9150509250929050565b600060208284031215613e3d57613e3c613bdb565b5b6000613e4b84828501613c5f565b91505092915050565b600080600060608486031215613e6d57613e6c613bdb565b5b6000613e7b86828701613c29565b9350506020613e8c86828701613c29565b9250506040613e9d86828701613c5f565b9150509250925092565b600060ff82169050919050565b613ebd81613ea7565b82525050565b6000602082019050613ed86000830184613eb4565b92915050565b613ee781613c00565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600080600060608486031215613f2157613f20613bdb565b5b6000613f2f86828701613c5f565b9350506020613f4086828701613c5f565b9250506040613f5186828701613c5f565b9150509250925092565b600060208284031215613f7157613f70613bdb565b5b6000613f7f84828501613dd2565b91505092915050565b60008060408385031215613f9f57613f9e613bdb565b5b6000613fad85828601613c29565b9250506020613fbe85828601613c29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400f57607f821691505b60208210810361402257614021613fc8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405e602083613b34565b915061406982614028565b602082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006140f0602883613b34565b91506140fb82614094565b604082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416082613c3e565b915061416b83613c3e565b925082820261417981613c3e565b915082820484148315176141905761418f614126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d182613c3e565b91506141dc83613c3e565b9250826141ec576141eb614197565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614253602f83613b34565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b600061429482613c3e565b915061429f83613c3e565b92508282019050808211156142b7576142b6614126565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006142f3601d83613b34565b91506142fe826142bd565b602082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f4d757374206b656570206665657320617420393025206f72206c657373000000600082015250565b600061435f601d83613b34565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006143f1602483613b34565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614483603583613b34565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614515603483613b34565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a7602683613b34565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614613601b83613b34565b915061461e826145dd565b602082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146a5602483613b34565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614737602283613b34565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c9602583613b34565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061485b602383613b34565b9150614866826147ff565b604082019050919050565b6000602082019050818103600083015261488a8161484e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148c7601683613b34565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614959603583613b34565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149c5601383613b34565b91506149d08261498f565b602082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a57603683613b34565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b6000614a9882613c3e565b9150614aa383613c3e565b9250828203905081811115614abb57614aba614126565b5b92915050565b600081905092915050565b50565b6000614adc600083614ac1565b9150614ae782614acc565b600082019050919050565b6000614afd82614acf565b9150819050919050565b6000606082019050614b1c6000830186613d91565b614b296020830185613d91565b614b366040830184613d91565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9a602183613b34565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613c12565b92915050565b600060208284031215614c5957614c58613bdb565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613d17565b613c3e565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613c00565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613d91565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613ede565b614db96080830184613d91565b9695505050505050565b600060c082019050614dd86000830189613ede565b614de56020830188613d91565b614df26040830187614c9c565b614dff6060830186614c9c565b614e0c6080830185613ede565b614e1960a0830184613d91565b979650505050505050565b600081519050614e3381613c48565b92915050565b600080600060608486031215614e5257614e51613bdb565b5b6000614e6086828701614e24565b9350506020614e7186828701614e24565b9250506040614e8286828701614e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220089fabe16bfd3071b3a130d776648dc2f6bbac82ee95db4e593b7270602fb11564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80638a8c523c11610175578063bbc0c742116100dc578063d85ba06311610095578063f11a24d31161006f578063f11a24d314610ad7578063f2fde38b14610b02578063f637434214610b2b578063f8b45b0514610b56576102b9565b8063d85ba06314610a44578063dd62ed3e14610a6f578063e2f4560514610aac576102b9565b8063bbc0c74214610936578063c024666814610961578063c17b5b8c1461098a578063c18bc195146109b3578063c8c8ebe4146109dc578063d257b34f14610a07576102b9565b80639c3b4fdc1161012e5780639c3b4fdc146108125780639fccce321461083d578063a0d82dc514610868578063a457c2d714610893578063a9059cbb146108d0578063aacebbe31461090d576102b9565b80638a8c523c146107145780638da5cb5b1461072b5780639213691314610756578063924de9b71461078157806395c33652146107aa57806395d89b41146107e7576102b9565b8063395093511161021957806370a08231116101d257806370a0823114610618578063715018a614610655578063751039fc1461066c5780637571336a146106975780637bce5a04146106c05780638095d564146106eb576102b9565b806339509351146104f257806349bd5a5e1461052f5780634a62bb651461055a5780634fbee193146105855780636a486a8e146105c25780636ddd1713146105ed576102b9565b80631a8145bb1161026b5780631a8145bb146103e25780631a89e9471461040d5780631f3fed8f14610436578063203e727e1461046157806323b872dd1461048a578063313ce567146104c7576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631816467f146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b81565b6040516102e09190613bb9565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613c74565b610c13565b60405161031d9190613ccf565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613cea565b610c31565b60405161035a9190613ccf565b60405180910390f35b34801561036f57600080fd5b50610378610c51565b6040516103859190613d76565b60405180910390f35b34801561039a57600080fd5b506103a3610c75565b6040516103b09190613da0565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190613cea565b610c7f565b005b3480156103ee57600080fd5b506103f7610dd6565b6040516104049190613da0565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613de7565b610ddc565b005b34801561044257600080fd5b5061044b610f0f565b6040516104589190613da0565b60405180910390f35b34801561046d57600080fd5b5061048860048036038101906104839190613e27565b610f15565b005b34801561049657600080fd5b506104b160048036038101906104ac9190613e54565b61103f565b6040516104be9190613ccf565b60405180910390f35b3480156104d357600080fd5b506104dc611118565b6040516104e99190613ec3565b60405180910390f35b3480156104fe57600080fd5b5061051960048036038101906105149190613c74565b611121565b6040516105269190613ccf565b60405180910390f35b34801561053b57600080fd5b506105446111d4565b6040516105519190613eed565b60405180910390f35b34801561056657600080fd5b5061056f6111f8565b60405161057c9190613ccf565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613cea565b61120b565b6040516105b99190613ccf565b60405180910390f35b3480156105ce57600080fd5b506105d7611261565b6040516105e49190613da0565b60405180910390f35b3480156105f957600080fd5b50610602611267565b60405161060f9190613ccf565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190613cea565b61127a565b60405161064c9190613da0565b60405180910390f35b34801561066157600080fd5b5061066a6112c2565b005b34801561067857600080fd5b5061068161141a565b60405161068e9190613ccf565b60405180910390f35b3480156106a357600080fd5b506106be60048036038101906106b99190613de7565b6114d5565b005b3480156106cc57600080fd5b506106d56115c7565b6040516106e29190613da0565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190613f08565b6115cd565b005b34801561072057600080fd5b506107296116e7565b005b34801561073757600080fd5b506107406117bd565b60405161074d9190613eed565b60405180910390f35b34801561076257600080fd5b5061076b6117e7565b6040516107789190613da0565b60405180910390f35b34801561078d57600080fd5b506107a860048036038101906107a39190613f5b565b6117ed565b005b3480156107b657600080fd5b506107d160048036038101906107cc9190613cea565b6118a1565b6040516107de9190613ccf565b60405180910390f35b3480156107f357600080fd5b506107fc6118c1565b6040516108099190613bb9565b60405180910390f35b34801561081e57600080fd5b50610827611953565b6040516108349190613da0565b60405180910390f35b34801561084957600080fd5b50610852611959565b60405161085f9190613da0565b60405180910390f35b34801561087457600080fd5b5061087d61195f565b60405161088a9190613da0565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613c74565b611965565b6040516108c79190613ccf565b60405180910390f35b3480156108dc57600080fd5b506108f760048036038101906108f29190613c74565b611a32565b6040516109049190613ccf565b60405180910390f35b34801561091957600080fd5b50610934600480360381019061092f9190613cea565b611a50565b005b34801561094257600080fd5b5061094b611ba7565b6040516109589190613ccf565b60405180910390f35b34801561096d57600080fd5b5061098860048036038101906109839190613de7565b611bba565b005b34801561099657600080fd5b506109b160048036038101906109ac9190613f08565b611cfa565b005b3480156109bf57600080fd5b506109da60048036038101906109d59190613e27565b611e14565b005b3480156109e857600080fd5b506109f1611f3e565b6040516109fe9190613da0565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190613e27565b611f44565b604051610a3b9190613ccf565b60405180910390f35b348015610a5057600080fd5b50610a596120b4565b604051610a669190613da0565b60405180910390f35b348015610a7b57600080fd5b50610a966004803603810190610a919190613f88565b6120ba565b604051610aa39190613da0565b60405180910390f35b348015610ab857600080fd5b50610ac1612141565b604051610ace9190613da0565b60405180910390f35b348015610ae357600080fd5b50610aec612147565b604051610af99190613da0565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190613cea565b61214d565b005b348015610b3757600080fd5b50610b40612313565b604051610b4d9190613da0565b60405180910390f35b348015610b6257600080fd5b50610b6b612319565b604051610b789190613da0565b60405180910390f35b606060038054610b9090613ff7565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbc90613ff7565b8015610c095780601f10610bde57610100808354040283529160200191610c09565b820191906000526020600020905b815481529060010190602001808311610bec57829003601f168201915b5050505050905090565b6000610c27610c2061237d565b8484612385565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610c8761237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90614074565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610de461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a90614074565b60405180910390fd5b7f000000000000000000000000aca6dbde91da5d85e946f9205b7addb7bd1bb11b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef890614106565b60405180910390fd5b610f0b828261254e565b5050565b60145481565b610f1d61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa390614074565b60405180910390fd5b670de0b6b3a76400006103e86001610fc2610c75565b610fcc9190614155565b610fd691906141c6565b610fe091906141c6565b811015611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990614269565b60405180910390fd5b670de0b6b3a7640000816110369190614155565b60088190555050565b600061104c8484846125ef565b61110d8461105861237d565b61110885604051806060016040528060288152602001614eb360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110be61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b600190509392505050565b60006012905090565b60006111ca61112e61237d565b846111c5856001600061113f61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b612385565b6001905092915050565b7f000000000000000000000000aca6dbde91da5d85e946f9205b7addb7bd1bb11b81565b600b60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ca61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061142461237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90614074565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6114dd61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156390614074565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600d5481565b6115d561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614074565b60405180910390fd5b82600f8190555081600e8190555080600d81905550600d54600e54600f5461168c9190614289565b6116969190614289565b600c819055506014600c5411156116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614309565b60405180910390fd5b505050565b6116ef61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177590614074565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60115481565b6117f561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611884576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187b90614074565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b6060600480546118d090613ff7565b80601f01602080910402602001604051908101604052809291908181526020018280546118fc90613ff7565b80156119495780601f1061191e57610100808354040283529160200191611949565b820191906000526020600020905b81548152906001019060200180831161192c57829003601f168201915b5050505050905090565b600f5481565b60165481565b60135481565b6000611a2861197261237d565b84611a2385604051806060016040528060258152602001614edb602591396001600061199c61237d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b612385565b6001905092915050565b6000611a46611a3f61237d565b84846125ef565b6001905092915050565b611a5861237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ae7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ade90614074565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611bc261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4890614074565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611cee9190613ccf565b60405180910390a25050565b611d0261237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8890614074565b60405180910390fd5b826013819055508160128190555080601181905550601154601254601354611db99190614289565b611dc39190614289565b601081905550605a6010541115611e0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0690614375565b60405180910390fd5b505050565b611e1c61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290614074565b60405180910390fd5b670de0b6b3a76400006103e86005611ec1610c75565b611ecb9190614155565b611ed591906141c6565b611edf91906141c6565b811015611f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1890614407565b60405180910390fd5b670de0b6b3a764000081611f359190614155565b600a8190555050565b60085481565b6000611f4e61237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd490614074565b60405180910390fd5b620186a06001611feb610c75565b611ff59190614155565b611fff91906141c6565b821015612041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203890614499565b60405180910390fd5b6103e8600561204e610c75565b6120589190614155565b61206291906141c6565b8211156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061452b565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61215561237d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614074565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a906145bd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60125481565b600a5481565b600080828461232e9190614289565b905083811015612373576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236a90614629565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123eb906146bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245a9061474d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125419190613da0565b60405180910390a3505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361265e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612655906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c490614871565b60405180910390fd5b600081036126e6576126e183836000613122565b6130b9565b600b60009054906101000a900460ff1615612be1576127036117bd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561277157506127416117bd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127aa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127e4575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156127fd5750600560149054906101000a900460ff16155b15612be057600b60019054906101000a900460ff166128f757601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128b75750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6128f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ed906148dd565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561299a5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a41576008548111156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061496f565b60405180910390fd5b600a546129f08361127a565b826129fb9190614289565b1115612a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a33906149db565b60405180910390fd5b612bdf565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ae45750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b3357600854811115612b2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b2590614a6d565b60405180910390fd5b612bde565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612bdd57600a54612b908361127a565b82612b9b9190614289565b1115612bdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd3906149db565b60405180910390fd5b5b5b5b5b5b6000612bec3061127a565b905060006009548210159050808015612c115750600b60029054906101000a900460ff165b8015612c2a5750600560149054906101000a900460ff16155b8015612c805750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612cd65750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d2c5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d70576001600560146101000a81548160ff021916908315150217905550612d546133b5565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e265750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612e3057600090505b600081156130a957601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e9357506000601054115b15612f6057612ec06064612eb26010548861369c90919063ffffffff16565b61371690919063ffffffff16565b905060105460125482612ed39190614155565b612edd91906141c6565b60156000828254612eee9190614289565b9250508190555060105460135482612f069190614155565b612f1091906141c6565b60166000828254612f219190614289565b9250508190555060105460115482612f399190614155565b612f4391906141c6565b60146000828254612f549190614289565b92505081905550613085565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fbb57506000600c54115b1561308457612fe86064612fda600c548861369c90919063ffffffff16565b61371690919063ffffffff16565b9050600c54600e5482612ffb9190614155565b61300591906141c6565b601560008282546130169190614289565b92505081905550600c54600f548261302e9190614155565b61303891906141c6565b601660008282546130499190614289565b92505081905550600c54600d54826130619190614155565b61306b91906141c6565b6014600082825461307c9190614289565b925050819055505b5b600081111561309a57613099873083613122565b5b80856130a69190614a8d565b94505b6130b4878787613122565b505050505b505050565b6000838311158290613106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fd9190613bb9565b60405180910390fd5b50600083856131159190614a8d565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613191576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613188906147df565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131f790614871565b60405180910390fd5b61320b838383613760565b61327681604051806060016040528060268152602001614e8d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546130be9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613309816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461231f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516133a89190613da0565b60405180910390a3505050565b60006133c03061127a565b905060006016546014546015546133d79190614289565b6133e19190614289565b90506000808314806133f35750600082145b156134005750505061369a565b601460095461340f9190614155565b8311156134285760146009546134259190614155565b92505b60006002836015548661343b9190614155565b61344591906141c6565b61344f91906141c6565b90506000613466828661376590919063ffffffff16565b90506000479050613476826137af565b600061348b824761376590919063ffffffff16565b905060006134b6876134a86014548561369c90919063ffffffff16565b61371690919063ffffffff16565b905060006134e1886134d36016548661369c90919063ffffffff16565b61371690919063ffffffff16565b905060008183856134f29190614a8d565b6134fc9190614a8d565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161355c90614af2565b60006040518083038185875af1925050503d8060008114613599576040519150601f19603f3d011682016040523d82523d6000602084013e61359e565b606091505b5050809850506000871180156135b45750600081115b15613601576135c387826139ec565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826015546040516135f893929190614b07565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161364790614af2565b60006040518083038185875af1925050503d8060008114613684576040519150601f19603f3d011682016040523d82523d6000602084013e613689565b606091505b505080985050505050505050505050505b565b60008083036136ae5760009050613710565b600082846136bc9190614155565b90508284826136cb91906141c6565b1461370b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370290614bb0565b60405180910390fd5b809150505b92915050565b600061375883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ac6565b905092915050565b505050565b60006137a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506130be565b905092915050565b6000600267ffffffffffffffff8111156137cc576137cb614bd0565b5b6040519080825280602002602001820160405280156137fa5781602001602082028036833780820191505090505b509050308160008151811061381257613811614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138db9190614c43565b816001815181106138ef576138ee614bff565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613954307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612385565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139b6959493929190614d69565b600060405180830381600087803b1580156139d057600080fd5b505af11580156139e4573d6000803e3d6000fd5b505050505050565b613a17307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612385565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613a7c96959493929190614dc3565b60606040518083038185885af1158015613a9a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613abf9190614e39565b5050505050565b60008083118290613b0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b049190613bb9565b60405180910390fd5b5060008385613b1c91906141c6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b63578082015181840152602081019050613b48565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b8b82613b29565b613b958185613b34565b9350613ba5818560208601613b45565b613bae81613b6f565b840191505092915050565b60006020820190508181036000830152613bd38184613b80565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c0b82613be0565b9050919050565b613c1b81613c00565b8114613c2657600080fd5b50565b600081359050613c3881613c12565b92915050565b6000819050919050565b613c5181613c3e565b8114613c5c57600080fd5b50565b600081359050613c6e81613c48565b92915050565b60008060408385031215613c8b57613c8a613bdb565b5b6000613c9985828601613c29565b9250506020613caa85828601613c5f565b9150509250929050565b60008115159050919050565b613cc981613cb4565b82525050565b6000602082019050613ce46000830184613cc0565b92915050565b600060208284031215613d0057613cff613bdb565b5b6000613d0e84828501613c29565b91505092915050565b6000819050919050565b6000613d3c613d37613d3284613be0565b613d17565b613be0565b9050919050565b6000613d4e82613d21565b9050919050565b6000613d6082613d43565b9050919050565b613d7081613d55565b82525050565b6000602082019050613d8b6000830184613d67565b92915050565b613d9a81613c3e565b82525050565b6000602082019050613db56000830184613d91565b92915050565b613dc481613cb4565b8114613dcf57600080fd5b50565b600081359050613de181613dbb565b92915050565b60008060408385031215613dfe57613dfd613bdb565b5b6000613e0c85828601613c29565b9250506020613e1d85828601613dd2565b9150509250929050565b600060208284031215613e3d57613e3c613bdb565b5b6000613e4b84828501613c5f565b91505092915050565b600080600060608486031215613e6d57613e6c613bdb565b5b6000613e7b86828701613c29565b9350506020613e8c86828701613c29565b9250506040613e9d86828701613c5f565b9150509250925092565b600060ff82169050919050565b613ebd81613ea7565b82525050565b6000602082019050613ed86000830184613eb4565b92915050565b613ee781613c00565b82525050565b6000602082019050613f026000830184613ede565b92915050565b600080600060608486031215613f2157613f20613bdb565b5b6000613f2f86828701613c5f565b9350506020613f4086828701613c5f565b9250506040613f5186828701613c5f565b9150509250925092565b600060208284031215613f7157613f70613bdb565b5b6000613f7f84828501613dd2565b91505092915050565b60008060408385031215613f9f57613f9e613bdb565b5b6000613fad85828601613c29565b9250506020613fbe85828601613c29565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061400f57607f821691505b60208210810361402257614021613fc8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061405e602083613b34565b915061406982614028565b602082019050919050565b6000602082019050818103600083015261408d81614051565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006140f0602883613b34565b91506140fb82614094565b604082019050919050565b6000602082019050818103600083015261411f816140e3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061416082613c3e565b915061416b83613c3e565b925082820261417981613c3e565b915082820484148315176141905761418f614126565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006141d182613c3e565b91506141dc83613c3e565b9250826141ec576141eb614197565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614253602f83613b34565b915061425e826141f7565b604082019050919050565b6000602082019050818103600083015261428281614246565b9050919050565b600061429482613c3e565b915061429f83613c3e565b92508282019050808211156142b7576142b6614126565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b60006142f3601d83613b34565b91506142fe826142bd565b602082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f4d757374206b656570206665657320617420393025206f72206c657373000000600082015250565b600061435f601d83613b34565b915061436a82614329565b602082019050919050565b6000602082019050818103600083015261438e81614352565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006143f1602483613b34565b91506143fc82614395565b604082019050919050565b60006020820190508181036000830152614420816143e4565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614483603583613b34565b915061448e82614427565b604082019050919050565b600060208201905081810360008301526144b281614476565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614515603483613b34565b9150614520826144b9565b604082019050919050565b6000602082019050818103600083015261454481614508565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145a7602683613b34565b91506145b28261454b565b604082019050919050565b600060208201905081810360008301526145d68161459a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614613601b83613b34565b915061461e826145dd565b602082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146a5602483613b34565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614737602283613b34565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c9602583613b34565b91506147d48261476d565b604082019050919050565b600060208201905081810360008301526147f8816147bc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061485b602383613b34565b9150614866826147ff565b604082019050919050565b6000602082019050818103600083015261488a8161484e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006148c7601683613b34565b91506148d282614891565b602082019050919050565b600060208201905081810360008301526148f6816148ba565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614959603583613b34565b9150614964826148fd565b604082019050919050565b600060208201905081810360008301526149888161494c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006149c5601383613b34565b91506149d08261498f565b602082019050919050565b600060208201905081810360008301526149f4816149b8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614a57603683613b34565b9150614a62826149fb565b604082019050919050565b60006020820190508181036000830152614a8681614a4a565b9050919050565b6000614a9882613c3e565b9150614aa383613c3e565b9250828203905081811115614abb57614aba614126565b5b92915050565b600081905092915050565b50565b6000614adc600083614ac1565b9150614ae782614acc565b600082019050919050565b6000614afd82614acf565b9150819050919050565b6000606082019050614b1c6000830186613d91565b614b296020830185613d91565b614b366040830184613d91565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b9a602183613b34565b9150614ba582614b3e565b604082019050919050565b60006020820190508181036000830152614bc981614b8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614c3d81613c12565b92915050565b600060208284031215614c5957614c58613bdb565b5b6000614c6784828501614c2e565b91505092915050565b6000819050919050565b6000614c95614c90614c8b84614c70565b613d17565b613c3e565b9050919050565b614ca581614c7a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ce081613c00565b82525050565b6000614cf28383614cd7565b60208301905092915050565b6000602082019050919050565b6000614d1682614cab565b614d208185614cb6565b9350614d2b83614cc7565b8060005b83811015614d5c578151614d438882614ce6565b9750614d4e83614cfe565b925050600181019050614d2f565b5085935050505092915050565b600060a082019050614d7e6000830188613d91565b614d8b6020830187614c9c565b8181036040830152614d9d8186614d0b565b9050614dac6060830185613ede565b614db96080830184613d91565b9695505050505050565b600060c082019050614dd86000830189613ede565b614de56020830188613d91565b614df26040830187614c9c565b614dff6060830186614c9c565b614e0c6080830185613ede565b614e1960a0830184613d91565b979650505050505050565b600081519050614e3381613c48565b92915050565b600080600060608486031215614e5257614e51613bdb565b5b6000614e6086828701614e24565b9350506020614e7186828701614e24565b9250506040614e8286828701614e24565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220089fabe16bfd3071b3a130d776648dc2f6bbac82ee95db4e593b7270602fb11564736f6c63430008110033

Deployed Bytecode Sourcemap

29477:13848:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7575:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9749:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30621:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29556:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8698:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36962:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30335:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36395:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30295:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34546:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10401:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8539:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11166:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29614:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29882:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37129:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30149:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29961:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8870:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22077:148;;;;;;;;;;;;;:::i;:::-;;33952:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35013:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30041:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35171:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33751:148;;;;;;;;;;;;;:::i;:::-;;21433:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30184:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36091:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30844:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7795:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30115:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30375:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30260:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11888:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9211:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36745:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29922:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36201:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35582:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34789:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29766:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34151:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30007:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9450:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29808:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30078:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22381:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30222:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29848:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7575:100;7629:13;7662:5;7655:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7575:100;:::o;9749:169::-;9832:4;9849:39;9858:12;:10;:12::i;:::-;9872:7;9881:6;9849:8;:39::i;:::-;9906:4;9899:11;;9749:169;;;;:::o;30621:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29556:51::-;;;:::o;8698:108::-;8759:7;8786:12;;8779:19;;8698:108;:::o;36962:157::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37069:9:::1;;;;;;;;;;;37041:38;;37058:9;37041:38;;;;;;;;;;;;37102:9;37090;;:21;;;;;;;;;;;;;;;;;;36962:157:::0;:::o;30335:33::-;;;;:::o;36395:194::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36485:13:::1;36477:21;;:4;:21;;::::0;36469:74:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36557:24;36569:4;36575:5;36557:11;:24::i;:::-;36395:194:::0;;:::o;30295:33::-;;;;:::o;34546:234::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34665:4:::1;34659;34655:1;34639:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34638:31;;;;:::i;:::-;34628:6;:41;;34620:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34765:6;34755;:17;;;;:::i;:::-;34732:20;:40;;;;34546:234:::0;:::o;10401:355::-;10541:4;10558:36;10568:6;10576:9;10587:6;10558:9;:36::i;:::-;10605:121;10614:6;10622:12;:10;:12::i;:::-;10636:89;10674:6;10636:89;;;;;;;;;;;;;;;;;:11;:19;10648:6;10636:19;;;;;;;;;;;;;;;:33;10656:12;:10;:12::i;:::-;10636:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10605:8;:121::i;:::-;10744:4;10737:11;;10401:355;;;;;:::o;8539:93::-;8597:5;8622:2;8615:9;;8539:93;:::o;11166:218::-;11254:4;11271:83;11280:12;:10;:12::i;:::-;11294:7;11303:50;11342:10;11303:11;:25;11315:12;:10;:12::i;:::-;11303:25;;;;;;;;;;;;;;;:34;11329:7;11303:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11271:8;:83::i;:::-;11372:4;11365:11;;11166:218;;;;:::o;29614:38::-;;;:::o;29882:33::-;;;;;;;;;;;;;:::o;37129:125::-;37194:4;37218:19;:28;37238:7;37218:28;;;;;;;;;;;;;;;;;;;;;;;;;37211:35;;37129:125;;;:::o;30149:28::-;;;;:::o;29961:30::-;;;;;;;;;;;;;:::o;8870:127::-;8944:7;8971:9;:18;8981:7;8971:18;;;;;;;;;;;;;;;;8964:25;;8870:127;;;:::o;22077:148::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22184:1:::1;22147:40;;22168:6;;;;;;;;;;;22147:40;;;;;;;;;;;;22215:1;22198:6;;:19;;;;;;;;;;;;;;;;;;22077:148::o:0;33952:120::-;34004:4;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34037:5:::1;34020:14;;:22;;;;;;;;;;;;;;;;;;34060:4;34053:11;;33952:120:::0;:::o;35013:144::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35145:4:::1;35103:31;:39;35135:6;35103:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35013:144:::0;;:::o;30041:30::-;;;;:::o;35171:403::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35333:7:::1;35321:9;:19;;;;35369:13;35351:15;:31;;;;35411:13;35393:15;:31;;;;35480:15;;35462;;35450:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;35435:12;:60;;;;35530:2;35514:12;;:18;;35506:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35171:403:::0;;;:::o;33751:148::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33822:4:::1;33806:13;;:20;;;;;;;;;;;;;;;;;;33851:4;33837:11;;:18;;;;;;;;;;;;;;;;;;33879:12;33866:10;:25;;;;33751:148::o:0;21433:79::-;21471:7;21498:6;;;;;;;;;;;21491:13;;21433:79;:::o;30184:31::-;;;;:::o;36091:101::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36177:7:::1;36163:11;;:21;;;;;;;;;;;;;;;;;;36091:101:::0;:::o;30844:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;7795:104::-;7851:13;7884:7;7877:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7795:104;:::o;30115:24::-;;;;:::o;30375:27::-;;;;:::o;30260:25::-;;;;:::o;11888:269::-;11981:4;11998:129;12007:12;:10;:12::i;:::-;12021:7;12030:96;12069:15;12030:96;;;;;;;;;;;;;;;;;:11;:25;12042:12;:10;:12::i;:::-;12030:25;;;;;;;;;;;;;;;:34;12056:7;12030:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11998:8;:129::i;:::-;12145:4;12138:11;;11888:269;;;;:::o;9211:175::-;9297:4;9314:42;9324:12;:10;:12::i;:::-;9338:9;9349:6;9314:9;:42::i;:::-;9374:4;9367:11;;9211:175;;;;:::o;36745:208::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36882:15:::1;;;;;;;;;;;36839:59;;36862:18;36839:59;;;;;;;;;;;;36927:18;36909:15;;:36;;;;;;;;;;;;;;;;;;36745:208:::0;:::o;29922:32::-;;;;;;;;;;;;;:::o;36201:182::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36317:8:::1;36286:19;:28;36306:7;36286:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36357:7;36341:34;;;36366:8;36341:34;;;;;;:::i;:::-;;;;;;;;36201:182:::0;;:::o;35582:412::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35746:7:::1;35733:10;:20;;;;35783:13;35764:16;:32;;;;35826:13;35807:16;:32;;;;35898:16;;35879;;35866:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;35850:13;:64;;;;35950:2;35933:13;;:19;;35925:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35582:412:::0;;;:::o;34789:215::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34911:4:::1;34905;34901:1;34885:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34884:31;;;;:::i;:::-;34874:6;:41;;34866:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34989:6;34979;:17;;;;:::i;:::-;34967:9;:29;;;;34789:215:::0;:::o;29766:35::-;;;;:::o;34151:386::-;34232:4;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34289:6:::1;34285:1;34269:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34256:9;:39;;34248:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34405:4;34401:1;34385:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34372:9;:37;;34364:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34498:9;34477:18;:30;;;;34525:4;34518:11;;34151:386:::0;;;:::o;30007:27::-;;;;:::o;9450:151::-;9539:7;9566:11;:18;9578:5;9566:18;;;;;;;;;;;;;;;:27;9585:7;9566:27;;;;;;;;;;;;;;;;9559:34;;9450:151;;;;:::o;29808:33::-;;;;:::o;30078:30::-;;;;:::o;22381:244::-;21656:12;:10;:12::i;:::-;21646:22;;:6;;;;;;;;;;;:22;;;21638:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22490:1:::1;22470:22;;:8;:22;;::::0;22462:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22580:8;22551:38;;22572:6;;;;;;;;;;;22551:38;;;;;;;;;;;;22609:8;22600:6;;:17;;;;;;;;;;;;;;;;;;22381:244:::0;:::o;30222:31::-;;;;:::o;29848:24::-;;;;:::o;16465:182::-;16523:7;16543:9;16559:1;16555;:5;;;;:::i;:::-;16543:17;;16584:1;16579;:6;;16571:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16638:1;16631:8;;;16465:182;;;;:::o;266:98::-;319:7;346:10;339:17;;266:98;:::o;15084:381::-;15237:1;15220:19;;:5;:19;;;15212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15318:1;15299:21;;:7;:21;;;15291:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15403:6;15373:11;:18;15385:5;15373:18;;;;;;;;;;;;;;;:27;15392:7;15373:27;;;;;;;;;;;;;;;:36;;;;15441:7;15425:32;;15434:5;15425:32;;;15450:6;15425:32;;;;;;:::i;:::-;;;;;;;;15084:381;;;:::o;36598:138::-;36681:5;36664:8;:14;36673:4;36664:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;36722:5;36705:23;;36716:4;36705:23;;;;;;;;;;;;36598:138;;:::o;37263:3347::-;37411:1;37395:18;;:4;:18;;;37387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37488:1;37474:16;;:2;:16;;;37466:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37558:1;37548:6;:11;37545:92;;37576:28;37592:4;37598:2;37602:1;37576:15;:28::i;:::-;37619:7;;37545:92;37653:14;;;;;;;;;;;37650:1170;;;37713:7;:5;:7::i;:::-;37705:15;;:4;:15;;;;:49;;;;;37747:7;:5;:7::i;:::-;37741:13;;:2;:13;;;;37705:49;:86;;;;;37789:1;37775:16;;:2;:16;;;;37705:86;:128;;;;;37826:6;37812:21;;:2;:21;;;;37705:128;:158;;;;;37855:8;;;;;;;;;;;37854:9;37705:158;37683:1126;;;37901:13;;;;;;;;;;;37897:148;;37946:19;:25;37966:4;37946:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37975:19;:23;37995:2;37975:23;;;;;;;;;;;;;;;;;;;;;;;;;37946:52;37938:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37897:148;38098:8;:14;38107:4;38098:14;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;38117:31;:35;38149:2;38117:35;;;;;;;;;;;;;;;;;;;;;;;;;38116:36;38098:54;38094:700;;;38199:20;;38189:6;:30;;38181:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38338:9;;38321:13;38331:2;38321:9;:13::i;:::-;38312:6;:22;;;;:::i;:::-;:35;;38304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38094:700;;;38421:8;:12;38430:2;38421:12;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;38438:31;:37;38470:4;38438:37;;;;;;;;;;;;;;;;;;;;;;;;;38437:38;38421:54;38417:377;;;38522:20;;38512:6;:30;;38504:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38417:377;;;38648:31;:35;38680:2;38648:35;;;;;;;;;;;;;;;;;;;;;;;;;38644:150;;38741:9;;38724:13;38734:2;38724:9;:13::i;:::-;38715:6;:22;;;;:::i;:::-;:35;;38707:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38644:150;38417:377;38094:700;37683:1126;37650:1170;38833:28;38864:24;38882:4;38864:9;:24::i;:::-;38833:55;;38902:12;38941:18;;38917:20;:42;;38902:57;;38991:7;:35;;;;;39015:11;;;;;;;;;;;38991:35;:61;;;;;39044:8;;;;;;;;;;;39043:9;38991:61;:93;;;;;39070:8;:14;39079:4;39070:14;;;;;;;;;;;;;;;;;;;;;;;;;39069:15;38991:93;:136;;;;;39102:19;:25;39122:4;39102:25;;;;;;;;;;;;;;;;;;;;;;;;;39101:26;38991:136;:177;;;;;39145:19;:23;39165:2;39145:23;;;;;;;;;;;;;;;;;;;;;;;;;39144:24;38991:177;38973:311;;;39206:4;39195:8;;:15;;;;;;;;;;;;;;;;;;39228:10;:8;:10::i;:::-;39267:5;39256:8;;:16;;;;;;;;;;;;;;;;;;38973:311;39297:12;39313:8;;;;;;;;;;;39312:9;39297:24;;39423:19;:25;39443:4;39423:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39452:19;:23;39472:2;39452:23;;;;;;;;;;;;;;;;;;;;;;;;;39423:52;39420:99;;;39502:5;39492:15;;39420:99;39532:12;39636:7;39633:923;;;39687:8;:12;39696:2;39687:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;39719:1;39703:13;;:17;39687:33;39683:720;;;39747:34;39777:3;39747:25;39758:13;;39747:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39740:41;;39848:13;;39829:16;;39822:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39800:18;;:61;;;;;;;:::i;:::-;;;;;;;;39916:13;;39903:10;;39896:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39880:12;;:49;;;;;;;:::i;:::-;;;;;;;;39996:13;;39977:16;;39970:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39948:18;;:61;;;;;;;:::i;:::-;;;;;;;;39683:720;;;40070:8;:14;40079:4;40070:14;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;40103:1;40088:12;;:16;40070:34;40067:336;;;40132:33;40161:3;40132:24;40143:12;;40132:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40125:40;;40231:12;;40213:15;;40206:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40184:18;;:59;;;;;;;:::i;:::-;;;;;;;;40297:12;;40285:9;;40278:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40262:12;;:47;;;;;;;:::i;:::-;;;;;;;;40375:12;;40357:15;;40350:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40328:18;;:59;;;;;;;:::i;:::-;;;;;;;;40067:336;39683:720;40430:1;40423:4;:8;40420:93;;;40455:42;40471:4;40485;40492;40455:15;:42::i;:::-;40420:93;40540:4;40530:14;;;;;:::i;:::-;;;39633:923;40569:33;40585:4;40591:2;40595:6;40569:15;:33::i;:::-;37376:3234;;;;37263:3347;;;;:::o;17371:193::-;17457:7;17490:1;17485;:6;;17493:12;17477:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17517:9;17533:1;17529;:5;;;;:::i;:::-;17517:17;;17555:1;17548:8;;;17371:193;;;;;:::o;12648:575::-;12806:1;12788:20;;:6;:20;;;12780:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12890:1;12869:23;;:9;:23;;;12861:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12946:47;12967:6;12975:9;12986:6;12946:20;:47::i;:::-;13027:71;13049:6;13027:71;;;;;;;;;;;;;;;;;:9;:17;13037:6;13027:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13007:9;:17;13017:6;13007:17;;;;;;;;;;;;;;;:91;;;;13132:32;13157:6;13132:9;:20;13142:9;13132:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13109:9;:20;13119:9;13109:20;;;;;;;;;;;;;;;:55;;;;13197:9;13180:35;;13189:6;13180:35;;;13208:6;13180:35;;;;;;:::i;:::-;;;;;;;;12648:575;;;:::o;41754:1568::-;41793:23;41819:24;41837:4;41819:9;:24::i;:::-;41793:50;;41854:25;41924:12;;41903:18;;41882;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;41854:82;;41947:12;41995:1;41976:15;:20;:46;;;;42021:1;42000:17;:22;41976:46;41973:60;;;42025:7;;;;;41973:60;42088:2;42067:18;;:23;;;;:::i;:::-;42049:15;:41;42046:111;;;42143:2;42122:18;;:23;;;;:::i;:::-;42104:41;;42046:111;42219:23;42304:1;42284:17;42263:18;;42245:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42219:86;;42316:26;42345:36;42365:15;42345;:19;;:36;;;;:::i;:::-;42316:65;;42395:25;42423:21;42395:49;;42458:36;42475:18;42458:16;:36::i;:::-;42509:18;42530:44;42556:17;42530:21;:25;;:44;;;;:::i;:::-;42509:65;;42588:23;42614:57;42653:17;42614:34;42629:18;;42614:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42588:83;;42682:17;42702:51;42735:17;42702:28;42717:12;;42702:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42682:71;;42764:23;42821:9;42803:15;42790:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42764:66;;42868:1;42847:18;:22;;;;42901:1;42880:18;:22;;;;42928:1;42913:12;:16;;;;42964:9;;;;;;;;;;;42956:23;;42987:9;42956:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42943:58;;;;;43036:1;43018:15;:19;:42;;;;;43059:1;43041:15;:19;43018:42;43015:210;;;43076:46;43089:15;43106;43076:12;:46::i;:::-;43142:71;43157:18;43177:15;43194:18;;43142:71;;;;;;;;:::i;:::-;;;;;;;;43015:210;43259:15;;;;;;;;;;;43251:29;;43288:21;43251:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43238:76;;;;;41782:1540;;;;;;;;;;41754:1568;:::o;17824:473::-;17882:7;18132:1;18127;:6;18123:47;;18157:1;18150:8;;;;18123:47;18183:9;18199:1;18195;:5;;;;:::i;:::-;18183:17;;18228:1;18223;18219;:5;;;;:::i;:::-;:10;18211:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18288:1;18281:8;;;17824:473;;;;;:::o;18774:132::-;18832:7;18859:39;18863:1;18866;18859:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18852:46;;18774:132;;;;:::o;16069:125::-;;;;:::o;16931:136::-;16989:7;17016:43;17020:1;17023;17016:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17009:50;;16931:136;;;;:::o;40619:597::-;40748:21;40786:1;40772:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40748:40;;40817:4;40799;40804:1;40799:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40843:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40833:4;40838:1;40833:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40879:62;40896:4;40911:15;40929:11;40879:8;:62::i;:::-;40981:15;:66;;;41062:11;41088:1;41132:4;41159;41179:15;40981:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40674:542;40619:597;:::o;41225:520::-;41373:62;41390:4;41405:15;41423:11;41373:8;:62::i;:::-;41479:15;:31;;;41518:9;41551:4;41571:11;41597:1;41640;41691:4;41711:15;41479:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41225:520;;:::o;19403:279::-;19489:7;19521:1;19517;:5;19524:12;19509:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19548:9;19564:1;19560;:5;;;;:::i;:::-;19548:17;;19673:1;19666:8;;;19403:279;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:468::-;5437:6;5445;5494:2;5482:9;5473:7;5469:23;5465:32;5462:119;;;5500:79;;:::i;:::-;5462:119;5620:1;5645:53;5690:7;5681:6;5670:9;5666:22;5645:53;:::i;:::-;5635:63;;5591:117;5747:2;5773:50;5815:7;5806:6;5795:9;5791:22;5773:50;:::i;:::-;5763:60;;5718:115;5372:468;;;;;:::o;5846:329::-;5905:6;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;5846:329;;;;:::o;6181:619::-;6258:6;6266;6274;6323:2;6311:9;6302:7;6298:23;6294:32;6291:119;;;6329:79;;:::i;:::-;6291:119;6449:1;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6420:117;6576:2;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6547:118;6704:2;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6675:118;6181:619;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:227::-;10659:34;10655:1;10647:6;10643:14;10636:58;10728:10;10723:2;10715:6;10711:15;10704:35;10519:227;:::o;10752:366::-;10894:3;10915:67;10979:2;10974:3;10915:67;:::i;:::-;10908:74;;10991:93;11080:3;10991:93;:::i;:::-;11109:2;11104:3;11100:12;11093:19;;10752:366;;;:::o;11124:419::-;11290:4;11328:2;11317:9;11313:18;11305:26;;11377:9;11371:4;11367:20;11363:1;11352:9;11348:17;11341:47;11405:131;11531:4;11405:131;:::i;:::-;11397:139;;11124:419;;;:::o;11549:180::-;11597:77;11594:1;11587:88;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;11735:410;11775:7;11798:20;11816:1;11798:20;:::i;:::-;11793:25;;11832:20;11850:1;11832:20;:::i;:::-;11827:25;;11887:1;11884;11880:9;11909:30;11927:11;11909:30;:::i;:::-;11898:41;;12088:1;12079:7;12075:15;12072:1;12069:22;12049:1;12042:9;12022:83;11999:139;;12118:18;;:::i;:::-;11999:139;11783:362;11735:410;;;;:::o;12151:180::-;12199:77;12196:1;12189:88;12296:4;12293:1;12286:15;12320:4;12317:1;12310:15;12337:185;12377:1;12394:20;12412:1;12394:20;:::i;:::-;12389:25;;12428:20;12446:1;12428:20;:::i;:::-;12423:25;;12467:1;12457:35;;12472:18;;:::i;:::-;12457:35;12514:1;12511;12507:9;12502:14;;12337:185;;;;:::o;12528:234::-;12668:34;12664:1;12656:6;12652:14;12645:58;12737:17;12732:2;12724:6;12720:15;12713:42;12528:234;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:179::-;13902:31;13898:1;13890:6;13886:14;13879:55;13762:179;:::o;13947:366::-;14089:3;14110:67;14174:2;14169:3;14110:67;:::i;:::-;14103:74;;14186:93;14275:3;14186:93;:::i;:::-;14304:2;14299:3;14295:12;14288:19;;13947:366;;;:::o;14319:419::-;14485:4;14523:2;14512:9;14508:18;14500:26;;14572:9;14566:4;14562:20;14558:1;14547:9;14543:17;14536:47;14600:131;14726:4;14600:131;:::i;:::-;14592:139;;14319:419;;;:::o;14744:179::-;14884:31;14880:1;14872:6;14868:14;14861:55;14744:179;:::o;14929:366::-;15071:3;15092:67;15156:2;15151:3;15092:67;:::i;:::-;15085:74;;15168:93;15257:3;15168:93;:::i;:::-;15286:2;15281:3;15277:12;15270:19;;14929:366;;;:::o;15301:419::-;15467:4;15505:2;15494:9;15490:18;15482:26;;15554:9;15548:4;15544:20;15540:1;15529:9;15525:17;15518:47;15582:131;15708:4;15582:131;:::i;:::-;15574:139;;15301:419;;;:::o;15726:223::-;15866:34;15862:1;15854:6;15850:14;15843:58;15935:6;15930:2;15922:6;15918:15;15911:31;15726:223;:::o;15955:366::-;16097:3;16118:67;16182:2;16177:3;16118:67;:::i;:::-;16111:74;;16194:93;16283:3;16194:93;:::i;:::-;16312:2;16307:3;16303:12;16296:19;;15955:366;;;:::o;16327:419::-;16493:4;16531:2;16520:9;16516:18;16508:26;;16580:9;16574:4;16570:20;16566:1;16555:9;16551:17;16544:47;16608:131;16734:4;16608:131;:::i;:::-;16600:139;;16327:419;;;:::o;16752:240::-;16892:34;16888:1;16880:6;16876:14;16869:58;16961:23;16956:2;16948:6;16944:15;16937:48;16752:240;:::o;16998:366::-;17140:3;17161:67;17225:2;17220:3;17161:67;:::i;:::-;17154:74;;17237:93;17326:3;17237:93;:::i;:::-;17355:2;17350:3;17346:12;17339:19;;16998:366;;;:::o;17370:419::-;17536:4;17574:2;17563:9;17559:18;17551:26;;17623:9;17617:4;17613:20;17609:1;17598:9;17594:17;17587:47;17651:131;17777:4;17651:131;:::i;:::-;17643:139;;17370:419;;;:::o;17795:239::-;17935:34;17931:1;17923:6;17919:14;17912:58;18004:22;17999:2;17991:6;17987:15;17980:47;17795:239;:::o;18040:366::-;18182:3;18203:67;18267:2;18262:3;18203:67;:::i;:::-;18196:74;;18279:93;18368:3;18279:93;:::i;:::-;18397:2;18392:3;18388:12;18381:19;;18040:366;;;:::o;18412:419::-;18578:4;18616:2;18605:9;18601:18;18593:26;;18665:9;18659:4;18655:20;18651:1;18640:9;18636:17;18629:47;18693:131;18819:4;18693:131;:::i;:::-;18685:139;;18412:419;;;:::o;18837:225::-;18977:34;18973:1;18965:6;18961:14;18954:58;19046:8;19041:2;19033:6;19029:15;19022:33;18837:225;:::o;19068:366::-;19210:3;19231:67;19295:2;19290:3;19231:67;:::i;:::-;19224:74;;19307:93;19396:3;19307:93;:::i;:::-;19425:2;19420:3;19416:12;19409:19;;19068:366;;;:::o;19440:419::-;19606:4;19644:2;19633:9;19629:18;19621:26;;19693:9;19687:4;19683:20;19679:1;19668:9;19664:17;19657:47;19721:131;19847:4;19721:131;:::i;:::-;19713:139;;19440:419;;;:::o;19865:177::-;20005:29;20001:1;19993:6;19989:14;19982:53;19865:177;:::o;20048:366::-;20190:3;20211:67;20275:2;20270:3;20211:67;:::i;:::-;20204:74;;20287:93;20376:3;20287:93;:::i;:::-;20405:2;20400:3;20396:12;20389:19;;20048:366;;;:::o;20420:419::-;20586:4;20624:2;20613:9;20609:18;20601:26;;20673:9;20667:4;20663:20;20659:1;20648:9;20644:17;20637:47;20701:131;20827:4;20701:131;:::i;:::-;20693:139;;20420:419;;;:::o;20845:223::-;20985:34;20981:1;20973:6;20969:14;20962:58;21054:6;21049:2;21041:6;21037:15;21030:31;20845:223;:::o;21074:366::-;21216:3;21237:67;21301:2;21296:3;21237:67;:::i;:::-;21230:74;;21313:93;21402:3;21313:93;:::i;:::-;21431:2;21426:3;21422:12;21415:19;;21074:366;;;:::o;21446:419::-;21612:4;21650:2;21639:9;21635:18;21627:26;;21699:9;21693:4;21689:20;21685:1;21674:9;21670:17;21663:47;21727:131;21853:4;21727:131;:::i;:::-;21719:139;;21446:419;;;:::o;21871:221::-;22011:34;22007:1;21999:6;21995:14;21988:58;22080:4;22075:2;22067:6;22063:15;22056:29;21871:221;:::o;22098:366::-;22240:3;22261:67;22325:2;22320:3;22261:67;:::i;:::-;22254:74;;22337:93;22426:3;22337:93;:::i;:::-;22455:2;22450:3;22446:12;22439:19;;22098:366;;;:::o;22470:419::-;22636:4;22674:2;22663:9;22659:18;22651:26;;22723:9;22717:4;22713:20;22709:1;22698:9;22694:17;22687:47;22751:131;22877:4;22751:131;:::i;:::-;22743:139;;22470:419;;;:::o;22895:224::-;23035:34;23031:1;23023:6;23019:14;23012:58;23104:7;23099:2;23091:6;23087:15;23080:32;22895:224;:::o;23125:366::-;23267:3;23288:67;23352:2;23347:3;23288:67;:::i;:::-;23281:74;;23364:93;23453:3;23364:93;:::i;:::-;23482:2;23477:3;23473:12;23466:19;;23125:366;;;:::o;23497:419::-;23663:4;23701:2;23690:9;23686:18;23678:26;;23750:9;23744:4;23740:20;23736:1;23725:9;23721:17;23714:47;23778:131;23904:4;23778:131;:::i;:::-;23770:139;;23497:419;;;:::o;23922:222::-;24062:34;24058:1;24050:6;24046:14;24039:58;24131:5;24126:2;24118:6;24114:15;24107:30;23922:222;:::o;24150:366::-;24292:3;24313:67;24377:2;24372:3;24313:67;:::i;:::-;24306:74;;24389:93;24478:3;24389:93;:::i;:::-;24507:2;24502:3;24498:12;24491:19;;24150:366;;;:::o;24522:419::-;24688:4;24726:2;24715:9;24711:18;24703:26;;24775:9;24769:4;24765:20;24761:1;24750:9;24746:17;24739:47;24803:131;24929:4;24803:131;:::i;:::-;24795:139;;24522:419;;;:::o;24947:172::-;25087:24;25083:1;25075:6;25071:14;25064:48;24947:172;:::o;25125:366::-;25267:3;25288:67;25352:2;25347:3;25288:67;:::i;:::-;25281:74;;25364:93;25453:3;25364:93;:::i;:::-;25482:2;25477:3;25473:12;25466:19;;25125:366;;;:::o;25497:419::-;25663:4;25701:2;25690:9;25686:18;25678:26;;25750:9;25744:4;25740:20;25736:1;25725:9;25721:17;25714:47;25778:131;25904:4;25778:131;:::i;:::-;25770:139;;25497:419;;;:::o;25922:240::-;26062:34;26058:1;26050:6;26046:14;26039:58;26131:23;26126:2;26118:6;26114:15;26107:48;25922:240;:::o;26168:366::-;26310:3;26331:67;26395:2;26390:3;26331:67;:::i;:::-;26324:74;;26407:93;26496:3;26407:93;:::i;:::-;26525:2;26520:3;26516:12;26509:19;;26168:366;;;:::o;26540:419::-;26706:4;26744:2;26733:9;26729:18;26721:26;;26793:9;26787:4;26783:20;26779:1;26768:9;26764:17;26757:47;26821:131;26947:4;26821:131;:::i;:::-;26813:139;;26540:419;;;:::o;26965:169::-;27105:21;27101:1;27093:6;27089:14;27082:45;26965:169;:::o;27140:366::-;27282:3;27303:67;27367:2;27362:3;27303:67;:::i;:::-;27296:74;;27379:93;27468:3;27379:93;:::i;:::-;27497:2;27492:3;27488:12;27481:19;;27140:366;;;:::o;27512:419::-;27678:4;27716:2;27705:9;27701:18;27693:26;;27765:9;27759:4;27755:20;27751:1;27740:9;27736:17;27729:47;27793:131;27919:4;27793:131;:::i;:::-;27785:139;;27512:419;;;:::o;27937:241::-;28077:34;28073:1;28065:6;28061:14;28054:58;28146:24;28141:2;28133:6;28129:15;28122:49;27937:241;:::o;28184:366::-;28326:3;28347:67;28411:2;28406:3;28347:67;:::i;:::-;28340:74;;28423:93;28512:3;28423:93;:::i;:::-;28541:2;28536:3;28532:12;28525:19;;28184:366;;;:::o;28556:419::-;28722:4;28760:2;28749:9;28745:18;28737:26;;28809:9;28803:4;28799:20;28795:1;28784:9;28780:17;28773:47;28837:131;28963:4;28837:131;:::i;:::-;28829:139;;28556:419;;;:::o;28981:194::-;29021:4;29041:20;29059:1;29041:20;:::i;:::-;29036:25;;29075:20;29093:1;29075:20;:::i;:::-;29070:25;;29119:1;29116;29112:9;29104:17;;29143:1;29137:4;29134:11;29131:37;;;29148:18;;:::i;:::-;29131:37;28981:194;;;;:::o;29181:147::-;29282:11;29319:3;29304:18;;29181:147;;;;:::o;29334:114::-;;:::o;29454:398::-;29613:3;29634:83;29715:1;29710:3;29634:83;:::i;:::-;29627:90;;29726:93;29815:3;29726:93;:::i;:::-;29844:1;29839:3;29835:11;29828:18;;29454:398;;;:::o;29858:379::-;30042:3;30064:147;30207:3;30064:147;:::i;:::-;30057:154;;30228:3;30221:10;;29858:379;;;:::o;30243:442::-;30392:4;30430:2;30419:9;30415:18;30407:26;;30443:71;30511:1;30500:9;30496:17;30487:6;30443:71;:::i;:::-;30524:72;30592:2;30581:9;30577:18;30568:6;30524:72;:::i;:::-;30606;30674:2;30663:9;30659:18;30650:6;30606:72;:::i;:::-;30243:442;;;;;;:::o;30691:220::-;30831:34;30827:1;30819:6;30815:14;30808:58;30900:3;30895:2;30887:6;30883:15;30876:28;30691:220;:::o;30917:366::-;31059:3;31080:67;31144:2;31139:3;31080:67;:::i;:::-;31073:74;;31156:93;31245:3;31156:93;:::i;:::-;31274:2;31269:3;31265:12;31258:19;;30917:366;;;:::o;31289:419::-;31455:4;31493:2;31482:9;31478:18;31470:26;;31542:9;31536:4;31532:20;31528:1;31517:9;31513:17;31506:47;31570:131;31696:4;31570:131;:::i;:::-;31562:139;;31289:419;;;:::o;31714:180::-;31762:77;31759:1;31752:88;31859:4;31856:1;31849:15;31883:4;31880:1;31873:15;31900:180;31948:77;31945:1;31938:88;32045:4;32042:1;32035:15;32069:4;32066:1;32059:15;32086:143;32143:5;32174:6;32168:13;32159:22;;32190:33;32217:5;32190:33;:::i;:::-;32086:143;;;;:::o;32235:351::-;32305:6;32354:2;32342:9;32333:7;32329:23;32325:32;32322:119;;;32360:79;;:::i;:::-;32322:119;32480:1;32505:64;32561:7;32552:6;32541:9;32537:22;32505:64;:::i;:::-;32495:74;;32451:128;32235:351;;;;:::o;32592:85::-;32637:7;32666:5;32655:16;;32592:85;;;:::o;32683:158::-;32741:9;32774:61;32792:42;32801:32;32827:5;32801:32;:::i;:::-;32792:42;:::i;:::-;32774:61;:::i;:::-;32761:74;;32683:158;;;:::o;32847:147::-;32942:45;32981:5;32942:45;:::i;:::-;32937:3;32930:58;32847:147;;:::o;33000:114::-;33067:6;33101:5;33095:12;33085:22;;33000:114;;;:::o;33120:184::-;33219:11;33253:6;33248:3;33241:19;33293:4;33288:3;33284:14;33269:29;;33120:184;;;;:::o;33310:132::-;33377:4;33400:3;33392:11;;33430:4;33425:3;33421:14;33413:22;;33310:132;;;:::o;33448:108::-;33525:24;33543:5;33525:24;:::i;:::-;33520:3;33513:37;33448:108;;:::o;33562:179::-;33631:10;33652:46;33694:3;33686:6;33652:46;:::i;:::-;33730:4;33725:3;33721:14;33707:28;;33562:179;;;;:::o;33747:113::-;33817:4;33849;33844:3;33840:14;33832:22;;33747:113;;;:::o;33896:732::-;34015:3;34044:54;34092:5;34044:54;:::i;:::-;34114:86;34193:6;34188:3;34114:86;:::i;:::-;34107:93;;34224:56;34274:5;34224:56;:::i;:::-;34303:7;34334:1;34319:284;34344:6;34341:1;34338:13;34319:284;;;34420:6;34414:13;34447:63;34506:3;34491:13;34447:63;:::i;:::-;34440:70;;34533:60;34586:6;34533:60;:::i;:::-;34523:70;;34379:224;34366:1;34363;34359:9;34354:14;;34319:284;;;34323:14;34619:3;34612:10;;34020:608;;;33896:732;;;;:::o;34634:831::-;34897:4;34935:3;34924:9;34920:19;34912:27;;34949:71;35017:1;35006:9;35002:17;34993:6;34949:71;:::i;:::-;35030:80;35106:2;35095:9;35091:18;35082:6;35030:80;:::i;:::-;35157:9;35151:4;35147:20;35142:2;35131:9;35127:18;35120:48;35185:108;35288:4;35279:6;35185:108;:::i;:::-;35177:116;;35303:72;35371:2;35360:9;35356:18;35347:6;35303:72;:::i;:::-;35385:73;35453:3;35442:9;35438:19;35429:6;35385:73;:::i;:::-;34634:831;;;;;;;;:::o;35471:807::-;35720:4;35758:3;35747:9;35743:19;35735:27;;35772:71;35840:1;35829:9;35825:17;35816:6;35772:71;:::i;:::-;35853:72;35921:2;35910:9;35906:18;35897:6;35853:72;:::i;:::-;35935:80;36011:2;36000:9;35996:18;35987:6;35935:80;:::i;:::-;36025;36101:2;36090:9;36086:18;36077:6;36025:80;:::i;:::-;36115:73;36183:3;36172:9;36168:19;36159:6;36115:73;:::i;:::-;36198;36266:3;36255:9;36251:19;36242:6;36198:73;:::i;:::-;35471:807;;;;;;;;;:::o;36284:143::-;36341:5;36372:6;36366:13;36357:22;;36388:33;36415:5;36388:33;:::i;:::-;36284:143;;;;:::o;36433:663::-;36521:6;36529;36537;36586:2;36574:9;36565:7;36561:23;36557:32;36554:119;;;36592:79;;:::i;:::-;36554:119;36712:1;36737:64;36793:7;36784:6;36773:9;36769:22;36737:64;:::i;:::-;36727:74;;36683:128;36850:2;36876:64;36932:7;36923:6;36912:9;36908:22;36876:64;:::i;:::-;36866:74;;36821:129;36989:2;37015:64;37071:7;37062:6;37051:9;37047:22;37015:64;:::i;:::-;37005:74;;36960:129;36433:663;;;;;:::o

Swarm Source

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