ETH Price: $3,358.95 (-2.73%)
Gas: 4 Gwei

Token

$FUND (BEFUND)
 

Overview

Max Total Supply

1,000,000,000,000 BEFUND

Holders

15

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
shitcoin4life.eth
Balance
4,704,000,000 BEFUND

Value
$0.00
0x70d2b05001574b81a95210e32138668555c0c944
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:
BEFUND

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-10
*/

/**


    sometimes many people want pseudo fun

    and forget to enjoy the meaning itself

    they forgot what they already got

*/
pragma solidity 0.8.9;
 
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 BEFUND is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address public marketingWallet;
    address public devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;
 
     // 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 buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public earlySellDevFee;
 
    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("$FUND", "BEFUND") {
 
        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 _buyMarketingFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 1;
 
        uint256 _sellMarketingFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 1;
 
        uint256 _earlySellLiquidityFee = 2;
        uint256 _earlySellMarketingFee = 1;
	    uint256 _earlySellDevFee = 1; 
        uint256 totalSupply = 1 * 1e12 * 1e18;
 
        maxTransactionAmount = totalSupply * 5 / 1000; // 0.5% maxTransactionAmountTxn
        maxWallet = totalSupply * 10 / 1000; // 1% maxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; // 0.1% swap wallet
 
        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
 
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
 
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	    earlySellDevFee = _earlySellDevFee;
 
        marketingWallet = address(owner()); // set as marketing wallet
        devWallet = address(owner()); // 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;
    }
 
    function setEarlySellTax(bool onoff) external onlyOwner  {
        enableEarlySellTax = onoff;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee, uint256 _earlySellLiquidityFee, uint256 _earlySellMarketingFee, uint256 _earlySellDevFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
	earlySellDevFee = _earlySellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 100, "Must keep fees at 25% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    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");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 1) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        // early sell logic
        bool isBuy = from == uniswapV2Pair;
        if (!isBuy && enableEarlySellTax) {
            if (_holderFirstBuyTimestamp[from] != 0 &&
                (_holderFirstBuyTimestamp[from] + (24 hours) >= block.timestamp))  {
                sellLiquidityFee = earlySellLiquidityFee;
                sellMarketingFee = earlySellMarketingFee;
		sellDevFee = earlySellDevFee;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            } else {
                sellLiquidityFee = 3;
                sellMarketingFee = 5;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        } else {
            if (_holderFirstBuyTimestamp[to] == 0) {
                _holderFirstBuyTimestamp[to] = block.timestamp;
            }
 
            if (!enableEarlySellTax) {
                sellLiquidityFee = 2;
                sellMarketingFee = 3;
		        sellDevFee = 2;
                sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
            }
        }
 
        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 * sellMarketingFee / 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 * buyMarketingFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
 
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
 
        if(contractBalance > swapTokensAtAmount * 20){
          contractBalance = swapTokensAtAmount * 20;
        }
 
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;
 
        swapTokensForEth(amountToSwapForETH); 
 
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
 
 
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
 
        (success,) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","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":"_marketingFee","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellDevFee","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600581526020017f2446554e440000000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f424546554e44000000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000c08565b5080600490805190602001906200013692919062000c08565b50505060006200014b620006d460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000216816001620006dc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029157600080fd5b505afa158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc919062000d22565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032f57600080fd5b505afa15801562000344573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036a919062000d22565b6040518363ffffffff1660e01b81526004016200038992919062000d65565b602060405180830381600087803b158015620003a457600080fd5b505af1158015620003b9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003df919062000d22565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200042760a0516001620006dc60201b60201c565b6200043c60a0516001620007d960201b60201c565b60006002905060006001905060006001905060006002905060006001905060006001905060006002905060006001905060006001905060006c0c9f2c9cd04674edea4000000090506103e860058262000496919062000dcb565b620004a2919062000e5b565b6008819055506103e8600a82620004ba919062000dcb565b620004c6919062000e5b565b600a81905550612710600a82620004de919062000dcb565b620004ea919062000e5b565b6009819055508960118190555088601281905550876013819055506013546012546011546200051a919062000e93565b62000526919062000e93565b60108190555086601581905550856016819055508460178190555060175460165460155462000556919062000e93565b62000562919062000e93565b601481905550836018819055508260198190555081601a819055506200058d6200087a60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005dd6200087a60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063f620006316200087a60201b60201c565b6001620008a460201b60201c565b62000652306001620008a460201b60201c565b6200066761dead6001620008a460201b60201c565b620006896200067b6200087a60201b60201c565b6001620006dc60201b60201c565b6200069c306001620006dc60201b60201c565b620006b161dead6001620006dc60201b60201c565b620006c33382620009f160201b60201c565b505050505050505050505062001124565b600033905090565b620006ec620006d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200077e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007759062000f51565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008b4620006d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000946576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093d9062000f51565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009e5919062000f90565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a64576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a5b9062000ffd565b60405180910390fd5b62000a786000838362000ba060201b60201c565b62000a948160025462000ba560201b620028a51790919060201c565b60028190555062000af2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000ba560201b620028a51790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b94919062001030565b60405180910390a35050565b505050565b600080828462000bb6919062000e93565b90508381101562000bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf5906200109d565b60405180910390fd5b8091505092915050565b82805462000c1690620010ee565b90600052602060002090601f01602090048101928262000c3a576000855562000c86565b82601f1062000c5557805160ff191683800117855562000c86565b8280016001018555821562000c86579182015b8281111562000c8557825182559160200191906001019062000c68565b5b50905062000c95919062000c99565b5090565b5b8082111562000cb457600081600090555060010162000c9a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cea8262000cbd565b9050919050565b62000cfc8162000cdd565b811462000d0857600080fd5b50565b60008151905062000d1c8162000cf1565b92915050565b60006020828403121562000d3b5762000d3a62000cb8565b5b600062000d4b8482850162000d0b565b91505092915050565b62000d5f8162000cdd565b82525050565b600060408201905062000d7c600083018562000d54565b62000d8b602083018462000d54565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000dd88262000d92565b915062000de58362000d92565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e215762000e2062000d9c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e688262000d92565b915062000e758362000d92565b92508262000e885762000e8762000e2c565b5b828204905092915050565b600062000ea08262000d92565b915062000ead8362000d92565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ee55762000ee462000d9c565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f3960208362000ef0565b915062000f468262000f01565b602082019050919050565b6000602082019050818103600083015262000f6c8162000f2a565b9050919050565b60008115159050919050565b62000f8a8162000f73565b82525050565b600060208201905062000fa7600083018462000f7f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fe5601f8362000ef0565b915062000ff28262000fad565b602082019050919050565b60006020820190508181036000830152620010188162000fd6565b9050919050565b6200102a8162000d92565b82525050565b60006020820190506200104760008301846200101f565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001085601b8362000ef0565b915062001092826200104d565b602082019050919050565b60006020820190508181036000830152620010b88162001076565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200110757607f821691505b602082108114156200111e576200111d620010bf565b5b50919050565b60805160a051615d2a620011906000396000818161155401528181611d9c01528181612f7101528181613391015261348e015260008181610eda01528181612f190152818161440a015281816144fa01528181614521015281816145bd01526145e40152615d2a6000f3fe6080604052600436106103905760003560e01c80638da5cb5b116101dc578063b62496f511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610d5f578063f2fde38b14610d8a578063f637434214610db3578063f8b45b0514610dde57610397565b8063d85ba06314610ca1578063dd62ed3e14610ccc578063e2f4560514610d09578063e884f26014610d3457610397565b8063c18bc195116100dc578063c18bc19514610be5578063c876d0b914610c0e578063c8c8ebe414610c39578063d257b34f14610c6457610397565b8063b62496f514610b54578063bbc0c74214610b91578063c024666814610bbc57610397565b80639fccce321161017a578063a4d15b6411610149578063a4d15b6414610a98578063a7fc9e2114610ac3578063a9059cbb14610aee578063aacebbe314610b2b57610397565b80639fccce32146109dc578063a0d82dc514610a07578063a265777814610a32578063a457c2d714610a5b57610397565b8063924de9b7116101b6578063924de9b71461093457806395d89b411461095d5780639a7a23d6146109885780639c3b4fdc146109b157610397565b80638da5cb5b146108b35780638ea5220f146108de578063921369131461090957610397565b806339509351116102c157806370a082311161025f57806375f0a8741161022e57806375f0a8741461081d5780637bce5a04146108485780638095d564146108735780638a8c523c1461089c57610397565b806370a0823114610775578063715018a6146107b2578063751039fc146107c95780637571336a146107f457610397565b80634fbee1931161029b5780634fbee193146106b7578063541a43cf146106f45780636a486a8e1461071f5780636ddd17131461074a57610397565b8063395093511461062457806349bd5a5e146106615780634a62bb651461068c57610397565b80631f3fed8f1161032e57806323b872dd1161030857806323b872dd146105685780632bf3d42d146105a55780632d5a5d34146105d0578063313ce567146105f957610397565b80631f3fed8f146104eb578063203e727e1461051657806322d3e2aa1461053f57610397565b80631694505e1161036a5780631694505e1461044157806318160ddd1461046c5780631816467f146104975780631a8145bb146104c057610397565b806306fdde031461039c578063095ea7b3146103c757806310d5de531461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e09565b6040516103be919061479c565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614857565b610e9b565b6040516103fb91906148b2565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906148cd565b610eb9565b60405161043891906148b2565b60405180910390f35b34801561044d57600080fd5b50610456610ed8565b6040516104639190614959565b60405180910390f35b34801561047857600080fd5b50610481610efc565b60405161048e9190614983565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b991906148cd565b610f06565b005b3480156104cc57600080fd5b506104d561105d565b6040516104e29190614983565b60405180910390f35b3480156104f757600080fd5b50610500611063565b60405161050d9190614983565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061499e565b611069565b005b34801561054b57600080fd5b50610566600480360381019061056191906149cb565b611193565b005b34801561057457600080fd5b5061058f600480360381019061058a9190614a58565b6112c5565b60405161059c91906148b2565b60405180910390f35b3480156105b157600080fd5b506105ba61139e565b6040516105c79190614983565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f29190614ad7565b6113a4565b005b34801561060557600080fd5b5061060e611496565b60405161061b9190614b33565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190614857565b61149f565b60405161065891906148b2565b60405180910390f35b34801561066d57600080fd5b50610676611552565b6040516106839190614b5d565b60405180910390f35b34801561069857600080fd5b506106a1611576565b6040516106ae91906148b2565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906148cd565b611589565b6040516106eb91906148b2565b60405180910390f35b34801561070057600080fd5b506107096115df565b6040516107169190614983565b60405180910390f35b34801561072b57600080fd5b506107346115e5565b6040516107419190614983565b60405180910390f35b34801561075657600080fd5b5061075f6115eb565b60405161076c91906148b2565b60405180910390f35b34801561078157600080fd5b5061079c600480360381019061079791906148cd565b6115fe565b6040516107a99190614983565b60405180910390f35b3480156107be57600080fd5b506107c7611646565b005b3480156107d557600080fd5b506107de61179e565b6040516107eb91906148b2565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190614ad7565b611859565b005b34801561082957600080fd5b5061083261194b565b60405161083f9190614b5d565b60405180910390f35b34801561085457600080fd5b5061085d611971565b60405161086a9190614983565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190614b78565b611977565b005b3480156108a857600080fd5b506108b1611a91565b005b3480156108bf57600080fd5b506108c8611b67565b6040516108d59190614b5d565b60405180910390f35b3480156108ea57600080fd5b506108f3611b91565b6040516109009190614b5d565b60405180910390f35b34801561091557600080fd5b5061091e611bb7565b60405161092b9190614983565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190614bcb565b611bbd565b005b34801561096957600080fd5b50610972611c71565b60405161097f919061479c565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190614ad7565b611d03565b005b3480156109bd57600080fd5b506109c6611e37565b6040516109d39190614983565b60405180910390f35b3480156109e857600080fd5b506109f1611e3d565b6040516109fe9190614983565b60405180910390f35b348015610a1357600080fd5b50610a1c611e43565b604051610a299190614983565b60405180910390f35b348015610a3e57600080fd5b50610a596004803603810190610a549190614bcb565b611e49565b005b348015610a6757600080fd5b50610a826004803603810190610a7d9190614857565b611efd565b604051610a8f91906148b2565b60405180910390f35b348015610aa457600080fd5b50610aad611fca565b604051610aba91906148b2565b60405180910390f35b348015610acf57600080fd5b50610ad8611fdd565b604051610ae59190614983565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190614857565b611fe3565b604051610b2291906148b2565b60405180910390f35b348015610b3757600080fd5b50610b526004803603810190610b4d91906148cd565b612001565b005b348015610b6057600080fd5b50610b7b6004803603810190610b7691906148cd565b612158565b604051610b8891906148b2565b60405180910390f35b348015610b9d57600080fd5b50610ba6612178565b604051610bb391906148b2565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde9190614ad7565b61218b565b005b348015610bf157600080fd5b50610c0c6004803603810190610c07919061499e565b6122cb565b005b348015610c1a57600080fd5b50610c236123f5565b604051610c3091906148b2565b60405180910390f35b348015610c4557600080fd5b50610c4e612408565b604051610c5b9190614983565b60405180910390f35b348015610c7057600080fd5b50610c8b6004803603810190610c86919061499e565b61240e565b604051610c9891906148b2565b60405180910390f35b348015610cad57600080fd5b50610cb661257e565b604051610cc39190614983565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190614bf8565b612584565b604051610d009190614983565b60405180910390f35b348015610d1557600080fd5b50610d1e61260b565b604051610d2b9190614983565b60405180910390f35b348015610d4057600080fd5b50610d49612611565b604051610d5691906148b2565b60405180910390f35b348015610d6b57600080fd5b50610d746126cc565b604051610d819190614983565b60405180910390f35b348015610d9657600080fd5b50610db16004803603810190610dac91906148cd565b6126d2565b005b348015610dbf57600080fd5b50610dc8612899565b604051610dd59190614983565b60405180910390f35b348015610dea57600080fd5b50610df361289f565b604051610e009190614983565b60405180910390f35b606060038054610e1890614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4490614c67565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b6000610eaf610ea8612903565b848461290b565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f0e612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490614ce5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b611071612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614ce5565b60405180910390fd5b670de0b6b3a76400006103e86001611116610efc565b6111209190614d34565b61112a9190614dbd565b6111349190614dbd565b811015611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90614e60565b60405180910390fd5b670de0b6b3a76400008161118a9190614d34565b60088190555050565b61119b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190614ce5565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a819055506017546016546015546112679190614e80565b6112719190614e80565b601481905550606460145411156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614f22565b60405180910390fd5b505050505050565b60006112d2848484612ad6565b611393846112de612903565b61138e85604051806060016040528060288152602001615ca860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611344612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b61290b565b600190509392505050565b60195481565b6113ac612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290614ce5565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006115486114ac612903565b8461154385600160006114bd612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a590919063ffffffff16565b61290b565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164e612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117a8612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614ce5565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611861612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614ce5565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61197f612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590614ce5565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611a369190614e80565b611a409190614e80565b60108190555060146010541115611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390614f8e565b60405180910390fd5b505050565b611a99612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90614ce5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611bc5612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4b90614ce5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611c8090614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614c67565b8015611cf95780601f10611cce57610100808354040283529160200191611cf9565b820191906000526020600020905b815481529060010190602001808311611cdc57829003601f168201915b5050505050905090565b611d0b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9190614ce5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090615020565b60405180910390fd5b611e338282613c3a565b5050565b60135481565b601d5481565b60175481565b611e51612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed790614ce5565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611fc0611f0a612903565b84611fbb85604051806060016040528060258152602001615cd06025913960016000611f34612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b61290b565b6001905092915050565b600b60039054906101000a900460ff1681565b601a5481565b6000611ff7611ff0612903565b8484612ad6565b6001905092915050565b612009612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90614ce5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612193612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990614ce5565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122bf91906148b2565b60405180910390a25050565b6122d3612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614ce5565b60405180910390fd5b670de0b6b3a76400006103e86005612378610efc565b6123829190614d34565b61238c9190614dbd565b6123969190614dbd565b8110156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906150b2565b60405180910390fd5b670de0b6b3a7640000816123ec9190614d34565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000612418612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e90614ce5565b60405180910390fd5b620186a060016124b5610efc565b6124bf9190614d34565b6124c99190614dbd565b82101561250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290615144565b60405180910390fd5b6103e86005612518610efc565b6125229190614d34565b61252c9190614dbd565b82111561256e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612565906151d6565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061261b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a190614ce5565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6126da612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090615268565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b60008082846128b49190614e80565b9050838110156128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f0906152d4565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615366565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e2906153f8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac99190614983565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d9061548a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bad9061551c565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c5a5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c90906155ae565b60405180910390fd5b6000811415612cb357612cae83836000613cdb565b613bd1565b600b60009054906101000a900460ff161561337657612cd0611b67565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d3e5750612d0e611b67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612db1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dca5750600560149054906101000a900460ff16155b1561337557600b60019054906101000a900460ff16612ec457601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e845750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061561a565b60405180910390fd5b5b600f60009054906101000a900460ff161561308c57612ee1611b67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f6857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561308b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303d906156d2565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312f5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d657600854811115613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317090615764565b60405180910390fd5b600a54613185836115fe565b826131909190614e80565b11156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c8906157d0565b60405180910390fd5b613374565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132795750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c8576008548111156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90615862565b60405180910390fd5b613373565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661337257600a54613325836115fe565b826133309190614e80565b1115613371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613368906157d0565b60405180910390fd5b5b5b5b5b5b6001601e546133859190614e80565b43111580156133e057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561342c5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561348a576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156134f75750600b60039054906101000a900460ff165b1561361a576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561359957504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135969190614e80565b10155b156135e157601854601681905550601954601581905550601a546017819055506017546016546015546135cc9190614e80565b6135d69190614e80565b601481905550613615565b600360168190555060056015819055506017546016546015546136049190614e80565b61360e9190614e80565b6014819055505b6136f8565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156136a75742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff166136f7576002601681905550600360158190555060026017819055506017546016546015546136e69190614e80565b6136f09190614e80565b6014819055505b5b6000613703306115fe565b9050600060095482101590508080156137285750600b60029054906101000a900460ff165b80156137415750600560149054906101000a900460ff16155b80156137975750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137ed5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138435750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613887576001600560146101000a81548160ff02191690831515021790555061386b613f70565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061393d5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561394757600090505b60008115613bc057602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139aa57506000601454115b15613a77576139d760646139c96014548961425790919063ffffffff16565b6142d290919063ffffffff16565b9050601454601654826139ea9190614d34565b6139f49190614dbd565b601c6000828254613a059190614e80565b9250508190555060145460175482613a1d9190614d34565b613a279190614dbd565b601d6000828254613a389190614e80565b9250508190555060145460155482613a509190614d34565b613a5a9190614dbd565b601b6000828254613a6b9190614e80565b92505081905550613b9c565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad257506000601054115b15613b9b57613aff6064613af16010548961425790919063ffffffff16565b6142d290919063ffffffff16565b905060105460125482613b129190614d34565b613b1c9190614dbd565b601c6000828254613b2d9190614e80565b9250508190555060105460135482613b459190614d34565b613b4f9190614dbd565b601d6000828254613b609190614e80565b9250508190555060105460115482613b789190614d34565b613b829190614dbd565b601b6000828254613b939190614e80565b925050819055505b5b6000811115613bb157613bb0883083613cdb565b5b8086613bbd9190615882565b95505b613bcb888888613cdb565b50505050505b505050565b6000838311158290613c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c15919061479c565b60405180910390fd5b5060008385613c2d9190615882565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d429061548a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db29061551c565b60405180910390fd5b613dc683838361431c565b613e3181604051806060016040528060268152602001615c82602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f639190614983565b60405180910390a3505050565b6000613f7b306115fe565b90506000601d54601b54601c54613f929190614e80565b613f9c9190614e80565b9050600080831480613fae5750600082145b15613fbb57505050614255565b6014600954613fca9190614d34565b831115613fe3576014600954613fe09190614d34565b92505b6000600283601c5486613ff69190614d34565b6140009190614dbd565b61400a9190614dbd565b90506000614021828661432190919063ffffffff16565b905060004790506140318261436b565b6000614046824761432190919063ffffffff16565b9050600061407187614063601b548561425790919063ffffffff16565b6142d290919063ffffffff16565b9050600061409c8861408e601d548661425790919063ffffffff16565b6142d290919063ffffffff16565b905060008183856140ad9190615882565b6140b79190615882565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614117906158e7565b60006040518083038185875af1925050503d8060008114614154576040519150601f19603f3d011682016040523d82523d6000602084013e614159565b606091505b50508098505060008711801561416f5750600081115b156141bc5761417e87826145b7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c546040516141b3939291906158fc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614202906158e7565b60006040518083038185875af1925050503d806000811461423f576040519150601f19603f3d011682016040523d82523d6000602084013e614244565b606091505b505080985050505050505050505050505b565b60008083141561426a57600090506142cc565b600082846142789190614d34565b90508284826142879190614dbd565b146142c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142be906159a5565b60405180910390fd5b809150505b92915050565b600061431483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506146a0565b905092915050565b505050565b600061436383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bd6565b905092915050565b6000600267ffffffffffffffff811115614388576143876159c5565b5b6040519080825280602002602001820160405280156143b65781602001602082028036833780820191505090505b50905030816000815181106143ce576143cd6159f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561446e57600080fd5b505afa158015614482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a69190615a38565b816001815181106144ba576144b96159f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061451f307f00000000000000000000000000000000000000000000000000000000000000008461290b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614581959493929190615b5e565b600060405180830381600087803b15801561459b57600080fd5b505af11580156145af573d6000803e3d6000fd5b505050505050565b6145e2307f00000000000000000000000000000000000000000000000000000000000000008461290b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161464796959493929190615bb8565b6060604051808303818588803b15801561466057600080fd5b505af1158015614674573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146999190615c2e565b5050505050565b600080831182906146e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146de919061479c565b60405180910390fd5b50600083856146f69190614dbd565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561473d578082015181840152602081019050614722565b8381111561474c576000848401525b50505050565b6000601f19601f8301169050919050565b600061476e82614703565b614778818561470e565b935061478881856020860161471f565b61479181614752565b840191505092915050565b600060208201905081810360008301526147b68184614763565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147ee826147c3565b9050919050565b6147fe816147e3565b811461480957600080fd5b50565b60008135905061481b816147f5565b92915050565b6000819050919050565b61483481614821565b811461483f57600080fd5b50565b6000813590506148518161482b565b92915050565b6000806040838503121561486e5761486d6147be565b5b600061487c8582860161480c565b925050602061488d85828601614842565b9150509250929050565b60008115159050919050565b6148ac81614897565b82525050565b60006020820190506148c760008301846148a3565b92915050565b6000602082840312156148e3576148e26147be565b5b60006148f18482850161480c565b91505092915050565b6000819050919050565b600061491f61491a614915846147c3565b6148fa565b6147c3565b9050919050565b600061493182614904565b9050919050565b600061494382614926565b9050919050565b61495381614938565b82525050565b600060208201905061496e600083018461494a565b92915050565b61497d81614821565b82525050565b60006020820190506149986000830184614974565b92915050565b6000602082840312156149b4576149b36147be565b5b60006149c284828501614842565b91505092915050565b60008060008060008060c087890312156149e8576149e76147be565b5b60006149f689828a01614842565b9650506020614a0789828a01614842565b9550506040614a1889828a01614842565b9450506060614a2989828a01614842565b9350506080614a3a89828a01614842565b92505060a0614a4b89828a01614842565b9150509295509295509295565b600080600060608486031215614a7157614a706147be565b5b6000614a7f8682870161480c565b9350506020614a908682870161480c565b9250506040614aa186828701614842565b9150509250925092565b614ab481614897565b8114614abf57600080fd5b50565b600081359050614ad181614aab565b92915050565b60008060408385031215614aee57614aed6147be565b5b6000614afc8582860161480c565b9250506020614b0d85828601614ac2565b9150509250929050565b600060ff82169050919050565b614b2d81614b17565b82525050565b6000602082019050614b486000830184614b24565b92915050565b614b57816147e3565b82525050565b6000602082019050614b726000830184614b4e565b92915050565b600080600060608486031215614b9157614b906147be565b5b6000614b9f86828701614842565b9350506020614bb086828701614842565b9250506040614bc186828701614842565b9150509250925092565b600060208284031215614be157614be06147be565b5b6000614bef84828501614ac2565b91505092915050565b60008060408385031215614c0f57614c0e6147be565b5b6000614c1d8582860161480c565b9250506020614c2e8582860161480c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ccf60208361470e565b9150614cda82614c99565b602082019050919050565b60006020820190508181036000830152614cfe81614cc2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d3f82614821565b9150614d4a83614821565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8357614d82614d05565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dc882614821565b9150614dd383614821565b925082614de357614de2614d8e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e4a602f8361470e565b9150614e5582614dee565b604082019050919050565b60006020820190508181036000830152614e7981614e3d565b9050919050565b6000614e8b82614821565b9150614e9683614821565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ecb57614eca614d05565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f0c601d8361470e565b9150614f1782614ed6565b602082019050919050565b60006020820190508181036000830152614f3b81614eff565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614f78601d8361470e565b9150614f8382614f42565b602082019050919050565b60006020820190508181036000830152614fa781614f6b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061500a60398361470e565b915061501582614fae565b604082019050919050565b6000602082019050818103600083015261503981614ffd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061509c60248361470e565b91506150a782615040565b604082019050919050565b600060208201905081810360008301526150cb8161508f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061512e60358361470e565b9150615139826150d2565b604082019050919050565b6000602082019050818103600083015261515d81615121565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006151c060348361470e565b91506151cb82615164565b604082019050919050565b600060208201905081810360008301526151ef816151b3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061525260268361470e565b915061525d826151f6565b604082019050919050565b6000602082019050818103600083015261528181615245565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152be601b8361470e565b91506152c982615288565b602082019050919050565b600060208201905081810360008301526152ed816152b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061535060248361470e565b915061535b826152f4565b604082019050919050565b6000602082019050818103600083015261537f81615343565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153e260228361470e565b91506153ed82615386565b604082019050919050565b60006020820190508181036000830152615411816153d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061547460258361470e565b915061547f82615418565b604082019050919050565b600060208201905081810360008301526154a381615467565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061550660238361470e565b9150615511826154aa565b604082019050919050565b60006020820190508181036000830152615535816154f9565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061559860318361470e565b91506155a38261553c565b604082019050919050565b600060208201905081810360008301526155c78161558b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061560460168361470e565b915061560f826155ce565b602082019050919050565b60006020820190508181036000830152615633816155f7565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006156bc60498361470e565b91506156c78261563a565b606082019050919050565b600060208201905081810360008301526156eb816156af565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061574e60358361470e565b9150615759826156f2565b604082019050919050565b6000602082019050818103600083015261577d81615741565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006157ba60138361470e565b91506157c582615784565b602082019050919050565b600060208201905081810360008301526157e9816157ad565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061584c60368361470e565b9150615857826157f0565b604082019050919050565b6000602082019050818103600083015261587b8161583f565b9050919050565b600061588d82614821565b915061589883614821565b9250828210156158ab576158aa614d05565b5b828203905092915050565b600081905092915050565b50565b60006158d16000836158b6565b91506158dc826158c1565b600082019050919050565b60006158f2826158c4565b9150819050919050565b60006060820190506159116000830186614974565b61591e6020830185614974565b61592b6040830184614974565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061598f60218361470e565b915061599a82615933565b604082019050919050565b600060208201905081810360008301526159be81615982565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615a32816147f5565b92915050565b600060208284031215615a4e57615a4d6147be565b5b6000615a5c84828501615a23565b91505092915050565b6000819050919050565b6000615a8a615a85615a8084615a65565b6148fa565b614821565b9050919050565b615a9a81615a6f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ad5816147e3565b82525050565b6000615ae78383615acc565b60208301905092915050565b6000602082019050919050565b6000615b0b82615aa0565b615b158185615aab565b9350615b2083615abc565b8060005b83811015615b51578151615b388882615adb565b9750615b4383615af3565b925050600181019050615b24565b5085935050505092915050565b600060a082019050615b736000830188614974565b615b806020830187615a91565b8181036040830152615b928186615b00565b9050615ba16060830185614b4e565b615bae6080830184614974565b9695505050505050565b600060c082019050615bcd6000830189614b4e565b615bda6020830188614974565b615be76040830187615a91565b615bf46060830186615a91565b615c016080830185614b4e565b615c0e60a0830184614974565b979650505050505050565b600081519050615c288161482b565b92915050565b600080600060608486031215615c4757615c466147be565b5b6000615c5586828701615c19565b9350506020615c6686828701615c19565b9250506040615c7786828701615c19565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f394ca37ac910537a28f0700ae3bac6d5148ff2b85deb56deac72b4bceb980c64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106103905760003560e01c80638da5cb5b116101dc578063b62496f511610102578063d85ba063116100a0578063f11a24d31161006f578063f11a24d314610d5f578063f2fde38b14610d8a578063f637434214610db3578063f8b45b0514610dde57610397565b8063d85ba06314610ca1578063dd62ed3e14610ccc578063e2f4560514610d09578063e884f26014610d3457610397565b8063c18bc195116100dc578063c18bc19514610be5578063c876d0b914610c0e578063c8c8ebe414610c39578063d257b34f14610c6457610397565b8063b62496f514610b54578063bbc0c74214610b91578063c024666814610bbc57610397565b80639fccce321161017a578063a4d15b6411610149578063a4d15b6414610a98578063a7fc9e2114610ac3578063a9059cbb14610aee578063aacebbe314610b2b57610397565b80639fccce32146109dc578063a0d82dc514610a07578063a265777814610a32578063a457c2d714610a5b57610397565b8063924de9b7116101b6578063924de9b71461093457806395d89b411461095d5780639a7a23d6146109885780639c3b4fdc146109b157610397565b80638da5cb5b146108b35780638ea5220f146108de578063921369131461090957610397565b806339509351116102c157806370a082311161025f57806375f0a8741161022e57806375f0a8741461081d5780637bce5a04146108485780638095d564146108735780638a8c523c1461089c57610397565b806370a0823114610775578063715018a6146107b2578063751039fc146107c95780637571336a146107f457610397565b80634fbee1931161029b5780634fbee193146106b7578063541a43cf146106f45780636a486a8e1461071f5780636ddd17131461074a57610397565b8063395093511461062457806349bd5a5e146106615780634a62bb651461068c57610397565b80631f3fed8f1161032e57806323b872dd1161030857806323b872dd146105685780632bf3d42d146105a55780632d5a5d34146105d0578063313ce567146105f957610397565b80631f3fed8f146104eb578063203e727e1461051657806322d3e2aa1461053f57610397565b80631694505e1161036a5780631694505e1461044157806318160ddd1461046c5780631816467f146104975780631a8145bb146104c057610397565b806306fdde031461039c578063095ea7b3146103c757806310d5de531461040457610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e09565b6040516103be919061479c565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e99190614857565b610e9b565b6040516103fb91906148b2565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906148cd565b610eb9565b60405161043891906148b2565b60405180910390f35b34801561044d57600080fd5b50610456610ed8565b6040516104639190614959565b60405180910390f35b34801561047857600080fd5b50610481610efc565b60405161048e9190614983565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b991906148cd565b610f06565b005b3480156104cc57600080fd5b506104d561105d565b6040516104e29190614983565b60405180910390f35b3480156104f757600080fd5b50610500611063565b60405161050d9190614983565b60405180910390f35b34801561052257600080fd5b5061053d6004803603810190610538919061499e565b611069565b005b34801561054b57600080fd5b50610566600480360381019061056191906149cb565b611193565b005b34801561057457600080fd5b5061058f600480360381019061058a9190614a58565b6112c5565b60405161059c91906148b2565b60405180910390f35b3480156105b157600080fd5b506105ba61139e565b6040516105c79190614983565b60405180910390f35b3480156105dc57600080fd5b506105f760048036038101906105f29190614ad7565b6113a4565b005b34801561060557600080fd5b5061060e611496565b60405161061b9190614b33565b60405180910390f35b34801561063057600080fd5b5061064b60048036038101906106469190614857565b61149f565b60405161065891906148b2565b60405180910390f35b34801561066d57600080fd5b50610676611552565b6040516106839190614b5d565b60405180910390f35b34801561069857600080fd5b506106a1611576565b6040516106ae91906148b2565b60405180910390f35b3480156106c357600080fd5b506106de60048036038101906106d991906148cd565b611589565b6040516106eb91906148b2565b60405180910390f35b34801561070057600080fd5b506107096115df565b6040516107169190614983565b60405180910390f35b34801561072b57600080fd5b506107346115e5565b6040516107419190614983565b60405180910390f35b34801561075657600080fd5b5061075f6115eb565b60405161076c91906148b2565b60405180910390f35b34801561078157600080fd5b5061079c600480360381019061079791906148cd565b6115fe565b6040516107a99190614983565b60405180910390f35b3480156107be57600080fd5b506107c7611646565b005b3480156107d557600080fd5b506107de61179e565b6040516107eb91906148b2565b60405180910390f35b34801561080057600080fd5b5061081b60048036038101906108169190614ad7565b611859565b005b34801561082957600080fd5b5061083261194b565b60405161083f9190614b5d565b60405180910390f35b34801561085457600080fd5b5061085d611971565b60405161086a9190614983565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190614b78565b611977565b005b3480156108a857600080fd5b506108b1611a91565b005b3480156108bf57600080fd5b506108c8611b67565b6040516108d59190614b5d565b60405180910390f35b3480156108ea57600080fd5b506108f3611b91565b6040516109009190614b5d565b60405180910390f35b34801561091557600080fd5b5061091e611bb7565b60405161092b9190614983565b60405180910390f35b34801561094057600080fd5b5061095b60048036038101906109569190614bcb565b611bbd565b005b34801561096957600080fd5b50610972611c71565b60405161097f919061479c565b60405180910390f35b34801561099457600080fd5b506109af60048036038101906109aa9190614ad7565b611d03565b005b3480156109bd57600080fd5b506109c6611e37565b6040516109d39190614983565b60405180910390f35b3480156109e857600080fd5b506109f1611e3d565b6040516109fe9190614983565b60405180910390f35b348015610a1357600080fd5b50610a1c611e43565b604051610a299190614983565b60405180910390f35b348015610a3e57600080fd5b50610a596004803603810190610a549190614bcb565b611e49565b005b348015610a6757600080fd5b50610a826004803603810190610a7d9190614857565b611efd565b604051610a8f91906148b2565b60405180910390f35b348015610aa457600080fd5b50610aad611fca565b604051610aba91906148b2565b60405180910390f35b348015610acf57600080fd5b50610ad8611fdd565b604051610ae59190614983565b60405180910390f35b348015610afa57600080fd5b50610b156004803603810190610b109190614857565b611fe3565b604051610b2291906148b2565b60405180910390f35b348015610b3757600080fd5b50610b526004803603810190610b4d91906148cd565b612001565b005b348015610b6057600080fd5b50610b7b6004803603810190610b7691906148cd565b612158565b604051610b8891906148b2565b60405180910390f35b348015610b9d57600080fd5b50610ba6612178565b604051610bb391906148b2565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde9190614ad7565b61218b565b005b348015610bf157600080fd5b50610c0c6004803603810190610c07919061499e565b6122cb565b005b348015610c1a57600080fd5b50610c236123f5565b604051610c3091906148b2565b60405180910390f35b348015610c4557600080fd5b50610c4e612408565b604051610c5b9190614983565b60405180910390f35b348015610c7057600080fd5b50610c8b6004803603810190610c86919061499e565b61240e565b604051610c9891906148b2565b60405180910390f35b348015610cad57600080fd5b50610cb661257e565b604051610cc39190614983565b60405180910390f35b348015610cd857600080fd5b50610cf36004803603810190610cee9190614bf8565b612584565b604051610d009190614983565b60405180910390f35b348015610d1557600080fd5b50610d1e61260b565b604051610d2b9190614983565b60405180910390f35b348015610d4057600080fd5b50610d49612611565b604051610d5691906148b2565b60405180910390f35b348015610d6b57600080fd5b50610d746126cc565b604051610d819190614983565b60405180910390f35b348015610d9657600080fd5b50610db16004803603810190610dac91906148cd565b6126d2565b005b348015610dbf57600080fd5b50610dc8612899565b604051610dd59190614983565b60405180910390f35b348015610dea57600080fd5b50610df361289f565b604051610e009190614983565b60405180910390f35b606060038054610e1890614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4490614c67565b8015610e915780601f10610e6657610100808354040283529160200191610e91565b820191906000526020600020905b815481529060010190602001808311610e7457829003601f168201915b5050505050905090565b6000610eaf610ea8612903565b848461290b565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f0e612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490614ce5565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c5481565b601b5481565b611071612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611100576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f790614ce5565b60405180910390fd5b670de0b6b3a76400006103e86001611116610efc565b6111209190614d34565b61112a9190614dbd565b6111349190614dbd565b811015611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90614e60565b60405180910390fd5b670de0b6b3a76400008161118a9190614d34565b60088190555050565b61119b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461122a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122190614ce5565b60405180910390fd5b856015819055508460168190555083601781905550826018819055508160198190555080601a819055506017546016546015546112679190614e80565b6112719190614e80565b601481905550606460145411156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490614f22565b60405180910390fd5b505050505050565b60006112d2848484612ad6565b611393846112de612903565b61138e85604051806060016040528060288152602001615ca860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611344612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b61290b565b600190509392505050565b60195481565b6113ac612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143290614ce5565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006115486114ac612903565b8461154385600160006114bd612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a590919063ffffffff16565b61290b565b6001905092915050565b7f000000000000000000000000ebcc2b9de458d3a6eba7b0a151bb32c5cd10ccdc81565b600b60009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61164e612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006117a8612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614ce5565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611861612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614ce5565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b61197f612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590614ce5565b60405180910390fd5b826011819055508160128190555080601381905550601354601254601154611a369190614e80565b611a409190614e80565b60108190555060146010541115611a8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8390614f8e565b60405180910390fd5b505050565b611a99612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1f90614ce5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601e81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611bc5612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4b90614ce5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611c8090614c67565b80601f0160208091040260200160405190810160405280929190818152602001828054611cac90614c67565b8015611cf95780601f10611cce57610100808354040283529160200191611cf9565b820191906000526020600020905b815481529060010190602001808311611cdc57829003601f168201915b5050505050905090565b611d0b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9190614ce5565b60405180910390fd5b7f000000000000000000000000ebcc2b9de458d3a6eba7b0a151bb32c5cd10ccdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090615020565b60405180910390fd5b611e338282613c3a565b5050565b60135481565b601d5481565b60175481565b611e51612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed790614ce5565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000611fc0611f0a612903565b84611fbb85604051806060016040528060258152602001615cd06025913960016000611f34612903565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b61290b565b6001905092915050565b600b60039054906101000a900460ff1681565b601a5481565b6000611ff7611ff0612903565b8484612ad6565b6001905092915050565b612009612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208f90614ce5565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612193612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612222576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221990614ce5565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122bf91906148b2565b60405180910390a25050565b6122d3612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235990614ce5565b60405180910390fd5b670de0b6b3a76400006103e86005612378610efc565b6123829190614d34565b61238c9190614dbd565b6123969190614dbd565b8110156123d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cf906150b2565b60405180910390fd5b670de0b6b3a7640000816123ec9190614d34565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000612418612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249e90614ce5565b60405180910390fd5b620186a060016124b5610efc565b6124bf9190614d34565b6124c99190614dbd565b82101561250b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250290615144565b60405180910390fd5b6103e86005612518610efc565b6125229190614d34565b61252c9190614dbd565b82111561256e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612565906151d6565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600061261b612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a190614ce5565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b6126da612903565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612769576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276090614ce5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090615268565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b60008082846128b49190614e80565b9050838110156128f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128f0906152d4565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561297b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297290615366565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e2906153f8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612ac99190614983565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3d9061548a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bad9061551c565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c5a5750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c90906155ae565b60405180910390fd5b6000811415612cb357612cae83836000613cdb565b613bd1565b600b60009054906101000a900460ff161561337657612cd0611b67565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d3e5750612d0e611b67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d775750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612db1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612dca5750600560149054906101000a900460ff16155b1561337557600b60019054906101000a900460ff16612ec457601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612e845750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eba9061561a565b60405180910390fd5b5b600f60009054906101000a900460ff161561308c57612ee1611b67565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612f6857507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fc057507f000000000000000000000000ebcc2b9de458d3a6eba7b0a151bb32c5cd10ccdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561308b5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303d906156d2565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561312f5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131d657600854811115613179576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161317090615764565b60405180910390fd5b600a54613185836115fe565b826131909190614e80565b11156131d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c8906157d0565b60405180910390fd5b613374565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132795750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156132c8576008548111156132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90615862565b60405180910390fd5b613373565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661337257600a54613325836115fe565b826133309190614e80565b1115613371576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613368906157d0565b60405180910390fd5b5b5b5b5b5b6001601e546133859190614e80565b43111580156133e057507f000000000000000000000000ebcc2b9de458d3a6eba7b0a151bb32c5cd10ccdc73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561342c5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561348a576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60007f000000000000000000000000ebcc2b9de458d3a6eba7b0a151bb32c5cd10ccdc73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16149050801580156134f75750600b60039054906101000a900460ff165b1561361a576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415801561359957504262015180600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546135969190614e80565b10155b156135e157601854601681905550601954601581905550601a546017819055506017546016546015546135cc9190614e80565b6135d69190614e80565b601481905550613615565b600360168190555060056015819055506017546016546015546136049190614e80565b61360e9190614e80565b6014819055505b6136f8565b6000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156136a75742600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600b60039054906101000a900460ff166136f7576002601681905550600360158190555060026017819055506017546016546015546136e69190614e80565b6136f09190614e80565b6014819055505b5b6000613703306115fe565b9050600060095482101590508080156137285750600b60029054906101000a900460ff165b80156137415750600560149054906101000a900460ff16155b80156137975750602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156137ed5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138435750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613887576001600560146101000a81548160ff02191690831515021790555061386b613f70565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601f60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061393d5750601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561394757600090505b60008115613bc057602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139aa57506000601454115b15613a77576139d760646139c96014548961425790919063ffffffff16565b6142d290919063ffffffff16565b9050601454601654826139ea9190614d34565b6139f49190614dbd565b601c6000828254613a059190614e80565b9250508190555060145460175482613a1d9190614d34565b613a279190614dbd565b601d6000828254613a389190614e80565b9250508190555060145460155482613a509190614d34565b613a5a9190614dbd565b601b6000828254613a6b9190614e80565b92505081905550613b9c565b602160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613ad257506000601054115b15613b9b57613aff6064613af16010548961425790919063ffffffff16565b6142d290919063ffffffff16565b905060105460125482613b129190614d34565b613b1c9190614dbd565b601c6000828254613b2d9190614e80565b9250508190555060105460135482613b459190614d34565b613b4f9190614dbd565b601d6000828254613b609190614e80565b9250508190555060105460115482613b789190614d34565b613b829190614dbd565b601b6000828254613b939190614e80565b925050819055505b5b6000811115613bb157613bb0883083613cdb565b5b8086613bbd9190615882565b95505b613bcb888888613cdb565b50505050505b505050565b6000838311158290613c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c15919061479c565b60405180910390fd5b5060008385613c2d9190615882565b9050809150509392505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d429061548a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db29061551c565b60405180910390fd5b613dc683838361431c565b613e3181604051806060016040528060268152602001615c82602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613bd69092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613ec4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128a590919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f639190614983565b60405180910390a3505050565b6000613f7b306115fe565b90506000601d54601b54601c54613f929190614e80565b613f9c9190614e80565b9050600080831480613fae5750600082145b15613fbb57505050614255565b6014600954613fca9190614d34565b831115613fe3576014600954613fe09190614d34565b92505b6000600283601c5486613ff69190614d34565b6140009190614dbd565b61400a9190614dbd565b90506000614021828661432190919063ffffffff16565b905060004790506140318261436b565b6000614046824761432190919063ffffffff16565b9050600061407187614063601b548561425790919063ffffffff16565b6142d290919063ffffffff16565b9050600061409c8861408e601d548661425790919063ffffffff16565b6142d290919063ffffffff16565b905060008183856140ad9190615882565b6140b79190615882565b90506000601c819055506000601b819055506000601d81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614117906158e7565b60006040518083038185875af1925050503d8060008114614154576040519150601f19603f3d011682016040523d82523d6000602084013e614159565b606091505b50508098505060008711801561416f5750600081115b156141bc5761417e87826145b7565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601c546040516141b3939291906158fc565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614202906158e7565b60006040518083038185875af1925050503d806000811461423f576040519150601f19603f3d011682016040523d82523d6000602084013e614244565b606091505b505080985050505050505050505050505b565b60008083141561426a57600090506142cc565b600082846142789190614d34565b90508284826142879190614dbd565b146142c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142be906159a5565b60405180910390fd5b809150505b92915050565b600061431483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506146a0565b905092915050565b505050565b600061436383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613bd6565b905092915050565b6000600267ffffffffffffffff811115614388576143876159c5565b5b6040519080825280602002602001820160405280156143b65781602001602082028036833780820191505090505b50905030816000815181106143ce576143cd6159f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561446e57600080fd5b505afa158015614482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144a69190615a38565b816001815181106144ba576144b96159f4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061451f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461290b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614581959493929190615b5e565b600060405180830381600087803b15801561459b57600080fd5b505af11580156145af573d6000803e3d6000fd5b505050505050565b6145e2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461290b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b815260040161464796959493929190615bb8565b6060604051808303818588803b15801561466057600080fd5b505af1158015614674573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146999190615c2e565b5050505050565b600080831182906146e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016146de919061479c565b60405180910390fd5b50600083856146f69190614dbd565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561473d578082015181840152602081019050614722565b8381111561474c576000848401525b50505050565b6000601f19601f8301169050919050565b600061476e82614703565b614778818561470e565b935061478881856020860161471f565b61479181614752565b840191505092915050565b600060208201905081810360008301526147b68184614763565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006147ee826147c3565b9050919050565b6147fe816147e3565b811461480957600080fd5b50565b60008135905061481b816147f5565b92915050565b6000819050919050565b61483481614821565b811461483f57600080fd5b50565b6000813590506148518161482b565b92915050565b6000806040838503121561486e5761486d6147be565b5b600061487c8582860161480c565b925050602061488d85828601614842565b9150509250929050565b60008115159050919050565b6148ac81614897565b82525050565b60006020820190506148c760008301846148a3565b92915050565b6000602082840312156148e3576148e26147be565b5b60006148f18482850161480c565b91505092915050565b6000819050919050565b600061491f61491a614915846147c3565b6148fa565b6147c3565b9050919050565b600061493182614904565b9050919050565b600061494382614926565b9050919050565b61495381614938565b82525050565b600060208201905061496e600083018461494a565b92915050565b61497d81614821565b82525050565b60006020820190506149986000830184614974565b92915050565b6000602082840312156149b4576149b36147be565b5b60006149c284828501614842565b91505092915050565b60008060008060008060c087890312156149e8576149e76147be565b5b60006149f689828a01614842565b9650506020614a0789828a01614842565b9550506040614a1889828a01614842565b9450506060614a2989828a01614842565b9350506080614a3a89828a01614842565b92505060a0614a4b89828a01614842565b9150509295509295509295565b600080600060608486031215614a7157614a706147be565b5b6000614a7f8682870161480c565b9350506020614a908682870161480c565b9250506040614aa186828701614842565b9150509250925092565b614ab481614897565b8114614abf57600080fd5b50565b600081359050614ad181614aab565b92915050565b60008060408385031215614aee57614aed6147be565b5b6000614afc8582860161480c565b9250506020614b0d85828601614ac2565b9150509250929050565b600060ff82169050919050565b614b2d81614b17565b82525050565b6000602082019050614b486000830184614b24565b92915050565b614b57816147e3565b82525050565b6000602082019050614b726000830184614b4e565b92915050565b600080600060608486031215614b9157614b906147be565b5b6000614b9f86828701614842565b9350506020614bb086828701614842565b9250506040614bc186828701614842565b9150509250925092565b600060208284031215614be157614be06147be565b5b6000614bef84828501614ac2565b91505092915050565b60008060408385031215614c0f57614c0e6147be565b5b6000614c1d8582860161480c565b9250506020614c2e8582860161480c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c7f57607f821691505b60208210811415614c9357614c92614c38565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ccf60208361470e565b9150614cda82614c99565b602082019050919050565b60006020820190508181036000830152614cfe81614cc2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614d3f82614821565b9150614d4a83614821565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8357614d82614d05565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dc882614821565b9150614dd383614821565b925082614de357614de2614d8e565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614e4a602f8361470e565b9150614e5582614dee565b604082019050919050565b60006020820190508181036000830152614e7981614e3d565b9050919050565b6000614e8b82614821565b9150614e9683614821565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614ecb57614eca614d05565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614f0c601d8361470e565b9150614f1782614ed6565b602082019050919050565b60006020820190508181036000830152614f3b81614eff565b9050919050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614f78601d8361470e565b9150614f8382614f42565b602082019050919050565b60006020820190508181036000830152614fa781614f6b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061500a60398361470e565b915061501582614fae565b604082019050919050565b6000602082019050818103600083015261503981614ffd565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061509c60248361470e565b91506150a782615040565b604082019050919050565b600060208201905081810360008301526150cb8161508f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061512e60358361470e565b9150615139826150d2565b604082019050919050565b6000602082019050818103600083015261515d81615121565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006151c060348361470e565b91506151cb82615164565b604082019050919050565b600060208201905081810360008301526151ef816151b3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061525260268361470e565b915061525d826151f6565b604082019050919050565b6000602082019050818103600083015261528181615245565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006152be601b8361470e565b91506152c982615288565b602082019050919050565b600060208201905081810360008301526152ed816152b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061535060248361470e565b915061535b826152f4565b604082019050919050565b6000602082019050818103600083015261537f81615343565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153e260228361470e565b91506153ed82615386565b604082019050919050565b60006020820190508181036000830152615411816153d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061547460258361470e565b915061547f82615418565b604082019050919050565b600060208201905081810360008301526154a381615467565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061550660238361470e565b9150615511826154aa565b604082019050919050565b60006020820190508181036000830152615535816154f9565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061559860318361470e565b91506155a38261553c565b604082019050919050565b600060208201905081810360008301526155c78161558b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061560460168361470e565b915061560f826155ce565b602082019050919050565b60006020820190508181036000830152615633816155f7565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006156bc60498361470e565b91506156c78261563a565b606082019050919050565b600060208201905081810360008301526156eb816156af565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061574e60358361470e565b9150615759826156f2565b604082019050919050565b6000602082019050818103600083015261577d81615741565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006157ba60138361470e565b91506157c582615784565b602082019050919050565b600060208201905081810360008301526157e9816157ad565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061584c60368361470e565b9150615857826157f0565b604082019050919050565b6000602082019050818103600083015261587b8161583f565b9050919050565b600061588d82614821565b915061589883614821565b9250828210156158ab576158aa614d05565b5b828203905092915050565b600081905092915050565b50565b60006158d16000836158b6565b91506158dc826158c1565b600082019050919050565b60006158f2826158c4565b9150819050919050565b60006060820190506159116000830186614974565b61591e6020830185614974565b61592b6040830184614974565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061598f60218361470e565b915061599a82615933565b604082019050919050565b600060208201905081810360008301526159be81615982565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615a32816147f5565b92915050565b600060208284031215615a4e57615a4d6147be565b5b6000615a5c84828501615a23565b91505092915050565b6000819050919050565b6000615a8a615a85615a8084615a65565b6148fa565b614821565b9050919050565b615a9a81615a6f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615ad5816147e3565b82525050565b6000615ae78383615acc565b60208301905092915050565b6000602082019050919050565b6000615b0b82615aa0565b615b158185615aab565b9350615b2083615abc565b8060005b83811015615b51578151615b388882615adb565b9750615b4383615af3565b925050600181019050615b24565b5085935050505092915050565b600060a082019050615b736000830188614974565b615b806020830187615a91565b8181036040830152615b928186615b00565b9050615ba16060830185614b4e565b615bae6080830184614974565b9695505050505050565b600060c082019050615bcd6000830189614b4e565b615bda6020830188614974565b615be76040830187615a91565b615bf46060830186615a91565b615c016080830185614b4e565b615c0e60a0830184614974565b979650505050505050565b600081519050615c288161482b565b92915050565b600080600060608486031215615c4757615c466147be565b5b6000615c5586828701615c19565b9350506020615c6686828701615c19565b9250506040615c7786828701615c19565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212205f394ca37ac910537a28f0700ae3bac6d5148ff2b85deb56deac72b4bceb980c64736f6c63430008090033

Deployed Bytecode Sourcemap

29416:17672:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7514:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9688:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31116:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29493:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8637:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38508:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30830:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30790;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35678:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36874:621;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10340:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30707:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37695:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8478:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11105:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29551:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29817:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38677:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30664:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30518:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29897:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8809:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22016:148;;;;;;;;;;;;;:::i;:::-;;34784:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36145:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29630:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30410;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36496:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34583:148;;;;;;;;;;;;;:::i;:::-;;21372:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29667:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30553:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36386:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7734:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37839:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30484:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30870:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30629:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35109:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11827:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29935:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30750:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9150:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38291:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31339:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29857:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37504:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35921:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30327:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29701:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35283:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30376:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9389:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29743:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34966:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30447:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22320:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30591:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29783:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7514:100;7568:13;7601:5;7594:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7514:100;:::o;9688:169::-;9771:4;9788:39;9797:12;:10;:12::i;:::-;9811:7;9820:6;9788:8;:39::i;:::-;9845:4;9838:11;;9688:169;;;;:::o;31116:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29493:51::-;;;:::o;8637:108::-;8698:7;8725:12;;8718:19;;8637:108;:::o;38508:157::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38615:9:::1;;;;;;;;;;;38587:38;;38604:9;38587:38;;;;;;;;;;;;38648:9;38636;;:21;;;;;;;;;;;;;;;;;;38508:157:::0;:::o;30830:33::-;;;;:::o;30790:::-;;;;:::o;35678:234::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35797:4:::1;35791;35787:1;35771:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35770:31;;;;:::i;:::-;35760:6;:41;;35752:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35897:6;35887;:17;;;;:::i;:::-;35864:20;:40;;;;35678:234:::0;:::o;36874:621::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37100:13:::1;37081:16;:32;;;;37143:13;37124:16;:32;;;;37180:7;37167:10;:20;;;;37222:22;37198:21;:46;;;;37279:22;37255:21;:46;;;;37323:16;37305:15;:34;;;;37404:10;;37385:16;;37366;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;37350:13;:64;;;;37450:3;37433:13;;:20;;37425:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;36874:621:::0;;;;;;:::o;10340:355::-;10480:4;10497:36;10507:6;10515:9;10526:6;10497:9;:36::i;:::-;10544:121;10553:6;10561:12;:10;:12::i;:::-;10575:89;10613:6;10575:89;;;;;;;;;;;;;;;;;:11;:19;10587:6;10575:19;;;;;;;;;;;;;;;:33;10595:12;:10;:12::i;:::-;10575:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10544:8;:121::i;:::-;10683:4;10676:11;;10340:355;;;;;:::o;30707:36::-;;;;:::o;37695:135::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37809:13:::1;37787:10;:19;37798:7;37787:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37695:135:::0;;:::o;8478:93::-;8536:5;8561:2;8554:9;;8478:93;:::o;11105:218::-;11193:4;11210:83;11219:12;:10;:12::i;:::-;11233:7;11242:50;11281:10;11242:11;:25;11254:12;:10;:12::i;:::-;11242:25;;;;;;;;;;;;;;;:34;11268:7;11242:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11210:8;:83::i;:::-;11311:4;11304:11;;11105:218;;;;:::o;29551:38::-;;;:::o;29817:33::-;;;;;;;;;;;;;:::o;38677:125::-;38742:4;38766:19;:28;38786:7;38766:28;;;;;;;;;;;;;;;;;;;;;;;;;38759:35;;38677:125;;;:::o;30664:36::-;;;;:::o;30518:28::-;;;;:::o;29897:31::-;;;;;;;;;;;;;:::o;8809:127::-;8883:7;8910:9;:18;8920:7;8910:18;;;;;;;;;;;;;;;;8903:25;;8809:127;;;:::o;22016:148::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22123:1:::1;22086:40;;22107:6;;;;;;;;;;;22086:40;;;;;;;;;;;;22154:1;22137:6;;:19;;;;;;;;;;;;;;;;;;22016:148::o:0;34784:120::-;34836:4;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34869:5:::1;34852:14;;:22;;;;;;;;;;;;;;;;;;34892:4;34885:11;;34784:120:::0;:::o;36145:144::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36277:4:::1;36235:31;:39;36267:6;36235:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36145:144:::0;;:::o;29630:30::-;;;;;;;;;;;;;:::o;30410:::-;;;;:::o;36496:369::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36630:13:::1;36612:15;:31;;;;36672:13;36654:15;:31;;;;36708:7;36696:9;:19;;;;36777:9;;36759:15;;36741;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;36726:12;:60;;;;36821:2;36805:12;;:18;;36797:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;36496:369:::0;;;:::o;34583:148::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34654:4:::1;34638:13;;:20;;;;;;;;;;;;;;;;;;34683:4;34669:11;;:18;;;;;;;;;;;;;;;;;;34711:12;34698:10;:25;;;;34583:148::o:0;21372:79::-;21410:7;21437:6;;;;;;;;;;;21430:13;;21372:79;:::o;29667:24::-;;;;;;;;;;;;;:::o;30553:31::-;;;;:::o;36386:101::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36472:7:::1;36458:11;;:21;;;;;;;;;;;;;;;;;;36386:101:::0;:::o;7734:104::-;7790:13;7823:7;7816:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7734:104;:::o;37839:245::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37946:13:::1;37938:21;;:4;:21;;;;37930:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;38035:41;38064:4;38070:5;38035:28;:41::i;:::-;37839:245:::0;;:::o;30484:24::-;;;;:::o;30870:27::-;;;;:::o;30629:25::-;;;;:::o;35109:102::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35198:5:::1;35177:18;;:26;;;;;;;;;;;;;;;;;;35109:102:::0;:::o;11827:269::-;11920:4;11937:129;11946:12;:10;:12::i;:::-;11960:7;11969:96;12008:15;11969:96;;;;;;;;;;;;;;;;;:11;:25;11981:12;:10;:12::i;:::-;11969:25;;;;;;;;;;;;;;;:34;11995:7;11969:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11937:8;:129::i;:::-;12084:4;12077:11;;11827:269;;;;:::o;29935:37::-;;;;;;;;;;;;;:::o;30750:30::-;;;;:::o;9150:175::-;9236:4;9253:42;9263:12;:10;:12::i;:::-;9277:9;9288:6;9253:9;:42::i;:::-;9313:4;9306:11;;9150:175;;;;:::o;38291:208::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38428:15:::1;;;;;;;;;;;38385:59;;38408:18;38385:59;;;;;;;;;;;;38473:18;38455:15;;:36;;;;;;;;;;;;;;;;;;38291:208:::0;:::o;31339:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29857:33::-;;;;;;;;;;;;;:::o;37504:182::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37620:8:::1;37589:19;:28;37609:7;37589:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;37660:7;37644:34;;;37669:8;37644:34;;;;;;:::i;:::-;;;;;;;;37504:182:::0;;:::o;35921:215::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36043:4:::1;36037;36033:1;36017:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;36016:31;;;;:::i;:::-;36006:6;:41;;35998:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;36121:6;36111;:17;;;;:::i;:::-;36099:9;:29;;;;35921:215:::0;:::o;30327:39::-;;;;;;;;;;;;;:::o;29701:35::-;;;;:::o;35283:386::-;35364:4;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35421:6:::1;35417:1;35401:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;35388:9;:39;;35380:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;35537:4;35533:1;35517:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35504:9;:37;;35496:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35630:9;35609:18;:30;;;;35657:4;35650:11;;35283:386:::0;;;:::o;30376:27::-;;;;:::o;9389:151::-;9478:7;9505:11;:18;9517:5;9505:18;;;;;;;;;;;;;;;:27;9524:7;9505:27;;;;;;;;;;;;;;;;9498:34;;9389:151;;;;:::o;29743:33::-;;;;:::o;34966:134::-;35026:4;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35065:5:::1;35042:20;;:28;;;;;;;;;;;;;;;;;;35088:4;35081:11;;34966:134:::0;:::o;30447:30::-;;;;:::o;22320:244::-;21595:12;:10;:12::i;:::-;21585:22;;:6;;;;;;;;;;;:22;;;21577:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22429:1:::1;22409:22;;:8;:22;;;;22401:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22519:8;22490:38;;22511:6;;;;;;;;;;;22490:38;;;;;;;;;;;;22548:8;22539:6;;:17;;;;;;;;;;;;;;;;;;22320:244:::0;:::o;30591:31::-;;;;:::o;29783:24::-;;;;:::o;16404:182::-;16462:7;16482:9;16498:1;16494;:5;;;;:::i;:::-;16482:17;;16523:1;16518;:6;;16510:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16577:1;16570:8;;;16404:182;;;;:::o;205:98::-;258:7;285:10;278:17;;205:98;:::o;15023:381::-;15176:1;15159:19;;:5;:19;;;;15151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15257:1;15238:21;;:7;:21;;;;15230:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15342:6;15312:11;:18;15324:5;15312:18;;;;;;;;;;;;;;;:27;15331:7;15312:27;;;;;;;;;;;;;;;:36;;;;15380:7;15364:32;;15373:5;15364:32;;;15389:6;15364:32;;;;;;:::i;:::-;;;;;;;;15023:381;;;:::o;38862:5511::-;39010:1;38994:18;;:4;:18;;;;38986:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39087:1;39073:16;;:2;:16;;;;39065:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39149:10;:14;39160:2;39149:14;;;;;;;;;;;;;;;;;;;;;;;;;39148:15;:36;;;;;39168:10;:16;39179:4;39168:16;;;;;;;;;;;;;;;;;;;;;;;;;39167:17;39148:36;39140:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;39263:1;39253:6;:11;39250:92;;;39281:28;39297:4;39303:2;39307:1;39281:15;:28::i;:::-;39324:7;;39250:92;39358:14;;;;;;;;;;;39355:1811;;;39418:7;:5;:7::i;:::-;39410:15;;:4;:15;;;;:49;;;;;39452:7;:5;:7::i;:::-;39446:13;;:2;:13;;;;39410:49;:86;;;;;39494:1;39480:16;;:2;:16;;;;39410:86;:128;;;;;39531:6;39517:21;;:2;:21;;;;39410:128;:158;;;;;39560:8;;;;;;;;;;;39559:9;39410:158;39388:1767;;;39606:13;;;;;;;;;;;39602:148;;39651:19;:25;39671:4;39651:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39680:19;:23;39700:2;39680:23;;;;;;;;;;;;;;;;;;;;;;;;;39651:52;39643:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;39602:148;39909:20;;;;;;;;;;;39905:423;;;39963:7;:5;:7::i;:::-;39957:13;;:2;:13;;;;:47;;;;;39988:15;39974:30;;:2;:30;;;;39957:47;:79;;;;;40022:13;40008:28;;:2;:28;;;;39957:79;39953:356;;;40114:12;40072:28;:39;40101:9;40072:39;;;;;;;;;;;;;;;;:54;40064:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40273:12;40231:28;:39;40260:9;40231:39;;;;;;;;;;;;;;;:54;;;;39953:356;39905:423;40381:25;:31;40407:4;40381:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40417:31;:35;40449:2;40417:35;;;;;;;;;;;;;;;;;;;;;;;;;40416:36;40381:71;40377:763;;;40499:20;;40489:6;:30;;40481:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;40638:9;;40621:13;40631:2;40621:9;:13::i;:::-;40612:6;:22;;;;:::i;:::-;:35;;40604:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40377:763;;;40750:25;:29;40776:2;40750:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;40784:31;:37;40816:4;40784:37;;;;;;;;;;;;;;;;;;;;;;;;;40783:38;40750:71;40746:394;;;40868:20;;40858:6;:30;;40850:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;40746:394;;;40994:31;:35;41026:2;40994:35;;;;;;;;;;;;;;;;;;;;;;;;;40990:150;;41087:9;;41070:13;41080:2;41070:9;:13::i;:::-;41061:6;:22;;;;:::i;:::-;:35;;41053:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40990:150;40746:394;40377:763;39388:1767;39355:1811;41240:1;41227:10;;:14;;;;:::i;:::-;41210:12;:32;;:73;;;;;41270:13;41264:19;;:2;:19;;;;41210:73;:152;;;;;41319:42;41305:57;;:2;:57;;;;41210:152;41206:221;;;41411:4;41394:10;:14;41405:2;41394:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41206:221;41469:10;41490:13;41482:21;;:4;:21;;;41469:34;;41519:5;41518:6;:28;;;;;41528:18;;;;;;;;;;;41518:28;41514:1018;;;41601:1;41567:24;:30;41592:4;41567:30;;;;;;;;;;;;;;;;:35;;:120;;;;;41671:15;41658:8;41624:24;:30;41649:4;41624:30;;;;;;;;;;;;;;;;:43;;;;:::i;:::-;:62;;41567:120;41563:560;;;41728:21;;41709:16;:40;;;;41787:21;;41768:16;:40;;;;41826:15;;41813:10;:28;;;;41914:10;;41895:16;;41876;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;41860:13;:64;;;;41563:560;;;41984:1;41965:16;:20;;;;42023:1;42004:16;:20;;;;42097:10;;42078:16;;42059;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;42043:13;:64;;;;41563:560;41514:1018;;;42191:1;42159:24;:28;42184:2;42159:28;;;;;;;;;;;;;;;;:33;42155:120;;;42244:15;42213:24;:28;42238:2;42213:28;;;;;;;;;;;;;;;:46;;;;42155:120;42297:18;;;;;;;;;;;42292:229;;42355:1;42336:16;:20;;;;42394:1;42375:16;:20;;;;42421:1;42408:10;:14;;;;42495:10;;42476:16;;42457;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;42441:13;:64;;;;42292:229;41514:1018;42545:28;42576:24;42594:4;42576:9;:24::i;:::-;42545:55;;42614:12;42653:18;;42629:20;:42;;42614:57;;42703:7;:35;;;;;42727:11;;;;;;;;;;;42703:35;:61;;;;;42756:8;;;;;;;;;;;42755:9;42703:61;:110;;;;;42782:25;:31;42808:4;42782:31;;;;;;;;;;;;;;;;;;;;;;;;;42781:32;42703:110;:153;;;;;42831:19;:25;42851:4;42831:25;;;;;;;;;;;;;;;;;;;;;;;;;42830:26;42703:153;:194;;;;;42874:19;:23;42894:2;42874:23;;;;;;;;;;;;;;;;;;;;;;;;;42873:24;42703:194;42685:328;;;42935:4;42924:8;;:15;;;;;;;;;;;;;;;;;;42957:10;:8;:10::i;:::-;42996:5;42985:8;;:16;;;;;;;;;;;;;;;;;;42685:328;43026:12;43042:8;;;;;;;;;;;43041:9;43026:24;;43152:19;:25;43172:4;43152:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43181:19;:23;43201:2;43181:23;;;;;;;;;;;;;;;;;;;;;;;;;43152:52;43149:99;;;43231:5;43221:15;;43149:99;43261:12;43365:7;43362:957;;;43416:25;:29;43442:2;43416:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43465:1;43449:13;;:17;43416:50;43412:754;;;43493:34;43523:3;43493:25;43504:13;;43493:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43486:41;;43594:13;;43575:16;;43568:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43546:18;;:61;;;;;;;:::i;:::-;;;;;;;;43662:13;;43649:10;;43642:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;43626:12;;:49;;;;;;;:::i;:::-;;;;;;;;43742:13;;43723:16;;43716:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;43694:18;;:61;;;;;;;:::i;:::-;;;;;;;;43412:754;;;43816:25;:31;43842:4;43816:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43866:1;43851:12;;:16;43816:51;43813:353;;;43895:33;43924:3;43895:24;43906:12;;43895:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43888:40;;43994:12;;43976:15;;43969:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;43947:18;;:59;;;;;;;:::i;:::-;;;;;;;;44060:12;;44048:9;;44041:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;44025:12;;:47;;;;;;;:::i;:::-;;;;;;;;44138:12;;44120:15;;44113:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;44091:18;;:59;;;;;;;:::i;:::-;;;;;;;;43813:353;43412:754;44193:1;44186:4;:8;44183:93;;;44218:42;44234:4;44248;44255;44218:15;:42::i;:::-;44183:93;44303:4;44293:14;;;;;:::i;:::-;;;43362:957;44332:33;44348:4;44354:2;44358:6;44332:15;:33::i;:::-;38975:5398;;;;;38862:5511;;;;:::o;17310:193::-;17396:7;17429:1;17424;:6;;17432:12;17416:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17456:9;17472:1;17468;:5;;;;:::i;:::-;17456:17;;17494:1;17487:8;;;17310:193;;;;;:::o;38093:189::-;38210:5;38176:25;:31;38202:4;38176:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38268:5;38234:40;;38262:4;38234:40;;;;;;;;;;;;38093:189;;:::o;12587:575::-;12745:1;12727:20;;:6;:20;;;;12719:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12829:1;12808:23;;:9;:23;;;;12800:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12885:47;12906:6;12914:9;12925:6;12885:20;:47::i;:::-;12966:71;12988:6;12966:71;;;;;;;;;;;;;;;;;:9;:17;12976:6;12966:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12946:9;:17;12956:6;12946:17;;;;;;;;;;;;;;;:91;;;;13071:32;13096:6;13071:9;:20;13081:9;13071:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13048:9;:20;13058:9;13048:20;;;;;;;;;;;;;;;:55;;;;13136:9;13119:35;;13128:6;13119:35;;;13147:6;13119:35;;;;;;:::i;:::-;;;;;;;;12587:575;;;:::o;45517:1568::-;45556:23;45582:24;45600:4;45582:9;:24::i;:::-;45556:50;;45617:25;45687:12;;45666:18;;45645;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;45617:82;;45710:12;45758:1;45739:15;:20;:46;;;;45784:1;45763:17;:22;45739:46;45736:60;;;45788:7;;;;;45736:60;45851:2;45830:18;;:23;;;;:::i;:::-;45812:15;:41;45809:111;;;45906:2;45885:18;;:23;;;;:::i;:::-;45867:41;;45809:111;45982:23;46067:1;46047:17;46026:18;;46008:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;45982:86;;46079:26;46108:36;46128:15;46108;:19;;:36;;;;:::i;:::-;46079:65;;46158:25;46186:21;46158:49;;46221:36;46238:18;46221:16;:36::i;:::-;46272:18;46293:44;46319:17;46293:21;:25;;:44;;;;:::i;:::-;46272:65;;46351:23;46377:57;46416:17;46377:34;46392:18;;46377:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;46351:83;;46445:17;46465:51;46498:17;46465:28;46480:12;;46465:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;46445:71;;46527:23;46584:9;46566:15;46553:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;46527:66;;46631:1;46610:18;:22;;;;46664:1;46643:18;:22;;;;46691:1;46676:12;:16;;;;46727:9;;;;;;;;;;;46719:23;;46750:9;46719:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46706:58;;;;;46799:1;46781:15;:19;:42;;;;;46822:1;46804:15;:19;46781:42;46778:210;;;46839:46;46852:15;46869;46839:12;:46::i;:::-;46905:71;46920:18;46940:15;46957:18;;46905:71;;;;;;;;:::i;:::-;;;;;;;;46778:210;47022:15;;;;;;;;;;;47014:29;;47051:21;47014:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47001:76;;;;;45545:1540;;;;;;;;;;45517:1568;:::o;17763:473::-;17821:7;18071:1;18066;:6;18062:47;;;18096:1;18089:8;;;;18062:47;18122:9;18138:1;18134;:5;;;;:::i;:::-;18122:17;;18167:1;18162;18158;:5;;;;:::i;:::-;:10;18150:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18227:1;18220:8;;;17763:473;;;;;:::o;18713:132::-;18771:7;18798:39;18802:1;18805;18798:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18791:46;;18713:132;;;;:::o;16008:125::-;;;;:::o;16870:136::-;16928:7;16955:43;16959:1;16962;16955:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16948:50;;16870:136;;;;:::o;44382:597::-;44511:21;44549:1;44535:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44511:40;;44580:4;44562;44567:1;44562:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44606:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44596:4;44601:1;44596:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44642:62;44659:4;44674:15;44692:11;44642:8;:62::i;:::-;44744:15;:66;;;44825:11;44851:1;44895:4;44922;44942:15;44744:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44437:542;44382:597;:::o;44988:520::-;45136:62;45153:4;45168:15;45186:11;45136:8;:62::i;:::-;45242:15;:31;;;45281:9;45314:4;45334:11;45360:1;45403;45454:4;45474:15;45242:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44988:520;;:::o;19342:279::-;19428:7;19460:1;19456;:5;19463:12;19448:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19487:9;19503:1;19499;:5;;;;:::i;:::-;19487:17;;19612:1;19605:8;;;19342: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:1057::-;5598:6;5606;5614;5622;5630;5638;5687:3;5675:9;5666:7;5662:23;5658:33;5655:120;;;5694:79;;:::i;:::-;5655:120;5814:1;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5785:117;5941:2;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5912:118;6069:2;6095:53;6140:7;6131:6;6120:9;6116:22;6095:53;:::i;:::-;6085:63;;6040:118;6197:2;6223:53;6268:7;6259:6;6248:9;6244:22;6223:53;:::i;:::-;6213:63;;6168:118;6325:3;6352:53;6397:7;6388:6;6377:9;6373:22;6352:53;:::i;:::-;6342:63;;6296:119;6454:3;6481:53;6526:7;6517:6;6506:9;6502:22;6481:53;:::i;:::-;6471:63;;6425:119;5494:1057;;;;;;;;:::o;6557:619::-;6634:6;6642;6650;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:53;6895:7;6886:6;6875:9;6871:22;6850:53;:::i;:::-;6840:63;;6796:117;6952:2;6978:53;7023:7;7014:6;7003:9;6999:22;6978:53;:::i;:::-;6968:63;;6923:118;7080:2;7106:53;7151:7;7142:6;7131:9;7127:22;7106:53;:::i;:::-;7096:63;;7051:118;6557:619;;;;;:::o;7182:116::-;7252:21;7267:5;7252:21;:::i;:::-;7245:5;7242:32;7232:60;;7288:1;7285;7278:12;7232:60;7182:116;:::o;7304:133::-;7347:5;7385:6;7372:20;7363:29;;7401:30;7425:5;7401:30;:::i;:::-;7304:133;;;;:::o;7443:468::-;7508:6;7516;7565:2;7553:9;7544:7;7540:23;7536:32;7533:119;;;7571:79;;:::i;:::-;7533:119;7691:1;7716:53;7761:7;7752:6;7741:9;7737:22;7716:53;:::i;:::-;7706:63;;7662:117;7818:2;7844:50;7886:7;7877:6;7866:9;7862:22;7844:50;:::i;:::-;7834:60;;7789:115;7443:468;;;;;:::o;7917:86::-;7952:7;7992:4;7985:5;7981:16;7970:27;;7917:86;;;:::o;8009:112::-;8092:22;8108:5;8092:22;:::i;:::-;8087:3;8080:35;8009:112;;:::o;8127:214::-;8216:4;8254:2;8243:9;8239:18;8231:26;;8267:67;8331:1;8320:9;8316:17;8307:6;8267:67;:::i;:::-;8127:214;;;;:::o;8347:118::-;8434:24;8452:5;8434:24;:::i;:::-;8429:3;8422:37;8347:118;;:::o;8471:222::-;8564:4;8602:2;8591:9;8587:18;8579:26;;8615:71;8683:1;8672:9;8668:17;8659:6;8615:71;:::i;:::-;8471:222;;;;:::o;8699:619::-;8776:6;8784;8792;8841:2;8829:9;8820:7;8816:23;8812:32;8809:119;;;8847:79;;:::i;:::-;8809:119;8967:1;8992:53;9037:7;9028:6;9017:9;9013:22;8992:53;:::i;:::-;8982:63;;8938:117;9094:2;9120:53;9165:7;9156:6;9145:9;9141:22;9120:53;:::i;:::-;9110:63;;9065:118;9222:2;9248:53;9293:7;9284:6;9273:9;9269:22;9248:53;:::i;:::-;9238:63;;9193:118;8699:619;;;;;:::o;9324:323::-;9380:6;9429:2;9417:9;9408:7;9404:23;9400:32;9397:119;;;9435:79;;:::i;:::-;9397:119;9555:1;9580:50;9622:7;9613:6;9602:9;9598:22;9580:50;:::i;:::-;9570:60;;9526:114;9324:323;;;;:::o;9653:474::-;9721:6;9729;9778:2;9766:9;9757:7;9753:23;9749:32;9746:119;;;9784:79;;:::i;:::-;9746:119;9904:1;9929:53;9974:7;9965:6;9954:9;9950:22;9929:53;:::i;:::-;9919:63;;9875:117;10031:2;10057:53;10102:7;10093:6;10082:9;10078:22;10057:53;:::i;:::-;10047:63;;10002:118;9653:474;;;;;:::o;10133:180::-;10181:77;10178:1;10171:88;10278:4;10275:1;10268:15;10302:4;10299:1;10292:15;10319:320;10363:6;10400:1;10394:4;10390:12;10380:22;;10447:1;10441:4;10437:12;10468:18;10458:81;;10524:4;10516:6;10512:17;10502:27;;10458:81;10586:2;10578:6;10575:14;10555:18;10552:38;10549:84;;;10605:18;;:::i;:::-;10549:84;10370:269;10319:320;;;:::o;10645:182::-;10785:34;10781:1;10773:6;10769:14;10762:58;10645:182;:::o;10833:366::-;10975:3;10996:67;11060:2;11055:3;10996:67;:::i;:::-;10989:74;;11072:93;11161:3;11072:93;:::i;:::-;11190:2;11185:3;11181:12;11174:19;;10833:366;;;:::o;11205:419::-;11371:4;11409:2;11398:9;11394:18;11386:26;;11458:9;11452:4;11448:20;11444:1;11433:9;11429:17;11422:47;11486:131;11612:4;11486:131;:::i;:::-;11478:139;;11205:419;;;:::o;11630:180::-;11678:77;11675:1;11668:88;11775:4;11772:1;11765:15;11799:4;11796:1;11789:15;11816:348;11856:7;11879:20;11897:1;11879:20;:::i;:::-;11874:25;;11913:20;11931:1;11913:20;:::i;:::-;11908:25;;12101:1;12033:66;12029:74;12026:1;12023:81;12018:1;12011:9;12004:17;12000:105;11997:131;;;12108:18;;:::i;:::-;11997:131;12156:1;12153;12149:9;12138:20;;11816:348;;;;:::o;12170:180::-;12218:77;12215:1;12208:88;12315:4;12312:1;12305:15;12339:4;12336:1;12329:15;12356:185;12396:1;12413:20;12431:1;12413:20;:::i;:::-;12408:25;;12447:20;12465:1;12447:20;:::i;:::-;12442:25;;12486:1;12476:35;;12491:18;;:::i;:::-;12476:35;12533:1;12530;12526:9;12521:14;;12356:185;;;;:::o;12547:234::-;12687:34;12683:1;12675:6;12671:14;12664:58;12756:17;12751:2;12743:6;12739:15;12732:42;12547:234;:::o;12787:366::-;12929:3;12950:67;13014:2;13009:3;12950:67;:::i;:::-;12943:74;;13026:93;13115:3;13026:93;:::i;:::-;13144:2;13139:3;13135:12;13128:19;;12787:366;;;:::o;13159:419::-;13325:4;13363:2;13352:9;13348:18;13340:26;;13412:9;13406:4;13402:20;13398:1;13387:9;13383:17;13376:47;13440:131;13566:4;13440:131;:::i;:::-;13432:139;;13159:419;;;:::o;13584:305::-;13624:3;13643:20;13661:1;13643:20;:::i;:::-;13638:25;;13677:20;13695:1;13677:20;:::i;:::-;13672:25;;13831:1;13763:66;13759:74;13756:1;13753:81;13750:107;;;13837:18;;:::i;:::-;13750:107;13881:1;13878;13874:9;13867:16;;13584:305;;;;:::o;13895:179::-;14035:31;14031:1;14023:6;14019:14;14012:55;13895:179;:::o;14080:366::-;14222:3;14243:67;14307:2;14302:3;14243:67;:::i;:::-;14236:74;;14319:93;14408:3;14319:93;:::i;:::-;14437:2;14432:3;14428:12;14421:19;;14080:366;;;:::o;14452:419::-;14618:4;14656:2;14645:9;14641:18;14633:26;;14705:9;14699:4;14695:20;14691:1;14680:9;14676:17;14669:47;14733:131;14859:4;14733:131;:::i;:::-;14725:139;;14452:419;;;:::o;14877:179::-;15017:31;15013:1;15005:6;15001:14;14994:55;14877:179;:::o;15062:366::-;15204:3;15225:67;15289:2;15284:3;15225:67;:::i;:::-;15218:74;;15301:93;15390:3;15301:93;:::i;:::-;15419:2;15414:3;15410:12;15403:19;;15062:366;;;:::o;15434:419::-;15600:4;15638:2;15627:9;15623:18;15615:26;;15687:9;15681:4;15677:20;15673:1;15662:9;15658:17;15651:47;15715:131;15841:4;15715:131;:::i;:::-;15707:139;;15434:419;;;:::o;15859:244::-;15999:34;15995:1;15987:6;15983:14;15976:58;16068:27;16063:2;16055:6;16051:15;16044:52;15859:244;:::o;16109:366::-;16251:3;16272:67;16336:2;16331:3;16272:67;:::i;:::-;16265:74;;16348:93;16437:3;16348:93;:::i;:::-;16466:2;16461:3;16457:12;16450:19;;16109:366;;;:::o;16481:419::-;16647:4;16685:2;16674:9;16670:18;16662:26;;16734:9;16728:4;16724:20;16720:1;16709:9;16705:17;16698:47;16762:131;16888:4;16762:131;:::i;:::-;16754:139;;16481:419;;;:::o;16906:223::-;17046:34;17042:1;17034:6;17030:14;17023:58;17115:6;17110:2;17102:6;17098:15;17091:31;16906:223;:::o;17135:366::-;17277:3;17298:67;17362:2;17357:3;17298:67;:::i;:::-;17291:74;;17374:93;17463:3;17374:93;:::i;:::-;17492:2;17487:3;17483:12;17476:19;;17135:366;;;:::o;17507:419::-;17673:4;17711:2;17700:9;17696:18;17688:26;;17760:9;17754:4;17750:20;17746:1;17735:9;17731:17;17724:47;17788:131;17914:4;17788:131;:::i;:::-;17780:139;;17507:419;;;:::o;17932:240::-;18072:34;18068:1;18060:6;18056:14;18049:58;18141:23;18136:2;18128:6;18124:15;18117:48;17932:240;:::o;18178:366::-;18320:3;18341:67;18405:2;18400:3;18341:67;:::i;:::-;18334:74;;18417:93;18506:3;18417:93;:::i;:::-;18535:2;18530:3;18526:12;18519:19;;18178:366;;;:::o;18550:419::-;18716:4;18754:2;18743:9;18739:18;18731:26;;18803:9;18797:4;18793:20;18789:1;18778:9;18774:17;18767:47;18831:131;18957:4;18831:131;:::i;:::-;18823:139;;18550:419;;;:::o;18975:239::-;19115:34;19111:1;19103:6;19099:14;19092:58;19184:22;19179:2;19171:6;19167:15;19160:47;18975:239;:::o;19220:366::-;19362:3;19383:67;19447:2;19442:3;19383:67;:::i;:::-;19376:74;;19459:93;19548:3;19459:93;:::i;:::-;19577:2;19572:3;19568:12;19561:19;;19220:366;;;:::o;19592:419::-;19758:4;19796:2;19785:9;19781:18;19773:26;;19845:9;19839:4;19835:20;19831:1;19820:9;19816:17;19809:47;19873:131;19999:4;19873:131;:::i;:::-;19865:139;;19592:419;;;:::o;20017:225::-;20157:34;20153:1;20145:6;20141:14;20134:58;20226:8;20221:2;20213:6;20209:15;20202:33;20017:225;:::o;20248:366::-;20390:3;20411:67;20475:2;20470:3;20411:67;:::i;:::-;20404:74;;20487:93;20576:3;20487:93;:::i;:::-;20605:2;20600:3;20596:12;20589:19;;20248:366;;;:::o;20620:419::-;20786:4;20824:2;20813:9;20809:18;20801:26;;20873:9;20867:4;20863:20;20859:1;20848:9;20844:17;20837:47;20901:131;21027:4;20901:131;:::i;:::-;20893:139;;20620:419;;;:::o;21045:177::-;21185:29;21181:1;21173:6;21169:14;21162:53;21045:177;:::o;21228:366::-;21370:3;21391:67;21455:2;21450:3;21391:67;:::i;:::-;21384:74;;21467:93;21556:3;21467:93;:::i;:::-;21585:2;21580:3;21576:12;21569:19;;21228:366;;;:::o;21600:419::-;21766:4;21804:2;21793:9;21789:18;21781:26;;21853:9;21847:4;21843:20;21839:1;21828:9;21824:17;21817:47;21881:131;22007:4;21881:131;:::i;:::-;21873:139;;21600:419;;;:::o;22025:223::-;22165:34;22161:1;22153:6;22149:14;22142:58;22234:6;22229:2;22221:6;22217:15;22210:31;22025:223;:::o;22254:366::-;22396:3;22417:67;22481:2;22476:3;22417:67;:::i;:::-;22410:74;;22493:93;22582:3;22493:93;:::i;:::-;22611:2;22606:3;22602:12;22595:19;;22254:366;;;:::o;22626:419::-;22792:4;22830:2;22819:9;22815:18;22807:26;;22879:9;22873:4;22869:20;22865:1;22854:9;22850:17;22843:47;22907:131;23033:4;22907:131;:::i;:::-;22899:139;;22626:419;;;:::o;23051:221::-;23191:34;23187:1;23179:6;23175:14;23168:58;23260:4;23255:2;23247:6;23243:15;23236:29;23051:221;:::o;23278:366::-;23420:3;23441:67;23505:2;23500:3;23441:67;:::i;:::-;23434:74;;23517:93;23606:3;23517:93;:::i;:::-;23635:2;23630:3;23626:12;23619:19;;23278:366;;;:::o;23650:419::-;23816:4;23854:2;23843:9;23839:18;23831:26;;23903:9;23897:4;23893:20;23889:1;23878:9;23874:17;23867:47;23931:131;24057:4;23931:131;:::i;:::-;23923:139;;23650:419;;;:::o;24075:224::-;24215:34;24211:1;24203:6;24199:14;24192:58;24284:7;24279:2;24271:6;24267:15;24260:32;24075:224;:::o;24305:366::-;24447:3;24468:67;24532:2;24527:3;24468:67;:::i;:::-;24461:74;;24544:93;24633:3;24544:93;:::i;:::-;24662:2;24657:3;24653:12;24646:19;;24305:366;;;:::o;24677:419::-;24843:4;24881:2;24870:9;24866:18;24858:26;;24930:9;24924:4;24920:20;24916:1;24905:9;24901:17;24894:47;24958:131;25084:4;24958:131;:::i;:::-;24950:139;;24677:419;;;:::o;25102:222::-;25242:34;25238:1;25230:6;25226:14;25219:58;25311:5;25306:2;25298:6;25294:15;25287:30;25102:222;:::o;25330:366::-;25472:3;25493:67;25557:2;25552:3;25493:67;:::i;:::-;25486:74;;25569:93;25658:3;25569:93;:::i;:::-;25687:2;25682:3;25678:12;25671:19;;25330:366;;;:::o;25702:419::-;25868:4;25906:2;25895:9;25891:18;25883:26;;25955:9;25949:4;25945:20;25941:1;25930:9;25926:17;25919:47;25983:131;26109:4;25983:131;:::i;:::-;25975:139;;25702:419;;;:::o;26127:236::-;26267:34;26263:1;26255:6;26251:14;26244:58;26336:19;26331:2;26323:6;26319:15;26312:44;26127:236;:::o;26369:366::-;26511:3;26532:67;26596:2;26591:3;26532:67;:::i;:::-;26525:74;;26608:93;26697:3;26608:93;:::i;:::-;26726:2;26721:3;26717:12;26710:19;;26369:366;;;:::o;26741:419::-;26907:4;26945:2;26934:9;26930:18;26922:26;;26994:9;26988:4;26984:20;26980:1;26969:9;26965:17;26958:47;27022:131;27148:4;27022:131;:::i;:::-;27014:139;;26741:419;;;:::o;27166:172::-;27306:24;27302:1;27294:6;27290:14;27283:48;27166:172;:::o;27344:366::-;27486:3;27507:67;27571:2;27566:3;27507:67;:::i;:::-;27500:74;;27583:93;27672:3;27583:93;:::i;:::-;27701:2;27696:3;27692:12;27685:19;;27344:366;;;:::o;27716:419::-;27882:4;27920:2;27909:9;27905:18;27897:26;;27969:9;27963:4;27959:20;27955:1;27944:9;27940:17;27933:47;27997:131;28123:4;27997:131;:::i;:::-;27989:139;;27716:419;;;:::o;28141:297::-;28281:34;28277:1;28269:6;28265:14;28258:58;28350:34;28345:2;28337:6;28333:15;28326:59;28419:11;28414:2;28406:6;28402:15;28395:36;28141:297;:::o;28444:366::-;28586:3;28607:67;28671:2;28666:3;28607:67;:::i;:::-;28600:74;;28683:93;28772:3;28683:93;:::i;:::-;28801:2;28796:3;28792:12;28785:19;;28444:366;;;:::o;28816:419::-;28982:4;29020:2;29009:9;29005:18;28997:26;;29069:9;29063:4;29059:20;29055:1;29044:9;29040:17;29033:47;29097:131;29223:4;29097:131;:::i;:::-;29089:139;;28816:419;;;:::o;29241:240::-;29381:34;29377:1;29369:6;29365:14;29358:58;29450:23;29445:2;29437:6;29433:15;29426:48;29241:240;:::o;29487:366::-;29629:3;29650:67;29714:2;29709:3;29650:67;:::i;:::-;29643:74;;29726:93;29815:3;29726:93;:::i;:::-;29844:2;29839:3;29835:12;29828:19;;29487:366;;;:::o;29859:419::-;30025:4;30063:2;30052:9;30048:18;30040:26;;30112:9;30106:4;30102:20;30098:1;30087:9;30083:17;30076:47;30140:131;30266:4;30140:131;:::i;:::-;30132:139;;29859:419;;;:::o;30284:169::-;30424:21;30420:1;30412:6;30408:14;30401:45;30284:169;:::o;30459:366::-;30601:3;30622:67;30686:2;30681:3;30622:67;:::i;:::-;30615:74;;30698:93;30787:3;30698:93;:::i;:::-;30816:2;30811:3;30807:12;30800:19;;30459:366;;;:::o;30831:419::-;30997:4;31035:2;31024:9;31020:18;31012:26;;31084:9;31078:4;31074:20;31070:1;31059:9;31055:17;31048:47;31112:131;31238:4;31112:131;:::i;:::-;31104:139;;30831:419;;;:::o;31256:241::-;31396:34;31392:1;31384:6;31380:14;31373:58;31465:24;31460:2;31452:6;31448:15;31441:49;31256:241;:::o;31503:366::-;31645:3;31666:67;31730:2;31725:3;31666:67;:::i;:::-;31659:74;;31742:93;31831:3;31742:93;:::i;:::-;31860:2;31855:3;31851:12;31844:19;;31503:366;;;:::o;31875:419::-;32041:4;32079:2;32068:9;32064:18;32056:26;;32128:9;32122:4;32118:20;32114:1;32103:9;32099:17;32092:47;32156:131;32282:4;32156:131;:::i;:::-;32148:139;;31875:419;;;:::o;32300:191::-;32340:4;32360:20;32378:1;32360:20;:::i;:::-;32355:25;;32394:20;32412:1;32394:20;:::i;:::-;32389:25;;32433:1;32430;32427:8;32424:34;;;32438:18;;:::i;:::-;32424:34;32483:1;32480;32476:9;32468:17;;32300:191;;;;:::o;32497:147::-;32598:11;32635:3;32620:18;;32497:147;;;;:::o;32650:114::-;;:::o;32770:398::-;32929:3;32950:83;33031:1;33026:3;32950:83;:::i;:::-;32943:90;;33042:93;33131:3;33042:93;:::i;:::-;33160:1;33155:3;33151:11;33144:18;;32770:398;;;:::o;33174:379::-;33358:3;33380:147;33523:3;33380:147;:::i;:::-;33373:154;;33544:3;33537:10;;33174:379;;;:::o;33559:442::-;33708:4;33746:2;33735:9;33731:18;33723:26;;33759:71;33827:1;33816:9;33812:17;33803:6;33759:71;:::i;:::-;33840:72;33908:2;33897:9;33893:18;33884:6;33840:72;:::i;:::-;33922;33990:2;33979:9;33975:18;33966:6;33922:72;:::i;:::-;33559:442;;;;;;:::o;34007:220::-;34147:34;34143:1;34135:6;34131:14;34124:58;34216:3;34211:2;34203:6;34199:15;34192:28;34007:220;:::o;34233:366::-;34375:3;34396:67;34460:2;34455:3;34396:67;:::i;:::-;34389:74;;34472:93;34561:3;34472:93;:::i;:::-;34590:2;34585:3;34581:12;34574:19;;34233:366;;;:::o;34605:419::-;34771:4;34809:2;34798:9;34794:18;34786:26;;34858:9;34852:4;34848:20;34844:1;34833:9;34829:17;34822:47;34886:131;35012:4;34886:131;:::i;:::-;34878:139;;34605:419;;;:::o;35030:180::-;35078:77;35075:1;35068:88;35175:4;35172:1;35165:15;35199:4;35196:1;35189:15;35216:180;35264:77;35261:1;35254:88;35361:4;35358:1;35351:15;35385:4;35382:1;35375:15;35402:143;35459:5;35490:6;35484:13;35475:22;;35506:33;35533:5;35506:33;:::i;:::-;35402:143;;;;:::o;35551:351::-;35621:6;35670:2;35658:9;35649:7;35645:23;35641:32;35638:119;;;35676:79;;:::i;:::-;35638:119;35796:1;35821:64;35877:7;35868:6;35857:9;35853:22;35821:64;:::i;:::-;35811:74;;35767:128;35551:351;;;;:::o;35908:85::-;35953:7;35982:5;35971:16;;35908:85;;;:::o;35999:158::-;36057:9;36090:61;36108:42;36117:32;36143:5;36117:32;:::i;:::-;36108:42;:::i;:::-;36090:61;:::i;:::-;36077:74;;35999:158;;;:::o;36163:147::-;36258:45;36297:5;36258:45;:::i;:::-;36253:3;36246:58;36163:147;;:::o;36316:114::-;36383:6;36417:5;36411:12;36401:22;;36316:114;;;:::o;36436:184::-;36535:11;36569:6;36564:3;36557:19;36609:4;36604:3;36600:14;36585:29;;36436:184;;;;:::o;36626:132::-;36693:4;36716:3;36708:11;;36746:4;36741:3;36737:14;36729:22;;36626:132;;;:::o;36764:108::-;36841:24;36859:5;36841:24;:::i;:::-;36836:3;36829:37;36764:108;;:::o;36878:179::-;36947:10;36968:46;37010:3;37002:6;36968:46;:::i;:::-;37046:4;37041:3;37037:14;37023:28;;36878:179;;;;:::o;37063:113::-;37133:4;37165;37160:3;37156:14;37148:22;;37063:113;;;:::o;37212:732::-;37331:3;37360:54;37408:5;37360:54;:::i;:::-;37430:86;37509:6;37504:3;37430:86;:::i;:::-;37423:93;;37540:56;37590:5;37540:56;:::i;:::-;37619:7;37650:1;37635:284;37660:6;37657:1;37654:13;37635:284;;;37736:6;37730:13;37763:63;37822:3;37807:13;37763:63;:::i;:::-;37756:70;;37849:60;37902:6;37849:60;:::i;:::-;37839:70;;37695:224;37682:1;37679;37675:9;37670:14;;37635:284;;;37639:14;37935:3;37928:10;;37336:608;;;37212:732;;;;:::o;37950:831::-;38213:4;38251:3;38240:9;38236:19;38228:27;;38265:71;38333:1;38322:9;38318:17;38309:6;38265:71;:::i;:::-;38346:80;38422:2;38411:9;38407:18;38398:6;38346:80;:::i;:::-;38473:9;38467:4;38463:20;38458:2;38447:9;38443:18;38436:48;38501:108;38604:4;38595:6;38501:108;:::i;:::-;38493:116;;38619:72;38687:2;38676:9;38672:18;38663:6;38619:72;:::i;:::-;38701:73;38769:3;38758:9;38754:19;38745:6;38701:73;:::i;:::-;37950:831;;;;;;;;:::o;38787:807::-;39036:4;39074:3;39063:9;39059:19;39051:27;;39088:71;39156:1;39145:9;39141:17;39132:6;39088:71;:::i;:::-;39169:72;39237:2;39226:9;39222:18;39213:6;39169:72;:::i;:::-;39251:80;39327:2;39316:9;39312:18;39303:6;39251:80;:::i;:::-;39341;39417:2;39406:9;39402:18;39393:6;39341:80;:::i;:::-;39431:73;39499:3;39488:9;39484:19;39475:6;39431:73;:::i;:::-;39514;39582:3;39571:9;39567:19;39558:6;39514:73;:::i;:::-;38787:807;;;;;;;;;:::o;39600:143::-;39657:5;39688:6;39682:13;39673:22;;39704:33;39731:5;39704:33;:::i;:::-;39600:143;;;;:::o;39749:663::-;39837:6;39845;39853;39902:2;39890:9;39881:7;39877:23;39873:32;39870:119;;;39908:79;;:::i;:::-;39870:119;40028:1;40053:64;40109:7;40100:6;40089:9;40085:22;40053:64;:::i;:::-;40043:74;;39999:128;40166:2;40192:64;40248:7;40239:6;40228:9;40224:22;40192:64;:::i;:::-;40182:74;;40137:129;40305:2;40331:64;40387:7;40378:6;40367:9;40363:22;40331:64;:::i;:::-;40321:74;;40276:129;39749:663;;;;;:::o

Swarm Source

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