ETH Price: $2,416.73 (+0.62%)

Token

HACHIMAN (HACHIMAN)
 

Overview

Max Total Supply

10,000,000 HACHIMAN

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
20,905.791272063020864613 HACHIMAN

Value
$0.00
0x93b6e6241d7ff33ca450064fe61988412fd3d108
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:
HACHIMAN

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

 Linktree: https://linktr.ee/hachimaneth

 Telegram: t.me/HachimanPORTAL

 Twitter: https://twitter.com/HachimanETH

 Medium: https://medium.com/@hachimanethh/hachiman-new-beginnings-219653e68e28
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.11;
 
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 HACHIMAN 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 = false;
    bool public swapEnabled = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyMarketing;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketing;
    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 automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event 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("HACHIMAN", "HACHIMAN") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
        uint256 _buyMarketing = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;
 
        uint256 _sellMarketing = 5;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;
 
       
 
     uint256 totalSupply = 1 * 10 ** 7 * 10 ** decimals();
 
        maxTransactionAmount = 2 * 10 ** 5 * 10 ** decimals(); 
        maxWallet = 2 * 10 ** 5 * 10 ** decimals(); 
        swapTokensAtAmount = totalSupply * 10 / 20000; // 0.2% swap wallet
 
        buyMarketing = _buyMarketing;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
 
        sellMarketing = _sellMarketing;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
 
        MarketingWallet = address(0x222F4FBAeD88Ca561B6E80e5176BB05b7bb2d7c8); // set as Marketing wallet
        DevWallet = address(0x222F4FBAeD88Ca561B6E80e5176BB05b7bb2d7c8); // set as dev wallet
 
        // 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;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = 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() * 1 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        buyMarketing = _Marketing;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _DevFee;
        buyTotalFees = buyMarketing + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 35, "Must keep fees at 35% or less");
    }
 
    function updateSellFees(uint256 _Marketing, uint256 _liquidityFee, uint256 _DevFee) external onlyOwner {
        sellMarketing = _Marketing;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _DevFee;
        sellTotalFees = sellMarketing + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 35, "Must keep fees at 35% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(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];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         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.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] <= block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[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 &&
            !automatedMarketMakerPairs[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 (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketing / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketing / 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":"sniper","type":"address"}],"name":"BoughtEarly","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":"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"buyMarketing","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":"disableTransferDelay","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":[],"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":"sellMarketing","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":"setAutomatedMarketMakerPair","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","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":"_Marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_DevFee","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600881526020017f48414348494d414e0000000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f48414348494d414e00000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000bd4565b5080600490805190602001906200011b92919062000bd4565b5050506000620001306200069760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200069f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000cee565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000cee565b6040518363ffffffff1660e01b81526004016200034e92919062000d31565b6020604051808303816000875af11580156200036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000394919062000cee565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003dc60a05160016200069f60201b60201c565b620003f160a05160016200079c60201b60201c565b6000600590506000806000600590506000806000620004156200083d60201b60201c565b600a62000423919062000ef8565b6298968062000433919062000f49565b9050620004456200083d60201b60201c565b600a62000453919062000ef8565b62030d4062000463919062000f49565b600881905550620004796200083d60201b60201c565b600a62000487919062000ef8565b62030d4062000497919062000f49565b600a81905550614e20600a82620004af919062000f49565b620004bb919062000fd9565b600981905550866011819055508560128190555084601381905550601354601254601154620004eb919062001011565b620004f7919062001011565b60108190555083601581905550826016819055508160178190555060175460165460155462000527919062001011565b62000533919062001011565b60148190555073222f4fbaed88ca561b6e80e5176bb05b7bb2d7c8600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073222f4fbaed88ca561b6e80e5176bb05b7bb2d7c8600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000605620005f76200084660201b60201c565b60016200087060201b60201c565b620006183060016200087060201b60201c565b6200062d61dead60016200087060201b60201c565b6200064f620006416200084660201b60201c565b60016200069f60201b60201c565b620006623060016200069f60201b60201c565b6200067761dead60016200069f60201b60201c565b620006893382620009bd60201b60201c565b5050505050505050620012a2565b600033905090565b620006af6200069760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073890620010cf565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60006012905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008806200069760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000912576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090990620010cf565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009b191906200110e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a27906200117b565b60405180910390fd5b62000a446000838362000b6c60201b60201c565b62000a608160025462000b7160201b6200247b1790919060201c565b60028190555062000abe816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b7160201b6200247b1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b609190620011ae565b60405180910390a35050565b505050565b600080828462000b82919062001011565b90508381101562000bca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc1906200121b565b60405180910390fd5b8091505092915050565b82805462000be2906200126c565b90600052602060002090601f01602090048101928262000c06576000855562000c52565b82601f1062000c2157805160ff191683800117855562000c52565b8280016001018555821562000c52579182015b8281111562000c5157825182559160200191906001019062000c34565b5b50905062000c61919062000c65565b5090565b5b8082111562000c8057600081600090555060010162000c66565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cb68262000c89565b9050919050565b62000cc88162000ca9565b811462000cd457600080fd5b50565b60008151905062000ce88162000cbd565b92915050565b60006020828403121562000d075762000d0662000c84565b5b600062000d178482850162000cd7565b91505092915050565b62000d2b8162000ca9565b82525050565b600060408201905062000d48600083018562000d20565b62000d57602083018462000d20565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000dec5780860481111562000dc45762000dc362000d5e565b5b600185161562000dd45780820291505b808102905062000de48562000d8d565b945062000da4565b94509492505050565b60008262000e07576001905062000eda565b8162000e17576000905062000eda565b816001811462000e30576002811462000e3b5762000e71565b600191505062000eda565b60ff84111562000e505762000e4f62000d5e565b5b8360020a91508482111562000e6a5762000e6962000d5e565b5b5062000eda565b5060208310610133831016604e8410600b841016171562000eab5782820a90508381111562000ea55762000ea462000d5e565b5b62000eda565b62000eba848484600162000d9a565b9250905081840481111562000ed45762000ed362000d5e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000f058262000ee1565b915062000f128362000eeb565b925062000f417fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000df5565b905092915050565b600062000f568262000ee1565b915062000f638362000ee1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f9f5762000f9e62000d5e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000fe68262000ee1565b915062000ff38362000ee1565b92508262001006576200100562000faa565b5b828204905092915050565b60006200101e8262000ee1565b91506200102b8362000ee1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001063576200106262000d5e565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620010b76020836200106e565b9150620010c4826200107f565b602082019050919050565b60006020820190508181036000830152620010ea81620010a8565b9050919050565b60008115159050919050565b6200110881620010f1565b82525050565b6000602082019050620011256000830184620010fd565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001163601f836200106e565b915062001170826200112b565b602082019050919050565b60006020820190508181036000830152620011968162001154565b9050919050565b620011a88162000ee1565b82525050565b6000602082019050620011c560008301846200119d565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001203601b836200106e565b91506200121082620011cb565b602082019050919050565b600060208201905081810360008301526200123681620011f4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200128557607f821691505b602082108114156200129c576200129b6200123d565b5b50919050565b60805160a051615467620013006000396000818161112f0152818161191f0152612b47015260008181610cdf01528181612aef01528181613c5e01528181613d3f01528181613d6601528181613e020152613e2901526154676000f3fe6080604052600436106102e85760003560e01c8063924de9b711610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610b63578063f2fde38b14610b8e578063f637434214610bb7578063f8b45b0514610be2576102ef565b8063dd62ed3e14610ad0578063e2f4560514610b0d578063e884f26014610b38576102ef565b8063c17b5b8c146109c0578063c18bc195146109e9578063c876d0b914610a12578063c8c8ebe414610a3d578063d257b34f14610a68578063d85ba06314610aa5576102ef565b8063a457c2d711610149578063aacebbe311610123578063aacebbe314610906578063b62496f51461092f578063bbc0c7421461096c578063c024666814610997576102ef565b8063a457c2d714610861578063a8b9f94d1461089e578063a9059cbb146108c9576102ef565b8063924de9b71461076357806395d89b411461078c5780639a7a23d6146107b75780639c3b4fdc146107e05780639fccce321461080b578063a0d82dc514610836576102ef565b806349bd5a5e1161024f57806370a08231116102085780637571336a116101e25780637571336a146106cf5780638095d564146106f85780638a8c523c146107215780638da5cb5b14610738576102ef565b806370a0823114610650578063715018a61461068d578063751039fc146106a4576102ef565b806349bd5a5e1461053c5780634a62bb65146105675780634fbee193146105925780636a486a8e146105cf5780636b41ae0c146105fa5780636ddd171314610625576102ef565b80631a8145bb116102a15780631a8145bb146104185780631f3fed8f14610443578063203e727e1461046e57806323b872dd14610497578063313ce567146104d457806339509351146104ff576102ef565b806306fdde03146102f4578063095ea7b31461031f57806310d5de531461035c5780631694505e1461039957806318160ddd146103c45780631816467f146103ef576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c0d565b6040516103169190613fd2565b60405180910390f35b34801561032b57600080fd5b506103466004803603810190610341919061408d565b610c9f565b60405161035391906140e8565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190614103565b610cbd565b60405161039091906140e8565b60405180910390f35b3480156103a557600080fd5b506103ae610cdd565b6040516103bb919061418f565b60405180910390f35b3480156103d057600080fd5b506103d9610d01565b6040516103e691906141b9565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190614103565b610d0b565b005b34801561042457600080fd5b5061042d610e62565b60405161043a91906141b9565b60405180910390f35b34801561044f57600080fd5b50610458610e68565b60405161046591906141b9565b60405180910390f35b34801561047a57600080fd5b50610495600480360381019061049091906141d4565b610e6e565b005b3480156104a357600080fd5b506104be60048036038101906104b99190614201565b610f98565b6040516104cb91906140e8565b60405180910390f35b3480156104e057600080fd5b506104e9611071565b6040516104f69190614270565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061408d565b61107a565b60405161053391906140e8565b60405180910390f35b34801561054857600080fd5b5061055161112d565b60405161055e919061429a565b60405180910390f35b34801561057357600080fd5b5061057c611151565b60405161058991906140e8565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190614103565b611164565b6040516105c691906140e8565b60405180910390f35b3480156105db57600080fd5b506105e46111ba565b6040516105f191906141b9565b60405180910390f35b34801561060657600080fd5b5061060f6111c0565b60405161061c91906141b9565b60405180910390f35b34801561063157600080fd5b5061063a6111c6565b60405161064791906140e8565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190614103565b6111d9565b60405161068491906141b9565b60405180910390f35b34801561069957600080fd5b506106a2611221565b005b3480156106b057600080fd5b506106b9611379565b6040516106c691906140e8565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f191906142e1565b611434565b005b34801561070457600080fd5b5061071f600480360381019061071a9190614321565b611526565b005b34801561072d57600080fd5b50610736611640565b005b34801561074457600080fd5b5061074d611716565b60405161075a919061429a565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190614374565b611740565b005b34801561079857600080fd5b506107a16117f4565b6040516107ae9190613fd2565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d991906142e1565b611886565b005b3480156107ec57600080fd5b506107f56119ba565b60405161080291906141b9565b60405180910390f35b34801561081757600080fd5b506108206119c0565b60405161082d91906141b9565b60405180910390f35b34801561084257600080fd5b5061084b6119c6565b60405161085891906141b9565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061408d565b6119cc565b60405161089591906140e8565b60405180910390f35b3480156108aa57600080fd5b506108b3611a99565b6040516108c091906141b9565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb919061408d565b611a9f565b6040516108fd91906140e8565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190614103565b611abd565b005b34801561093b57600080fd5b5061095660048036038101906109519190614103565b611c14565b60405161096391906140e8565b60405180910390f35b34801561097857600080fd5b50610981611c34565b60405161098e91906140e8565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b991906142e1565b611c47565b005b3480156109cc57600080fd5b506109e760048036038101906109e29190614321565b611d87565b005b3480156109f557600080fd5b50610a106004803603810190610a0b91906141d4565b611ea1565b005b348015610a1e57600080fd5b50610a27611fcb565b604051610a3491906140e8565b60405180910390f35b348015610a4957600080fd5b50610a52611fde565b604051610a5f91906141b9565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a91906141d4565b611fe4565b604051610a9c91906140e8565b60405180910390f35b348015610ab157600080fd5b50610aba612154565b604051610ac791906141b9565b60405180910390f35b348015610adc57600080fd5b50610af76004803603810190610af291906143a1565b61215a565b604051610b0491906141b9565b60405180910390f35b348015610b1957600080fd5b50610b226121e1565b604051610b2f91906141b9565b60405180910390f35b348015610b4457600080fd5b50610b4d6121e7565b604051610b5a91906140e8565b60405180910390f35b348015610b6f57600080fd5b50610b786122a2565b604051610b8591906141b9565b60405180910390f35b348015610b9a57600080fd5b50610bb56004803603810190610bb09190614103565b6122a8565b005b348015610bc357600080fd5b50610bcc61246f565b604051610bd991906141b9565b60405180910390f35b348015610bee57600080fd5b50610bf7612475565b604051610c0491906141b9565b60405180910390f35b606060038054610c1c90614410565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4890614410565b8015610c955780601f10610c6a57610100808354040283529160200191610c95565b820191906000526020600020905b815481529060010190602001808311610c7857829003601f168201915b5050505050905090565b6000610cb3610cac6124d9565b84846124e1565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d136124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d999061448e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610e766124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc9061448e565b60405180910390fd5b670de0b6b3a76400006103e86001610f1b610d01565b610f2591906144dd565b610f2f9190614566565b610f399190614566565b811015610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290614609565b60405180910390fd5b670de0b6b3a764000081610f8f91906144dd565b60088190555050565b6000610fa58484846126ac565b61106684610fb16124d9565b611061856040518060600160405280602881526020016153e560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110176124d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342a9092919063ffffffff16565b6124e1565b600190509392505050565b60006012905090565b60006111236110876124d9565b8461111e85600160006110986124d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247b90919063ffffffff16565b6124e1565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112296124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af9061448e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113836124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114099061448e565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61143c6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c29061448e565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61152e6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b49061448e565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546115e59190614629565b6115ef9190614629565b6010819055506023601054111561163b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611632906146cb565b60405180910390fd5b505050565b6116486124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce9061448e565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117486124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce9061448e565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461180390614410565b80601f016020809104026020016040519081016040528092919081815260200182805461182f90614410565b801561187c5780601f106118515761010080835404028352916020019161187c565b820191906000526020600020905b81548152906001019060200180831161185f57829003601f168201915b5050505050905090565b61188e6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119149061448e565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a39061475d565b60405180910390fd5b6119b6828261348e565b5050565b60135481565b601a5481565b60175481565b6000611a8f6119d96124d9565b84611a8a8560405180606001604052806025815260200161540d6025913960016000611a036124d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342a9092919063ffffffff16565b6124e1565b6001905092915050565b60115481565b6000611ab3611aac6124d9565b84846126ac565b6001905092915050565b611ac56124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b9061448e565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611c4f6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd59061448e565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d7b91906140e8565b60405180910390a25050565b611d8f6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e159061448e565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611e469190614629565b611e509190614629565b60148190555060236014541115611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e93906146cb565b60405180910390fd5b505050565b611ea96124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f9061448e565b60405180910390fd5b670de0b6b3a76400006103e86001611f4e610d01565b611f5891906144dd565b611f629190614566565b611f6c9190614566565b811015611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa5906147ef565b60405180910390fd5b670de0b6b3a764000081611fc291906144dd565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000611fee6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120749061448e565b60405180910390fd5b620186a0600161208b610d01565b61209591906144dd565b61209f9190614566565b8210156120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d890614881565b60405180910390fd5b6103e860056120ee610d01565b6120f891906144dd565b6121029190614566565b821115612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90614913565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006121f16124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612280576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122779061448e565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6122b06124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123369061448e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a6906149a5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b600080828461248a9190614629565b9050838110156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614a11565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890614aa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b890614b35565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161269f91906141b9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561271c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271390614bc7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561278c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278390614c59565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128305750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61286f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286690614ceb565b60405180910390fd5b6000811415612889576128848383600061352f565b613425565b600b60009054906101000a900460ff1615612f4d576128a6611716565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291457506128e4611716565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561294d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612987575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129a05750600560149054906101000a900460ff16155b15612f4c57600b60019054906101000a900460ff16612a9a57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a5a5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9090614d57565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c6357612ab7611716565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b3e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b9657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c625743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1490614e0f565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d065750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dad57600854811115612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4790614ea1565b60405180910390fd5b600a54612d5c836111d9565b82612d679190614629565b1115612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f90614f0d565b60405180910390fd5b612f4b565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e505750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9f57600854811115612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190614f9f565b60405180910390fd5b612f4a565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f4957600a54612efc836111d9565b82612f079190614629565b1115612f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3f90614f0d565b60405180910390fd5b5b5b5b5b5b6000612f58306111d9565b905060006009548210159050808015612f7d5750600b60029054906101000a900460ff165b8015612f965750600560149054906101000a900460ff16155b8015612fec5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130425750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130985750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130dc576001600560146101000a81548160ff0219169083151502179055506130c06137c4565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131925750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561319c57600090505b6000811561341557601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131ff57506000601454115b156132cc5761322c606461321e60145488613aab90919063ffffffff16565b613b2690919063ffffffff16565b90506014546016548261323f91906144dd565b6132499190614566565b6019600082825461325a9190614629565b925050819055506014546017548261327291906144dd565b61327c9190614566565b601a600082825461328d9190614629565b92505081905550601454601554826132a591906144dd565b6132af9190614566565b601860008282546132c09190614629565b925050819055506133f1565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332757506000601054115b156133f057613354606461334660105488613aab90919063ffffffff16565b613b2690919063ffffffff16565b90506010546012548261336791906144dd565b6133719190614566565b601960008282546133829190614629565b925050819055506010546013548261339a91906144dd565b6133a49190614566565b601a60008282546133b59190614629565b92505081905550601054601154826133cd91906144dd565b6133d79190614566565b601860008282546133e89190614629565b925050819055505b5b60008111156134065761340587308361352f565b5b80856134129190614fbf565b94505b61342087878761352f565b505050505b505050565b6000838311158290613472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134699190613fd2565b60405180910390fd5b50600083856134819190614fbf565b9050809150509392505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561359f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359690614bc7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360690614c59565b60405180910390fd5b61361a838383613b70565b613685816040518060600160405280602681526020016153bf602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613718816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137b791906141b9565b60405180910390a3505050565b60006137cf306111d9565b90506000601a546018546019546137e69190614629565b6137f09190614629565b90506000808314806138025750600082145b1561380f57505050613aa9565b601460095461381e91906144dd565b83111561383757601460095461383491906144dd565b92505b60006002836019548661384a91906144dd565b6138549190614566565b61385e9190614566565b905060006138758286613b7590919063ffffffff16565b9050600047905061388582613bbf565b600061389a8247613b7590919063ffffffff16565b905060006138c5876138b760185485613aab90919063ffffffff16565b613b2690919063ffffffff16565b905060006138f0886138e2601a5486613aab90919063ffffffff16565b613b2690919063ffffffff16565b905060008183856139019190614fbf565b61390b9190614fbf565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161396b90615024565b60006040518083038185875af1925050503d80600081146139a8576040519150601f19603f3d011682016040523d82523d6000602084013e6139ad565b606091505b5050809850506000871180156139c35750600081115b15613a10576139d28782613dfc565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613a0793929190615039565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a5690615024565b60006040518083038185875af1925050503d8060008114613a93576040519150601f19603f3d011682016040523d82523d6000602084013e613a98565b606091505b505080985050505050505050505050505b565b600080831415613abe5760009050613b20565b60008284613acc91906144dd565b9050828482613adb9190614566565b14613b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b12906150e2565b60405180910390fd5b809150505b92915050565b6000613b6883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ed6565b905092915050565b505050565b6000613bb783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061342a565b905092915050565b6000600267ffffffffffffffff811115613bdc57613bdb615102565b5b604051908082528060200260200182016040528015613c0a5781602001602082028036833780820191505090505b5090503081600081518110613c2257613c21615131565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ceb9190615175565b81600181518110613cff57613cfe615131565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d64307f0000000000000000000000000000000000000000000000000000000000000000846124e1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dc695949392919061529b565b600060405180830381600087803b158015613de057600080fd5b505af1158015613df4573d6000803e3d6000fd5b505050505050565b613e27307f0000000000000000000000000000000000000000000000000000000000000000846124e1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e8c969594939291906152f5565b60606040518083038185885af1158015613eaa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ecf919061536b565b5050505050565b60008083118290613f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f149190613fd2565b60405180910390fd5b5060008385613f2c9190614566565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f73578082015181840152602081019050613f58565b83811115613f82576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fa482613f39565b613fae8185613f44565b9350613fbe818560208601613f55565b613fc781613f88565b840191505092915050565b60006020820190508181036000830152613fec8184613f99565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061402482613ff9565b9050919050565b61403481614019565b811461403f57600080fd5b50565b6000813590506140518161402b565b92915050565b6000819050919050565b61406a81614057565b811461407557600080fd5b50565b60008135905061408781614061565b92915050565b600080604083850312156140a4576140a3613ff4565b5b60006140b285828601614042565b92505060206140c385828601614078565b9150509250929050565b60008115159050919050565b6140e2816140cd565b82525050565b60006020820190506140fd60008301846140d9565b92915050565b60006020828403121561411957614118613ff4565b5b600061412784828501614042565b91505092915050565b6000819050919050565b600061415561415061414b84613ff9565b614130565b613ff9565b9050919050565b60006141678261413a565b9050919050565b60006141798261415c565b9050919050565b6141898161416e565b82525050565b60006020820190506141a46000830184614180565b92915050565b6141b381614057565b82525050565b60006020820190506141ce60008301846141aa565b92915050565b6000602082840312156141ea576141e9613ff4565b5b60006141f884828501614078565b91505092915050565b60008060006060848603121561421a57614219613ff4565b5b600061422886828701614042565b935050602061423986828701614042565b925050604061424a86828701614078565b9150509250925092565b600060ff82169050919050565b61426a81614254565b82525050565b60006020820190506142856000830184614261565b92915050565b61429481614019565b82525050565b60006020820190506142af600083018461428b565b92915050565b6142be816140cd565b81146142c957600080fd5b50565b6000813590506142db816142b5565b92915050565b600080604083850312156142f8576142f7613ff4565b5b600061430685828601614042565b9250506020614317858286016142cc565b9150509250929050565b60008060006060848603121561433a57614339613ff4565b5b600061434886828701614078565b935050602061435986828701614078565b925050604061436a86828701614078565b9150509250925092565b60006020828403121561438a57614389613ff4565b5b6000614398848285016142cc565b91505092915050565b600080604083850312156143b8576143b7613ff4565b5b60006143c685828601614042565b92505060206143d785828601614042565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442857607f821691505b6020821081141561443c5761443b6143e1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614478602083613f44565b915061448382614442565b602082019050919050565b600060208201905081810360008301526144a78161446b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e882614057565b91506144f383614057565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452c5761452b6144ae565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061457182614057565b915061457c83614057565b92508261458c5761458b614537565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145f3602f83613f44565b91506145fe82614597565b604082019050919050565b60006020820190508181036000830152614622816145e6565b9050919050565b600061463482614057565b915061463f83614057565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614674576146736144ae565b5b828201905092915050565b7f4d757374206b656570206665657320617420333525206f72206c657373000000600082015250565b60006146b5601d83613f44565b91506146c08261467f565b602082019050919050565b600060208201905081810360008301526146e4816146a8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614747603983613f44565b9150614752826146eb565b604082019050919050565b600060208201905081810360008301526147768161473a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147d9602483613f44565b91506147e48261477d565b604082019050919050565b60006020820190508181036000830152614808816147cc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061486b603583613f44565b91506148768261480f565b604082019050919050565b6000602082019050818103600083015261489a8161485e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006148fd603483613f44565b9150614908826148a1565b604082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061498f602683613f44565b915061499a82614933565b604082019050919050565b600060208201905081810360008301526149be81614982565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006149fb601b83613f44565b9150614a06826149c5565b602082019050919050565b60006020820190508181036000830152614a2a816149ee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a8d602483613f44565b9150614a9882614a31565b604082019050919050565b60006020820190508181036000830152614abc81614a80565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b1f602283613f44565b9150614b2a82614ac3565b604082019050919050565b60006020820190508181036000830152614b4e81614b12565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614bb1602583613f44565b9150614bbc82614b55565b604082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c43602383613f44565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614cd5603183613f44565b9150614ce082614c79565b604082019050919050565b60006020820190508181036000830152614d0481614cc8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d41601683613f44565b9150614d4c82614d0b565b602082019050919050565b60006020820190508181036000830152614d7081614d34565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614df9604983613f44565b9150614e0482614d77565b606082019050919050565b60006020820190508181036000830152614e2881614dec565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e8b603583613f44565b9150614e9682614e2f565b604082019050919050565b60006020820190508181036000830152614eba81614e7e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ef7601383613f44565b9150614f0282614ec1565b602082019050919050565b60006020820190508181036000830152614f2681614eea565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f89603683613f44565b9150614f9482614f2d565b604082019050919050565b60006020820190508181036000830152614fb881614f7c565b9050919050565b6000614fca82614057565b9150614fd583614057565b925082821015614fe857614fe76144ae565b5b828203905092915050565b600081905092915050565b50565b600061500e600083614ff3565b915061501982614ffe565b600082019050919050565b600061502f82615001565b9150819050919050565b600060608201905061504e60008301866141aa565b61505b60208301856141aa565b61506860408301846141aa565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150cc602183613f44565b91506150d782615070565b604082019050919050565b600060208201905081810360008301526150fb816150bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061516f8161402b565b92915050565b60006020828403121561518b5761518a613ff4565b5b600061519984828501615160565b91505092915050565b6000819050919050565b60006151c76151c26151bd846151a2565b614130565b614057565b9050919050565b6151d7816151ac565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521281614019565b82525050565b60006152248383615209565b60208301905092915050565b6000602082019050919050565b6000615248826151dd565b61525281856151e8565b935061525d836151f9565b8060005b8381101561528e5781516152758882615218565b975061528083615230565b925050600181019050615261565b5085935050505092915050565b600060a0820190506152b060008301886141aa565b6152bd60208301876151ce565b81810360408301526152cf818661523d565b90506152de606083018561428b565b6152eb60808301846141aa565b9695505050505050565b600060c08201905061530a600083018961428b565b61531760208301886141aa565b61532460408301876151ce565b61533160608301866151ce565b61533e608083018561428b565b61534b60a08301846141aa565b979650505050505050565b60008151905061536581614061565b92915050565b60008060006060848603121561538457615383613ff4565b5b600061539286828701615356565b93505060206153a386828701615356565b92505060406153b486828701615356565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d92bb1bda4569b02a88edde30178e60e184d9ec457c03b5b2fe552304692cb3564736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102e85760003560e01c8063924de9b711610190578063c17b5b8c116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610b63578063f2fde38b14610b8e578063f637434214610bb7578063f8b45b0514610be2576102ef565b8063dd62ed3e14610ad0578063e2f4560514610b0d578063e884f26014610b38576102ef565b8063c17b5b8c146109c0578063c18bc195146109e9578063c876d0b914610a12578063c8c8ebe414610a3d578063d257b34f14610a68578063d85ba06314610aa5576102ef565b8063a457c2d711610149578063aacebbe311610123578063aacebbe314610906578063b62496f51461092f578063bbc0c7421461096c578063c024666814610997576102ef565b8063a457c2d714610861578063a8b9f94d1461089e578063a9059cbb146108c9576102ef565b8063924de9b71461076357806395d89b411461078c5780639a7a23d6146107b75780639c3b4fdc146107e05780639fccce321461080b578063a0d82dc514610836576102ef565b806349bd5a5e1161024f57806370a08231116102085780637571336a116101e25780637571336a146106cf5780638095d564146106f85780638a8c523c146107215780638da5cb5b14610738576102ef565b806370a0823114610650578063715018a61461068d578063751039fc146106a4576102ef565b806349bd5a5e1461053c5780634a62bb65146105675780634fbee193146105925780636a486a8e146105cf5780636b41ae0c146105fa5780636ddd171314610625576102ef565b80631a8145bb116102a15780631a8145bb146104185780631f3fed8f14610443578063203e727e1461046e57806323b872dd14610497578063313ce567146104d457806339509351146104ff576102ef565b806306fdde03146102f4578063095ea7b31461031f57806310d5de531461035c5780631694505e1461039957806318160ddd146103c45780631816467f146103ef576102ef565b366102ef57005b600080fd5b34801561030057600080fd5b50610309610c0d565b6040516103169190613fd2565b60405180910390f35b34801561032b57600080fd5b506103466004803603810190610341919061408d565b610c9f565b60405161035391906140e8565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190614103565b610cbd565b60405161039091906140e8565b60405180910390f35b3480156103a557600080fd5b506103ae610cdd565b6040516103bb919061418f565b60405180910390f35b3480156103d057600080fd5b506103d9610d01565b6040516103e691906141b9565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190614103565b610d0b565b005b34801561042457600080fd5b5061042d610e62565b60405161043a91906141b9565b60405180910390f35b34801561044f57600080fd5b50610458610e68565b60405161046591906141b9565b60405180910390f35b34801561047a57600080fd5b50610495600480360381019061049091906141d4565b610e6e565b005b3480156104a357600080fd5b506104be60048036038101906104b99190614201565b610f98565b6040516104cb91906140e8565b60405180910390f35b3480156104e057600080fd5b506104e9611071565b6040516104f69190614270565b60405180910390f35b34801561050b57600080fd5b506105266004803603810190610521919061408d565b61107a565b60405161053391906140e8565b60405180910390f35b34801561054857600080fd5b5061055161112d565b60405161055e919061429a565b60405180910390f35b34801561057357600080fd5b5061057c611151565b60405161058991906140e8565b60405180910390f35b34801561059e57600080fd5b506105b960048036038101906105b49190614103565b611164565b6040516105c691906140e8565b60405180910390f35b3480156105db57600080fd5b506105e46111ba565b6040516105f191906141b9565b60405180910390f35b34801561060657600080fd5b5061060f6111c0565b60405161061c91906141b9565b60405180910390f35b34801561063157600080fd5b5061063a6111c6565b60405161064791906140e8565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190614103565b6111d9565b60405161068491906141b9565b60405180910390f35b34801561069957600080fd5b506106a2611221565b005b3480156106b057600080fd5b506106b9611379565b6040516106c691906140e8565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f191906142e1565b611434565b005b34801561070457600080fd5b5061071f600480360381019061071a9190614321565b611526565b005b34801561072d57600080fd5b50610736611640565b005b34801561074457600080fd5b5061074d611716565b60405161075a919061429a565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190614374565b611740565b005b34801561079857600080fd5b506107a16117f4565b6040516107ae9190613fd2565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d991906142e1565b611886565b005b3480156107ec57600080fd5b506107f56119ba565b60405161080291906141b9565b60405180910390f35b34801561081757600080fd5b506108206119c0565b60405161082d91906141b9565b60405180910390f35b34801561084257600080fd5b5061084b6119c6565b60405161085891906141b9565b60405180910390f35b34801561086d57600080fd5b506108886004803603810190610883919061408d565b6119cc565b60405161089591906140e8565b60405180910390f35b3480156108aa57600080fd5b506108b3611a99565b6040516108c091906141b9565b60405180910390f35b3480156108d557600080fd5b506108f060048036038101906108eb919061408d565b611a9f565b6040516108fd91906140e8565b60405180910390f35b34801561091257600080fd5b5061092d60048036038101906109289190614103565b611abd565b005b34801561093b57600080fd5b5061095660048036038101906109519190614103565b611c14565b60405161096391906140e8565b60405180910390f35b34801561097857600080fd5b50610981611c34565b60405161098e91906140e8565b60405180910390f35b3480156109a357600080fd5b506109be60048036038101906109b991906142e1565b611c47565b005b3480156109cc57600080fd5b506109e760048036038101906109e29190614321565b611d87565b005b3480156109f557600080fd5b50610a106004803603810190610a0b91906141d4565b611ea1565b005b348015610a1e57600080fd5b50610a27611fcb565b604051610a3491906140e8565b60405180910390f35b348015610a4957600080fd5b50610a52611fde565b604051610a5f91906141b9565b60405180910390f35b348015610a7457600080fd5b50610a8f6004803603810190610a8a91906141d4565b611fe4565b604051610a9c91906140e8565b60405180910390f35b348015610ab157600080fd5b50610aba612154565b604051610ac791906141b9565b60405180910390f35b348015610adc57600080fd5b50610af76004803603810190610af291906143a1565b61215a565b604051610b0491906141b9565b60405180910390f35b348015610b1957600080fd5b50610b226121e1565b604051610b2f91906141b9565b60405180910390f35b348015610b4457600080fd5b50610b4d6121e7565b604051610b5a91906140e8565b60405180910390f35b348015610b6f57600080fd5b50610b786122a2565b604051610b8591906141b9565b60405180910390f35b348015610b9a57600080fd5b50610bb56004803603810190610bb09190614103565b6122a8565b005b348015610bc357600080fd5b50610bcc61246f565b604051610bd991906141b9565b60405180910390f35b348015610bee57600080fd5b50610bf7612475565b604051610c0491906141b9565b60405180910390f35b606060038054610c1c90614410565b80601f0160208091040260200160405190810160405280929190818152602001828054610c4890614410565b8015610c955780601f10610c6a57610100808354040283529160200191610c95565b820191906000526020600020905b815481529060010190602001808311610c7857829003601f168201915b5050505050905090565b6000610cb3610cac6124d9565b84846124e1565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d136124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610da2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d999061448e565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0db17895a9d092fb3ca24d626f2150dd80c185b0706b36f1040ee239f56cb87160405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610e766124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efc9061448e565b60405180910390fd5b670de0b6b3a76400006103e86001610f1b610d01565b610f2591906144dd565b610f2f9190614566565b610f399190614566565b811015610f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7290614609565b60405180910390fd5b670de0b6b3a764000081610f8f91906144dd565b60088190555050565b6000610fa58484846126ac565b61106684610fb16124d9565b611061856040518060600160405280602881526020016153e560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110176124d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342a9092919063ffffffff16565b6124e1565b600190509392505050565b60006012905090565b60006111236110876124d9565b8461111e85600160006110986124d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247b90919063ffffffff16565b6124e1565b6001905092915050565b7f000000000000000000000000238c70da9644530eaf2f4204c5435c8b19cf7e4b81565b600b60009054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b60155481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112296124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af9061448e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006113836124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611412576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114099061448e565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61143c6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c29061448e565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61152e6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b49061448e565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546115e59190614629565b6115ef9190614629565b6010819055506023601054111561163b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611632906146cb565b60405180910390fd5b505050565b6116486124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ce9061448e565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117486124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce9061448e565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461180390614410565b80601f016020809104026020016040519081016040528092919081815260200182805461182f90614410565b801561187c5780601f106118515761010080835404028352916020019161187c565b820191906000526020600020905b81548152906001019060200180831161185f57829003601f168201915b5050505050905090565b61188e6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119149061448e565b60405180910390fd5b7f000000000000000000000000238c70da9644530eaf2f4204c5435c8b19cf7e4b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a39061475d565b60405180910390fd5b6119b6828261348e565b5050565b60135481565b601a5481565b60175481565b6000611a8f6119d96124d9565b84611a8a8560405180606001604052806025815260200161540d6025913960016000611a036124d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342a9092919063ffffffff16565b6124e1565b6001905092915050565b60115481565b6000611ab3611aac6124d9565b84846126ac565b6001905092915050565b611ac56124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b9061448e565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6760405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611c4f6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd59061448e565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d7b91906140e8565b60405180910390a25050565b611d8f6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e159061448e565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611e469190614629565b611e509190614629565b60148190555060236014541115611e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e93906146cb565b60405180910390fd5b505050565b611ea96124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2f9061448e565b60405180910390fd5b670de0b6b3a76400006103e86001611f4e610d01565b611f5891906144dd565b611f629190614566565b611f6c9190614566565b811015611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa5906147ef565b60405180910390fd5b670de0b6b3a764000081611fc291906144dd565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000611fee6124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120749061448e565b60405180910390fd5b620186a0600161208b610d01565b61209591906144dd565b61209f9190614566565b8210156120e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d890614881565b60405180910390fd5b6103e860056120ee610d01565b6120f891906144dd565b6121029190614566565b821115612144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213b90614913565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60006121f16124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612280576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122779061448e565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6122b06124d9565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461233f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123369061448e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a6906149a5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b600080828461248a9190614629565b9050838110156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c690614a11565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890614aa3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b890614b35565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161269f91906141b9565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561271c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271390614bc7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561278c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278390614c59565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128305750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61286f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286690614ceb565b60405180910390fd5b6000811415612889576128848383600061352f565b613425565b600b60009054906101000a900460ff1615612f4d576128a6611716565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291457506128e4611716565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561294d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612987575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129a05750600560149054906101000a900460ff16155b15612f4c57600b60019054906101000a900460ff16612a9a57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a5a5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9090614d57565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c6357612ab7611716565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b3e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b9657507f000000000000000000000000238c70da9644530eaf2f4204c5435c8b19cf7e4b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c625743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c1490614e0f565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d065750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dad57600854811115612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4790614ea1565b60405180910390fd5b600a54612d5c836111d9565b82612d679190614629565b1115612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f90614f0d565b60405180910390fd5b612f4b565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e505750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9f57600854811115612e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e9190614f9f565b60405180910390fd5b612f4a565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f4957600a54612efc836111d9565b82612f079190614629565b1115612f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3f90614f0d565b60405180910390fd5b5b5b5b5b5b6000612f58306111d9565b905060006009548210159050808015612f7d5750600b60029054906101000a900460ff165b8015612f965750600560149054906101000a900460ff16155b8015612fec5750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130425750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130985750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130dc576001600560146101000a81548160ff0219169083151502179055506130c06137c4565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131925750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561319c57600090505b6000811561341557601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131ff57506000601454115b156132cc5761322c606461321e60145488613aab90919063ffffffff16565b613b2690919063ffffffff16565b90506014546016548261323f91906144dd565b6132499190614566565b6019600082825461325a9190614629565b925050819055506014546017548261327291906144dd565b61327c9190614566565b601a600082825461328d9190614629565b92505081905550601454601554826132a591906144dd565b6132af9190614566565b601860008282546132c09190614629565b925050819055506133f1565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332757506000601054115b156133f057613354606461334660105488613aab90919063ffffffff16565b613b2690919063ffffffff16565b90506010546012548261336791906144dd565b6133719190614566565b601960008282546133829190614629565b925050819055506010546013548261339a91906144dd565b6133a49190614566565b601a60008282546133b59190614629565b92505081905550601054601154826133cd91906144dd565b6133d79190614566565b601860008282546133e89190614629565b925050819055505b5b60008111156134065761340587308361352f565b5b80856134129190614fbf565b94505b61342087878761352f565b505050505b505050565b6000838311158290613472576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134699190613fd2565b60405180910390fd5b50600083856134819190614fbf565b9050809150509392505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561359f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161359690614bc7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561360f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360690614c59565b60405180910390fd5b61361a838383613b70565b613685816040518060600160405280602681526020016153bf602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461342a9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613718816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461247b90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137b791906141b9565b60405180910390a3505050565b60006137cf306111d9565b90506000601a546018546019546137e69190614629565b6137f09190614629565b90506000808314806138025750600082145b1561380f57505050613aa9565b601460095461381e91906144dd565b83111561383757601460095461383491906144dd565b92505b60006002836019548661384a91906144dd565b6138549190614566565b61385e9190614566565b905060006138758286613b7590919063ffffffff16565b9050600047905061388582613bbf565b600061389a8247613b7590919063ffffffff16565b905060006138c5876138b760185485613aab90919063ffffffff16565b613b2690919063ffffffff16565b905060006138f0886138e2601a5486613aab90919063ffffffff16565b613b2690919063ffffffff16565b905060008183856139019190614fbf565b61390b9190614fbf565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161396b90615024565b60006040518083038185875af1925050503d80600081146139a8576040519150601f19603f3d011682016040523d82523d6000602084013e6139ad565b606091505b5050809850506000871180156139c35750600081115b15613a10576139d28782613dfc565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613a0793929190615039565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a5690615024565b60006040518083038185875af1925050503d8060008114613a93576040519150601f19603f3d011682016040523d82523d6000602084013e613a98565b606091505b505080985050505050505050505050505b565b600080831415613abe5760009050613b20565b60008284613acc91906144dd565b9050828482613adb9190614566565b14613b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b12906150e2565b60405180910390fd5b809150505b92915050565b6000613b6883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613ed6565b905092915050565b505050565b6000613bb783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061342a565b905092915050565b6000600267ffffffffffffffff811115613bdc57613bdb615102565b5b604051908082528060200260200182016040528015613c0a5781602001602082028036833780820191505090505b5090503081600081518110613c2257613c21615131565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ceb9190615175565b81600181518110613cff57613cfe615131565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d64307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124e1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613dc695949392919061529b565b600060405180830381600087803b158015613de057600080fd5b505af1158015613df4573d6000803e3d6000fd5b505050505050565b613e27307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124e1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e8c969594939291906152f5565b60606040518083038185885af1158015613eaa573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ecf919061536b565b5050505050565b60008083118290613f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f149190613fd2565b60405180910390fd5b5060008385613f2c9190614566565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f73578082015181840152602081019050613f58565b83811115613f82576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fa482613f39565b613fae8185613f44565b9350613fbe818560208601613f55565b613fc781613f88565b840191505092915050565b60006020820190508181036000830152613fec8184613f99565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061402482613ff9565b9050919050565b61403481614019565b811461403f57600080fd5b50565b6000813590506140518161402b565b92915050565b6000819050919050565b61406a81614057565b811461407557600080fd5b50565b60008135905061408781614061565b92915050565b600080604083850312156140a4576140a3613ff4565b5b60006140b285828601614042565b92505060206140c385828601614078565b9150509250929050565b60008115159050919050565b6140e2816140cd565b82525050565b60006020820190506140fd60008301846140d9565b92915050565b60006020828403121561411957614118613ff4565b5b600061412784828501614042565b91505092915050565b6000819050919050565b600061415561415061414b84613ff9565b614130565b613ff9565b9050919050565b60006141678261413a565b9050919050565b60006141798261415c565b9050919050565b6141898161416e565b82525050565b60006020820190506141a46000830184614180565b92915050565b6141b381614057565b82525050565b60006020820190506141ce60008301846141aa565b92915050565b6000602082840312156141ea576141e9613ff4565b5b60006141f884828501614078565b91505092915050565b60008060006060848603121561421a57614219613ff4565b5b600061422886828701614042565b935050602061423986828701614042565b925050604061424a86828701614078565b9150509250925092565b600060ff82169050919050565b61426a81614254565b82525050565b60006020820190506142856000830184614261565b92915050565b61429481614019565b82525050565b60006020820190506142af600083018461428b565b92915050565b6142be816140cd565b81146142c957600080fd5b50565b6000813590506142db816142b5565b92915050565b600080604083850312156142f8576142f7613ff4565b5b600061430685828601614042565b9250506020614317858286016142cc565b9150509250929050565b60008060006060848603121561433a57614339613ff4565b5b600061434886828701614078565b935050602061435986828701614078565b925050604061436a86828701614078565b9150509250925092565b60006020828403121561438a57614389613ff4565b5b6000614398848285016142cc565b91505092915050565b600080604083850312156143b8576143b7613ff4565b5b60006143c685828601614042565b92505060206143d785828601614042565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061442857607f821691505b6020821081141561443c5761443b6143e1565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614478602083613f44565b915061448382614442565b602082019050919050565b600060208201905081810360008301526144a78161446b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144e882614057565b91506144f383614057565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561452c5761452b6144ae565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061457182614057565b915061457c83614057565b92508261458c5761458b614537565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145f3602f83613f44565b91506145fe82614597565b604082019050919050565b60006020820190508181036000830152614622816145e6565b9050919050565b600061463482614057565b915061463f83614057565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614674576146736144ae565b5b828201905092915050565b7f4d757374206b656570206665657320617420333525206f72206c657373000000600082015250565b60006146b5601d83613f44565b91506146c08261467f565b602082019050919050565b600060208201905081810360008301526146e4816146a8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614747603983613f44565b9150614752826146eb565b604082019050919050565b600060208201905081810360008301526147768161473a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006147d9602483613f44565b91506147e48261477d565b604082019050919050565b60006020820190508181036000830152614808816147cc565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061486b603583613f44565b91506148768261480f565b604082019050919050565b6000602082019050818103600083015261489a8161485e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006148fd603483613f44565b9150614908826148a1565b604082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061498f602683613f44565b915061499a82614933565b604082019050919050565b600060208201905081810360008301526149be81614982565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006149fb601b83613f44565b9150614a06826149c5565b602082019050919050565b60006020820190508181036000830152614a2a816149ee565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614a8d602483613f44565b9150614a9882614a31565b604082019050919050565b60006020820190508181036000830152614abc81614a80565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b1f602283613f44565b9150614b2a82614ac3565b604082019050919050565b60006020820190508181036000830152614b4e81614b12565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614bb1602583613f44565b9150614bbc82614b55565b604082019050919050565b60006020820190508181036000830152614be081614ba4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614c43602383613f44565b9150614c4e82614be7565b604082019050919050565b60006020820190508181036000830152614c7281614c36565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614cd5603183613f44565b9150614ce082614c79565b604082019050919050565b60006020820190508181036000830152614d0481614cc8565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d41601683613f44565b9150614d4c82614d0b565b602082019050919050565b60006020820190508181036000830152614d7081614d34565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614df9604983613f44565b9150614e0482614d77565b606082019050919050565b60006020820190508181036000830152614e2881614dec565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e8b603583613f44565b9150614e9682614e2f565b604082019050919050565b60006020820190508181036000830152614eba81614e7e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ef7601383613f44565b9150614f0282614ec1565b602082019050919050565b60006020820190508181036000830152614f2681614eea565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f89603683613f44565b9150614f9482614f2d565b604082019050919050565b60006020820190508181036000830152614fb881614f7c565b9050919050565b6000614fca82614057565b9150614fd583614057565b925082821015614fe857614fe76144ae565b5b828203905092915050565b600081905092915050565b50565b600061500e600083614ff3565b915061501982614ffe565b600082019050919050565b600061502f82615001565b9150819050919050565b600060608201905061504e60008301866141aa565b61505b60208301856141aa565b61506860408301846141aa565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150cc602183613f44565b91506150d782615070565b604082019050919050565b600060208201905081810360008301526150fb816150bf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061516f8161402b565b92915050565b60006020828403121561518b5761518a613ff4565b5b600061519984828501615160565b91505092915050565b6000819050919050565b60006151c76151c26151bd846151a2565b614130565b614057565b9050919050565b6151d7816151ac565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61521281614019565b82525050565b60006152248383615209565b60208301905092915050565b6000602082019050919050565b6000615248826151dd565b61525281856151e8565b935061525d836151f9565b8060005b8381101561528e5781516152758882615218565b975061528083615230565b925050600181019050615261565b5085935050505092915050565b600060a0820190506152b060008301886141aa565b6152bd60208301876151ce565b81810360408301526152cf818661523d565b90506152de606083018561428b565b6152eb60808301846141aa565b9695505050505050565b600060c08201905061530a600083018961428b565b61531760208301886141aa565b61532460408301876151ce565b61533160608301866151ce565b61533e608083018561428b565b61534b60a08301846141aa565b979650505050505050565b60008151905061536581614061565b92915050565b60008060006060848603121561538457615383613ff4565b5b600061539286828701615356565b93505060206153a386828701615356565b92505060406153b486828701615356565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d92bb1bda4569b02a88edde30178e60e184d9ec457c03b5b2fe552304692cb3564736f6c634300080b0033

Deployed Bytecode Sourcemap

29587:15382:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7688:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9862:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31115:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29666:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8811:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37745:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30829:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30789;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35327:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10514:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8652:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11279:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29724:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29992:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37919:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30646:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30681;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30072:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8983:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22190:148;;;;;;;;;;;;;:::i;:::-;;34541:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35794:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36144:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34340:148;;;;;;;;;;;;;:::i;:::-;;21546:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36035:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7908:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37076:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30612:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30869:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30754:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12001:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30541:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9324:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37528:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31338:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30032:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36885:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36510:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35570:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30458:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29876:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34932:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30507:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9563:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29918:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34723:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30575:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22494:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30716:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29958:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7688:100;7742:13;7775:5;7768:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7688:100;:::o;9862:169::-;9945:4;9962:39;9971:12;:10;:12::i;:::-;9985:7;9994:6;9962:8;:39::i;:::-;10019:4;10012:11;;9862:169;;;;:::o;31115:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29666:51::-;;;:::o;8811:108::-;8872:7;8899:12;;8892:19;;8811:108;:::o;37745:157::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37852:9:::1;;;;;;;;;;;37824:38;;37841:9;37824:38;;;;;;;;;;;;37885:9;37873;;:21;;;;;;;;;;;;;;;;;;37745:157:::0;:::o;30829:33::-;;;;:::o;30789:::-;;;;:::o;35327:234::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35446:4:::1;35440;35436:1;35420:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35419:31;;;;:::i;:::-;35409:6;:41;;35401:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35546:6;35536;:17;;;;:::i;:::-;35513:20;:40;;;;35327:234:::0;:::o;10514:355::-;10654:4;10671:36;10681:6;10689:9;10700:6;10671:9;:36::i;:::-;10718:121;10727:6;10735:12;:10;:12::i;:::-;10749:89;10787:6;10749:89;;;;;;;;;;;;;;;;;:11;:19;10761:6;10749:19;;;;;;;;;;;;;;;:33;10769:12;:10;:12::i;:::-;10749:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10718:8;:121::i;:::-;10857:4;10850:11;;10514:355;;;;;:::o;8652:93::-;8710:5;8735:2;8728:9;;8652:93;:::o;11279:218::-;11367:4;11384:83;11393:12;:10;:12::i;:::-;11407:7;11416:50;11455:10;11416:11;:25;11428:12;:10;:12::i;:::-;11416:25;;;;;;;;;;;;;;;:34;11442:7;11416:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11384:8;:83::i;:::-;11485:4;11478:11;;11279:218;;;;:::o;29724:38::-;;;:::o;29992:33::-;;;;;;;;;;;;;:::o;37919:125::-;37984:4;38008:19;:28;38028:7;38008:28;;;;;;;;;;;;;;;;;;;;;;;;;38001:35;;37919:125;;;:::o;30646:28::-;;;;:::o;30681:::-;;;;:::o;30072:31::-;;;;;;;;;;;;;:::o;8983:127::-;9057:7;9084:9;:18;9094:7;9084:18;;;;;;;;;;;;;;;;9077:25;;8983:127;;;:::o;22190:148::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22297:1:::1;22260:40;;22281:6;;;;;;;;;;;22260:40;;;;;;;;;;;;22328:1;22311:6;;:19;;;;;;;;;;;;;;;;;;22190:148::o:0;34541:120::-;34593:4;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34626:5:::1;34609:14;;:22;;;;;;;;;;;;;;;;;;34649:4;34642:11;;34541:120:::0;:::o;35794:144::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35926:4:::1;35884:31;:39;35916:6;35884:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35794:144:::0;;:::o;36144:357::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36272:10:::1;36257:12;:25;;;;36311:13;36293:15;:31;;;;36347:7;36335:9;:19;;;;36413:9;;36395:15;;36380:12;;:30;;;;:::i;:::-;:42;;;;:::i;:::-;36365:12;:57;;;;36457:2;36441:12;;:18;;36433:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36144:357:::0;;;:::o;34340:148::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34411:4:::1;34395:13;;:20;;;;;;;;;;;;;;;;;;34440:4;34426:11;;:18;;;;;;;;;;;;;;;;;;34468:12;34455:10;:25;;;;34340:148::o:0;21546:79::-;21584:7;21611:6;;;;;;;;;;;21604:13;;21546:79;:::o;36035:101::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36121:7:::1;36107:11;;:21;;;;;;;;;;;;;;;;;;36035:101:::0;:::o;7908:104::-;7964:13;7997:7;7990:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7908:104;:::o;37076:245::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37183:13:::1;37175:21;;:4;:21;;;;37167:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;37272:41;37301:4;37307:5;37272:28;:41::i;:::-;37076:245:::0;;:::o;30612:24::-;;;;:::o;30869:27::-;;;;:::o;30754:25::-;;;;:::o;12001:269::-;12094:4;12111:129;12120:12;:10;:12::i;:::-;12134:7;12143:96;12182:15;12143:96;;;;;;;;;;;;;;;;;:11;:25;12155:12;:10;:12::i;:::-;12143:25;;;;;;;;;;;;;;;:34;12169:7;12143:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12111:8;:129::i;:::-;12258:4;12251:11;;12001:269;;;;:::o;30541:27::-;;;;:::o;9324:175::-;9410:4;9427:42;9437:12;:10;:12::i;:::-;9451:9;9462:6;9427:9;:42::i;:::-;9487:4;9480:11;;9324:175;;;;:::o;37528:208::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37665:15:::1;;;;;;;;;;;37622:59;;37645:18;37622:59;;;;;;;;;;;;37710:18;37692:15;;:36;;;;;;;;;;;;;;;;;;37528:208:::0;:::o;31338:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;30032:33::-;;;;;;;;;;;;;:::o;36885:182::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37001:8:::1;36970:19;:28;36990:7;36970:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37041:7;37025:34;;;37050:8;37025:34;;;;;;:::i;:::-;;;;;;;;36885:182:::0;;:::o;36510:366::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36640:10:::1;36624:13;:26;;;;36680:13;36661:16;:32;;;;36717:7;36704:10;:20;;;;36786:10;;36767:16;;36751:13;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;36735:13;:61;;;;36832:2;36815:13;;:19;;36807:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36510:366:::0;;;:::o;35570:215::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35692:4:::1;35686;35682:1;35666:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35665:31;;;;:::i;:::-;35655:6;:41;;35647:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35770:6;35760;:17;;;;:::i;:::-;35748:9;:29;;;;35570:215:::0;:::o;30458:39::-;;;;;;;;;;;;;:::o;29876:35::-;;;;:::o;34932:386::-;35013:4;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35070:6:::1;35066:1;35050:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35037:9;:39;;35029:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35186:4;35182:1;35166:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35153:9;:37;;35145:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35279:9;35258:18;:30;;;;35306:4;35299:11;;34932:386:::0;;;:::o;30507:27::-;;;;:::o;9563:151::-;9652:7;9679:11;:18;9691:5;9679:18;;;;;;;;;;;;;;;:27;9698:7;9679:27;;;;;;;;;;;;;;;;9672:34;;9563:151;;;;:::o;29918:33::-;;;;:::o;34723:134::-;34783:4;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34822:5:::1;34799:20;;:28;;;;;;;;;;;;;;;;;;34845:4;34838:11;;34723:134:::0;:::o;30575:30::-;;;;:::o;22494:244::-;21769:12;:10;:12::i;:::-;21759:22;;:6;;;;;;;;;;;:22;;;21751:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22603:1:::1;22583:22;;:8;:22;;;;22575:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22693:8;22664:38;;22685:6;;;;;;;;;;;22664:38;;;;;;;;;;;;22722:8;22713:6;;:17;;;;;;;;;;;;;;;;;;22494:244:::0;:::o;30716:31::-;;;;:::o;29958:24::-;;;;:::o;16578:182::-;16636:7;16656:9;16672:1;16668;:5;;;;:::i;:::-;16656:17;;16697:1;16692;:6;;16684:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16751:1;16744:8;;;16578:182;;;;:::o;379:98::-;432:7;459:10;452:17;;379:98;:::o;15197:381::-;15350:1;15333:19;;:5;:19;;;;15325:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15431:1;15412:21;;:7;:21;;;;15404:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15516:6;15486:11;:18;15498:5;15486:18;;;;;;;;;;;;;;;:27;15505:7;15486:27;;;;;;;;;;;;;;;:36;;;;15554:7;15538:32;;15547:5;15538:32;;;15563:6;15538:32;;;;;;:::i;:::-;;;;;;;;15197:381;;;:::o;38104:4150::-;38252:1;38236:18;;:4;:18;;;;38228:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38329:1;38315:16;;:2;:16;;;;38307:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38391:10;:14;38402:2;38391:14;;;;;;;;;;;;;;;;;;;;;;;;;38390:15;:36;;;;;38410:10;:16;38421:4;38410:16;;;;;;;;;;;;;;;;;;;;;;;;;38409:17;38390:36;38382:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;38505:1;38495:6;:11;38492:92;;;38523:28;38539:4;38545:2;38549:1;38523:15;:28::i;:::-;38566:7;;38492:92;38600:14;;;;;;;;;;;38597:1812;;;38660:7;:5;:7::i;:::-;38652:15;;:4;:15;;;;:49;;;;;38694:7;:5;:7::i;:::-;38688:13;;:2;:13;;;;38652:49;:86;;;;;38736:1;38722:16;;:2;:16;;;;38652:86;:128;;;;;38773:6;38759:21;;:2;:21;;;;38652:128;:158;;;;;38802:8;;;;;;;;;;;38801:9;38652:158;38630:1768;;;38848:13;;;;;;;;;;;38844:148;;38893:19;:25;38913:4;38893:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38922:19;:23;38942:2;38922:23;;;;;;;;;;;;;;;;;;;;;;;;;38893:52;38885:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38844:148;39151:20;;;;;;;;;;;39147:424;;;39205:7;:5;:7::i;:::-;39199:13;;:2;:13;;;;:47;;;;;39230:15;39216:30;;:2;:30;;;;39199:47;:79;;;;;39264:13;39250:28;;:2;:28;;;;39199:79;39195:357;;;39357:12;39314:28;:39;39343:9;39314:39;;;;;;;;;;;;;;;;:55;;39306:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;39516:12;39474:28;:39;39503:9;39474:39;;;;;;;;;;;;;;;:54;;;;39195:357;39147:424;39624:25;:31;39650:4;39624:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;39660:31;:35;39692:2;39660:35;;;;;;;;;;;;;;;;;;;;;;;;;39659:36;39624:71;39620:763;;;39742:20;;39732:6;:30;;39724:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39881:9;;39864:13;39874:2;39864:9;:13::i;:::-;39855:6;:22;;;;:::i;:::-;:35;;39847:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39620:763;;;39993:25;:29;40019:2;39993:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40027:31;:37;40059:4;40027:37;;;;;;;;;;;;;;;;;;;;;;;;;40026:38;39993:71;39989:394;;;40111:20;;40101:6;:30;;40093:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39989:394;;;40237:31;:35;40269:2;40237:35;;;;;;;;;;;;;;;;;;;;;;;;;40233:150;;40330:9;;40313:13;40323:2;40313:9;:13::i;:::-;40304:6;:22;;;;:::i;:::-;:35;;40296:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40233:150;39989:394;39620:763;38630:1768;38597:1812;40431:28;40462:24;40480:4;40462:9;:24::i;:::-;40431:55;;40500:12;40539:18;;40515:20;:42;;40500:57;;40589:7;:35;;;;;40613:11;;;;;;;;;;;40589:35;:61;;;;;40642:8;;;;;;;;;;;40641:9;40589:61;:110;;;;;40668:25;:31;40694:4;40668:31;;;;;;;;;;;;;;;;;;;;;;;;;40667:32;40589:110;:153;;;;;40717:19;:25;40737:4;40717:25;;;;;;;;;;;;;;;;;;;;;;;;;40716:26;40589:153;:194;;;;;40760:19;:23;40780:2;40760:23;;;;;;;;;;;;;;;;;;;;;;;;;40759:24;40589:194;40571:328;;;40821:4;40810:8;;:15;;;;;;;;;;;;;;;;;;40843:10;:8;:10::i;:::-;40882:5;40871:8;;:16;;;;;;;;;;;;;;;;;;40571:328;40913:12;40929:8;;;;;;;;;;;40928:9;40913:24;;41039:19;:25;41059:4;41039:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41068:19;:23;41088:2;41068:23;;;;;;;;;;;;;;;;;;;;;;;;;41039:52;41036:99;;;41118:5;41108:15;;41036:99;41148:12;41252:7;41249:951;;;41303:25;:29;41329:2;41303:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;41352:1;41336:13;;:17;41303:50;41299:748;;;41380:34;41410:3;41380:25;41391:13;;41380:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;41373:41;;41481:13;;41462:16;;41455:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;41433:18;;:61;;;;;;;:::i;:::-;;;;;;;;41549:13;;41536:10;;41529:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;41513:12;;:49;;;;;;;:::i;:::-;;;;;;;;41626:13;;41610;;41603:4;:20;;;;:::i;:::-;:36;;;;:::i;:::-;41581:18;;:58;;;;;;;:::i;:::-;;;;;;;;41299:748;;;41700:25;:31;41726:4;41700:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;41750:1;41735:12;;:16;41700:51;41697:350;;;41779:33;41808:3;41779:24;41790:12;;41779:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;41772:40;;41878:12;;41860:15;;41853:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;41831:18;;:59;;;;;;;:::i;:::-;;;;;;;;41944:12;;41932:9;;41925:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;41909:12;;:47;;;;;;;:::i;:::-;;;;;;;;42019:12;;42004;;41997:4;:19;;;;:::i;:::-;:34;;;;:::i;:::-;41975:18;;:56;;;;;;;:::i;:::-;;;;;;;;41697:350;41299:748;42074:1;42067:4;:8;42064:93;;;42099:42;42115:4;42129;42136;42099:15;:42::i;:::-;42064:93;42184:4;42174:14;;;;;:::i;:::-;;;41249:951;42213:33;42229:4;42235:2;42239:6;42213:15;:33::i;:::-;38217:4037;;;;38104:4150;;;;:::o;17484:193::-;17570:7;17603:1;17598;:6;;17606:12;17590:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17630:9;17646:1;17642;:5;;;;:::i;:::-;17630:17;;17668:1;17661:8;;;17484:193;;;;;:::o;37330:189::-;37447:5;37413:25;:31;37439:4;37413:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37505:5;37471:40;;37499:4;37471:40;;;;;;;;;;;;37330:189;;:::o;12761:575::-;12919:1;12901:20;;:6;:20;;;;12893:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13003:1;12982:23;;:9;:23;;;;12974:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13059:47;13080:6;13088:9;13099:6;13059:20;:47::i;:::-;13140:71;13162:6;13140:71;;;;;;;;;;;;;;;;;:9;:17;13150:6;13140:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13120:9;:17;13130:6;13120:17;;;;;;;;;;;;;;;:91;;;;13245:32;13270:6;13245:9;:20;13255:9;13245:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13222:9;:20;13232:9;13222:20;;;;;;;;;;;;;;;:55;;;;13310:9;13293:35;;13302:6;13293:35;;;13321:6;13293:35;;;;;;:::i;:::-;;;;;;;;12761:575;;;:::o;43398:1568::-;43437:23;43463:24;43481:4;43463:9;:24::i;:::-;43437:50;;43498:25;43568:12;;43547:18;;43526;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;43498:82;;43591:12;43639:1;43620:15;:20;:46;;;;43665:1;43644:17;:22;43620:46;43617:60;;;43669:7;;;;;43617:60;43732:2;43711:18;;:23;;;;:::i;:::-;43693:15;:41;43690:111;;;43787:2;43766:18;;:23;;;;:::i;:::-;43748:41;;43690:111;43863:23;43948:1;43928:17;43907:18;;43889:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;43863:86;;43960:26;43989:36;44009:15;43989;:19;;:36;;;;:::i;:::-;43960:65;;44039:25;44067:21;44039:49;;44102:36;44119:18;44102:16;:36::i;:::-;44153:18;44174:44;44200:17;44174:21;:25;;:44;;;;:::i;:::-;44153:65;;44232:23;44258:57;44297:17;44258:34;44273:18;;44258:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;44232:83;;44326:17;44346:51;44379:17;44346:28;44361:12;;44346:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;44326:71;;44408:23;44465:9;44447:15;44434:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;44408:66;;44512:1;44491:18;:22;;;;44545:1;44524:18;:22;;;;44572:1;44557:12;:16;;;;44608:9;;;;;;;;;;;44600:23;;44631:9;44600:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44587:58;;;;;44680:1;44662:15;:19;:42;;;;;44703:1;44685:15;:19;44662:42;44659:210;;;44720:46;44733:15;44750;44720:12;:46::i;:::-;44786:71;44801:18;44821:15;44838:18;;44786:71;;;;;;;;:::i;:::-;;;;;;;;44659:210;44903:15;;;;;;;;;;;44895:29;;44932:21;44895:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44882:76;;;;;43426:1540;;;;;;;;;;43398:1568;:::o;17937:473::-;17995:7;18245:1;18240;:6;18236:47;;;18270:1;18263:8;;;;18236:47;18296:9;18312:1;18308;:5;;;;:::i;:::-;18296:17;;18341:1;18336;18332;:5;;;;:::i;:::-;:10;18324:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18401:1;18394:8;;;17937:473;;;;;:::o;18887:132::-;18945:7;18972:39;18976:1;18979;18972:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18965:46;;18887:132;;;;:::o;16182:125::-;;;;:::o;17044:136::-;17102:7;17129:43;17133:1;17136;17129:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17122:50;;17044:136;;;;:::o;42263:597::-;42392:21;42430:1;42416:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42392:40;;42461:4;42443;42448:1;42443:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42487:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42477:4;42482:1;42477:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;42523:62;42540:4;42555:15;42573:11;42523:8;:62::i;:::-;42625:15;:66;;;42706:11;42732:1;42776:4;42803;42823:15;42625:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42318:542;42263:597;:::o;42869:520::-;43017:62;43034:4;43049:15;43067:11;43017:8;:62::i;:::-;43123:15;:31;;;43162:9;43195:4;43215:11;43241:1;43284;43335:4;43355:15;43123:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;42869:520;;:::o;19516:279::-;19602:7;19634:1;19630;:5;19637:12;19622:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19661:9;19677:1;19673;:5;;;;:::i;:::-;19661:17;;19786:1;19779:8;;;19516: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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:305::-;12561:3;12580:20;12598:1;12580:20;:::i;:::-;12575:25;;12614:20;12632:1;12614:20;:::i;:::-;12609:25;;12768:1;12700:66;12696:74;12693:1;12690:81;12687:107;;;12774:18;;:::i;:::-;12687:107;12818:1;12815;12811:9;12804:16;;12521:305;;;;:::o;12832:179::-;12972:31;12968:1;12960:6;12956:14;12949:55;12832:179;:::o;13017:366::-;13159:3;13180:67;13244:2;13239:3;13180:67;:::i;:::-;13173:74;;13256:93;13345:3;13256:93;:::i;:::-;13374:2;13369:3;13365:12;13358:19;;13017:366;;;:::o;13389:419::-;13555:4;13593:2;13582:9;13578:18;13570:26;;13642:9;13636:4;13632:20;13628:1;13617:9;13613:17;13606:47;13670:131;13796:4;13670:131;:::i;:::-;13662:139;;13389:419;;;:::o;13814:244::-;13954:34;13950:1;13942:6;13938:14;13931:58;14023:27;14018:2;14010:6;14006:15;13999:52;13814:244;:::o;14064:366::-;14206:3;14227:67;14291:2;14286:3;14227:67;:::i;:::-;14220:74;;14303:93;14392:3;14303:93;:::i;:::-;14421:2;14416:3;14412:12;14405:19;;14064:366;;;:::o;14436:419::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14689:9;14683:4;14679:20;14675:1;14664:9;14660:17;14653:47;14717:131;14843:4;14717:131;:::i;:::-;14709:139;;14436:419;;;:::o;14861:223::-;15001:34;14997:1;14989:6;14985:14;14978:58;15070:6;15065:2;15057:6;15053:15;15046:31;14861:223;:::o;15090:366::-;15232:3;15253:67;15317:2;15312:3;15253:67;:::i;:::-;15246:74;;15329:93;15418:3;15329:93;:::i;:::-;15447:2;15442:3;15438:12;15431:19;;15090:366;;;:::o;15462:419::-;15628:4;15666:2;15655:9;15651:18;15643:26;;15715:9;15709:4;15705:20;15701:1;15690:9;15686:17;15679:47;15743:131;15869:4;15743:131;:::i;:::-;15735:139;;15462:419;;;:::o;15887:240::-;16027:34;16023:1;16015:6;16011:14;16004:58;16096:23;16091:2;16083:6;16079:15;16072:48;15887:240;:::o;16133:366::-;16275:3;16296:67;16360:2;16355:3;16296:67;:::i;:::-;16289:74;;16372:93;16461:3;16372:93;:::i;:::-;16490:2;16485:3;16481:12;16474:19;;16133:366;;;:::o;16505:419::-;16671:4;16709:2;16698:9;16694:18;16686:26;;16758:9;16752:4;16748:20;16744:1;16733:9;16729:17;16722:47;16786:131;16912:4;16786:131;:::i;:::-;16778:139;;16505:419;;;:::o;16930:239::-;17070:34;17066:1;17058:6;17054:14;17047:58;17139:22;17134:2;17126:6;17122:15;17115:47;16930:239;:::o;17175:366::-;17317:3;17338:67;17402:2;17397:3;17338:67;:::i;:::-;17331:74;;17414:93;17503:3;17414:93;:::i;:::-;17532:2;17527:3;17523:12;17516:19;;17175:366;;;:::o;17547:419::-;17713:4;17751:2;17740:9;17736:18;17728:26;;17800:9;17794:4;17790:20;17786:1;17775:9;17771:17;17764:47;17828:131;17954:4;17828:131;:::i;:::-;17820:139;;17547:419;;;:::o;17972:225::-;18112:34;18108:1;18100:6;18096:14;18089:58;18181:8;18176:2;18168:6;18164:15;18157:33;17972:225;:::o;18203:366::-;18345:3;18366:67;18430:2;18425:3;18366:67;:::i;:::-;18359:74;;18442:93;18531:3;18442:93;:::i;:::-;18560:2;18555:3;18551:12;18544:19;;18203:366;;;:::o;18575:419::-;18741:4;18779:2;18768:9;18764:18;18756:26;;18828:9;18822:4;18818:20;18814:1;18803:9;18799:17;18792:47;18856:131;18982:4;18856:131;:::i;:::-;18848:139;;18575:419;;;:::o;19000:177::-;19140:29;19136:1;19128:6;19124:14;19117:53;19000:177;:::o;19183:366::-;19325:3;19346:67;19410:2;19405:3;19346:67;:::i;:::-;19339:74;;19422:93;19511:3;19422:93;:::i;:::-;19540:2;19535:3;19531:12;19524:19;;19183:366;;;:::o;19555:419::-;19721:4;19759:2;19748:9;19744:18;19736:26;;19808:9;19802:4;19798:20;19794:1;19783:9;19779:17;19772:47;19836:131;19962:4;19836:131;:::i;:::-;19828:139;;19555:419;;;:::o;19980:223::-;20120:34;20116:1;20108:6;20104:14;20097:58;20189:6;20184:2;20176:6;20172:15;20165:31;19980:223;:::o;20209:366::-;20351:3;20372:67;20436:2;20431:3;20372:67;:::i;:::-;20365:74;;20448:93;20537:3;20448:93;:::i;:::-;20566:2;20561:3;20557:12;20550:19;;20209:366;;;:::o;20581:419::-;20747:4;20785:2;20774:9;20770:18;20762:26;;20834:9;20828:4;20824:20;20820:1;20809:9;20805:17;20798:47;20862:131;20988:4;20862:131;:::i;:::-;20854:139;;20581:419;;;:::o;21006:221::-;21146:34;21142:1;21134:6;21130:14;21123:58;21215:4;21210:2;21202:6;21198:15;21191:29;21006:221;:::o;21233:366::-;21375:3;21396:67;21460:2;21455:3;21396:67;:::i;:::-;21389:74;;21472:93;21561:3;21472:93;:::i;:::-;21590:2;21585:3;21581:12;21574:19;;21233:366;;;:::o;21605:419::-;21771:4;21809:2;21798:9;21794:18;21786:26;;21858:9;21852:4;21848:20;21844:1;21833:9;21829:17;21822:47;21886:131;22012:4;21886:131;:::i;:::-;21878:139;;21605:419;;;:::o;22030:224::-;22170:34;22166:1;22158:6;22154:14;22147:58;22239:7;22234:2;22226:6;22222:15;22215:32;22030:224;:::o;22260:366::-;22402:3;22423:67;22487:2;22482:3;22423:67;:::i;:::-;22416:74;;22499:93;22588:3;22499:93;:::i;:::-;22617:2;22612:3;22608:12;22601:19;;22260:366;;;:::o;22632:419::-;22798:4;22836:2;22825:9;22821:18;22813:26;;22885:9;22879:4;22875:20;22871:1;22860:9;22856:17;22849:47;22913:131;23039:4;22913:131;:::i;:::-;22905:139;;22632:419;;;:::o;23057:222::-;23197:34;23193:1;23185:6;23181:14;23174:58;23266:5;23261:2;23253:6;23249:15;23242:30;23057:222;:::o;23285:366::-;23427:3;23448:67;23512:2;23507:3;23448:67;:::i;:::-;23441:74;;23524:93;23613:3;23524:93;:::i;:::-;23642:2;23637:3;23633:12;23626:19;;23285:366;;;:::o;23657:419::-;23823:4;23861:2;23850:9;23846:18;23838:26;;23910:9;23904:4;23900:20;23896:1;23885:9;23881:17;23874:47;23938:131;24064:4;23938:131;:::i;:::-;23930:139;;23657:419;;;:::o;24082:236::-;24222:34;24218:1;24210:6;24206:14;24199:58;24291:19;24286:2;24278:6;24274:15;24267:44;24082:236;:::o;24324:366::-;24466:3;24487:67;24551:2;24546:3;24487:67;:::i;:::-;24480:74;;24563:93;24652:3;24563:93;:::i;:::-;24681:2;24676:3;24672:12;24665:19;;24324:366;;;:::o;24696:419::-;24862:4;24900:2;24889:9;24885:18;24877:26;;24949:9;24943:4;24939:20;24935:1;24924:9;24920:17;24913:47;24977:131;25103:4;24977:131;:::i;:::-;24969:139;;24696:419;;;:::o;25121:172::-;25261:24;25257:1;25249:6;25245:14;25238:48;25121:172;:::o;25299:366::-;25441:3;25462:67;25526:2;25521:3;25462:67;:::i;:::-;25455:74;;25538:93;25627:3;25538:93;:::i;:::-;25656:2;25651:3;25647:12;25640:19;;25299:366;;;:::o;25671:419::-;25837:4;25875:2;25864:9;25860:18;25852:26;;25924:9;25918:4;25914:20;25910:1;25899:9;25895:17;25888:47;25952:131;26078:4;25952:131;:::i;:::-;25944:139;;25671:419;;;:::o;26096:297::-;26236:34;26232:1;26224:6;26220:14;26213:58;26305:34;26300:2;26292:6;26288:15;26281:59;26374:11;26369:2;26361:6;26357:15;26350:36;26096:297;:::o;26399:366::-;26541:3;26562:67;26626:2;26621:3;26562:67;:::i;:::-;26555:74;;26638:93;26727:3;26638:93;:::i;:::-;26756:2;26751:3;26747:12;26740:19;;26399:366;;;:::o;26771:419::-;26937:4;26975:2;26964:9;26960:18;26952:26;;27024:9;27018:4;27014:20;27010:1;26999:9;26995:17;26988:47;27052:131;27178:4;27052:131;:::i;:::-;27044:139;;26771:419;;;:::o;27196:240::-;27336:34;27332:1;27324:6;27320:14;27313:58;27405:23;27400:2;27392:6;27388:15;27381:48;27196:240;:::o;27442:366::-;27584:3;27605:67;27669:2;27664:3;27605:67;:::i;:::-;27598:74;;27681:93;27770:3;27681:93;:::i;:::-;27799:2;27794:3;27790:12;27783:19;;27442:366;;;:::o;27814:419::-;27980:4;28018:2;28007:9;28003:18;27995:26;;28067:9;28061:4;28057:20;28053:1;28042:9;28038:17;28031:47;28095:131;28221:4;28095:131;:::i;:::-;28087:139;;27814:419;;;:::o;28239:169::-;28379:21;28375:1;28367:6;28363:14;28356:45;28239:169;:::o;28414:366::-;28556:3;28577:67;28641:2;28636:3;28577:67;:::i;:::-;28570:74;;28653:93;28742:3;28653:93;:::i;:::-;28771:2;28766:3;28762:12;28755:19;;28414:366;;;:::o;28786:419::-;28952:4;28990:2;28979:9;28975:18;28967:26;;29039:9;29033:4;29029:20;29025:1;29014:9;29010:17;29003:47;29067:131;29193:4;29067:131;:::i;:::-;29059:139;;28786:419;;;:::o;29211:241::-;29351:34;29347:1;29339:6;29335:14;29328:58;29420:24;29415:2;29407:6;29403:15;29396:49;29211:241;:::o;29458:366::-;29600:3;29621:67;29685:2;29680:3;29621:67;:::i;:::-;29614:74;;29697:93;29786:3;29697:93;:::i;:::-;29815:2;29810:3;29806:12;29799:19;;29458:366;;;:::o;29830:419::-;29996:4;30034:2;30023:9;30019:18;30011:26;;30083:9;30077:4;30073:20;30069:1;30058:9;30054:17;30047:47;30111:131;30237:4;30111:131;:::i;:::-;30103:139;;29830:419;;;:::o;30255:191::-;30295:4;30315:20;30333:1;30315:20;:::i;:::-;30310:25;;30349:20;30367:1;30349:20;:::i;:::-;30344:25;;30388:1;30385;30382:8;30379:34;;;30393:18;;:::i;:::-;30379:34;30438:1;30435;30431:9;30423:17;;30255:191;;;;:::o;30452:147::-;30553:11;30590:3;30575:18;;30452:147;;;;:::o;30605:114::-;;:::o;30725:398::-;30884:3;30905:83;30986:1;30981:3;30905:83;:::i;:::-;30898:90;;30997:93;31086:3;30997:93;:::i;:::-;31115:1;31110:3;31106:11;31099:18;;30725:398;;;:::o;31129:379::-;31313:3;31335:147;31478:3;31335:147;:::i;:::-;31328:154;;31499:3;31492:10;;31129:379;;;:::o;31514:442::-;31663:4;31701:2;31690:9;31686:18;31678:26;;31714:71;31782:1;31771:9;31767:17;31758:6;31714:71;:::i;:::-;31795:72;31863:2;31852:9;31848:18;31839:6;31795:72;:::i;:::-;31877;31945:2;31934:9;31930:18;31921:6;31877:72;:::i;:::-;31514:442;;;;;;:::o;31962:220::-;32102:34;32098:1;32090:6;32086:14;32079:58;32171:3;32166:2;32158:6;32154:15;32147:28;31962:220;:::o;32188:366::-;32330:3;32351:67;32415:2;32410:3;32351:67;:::i;:::-;32344:74;;32427:93;32516:3;32427:93;:::i;:::-;32545:2;32540:3;32536:12;32529:19;;32188:366;;;:::o;32560:419::-;32726:4;32764:2;32753:9;32749:18;32741:26;;32813:9;32807:4;32803:20;32799:1;32788:9;32784:17;32777:47;32841:131;32967:4;32841:131;:::i;:::-;32833:139;;32560:419;;;:::o;32985:180::-;33033:77;33030:1;33023:88;33130:4;33127:1;33120:15;33154:4;33151:1;33144:15;33171:180;33219:77;33216:1;33209:88;33316:4;33313:1;33306:15;33340:4;33337:1;33330:15;33357:143;33414:5;33445:6;33439:13;33430:22;;33461:33;33488:5;33461:33;:::i;:::-;33357:143;;;;:::o;33506:351::-;33576:6;33625:2;33613:9;33604:7;33600:23;33596:32;33593:119;;;33631:79;;:::i;:::-;33593:119;33751:1;33776:64;33832:7;33823:6;33812:9;33808:22;33776:64;:::i;:::-;33766:74;;33722:128;33506:351;;;;:::o;33863:85::-;33908:7;33937:5;33926:16;;33863:85;;;:::o;33954:158::-;34012:9;34045:61;34063:42;34072:32;34098:5;34072:32;:::i;:::-;34063:42;:::i;:::-;34045:61;:::i;:::-;34032:74;;33954:158;;;:::o;34118:147::-;34213:45;34252:5;34213:45;:::i;:::-;34208:3;34201:58;34118:147;;:::o;34271:114::-;34338:6;34372:5;34366:12;34356:22;;34271:114;;;:::o;34391:184::-;34490:11;34524:6;34519:3;34512:19;34564:4;34559:3;34555:14;34540:29;;34391:184;;;;:::o;34581:132::-;34648:4;34671:3;34663:11;;34701:4;34696:3;34692:14;34684:22;;34581:132;;;:::o;34719:108::-;34796:24;34814:5;34796:24;:::i;:::-;34791:3;34784:37;34719:108;;:::o;34833:179::-;34902:10;34923:46;34965:3;34957:6;34923:46;:::i;:::-;35001:4;34996:3;34992:14;34978:28;;34833:179;;;;:::o;35018:113::-;35088:4;35120;35115:3;35111:14;35103:22;;35018:113;;;:::o;35167:732::-;35286:3;35315:54;35363:5;35315:54;:::i;:::-;35385:86;35464:6;35459:3;35385:86;:::i;:::-;35378:93;;35495:56;35545:5;35495:56;:::i;:::-;35574:7;35605:1;35590:284;35615:6;35612:1;35609:13;35590:284;;;35691:6;35685:13;35718:63;35777:3;35762:13;35718:63;:::i;:::-;35711:70;;35804:60;35857:6;35804:60;:::i;:::-;35794:70;;35650:224;35637:1;35634;35630:9;35625:14;;35590:284;;;35594:14;35890:3;35883:10;;35291:608;;;35167:732;;;;:::o;35905:831::-;36168:4;36206:3;36195:9;36191:19;36183:27;;36220:71;36288:1;36277:9;36273:17;36264:6;36220:71;:::i;:::-;36301:80;36377:2;36366:9;36362:18;36353:6;36301:80;:::i;:::-;36428:9;36422:4;36418:20;36413:2;36402:9;36398:18;36391:48;36456:108;36559:4;36550:6;36456:108;:::i;:::-;36448:116;;36574:72;36642:2;36631:9;36627:18;36618:6;36574:72;:::i;:::-;36656:73;36724:3;36713:9;36709:19;36700:6;36656:73;:::i;:::-;35905:831;;;;;;;;:::o;36742:807::-;36991:4;37029:3;37018:9;37014:19;37006:27;;37043:71;37111:1;37100:9;37096:17;37087:6;37043:71;:::i;:::-;37124:72;37192:2;37181:9;37177:18;37168:6;37124:72;:::i;:::-;37206:80;37282:2;37271:9;37267:18;37258:6;37206:80;:::i;:::-;37296;37372:2;37361:9;37357:18;37348:6;37296:80;:::i;:::-;37386:73;37454:3;37443:9;37439:19;37430:6;37386:73;:::i;:::-;37469;37537:3;37526:9;37522:19;37513:6;37469:73;:::i;:::-;36742:807;;;;;;;;;:::o;37555:143::-;37612:5;37643:6;37637:13;37628:22;;37659:33;37686:5;37659:33;:::i;:::-;37555:143;;;;:::o;37704:663::-;37792:6;37800;37808;37857:2;37845:9;37836:7;37832:23;37828:32;37825:119;;;37863:79;;:::i;:::-;37825:119;37983:1;38008:64;38064:7;38055:6;38044:9;38040:22;38008:64;:::i;:::-;37998:74;;37954:128;38121:2;38147:64;38203:7;38194:6;38183:9;38179:22;38147:64;:::i;:::-;38137:74;;38092:129;38260:2;38286:64;38342:7;38333:6;38322:9;38318:22;38286:64;:::i;:::-;38276:74;;38231:129;37704:663;;;;;:::o

Swarm Source

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