ETH Price: $2,688.06 (-2.34%)

Token

Eight Trigrams (HAKKÉ)
 

Overview

Max Total Supply

1,000,000,000,000 HAKKÉ

Holders

23

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*joegrower420🌱️.eth
Balance
9,731,347,731.097671263372810964 HAKKÉ

Value
$0.00
0x17a5ccf17d2a8ed45cc1f8130cc3374582db753a
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:
EightTrigrams

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-18
*/

/*

Medium: https://medium.com/@TranquillityInMe/the-8-trigrams-八卦阵-a08ef840c354

t.me/hakkeportal


*/                                                                                     

// SPDX-License-Identifier: MIT
pragma solidity 0.8.16;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this;
        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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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 EightTrigrams is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    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;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    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 tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

    // exlcude 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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Eight Trigrams", "HAKK\xC3\x89") {
        
        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 = 1;
        uint256 _buyLiquidityFee = 2;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 1;
        uint256 _sellLiquidityFee = 2;
        uint256 _sellDevFee = 0;
        
        uint256 totalSupply =10000_0000_0000 * 1e18;

        maxTransactionAmount = totalSupply * 30 / 1000; // 3% maxTransactionAmountTxn
        maxWallet = totalSupply * 30 / 1000; // 3% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
        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;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
    
    // disable Transfer delay - cannot be reenabled
    function disableTXDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
    
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 15 / 1000, "Swap amount cannot be higher than 1.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 8, "Must keep fees at 8% or less");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function setZeroTaxes() external onlyOwner {
        buyMarketingFee = 0;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        sellMarketingFee = 0;
        sellLiquidityFee = 0;
        sellDevFee = 0;
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }
    
    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");
        
         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;
                    }
                }
                uint256 sellAtAmount = sellLiquidityFee;
                //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.");
                        require(sellAtAmount > 0, "Sell transfer amount bellow minTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
        
		uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            
            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * 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
            deadAddress,
            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":[{"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":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTXDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":[],"name":"setZeroTaxes","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600d60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600e81526020017f4569676874205472696772616d730000000000000000000000000000000000008152506040518060400160405280600681526020017f48414b4bc38900000000000000000000000000000000000000000000000000008152508160039081620000fb919062000df4565b5080600490816200010d919062000df4565b5050506000620001226200064760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200064f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f45565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f45565b6040518363ffffffff1660e01b81526004016200034092919062000f88565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f45565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200064f60201b60201c565b620003e360a05160016200074c60201b60201c565b600060019050600060029050600080600190506000600290506000806c0c9f2c9cd04674edea4000000090506103e8601e8262000421919062000fe4565b6200042d919062001074565b6008819055506103e8601e8262000445919062000fe4565b62000451919062001074565b600a8190555061271060058262000469919062000fe4565b62000475919062001074565b60098190555086600f819055508560108190555084601181905550601154601054600f54620004a59190620010ac565b620004b19190620010ac565b600e81905550836013819055508260148190555081601581905550601554601454601354620004e19190620010ac565b620004ed9190620010ac565b60128190555062000503620007ed60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000553620007ed60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b5620005a7620007ed60201b60201c565b60016200081760201b60201c565b620005c83060016200081760201b60201c565b620005dd61dead60016200081760201b60201c565b620005ff620005f1620007ed60201b60201c565b60016200064f60201b60201c565b620006123060016200064f60201b60201c565b6200062761dead60016200064f60201b60201c565b6200063933826200096460201b60201c565b5050505050505050620012b6565b600033905090565b6200065f6200064760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006f1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e89062001148565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008276200064760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008b9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b09062001148565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000958919062001187565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cd90620011f4565b60405180910390fd5b620009ea6000838362000b1260201b60201c565b62000a068160025462000b1760201b62001ed91790919060201c565b60028190555062000a64816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b1760201b62001ed91790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b06919062001227565b60405180910390a35050565b505050565b600080828462000b289190620010ac565b90508381101562000b70576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b679062001294565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bfc57607f821691505b60208210810362000c125762000c1162000bb4565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c7c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c3d565b62000c88868362000c3d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cd562000ccf62000cc98462000ca0565b62000caa565b62000ca0565b9050919050565b6000819050919050565b62000cf18362000cb4565b62000d0962000d008262000cdc565b84845462000c4a565b825550505050565b600090565b62000d2062000d11565b62000d2d81848462000ce6565b505050565b5b8181101562000d555762000d4960008262000d16565b60018101905062000d33565b5050565b601f82111562000da45762000d6e8162000c18565b62000d798462000c2d565b8101602085101562000d89578190505b62000da162000d988562000c2d565b83018262000d32565b50505b505050565b600082821c905092915050565b600062000dc96000198460080262000da9565b1980831691505092915050565b600062000de4838362000db6565b9150826002028217905092915050565b62000dff8262000b7a565b67ffffffffffffffff81111562000e1b5762000e1a62000b85565b5b62000e27825462000be3565b62000e3482828562000d59565b600060209050601f83116001811462000e6c576000841562000e57578287015190505b62000e63858262000dd6565b86555062000ed3565b601f19841662000e7c8662000c18565b60005b8281101562000ea65784890151825560018201915060208501945060208101905062000e7f565b8683101562000ec6578489015162000ec2601f89168262000db6565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f0d8262000ee0565b9050919050565b62000f1f8162000f00565b811462000f2b57600080fd5b50565b60008151905062000f3f8162000f14565b92915050565b60006020828403121562000f5e5762000f5d62000edb565b5b600062000f6e8482850162000f2e565b91505092915050565b62000f828162000f00565b82525050565b600060408201905062000f9f600083018562000f77565b62000fae602083018462000f77565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ff18262000ca0565b915062000ffe8362000ca0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200103a576200103962000fb5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010818262000ca0565b91506200108e8362000ca0565b925082620010a157620010a062001045565b5b828204905092915050565b6000620010b98262000ca0565b9150620010c68362000ca0565b9250828201905080821115620010e157620010e062000fb5565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001130602083620010e7565b91506200113d82620010f8565b602082019050919050565b60006020820190508181036000830152620011638162001121565b9050919050565b60008115159050919050565b62001181816200116a565b82525050565b60006020820190506200119e600083018462001176565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011dc601f83620010e7565b9150620011e982620011a4565b602082019050919050565b600060208201905081810360008301526200120f81620011cd565b9050919050565b620012218162000ca0565b82525050565b60006020820190506200123e600083018462001216565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200127c601b83620010e7565b9150620012898262001244565b602082019050919050565b60006020820190508181036000830152620012af816200126d565b9050919050565b60805160a051614d156200131460003960008181610e0c015281816115f801526124bd015260008181610c37015281816124650152818161361b015281816136fc01528181613723015281816137bf01526137e60152614d156000f3fe6080604052600436106102b25760003560e01c80638da5cb5b11610175578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610abb578063f2fde38b14610ae6578063f637434214610b0f578063f8b45b0514610b3a576102b9565b8063dd62ed3e14610a3c578063e2f4560514610a79578063eb864e9c14610aa4576102b9565b8063c02466681461092c578063c17b5b8c14610955578063c876d0b91461097e578063c8c8ebe4146109a9578063d257b34f146109d4578063d85ba06314610a11576102b9565b80639fccce321161012e5780639fccce32146107f4578063a0d82dc51461081f578063a457c2d71461084a578063a9059cbb14610887578063b62496f5146108c4578063bbc0c74214610901576102b9565b80638da5cb5b146106f45780638ea5220f1461071f578063921369131461074a57806395d89b41146107755780639a7a23d6146107a05780639c3b4fdc146107c9576102b9565b80634a62bb6511610219578063751039fc116101d2578063751039fc1461060a5780637571336a1461063557806375f0a8741461065e5780637bce5a04146106895780638095d564146106b45780638a8c523c146106dd576102b9565b80634a62bb651461050a57806363eb2a6f146105355780636a486a8e146105605780636ddd17131461058b57806370a08231146105b6578063715018a6146105f3576102b9565b80631f3fed8f1161026b5780631f3fed8f146103e457806323b872dd1461040f57806327c8f8351461044c578063313ce5671461047757806339509351146104a257806349bd5a5e146104df576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631a8145bb146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b65565b6040516102e09190613988565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613a43565b610bf7565b60405161031d9190613a9e565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613ab9565b610c15565b60405161035a9190613a9e565b60405180910390f35b34801561036f57600080fd5b50610378610c35565b6040516103859190613b45565b60405180910390f35b34801561039a57600080fd5b506103a3610c59565b6040516103b09190613b6f565b60405180910390f35b3480156103c557600080fd5b506103ce610c63565b6040516103db9190613b6f565b60405180910390f35b3480156103f057600080fd5b506103f9610c69565b6040516104069190613b6f565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613b8a565b610c6f565b6040516104439190613a9e565b60405180910390f35b34801561045857600080fd5b50610461610d48565b60405161046e9190613bec565b60405180910390f35b34801561048357600080fd5b5061048c610d4e565b6040516104999190613c23565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613a43565b610d57565b6040516104d69190613a9e565b60405180910390f35b3480156104eb57600080fd5b506104f4610e0a565b6040516105019190613bec565b60405180910390f35b34801561051657600080fd5b5061051f610e2e565b60405161052c9190613a9e565b60405180910390f35b34801561054157600080fd5b5061054a610e41565b6040516105579190613a9e565b60405180910390f35b34801561056c57600080fd5b50610575610efc565b6040516105829190613b6f565b60405180910390f35b34801561059757600080fd5b506105a0610f02565b6040516105ad9190613a9e565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613ab9565b610f15565b6040516105ea9190613b6f565b60405180910390f35b3480156105ff57600080fd5b50610608610f5d565b005b34801561061657600080fd5b5061061f6110b5565b60405161062c9190613a9e565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190613c6a565b611170565b005b34801561066a57600080fd5b50610673611262565b6040516106809190613bec565b60405180910390f35b34801561069557600080fd5b5061069e611288565b6040516106ab9190613b6f565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613caa565b61128e565b005b3480156106e957600080fd5b506106f26113a8565b005b34801561070057600080fd5b50610709611477565b6040516107169190613bec565b60405180910390f35b34801561072b57600080fd5b506107346114a1565b6040516107419190613bec565b60405180910390f35b34801561075657600080fd5b5061075f6114c7565b60405161076c9190613b6f565b60405180910390f35b34801561078157600080fd5b5061078a6114cd565b6040516107979190613988565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190613c6a565b61155f565b005b3480156107d557600080fd5b506107de611692565b6040516107eb9190613b6f565b60405180910390f35b34801561080057600080fd5b50610809611698565b6040516108169190613b6f565b60405180910390f35b34801561082b57600080fd5b5061083461169e565b6040516108419190613b6f565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c9190613a43565b6116a4565b60405161087e9190613a9e565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613a43565b611771565b6040516108bb9190613a9e565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190613ab9565b61178f565b6040516108f89190613a9e565b60405180910390f35b34801561090d57600080fd5b506109166117af565b6040516109239190613a9e565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613c6a565b6117c2565b005b34801561096157600080fd5b5061097c60048036038101906109779190613caa565b611902565b005b34801561098a57600080fd5b50610993611a1c565b6040516109a09190613a9e565b60405180910390f35b3480156109b557600080fd5b506109be611a2f565b6040516109cb9190613b6f565b60405180910390f35b3480156109e057600080fd5b506109fb60048036038101906109f69190613cfd565b611a35565b604051610a089190613a9e565b60405180910390f35b348015610a1d57600080fd5b50610a26611ba5565b604051610a339190613b6f565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190613d2a565b611bab565b604051610a709190613b6f565b60405180910390f35b348015610a8557600080fd5b50610a8e611c32565b604051610a9b9190613b6f565b60405180910390f35b348015610ab057600080fd5b50610ab9611c38565b005b348015610ac757600080fd5b50610ad0611d01565b604051610add9190613b6f565b60405180910390f35b348015610af257600080fd5b50610b0d6004803603810190610b089190613ab9565b611d07565b005b348015610b1b57600080fd5b50610b24611ecd565b604051610b319190613b6f565b60405180910390f35b348015610b4657600080fd5b50610b4f611ed3565b604051610b5c9190613b6f565b60405180910390f35b606060038054610b7490613d99565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613d99565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c0b610c04611f37565b8484611f3f565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60175481565b60165481565b6000610c7c848484612108565b610d3d84610c88611f37565b610d3885604051806060016040528060288152602001614c9360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cee611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea9092919063ffffffff16565b611f3f565b600190509392505050565b61dead81565b60006012905090565b6000610e00610d64611f37565b84610dfb8560016000610d75611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed990919063ffffffff16565b611f3f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000610e4b611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190613e16565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f65611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613e16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006110bf611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114590613e16565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611178611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90613e16565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611296611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90613e16565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f5461134d9190613e65565b6113579190613e65565b600e819055506008600e5411156113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613ee5565b60405180910390fd5b505050565b6113b0611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613e16565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6060600480546114dc90613d99565b80601f016020809104026020016040519081016040528092919081815260200182805461150890613d99565b80156115555780601f1061152a57610100808354040283529160200191611555565b820191906000526020600020905b81548152906001019060200180831161153857829003601f168201915b5050505050905090565b611567611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613e16565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90613f77565b60405180910390fd5b61168e8282612e4e565b5050565b60115481565b60185481565b60155481565b60006117676116b1611f37565b8461176285604051806060016040528060258152602001614cbb60259139600160006116db611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea9092919063ffffffff16565b611f3f565b6001905092915050565b600061178561177e611f37565b8484612108565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6117ca611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613e16565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118f69190613a9e565b60405180910390a25050565b61190a611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613e16565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546119c19190613e65565b6119cb9190613e65565b601281905550600a6012541115611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90613fe3565b60405180910390fd5b505050565b600d60009054906101000a900460ff1681565b60085481565b6000611a3f611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613e16565b60405180910390fd5b620186a06001611adc610c59565b611ae69190614003565b611af0919061408c565b821015611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b299061412f565b60405180910390fd5b6103e8600f611b3f610c59565b611b499190614003565b611b53919061408c565b821115611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906141c1565b60405180910390fd5b8160098190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611c40611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690613e16565b60405180910390fd5b6000600f8190555060006010819055506000601181905550600060138190555060006014819055506000601581905550565b60105481565b611d0f611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590613e16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0490614253565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b6000808284611ee89190613e65565b905083811015611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f24906142bf565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa590614351565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361201d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612014906143e3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120fb9190613b6f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90614475565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614507565b60405180910390fd5b600081036121ff576121fa83836000612eef565b612de5565b600b60009054906101000a900460ff161561290d5761221c611477565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561228a575061225a611477565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122c35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122fd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123165750600560149054906101000a900460ff16155b1561290c57600b60019054906101000a900460ff1661241057601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123d05750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690614573565b60405180910390fd5b5b600d60009054906101000a900460ff16156125d85761242d611477565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156124b457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561250c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125d75743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899061462b565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b60006014549050601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126825750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612729576008548211156126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c3906146bd565b60405180910390fd5b600a546126d884610f15565b836126e39190613e65565b1115612724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271b90614729565b60405180910390fd5b61290a565b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127cc5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561285e57600854821115612816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280d906147bb565b60405180910390fd5b60008111612859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128509061484d565b60405180910390fd5b612909565b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661290857600a546128bb84610f15565b836128c69190613e65565b1115612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe90614729565b60405180910390fd5b5b5b5b505b5b600061291830610f15565b90506000600954821015905080801561293d5750600b60029054906101000a900460ff165b80156129565750600560149054906101000a900460ff16155b80156129ac5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a025750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a585750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9c576001600560146101000a81548160ff021916908315150217905550612a80613182565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b525750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b5c57600090505b60008115612dd557601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bbf57506000601254115b15612c8c57612bec6064612bde6012548861346990919063ffffffff16565b6134e390919063ffffffff16565b905060125460145482612bff9190614003565b612c09919061408c565b60176000828254612c1a9190613e65565b9250508190555060125460155482612c329190614003565b612c3c919061408c565b60186000828254612c4d9190613e65565b9250508190555060125460135482612c659190614003565b612c6f919061408c565b60166000828254612c809190613e65565b92505081905550612db1565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce757506000600e54115b15612db057612d146064612d06600e548861346990919063ffffffff16565b6134e390919063ffffffff16565b9050600e5460105482612d279190614003565b612d31919061408c565b60176000828254612d429190613e65565b92505081905550600e5460115482612d5a9190614003565b612d64919061408c565b60186000828254612d759190613e65565b92505081905550600e54600f5482612d8d9190614003565b612d97919061408c565b60166000828254612da89190613e65565b925050819055505b5b6000811115612dc657612dc5873083612eef565b5b8085612dd2919061486d565b94505b612de0878787612eef565b505050505b505050565b6000838311158290612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e299190613988565b60405180910390fd5b5060008385612e41919061486d565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5590614475565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc490614507565b60405180910390fd5b612fd883838361352d565b61304381604051806060016040528060268152602001614c6d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130d6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131759190613b6f565b60405180910390a3505050565b600061318d30610f15565b905060006018546016546017546131a49190613e65565b6131ae9190613e65565b90506000808314806131c05750600082145b156131cd57505050613467565b60146009546131dc9190614003565b8311156131f55760146009546131f29190614003565b92505b6000600283601754866132089190614003565b613212919061408c565b61321c919061408c565b90506000613233828661353290919063ffffffff16565b905060004790506132438261357c565b6000613258824761353290919063ffffffff16565b90506000613283876132756016548561346990919063ffffffff16565b6134e390919063ffffffff16565b905060006132ae886132a06018548661346990919063ffffffff16565b6134e390919063ffffffff16565b905060008183856132bf919061486d565b6132c9919061486d565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613329906148d2565b60006040518083038185875af1925050503d8060008114613366576040519150601f19603f3d011682016040523d82523d6000602084013e61336b565b606091505b5050809850506000871180156133815750600081115b156133ce5761339087826137b9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516133c5939291906148e7565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613414906148d2565b60006040518083038185875af1925050503d8060008114613451576040519150601f19603f3d011682016040523d82523d6000602084013e613456565b606091505b505080985050505050505050505050505b565b600080830361347b57600090506134dd565b600082846134899190614003565b9050828482613498919061408c565b146134d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cf90614990565b60405180910390fd5b809150505b92915050565b600061352583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613895565b905092915050565b505050565b600061357483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612dea565b905092915050565b6000600267ffffffffffffffff811115613599576135986149b0565b5b6040519080825280602002602001820160405280156135c75781602001602082028036833780820191505090505b50905030816000815181106135df576135de6149df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a89190614a23565b816001815181106136bc576136bb6149df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613721307f000000000000000000000000000000000000000000000000000000000000000084611f3f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613783959493929190614b49565b600060405180830381600087803b15801561379d57600080fd5b505af11580156137b1573d6000803e3d6000fd5b505050505050565b6137e4307f000000000000000000000000000000000000000000000000000000000000000084611f3f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161384b96959493929190614ba3565b60606040518083038185885af1158015613869573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061388e9190614c19565b5050505050565b600080831182906138dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d39190613988565b60405180910390fd5b50600083856138eb919061408c565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613932578082015181840152602081019050613917565b60008484015250505050565b6000601f19601f8301169050919050565b600061395a826138f8565b6139648185613903565b9350613974818560208601613914565b61397d8161393e565b840191505092915050565b600060208201905081810360008301526139a2818461394f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139da826139af565b9050919050565b6139ea816139cf565b81146139f557600080fd5b50565b600081359050613a07816139e1565b92915050565b6000819050919050565b613a2081613a0d565b8114613a2b57600080fd5b50565b600081359050613a3d81613a17565b92915050565b60008060408385031215613a5a57613a596139aa565b5b6000613a68858286016139f8565b9250506020613a7985828601613a2e565b9150509250929050565b60008115159050919050565b613a9881613a83565b82525050565b6000602082019050613ab36000830184613a8f565b92915050565b600060208284031215613acf57613ace6139aa565b5b6000613add848285016139f8565b91505092915050565b6000819050919050565b6000613b0b613b06613b01846139af565b613ae6565b6139af565b9050919050565b6000613b1d82613af0565b9050919050565b6000613b2f82613b12565b9050919050565b613b3f81613b24565b82525050565b6000602082019050613b5a6000830184613b36565b92915050565b613b6981613a0d565b82525050565b6000602082019050613b846000830184613b60565b92915050565b600080600060608486031215613ba357613ba26139aa565b5b6000613bb1868287016139f8565b9350506020613bc2868287016139f8565b9250506040613bd386828701613a2e565b9150509250925092565b613be6816139cf565b82525050565b6000602082019050613c016000830184613bdd565b92915050565b600060ff82169050919050565b613c1d81613c07565b82525050565b6000602082019050613c386000830184613c14565b92915050565b613c4781613a83565b8114613c5257600080fd5b50565b600081359050613c6481613c3e565b92915050565b60008060408385031215613c8157613c806139aa565b5b6000613c8f858286016139f8565b9250506020613ca085828601613c55565b9150509250929050565b600080600060608486031215613cc357613cc26139aa565b5b6000613cd186828701613a2e565b9350506020613ce286828701613a2e565b9250506040613cf386828701613a2e565b9150509250925092565b600060208284031215613d1357613d126139aa565b5b6000613d2184828501613a2e565b91505092915050565b60008060408385031215613d4157613d406139aa565b5b6000613d4f858286016139f8565b9250506020613d60858286016139f8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613db157607f821691505b602082108103613dc457613dc3613d6a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e00602083613903565b9150613e0b82613dca565b602082019050919050565b60006020820190508181036000830152613e2f81613df3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e7082613a0d565b9150613e7b83613a0d565b9250828201905080821115613e9357613e92613e36565b5b92915050565b7f4d757374206b6565702066656573206174203825206f72206c65737300000000600082015250565b6000613ecf601c83613903565b9150613eda82613e99565b602082019050919050565b60006020820190508181036000830152613efe81613ec2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f61603983613903565b9150613f6c82613f05565b604082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613fcd601d83613903565b9150613fd882613f97565b602082019050919050565b60006020820190508181036000830152613ffc81613fc0565b9050919050565b600061400e82613a0d565b915061401983613a0d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405257614051613e36565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061409782613a0d565b91506140a283613a0d565b9250826140b2576140b161405d565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614119603583613903565b9150614124826140bd565b604082019050919050565b600060208201905081810360008301526141488161410c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006141ab603483613903565b91506141b68261414f565b604082019050919050565b600060208201905081810360008301526141da8161419e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061423d602683613903565b9150614248826141e1565b604082019050919050565b6000602082019050818103600083015261426c81614230565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006142a9601b83613903565b91506142b482614273565b602082019050919050565b600060208201905081810360008301526142d88161429c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061433b602483613903565b9150614346826142df565b604082019050919050565b6000602082019050818103600083015261436a8161432e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143cd602283613903565b91506143d882614371565b604082019050919050565b600060208201905081810360008301526143fc816143c0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061445f602583613903565b915061446a82614403565b604082019050919050565b6000602082019050818103600083015261448e81614452565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144f1602383613903565b91506144fc82614495565b604082019050919050565b60006020820190508181036000830152614520816144e4565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061455d601683613903565b915061456882614527565b602082019050919050565b6000602082019050818103600083015261458c81614550565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614615604983613903565b915061462082614593565b606082019050919050565b6000602082019050818103600083015261464481614608565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006146a7603583613903565b91506146b28261464b565b604082019050919050565b600060208201905081810360008301526146d68161469a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614713601383613903565b915061471e826146dd565b602082019050919050565b6000602082019050818103600083015261474281614706565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006147a5603683613903565b91506147b082614749565b604082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742062656c6c6f77206d696e5460008201527f72616e73616374696f6e416d6f756e742e000000000000000000000000000000602082015250565b6000614837603183613903565b9150614842826147db565b604082019050919050565b600060208201905081810360008301526148668161482a565b9050919050565b600061487882613a0d565b915061488383613a0d565b925082820390508181111561489b5761489a613e36565b5b92915050565b600081905092915050565b50565b60006148bc6000836148a1565b91506148c7826148ac565b600082019050919050565b60006148dd826148af565b9150819050919050565b60006060820190506148fc6000830186613b60565b6149096020830185613b60565b6149166040830184613b60565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061497a602183613903565b91506149858261491e565b604082019050919050565b600060208201905081810360008301526149a98161496d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614a1d816139e1565b92915050565b600060208284031215614a3957614a386139aa565b5b6000614a4784828501614a0e565b91505092915050565b6000819050919050565b6000614a75614a70614a6b84614a50565b613ae6565b613a0d565b9050919050565b614a8581614a5a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ac0816139cf565b82525050565b6000614ad28383614ab7565b60208301905092915050565b6000602082019050919050565b6000614af682614a8b565b614b008185614a96565b9350614b0b83614aa7565b8060005b83811015614b3c578151614b238882614ac6565b9750614b2e83614ade565b925050600181019050614b0f565b5085935050505092915050565b600060a082019050614b5e6000830188613b60565b614b6b6020830187614a7c565b8181036040830152614b7d8186614aeb565b9050614b8c6060830185613bdd565b614b996080830184613b60565b9695505050505050565b600060c082019050614bb86000830189613bdd565b614bc56020830188613b60565b614bd26040830187614a7c565b614bdf6060830186614a7c565b614bec6080830185613bdd565b614bf960a0830184613b60565b979650505050505050565b600081519050614c1381613a17565b92915050565b600080600060608486031215614c3257614c316139aa565b5b6000614c4086828701614c04565b9350506020614c5186828701614c04565b9250506040614c6286828701614c04565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220028d7ff4112646ba0f455170f4062199e7f8050634c39dd3a623541986c1043464736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80638da5cb5b11610175578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610abb578063f2fde38b14610ae6578063f637434214610b0f578063f8b45b0514610b3a576102b9565b8063dd62ed3e14610a3c578063e2f4560514610a79578063eb864e9c14610aa4576102b9565b8063c02466681461092c578063c17b5b8c14610955578063c876d0b91461097e578063c8c8ebe4146109a9578063d257b34f146109d4578063d85ba06314610a11576102b9565b80639fccce321161012e5780639fccce32146107f4578063a0d82dc51461081f578063a457c2d71461084a578063a9059cbb14610887578063b62496f5146108c4578063bbc0c74214610901576102b9565b80638da5cb5b146106f45780638ea5220f1461071f578063921369131461074a57806395d89b41146107755780639a7a23d6146107a05780639c3b4fdc146107c9576102b9565b80634a62bb6511610219578063751039fc116101d2578063751039fc1461060a5780637571336a1461063557806375f0a8741461065e5780637bce5a04146106895780638095d564146106b45780638a8c523c146106dd576102b9565b80634a62bb651461050a57806363eb2a6f146105355780636a486a8e146105605780636ddd17131461058b57806370a08231146105b6578063715018a6146105f3576102b9565b80631f3fed8f1161026b5780631f3fed8f146103e457806323b872dd1461040f57806327c8f8351461044c578063313ce5671461047757806339509351146104a257806349bd5a5e146104df576102b9565b806306fdde03146102be578063095ea7b3146102e957806310d5de53146103265780631694505e1461036357806318160ddd1461038e5780631a8145bb146103b9576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b65565b6040516102e09190613988565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190613a43565b610bf7565b60405161031d9190613a9e565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613ab9565b610c15565b60405161035a9190613a9e565b60405180910390f35b34801561036f57600080fd5b50610378610c35565b6040516103859190613b45565b60405180910390f35b34801561039a57600080fd5b506103a3610c59565b6040516103b09190613b6f565b60405180910390f35b3480156103c557600080fd5b506103ce610c63565b6040516103db9190613b6f565b60405180910390f35b3480156103f057600080fd5b506103f9610c69565b6040516104069190613b6f565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613b8a565b610c6f565b6040516104439190613a9e565b60405180910390f35b34801561045857600080fd5b50610461610d48565b60405161046e9190613bec565b60405180910390f35b34801561048357600080fd5b5061048c610d4e565b6040516104999190613c23565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613a43565b610d57565b6040516104d69190613a9e565b60405180910390f35b3480156104eb57600080fd5b506104f4610e0a565b6040516105019190613bec565b60405180910390f35b34801561051657600080fd5b5061051f610e2e565b60405161052c9190613a9e565b60405180910390f35b34801561054157600080fd5b5061054a610e41565b6040516105579190613a9e565b60405180910390f35b34801561056c57600080fd5b50610575610efc565b6040516105829190613b6f565b60405180910390f35b34801561059757600080fd5b506105a0610f02565b6040516105ad9190613a9e565b60405180910390f35b3480156105c257600080fd5b506105dd60048036038101906105d89190613ab9565b610f15565b6040516105ea9190613b6f565b60405180910390f35b3480156105ff57600080fd5b50610608610f5d565b005b34801561061657600080fd5b5061061f6110b5565b60405161062c9190613a9e565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190613c6a565b611170565b005b34801561066a57600080fd5b50610673611262565b6040516106809190613bec565b60405180910390f35b34801561069557600080fd5b5061069e611288565b6040516106ab9190613b6f565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d69190613caa565b61128e565b005b3480156106e957600080fd5b506106f26113a8565b005b34801561070057600080fd5b50610709611477565b6040516107169190613bec565b60405180910390f35b34801561072b57600080fd5b506107346114a1565b6040516107419190613bec565b60405180910390f35b34801561075657600080fd5b5061075f6114c7565b60405161076c9190613b6f565b60405180910390f35b34801561078157600080fd5b5061078a6114cd565b6040516107979190613988565b60405180910390f35b3480156107ac57600080fd5b506107c760048036038101906107c29190613c6a565b61155f565b005b3480156107d557600080fd5b506107de611692565b6040516107eb9190613b6f565b60405180910390f35b34801561080057600080fd5b50610809611698565b6040516108169190613b6f565b60405180910390f35b34801561082b57600080fd5b5061083461169e565b6040516108419190613b6f565b60405180910390f35b34801561085657600080fd5b50610871600480360381019061086c9190613a43565b6116a4565b60405161087e9190613a9e565b60405180910390f35b34801561089357600080fd5b506108ae60048036038101906108a99190613a43565b611771565b6040516108bb9190613a9e565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e69190613ab9565b61178f565b6040516108f89190613a9e565b60405180910390f35b34801561090d57600080fd5b506109166117af565b6040516109239190613a9e565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613c6a565b6117c2565b005b34801561096157600080fd5b5061097c60048036038101906109779190613caa565b611902565b005b34801561098a57600080fd5b50610993611a1c565b6040516109a09190613a9e565b60405180910390f35b3480156109b557600080fd5b506109be611a2f565b6040516109cb9190613b6f565b60405180910390f35b3480156109e057600080fd5b506109fb60048036038101906109f69190613cfd565b611a35565b604051610a089190613a9e565b60405180910390f35b348015610a1d57600080fd5b50610a26611ba5565b604051610a339190613b6f565b60405180910390f35b348015610a4857600080fd5b50610a636004803603810190610a5e9190613d2a565b611bab565b604051610a709190613b6f565b60405180910390f35b348015610a8557600080fd5b50610a8e611c32565b604051610a9b9190613b6f565b60405180910390f35b348015610ab057600080fd5b50610ab9611c38565b005b348015610ac757600080fd5b50610ad0611d01565b604051610add9190613b6f565b60405180910390f35b348015610af257600080fd5b50610b0d6004803603810190610b089190613ab9565b611d07565b005b348015610b1b57600080fd5b50610b24611ecd565b604051610b319190613b6f565b60405180910390f35b348015610b4657600080fd5b50610b4f611ed3565b604051610b5c9190613b6f565b60405180910390f35b606060038054610b7490613d99565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba090613d99565b8015610bed5780601f10610bc257610100808354040283529160200191610bed565b820191906000526020600020905b815481529060010190602001808311610bd057829003601f168201915b5050505050905090565b6000610c0b610c04611f37565b8484611f3f565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60175481565b60165481565b6000610c7c848484612108565b610d3d84610c88611f37565b610d3885604051806060016040528060288152602001614c9360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cee611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea9092919063ffffffff16565b611f3f565b600190509392505050565b61dead81565b60006012905090565b6000610e00610d64611f37565b84610dfb8560016000610d75611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed990919063ffffffff16565b611f3f565b6001905092915050565b7f000000000000000000000000e732c713f71577e456a63b2e93a76499b8c767f981565b600b60009054906101000a900460ff1681565b6000610e4b611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190613e16565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b60125481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f65611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613e16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006110bf611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114590613e16565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611178611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611207576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fe90613e16565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611296611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611325576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131c90613e16565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f5461134d9190613e65565b6113579190613e65565b600e819055506008600e5411156113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a90613ee5565b60405180910390fd5b505050565b6113b0611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613e16565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6060600480546114dc90613d99565b80601f016020809104026020016040519081016040528092919081815260200182805461150890613d99565b80156115555780601f1061152a57610100808354040283529160200191611555565b820191906000526020600020905b81548152906001019060200180831161153857829003601f168201915b5050505050905090565b611567611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90613e16565b60405180910390fd5b7f000000000000000000000000e732c713f71577e456a63b2e93a76499b8c767f973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611684576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167b90613f77565b60405180910390fd5b61168e8282612e4e565b5050565b60115481565b60185481565b60155481565b60006117676116b1611f37565b8461176285604051806060016040528060258152602001614cbb60259139600160006116db611f37565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea9092919063ffffffff16565b611f3f565b6001905092915050565b600061178561177e611f37565b8484612108565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6117ca611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611859576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185090613e16565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118f69190613a9e565b60405180910390a25050565b61190a611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090613e16565b60405180910390fd5b8260138190555081601481905550806015819055506015546014546013546119c19190613e65565b6119cb9190613e65565b601281905550600a6012541115611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e90613fe3565b60405180910390fd5b505050565b600d60009054906101000a900460ff1681565b60085481565b6000611a3f611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590613e16565b60405180910390fd5b620186a06001611adc610c59565b611ae69190614003565b611af0919061408c565b821015611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b299061412f565b60405180910390fd5b6103e8600f611b3f610c59565b611b499190614003565b611b53919061408c565b821115611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c906141c1565b60405180910390fd5b8160098190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611c40611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ccf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc690613e16565b60405180910390fd5b6000600f8190555060006010819055506000601181905550600060138190555060006014819055506000601581905550565b60105481565b611d0f611f37565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9590613e16565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0490614253565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b600a5481565b6000808284611ee89190613e65565b905083811015611f2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f24906142bf565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa590614351565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361201d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612014906143e3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120fb9190613b6f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612177576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216e90614475565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd90614507565b60405180910390fd5b600081036121ff576121fa83836000612eef565b612de5565b600b60009054906101000a900460ff161561290d5761221c611477565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561228a575061225a611477565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122c35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122fd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123165750600560149054906101000a900460ff16155b1561290c57600b60019054906101000a900460ff1661241057601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123d05750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61240f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240690614573565b60405180910390fd5b5b600d60009054906101000a900460ff16156125d85761242d611477565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156124b457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561250c57507f000000000000000000000000e732c713f71577e456a63b2e93a76499b8c767f973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156125d75743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125899061462b565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b60006014549050601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126825750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612729576008548211156126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c3906146bd565b60405180910390fd5b600a546126d884610f15565b836126e39190613e65565b1115612724576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271b90614729565b60405180910390fd5b61290a565b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127cc5750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561285e57600854821115612816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280d906147bb565b60405180910390fd5b60008111612859576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128509061484d565b60405180910390fd5b612909565b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661290857600a546128bb84610f15565b836128c69190613e65565b1115612907576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fe90614729565b60405180910390fd5b5b5b5b505b5b600061291830610f15565b90506000600954821015905080801561293d5750600b60029054906101000a900460ff165b80156129565750600560149054906101000a900460ff16155b80156129ac5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a025750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a585750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612a9c576001600560146101000a81548160ff021916908315150217905550612a80613182565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b525750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612b5c57600090505b60008115612dd557601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612bbf57506000601254115b15612c8c57612bec6064612bde6012548861346990919063ffffffff16565b6134e390919063ffffffff16565b905060125460145482612bff9190614003565b612c09919061408c565b60176000828254612c1a9190613e65565b9250508190555060125460155482612c329190614003565b612c3c919061408c565b60186000828254612c4d9190613e65565b9250508190555060125460135482612c659190614003565b612c6f919061408c565b60166000828254612c809190613e65565b92505081905550612db1565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ce757506000600e54115b15612db057612d146064612d06600e548861346990919063ffffffff16565b6134e390919063ffffffff16565b9050600e5460105482612d279190614003565b612d31919061408c565b60176000828254612d429190613e65565b92505081905550600e5460115482612d5a9190614003565b612d64919061408c565b60186000828254612d759190613e65565b92505081905550600e54600f5482612d8d9190614003565b612d97919061408c565b60166000828254612da89190613e65565b925050819055505b5b6000811115612dc657612dc5873083612eef565b5b8085612dd2919061486d565b94505b612de0878787612eef565b505050505b505050565b6000838311158290612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e299190613988565b60405180910390fd5b5060008385612e41919061486d565b9050809150509392505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5590614475565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc490614507565b60405180910390fd5b612fd883838361352d565b61304381604051806060016040528060268152602001614c6d602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612dea9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130d6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ed990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131759190613b6f565b60405180910390a3505050565b600061318d30610f15565b905060006018546016546017546131a49190613e65565b6131ae9190613e65565b90506000808314806131c05750600082145b156131cd57505050613467565b60146009546131dc9190614003565b8311156131f55760146009546131f29190614003565b92505b6000600283601754866132089190614003565b613212919061408c565b61321c919061408c565b90506000613233828661353290919063ffffffff16565b905060004790506132438261357c565b6000613258824761353290919063ffffffff16565b90506000613283876132756016548561346990919063ffffffff16565b6134e390919063ffffffff16565b905060006132ae886132a06018548661346990919063ffffffff16565b6134e390919063ffffffff16565b905060008183856132bf919061486d565b6132c9919061486d565b9050600060178190555060006016819055506000601881905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613329906148d2565b60006040518083038185875af1925050503d8060008114613366576040519150601f19603f3d011682016040523d82523d6000602084013e61336b565b606091505b5050809850506000871180156133815750600081115b156133ce5761339087826137b9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826017546040516133c5939291906148e7565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613414906148d2565b60006040518083038185875af1925050503d8060008114613451576040519150601f19603f3d011682016040523d82523d6000602084013e613456565b606091505b505080985050505050505050505050505b565b600080830361347b57600090506134dd565b600082846134899190614003565b9050828482613498919061408c565b146134d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134cf90614990565b60405180910390fd5b809150505b92915050565b600061352583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613895565b905092915050565b505050565b600061357483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612dea565b905092915050565b6000600267ffffffffffffffff811115613599576135986149b0565b5b6040519080825280602002602001820160405280156135c75781602001602082028036833780820191505090505b50905030816000815181106135df576135de6149df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613684573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a89190614a23565b816001815181106136bc576136bb6149df565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613721307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f3f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613783959493929190614b49565b600060405180830381600087803b15801561379d57600080fd5b505af11580156137b1573d6000803e3d6000fd5b505050505050565b6137e4307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611f3f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161384b96959493929190614ba3565b60606040518083038185885af1158015613869573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061388e9190614c19565b5050505050565b600080831182906138dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d39190613988565b60405180910390fd5b50600083856138eb919061408c565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613932578082015181840152602081019050613917565b60008484015250505050565b6000601f19601f8301169050919050565b600061395a826138f8565b6139648185613903565b9350613974818560208601613914565b61397d8161393e565b840191505092915050565b600060208201905081810360008301526139a2818461394f565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006139da826139af565b9050919050565b6139ea816139cf565b81146139f557600080fd5b50565b600081359050613a07816139e1565b92915050565b6000819050919050565b613a2081613a0d565b8114613a2b57600080fd5b50565b600081359050613a3d81613a17565b92915050565b60008060408385031215613a5a57613a596139aa565b5b6000613a68858286016139f8565b9250506020613a7985828601613a2e565b9150509250929050565b60008115159050919050565b613a9881613a83565b82525050565b6000602082019050613ab36000830184613a8f565b92915050565b600060208284031215613acf57613ace6139aa565b5b6000613add848285016139f8565b91505092915050565b6000819050919050565b6000613b0b613b06613b01846139af565b613ae6565b6139af565b9050919050565b6000613b1d82613af0565b9050919050565b6000613b2f82613b12565b9050919050565b613b3f81613b24565b82525050565b6000602082019050613b5a6000830184613b36565b92915050565b613b6981613a0d565b82525050565b6000602082019050613b846000830184613b60565b92915050565b600080600060608486031215613ba357613ba26139aa565b5b6000613bb1868287016139f8565b9350506020613bc2868287016139f8565b9250506040613bd386828701613a2e565b9150509250925092565b613be6816139cf565b82525050565b6000602082019050613c016000830184613bdd565b92915050565b600060ff82169050919050565b613c1d81613c07565b82525050565b6000602082019050613c386000830184613c14565b92915050565b613c4781613a83565b8114613c5257600080fd5b50565b600081359050613c6481613c3e565b92915050565b60008060408385031215613c8157613c806139aa565b5b6000613c8f858286016139f8565b9250506020613ca085828601613c55565b9150509250929050565b600080600060608486031215613cc357613cc26139aa565b5b6000613cd186828701613a2e565b9350506020613ce286828701613a2e565b9250506040613cf386828701613a2e565b9150509250925092565b600060208284031215613d1357613d126139aa565b5b6000613d2184828501613a2e565b91505092915050565b60008060408385031215613d4157613d406139aa565b5b6000613d4f858286016139f8565b9250506020613d60858286016139f8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613db157607f821691505b602082108103613dc457613dc3613d6a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e00602083613903565b9150613e0b82613dca565b602082019050919050565b60006020820190508181036000830152613e2f81613df3565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e7082613a0d565b9150613e7b83613a0d565b9250828201905080821115613e9357613e92613e36565b5b92915050565b7f4d757374206b6565702066656573206174203825206f72206c65737300000000600082015250565b6000613ecf601c83613903565b9150613eda82613e99565b602082019050919050565b60006020820190508181036000830152613efe81613ec2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000613f61603983613903565b9150613f6c82613f05565b604082019050919050565b60006020820190508181036000830152613f9081613f54565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b6000613fcd601d83613903565b9150613fd882613f97565b602082019050919050565b60006020820190508181036000830152613ffc81613fc0565b9050919050565b600061400e82613a0d565b915061401983613a0d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561405257614051613e36565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061409782613a0d565b91506140a283613a0d565b9250826140b2576140b161405d565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614119603583613903565b9150614124826140bd565b604082019050919050565b600060208201905081810360008301526141488161410c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006141ab603483613903565b91506141b68261414f565b604082019050919050565b600060208201905081810360008301526141da8161419e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061423d602683613903565b9150614248826141e1565b604082019050919050565b6000602082019050818103600083015261426c81614230565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006142a9601b83613903565b91506142b482614273565b602082019050919050565b600060208201905081810360008301526142d88161429c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061433b602483613903565b9150614346826142df565b604082019050919050565b6000602082019050818103600083015261436a8161432e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006143cd602283613903565b91506143d882614371565b604082019050919050565b600060208201905081810360008301526143fc816143c0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061445f602583613903565b915061446a82614403565b604082019050919050565b6000602082019050818103600083015261448e81614452565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006144f1602383613903565b91506144fc82614495565b604082019050919050565b60006020820190508181036000830152614520816144e4565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061455d601683613903565b915061456882614527565b602082019050919050565b6000602082019050818103600083015261458c81614550565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614615604983613903565b915061462082614593565b606082019050919050565b6000602082019050818103600083015261464481614608565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006146a7603583613903565b91506146b28261464b565b604082019050919050565b600060208201905081810360008301526146d68161469a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614713601383613903565b915061471e826146dd565b602082019050919050565b6000602082019050818103600083015261474281614706565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006147a5603683613903565b91506147b082614749565b604082019050919050565b600060208201905081810360008301526147d481614798565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742062656c6c6f77206d696e5460008201527f72616e73616374696f6e416d6f756e742e000000000000000000000000000000602082015250565b6000614837603183613903565b9150614842826147db565b604082019050919050565b600060208201905081810360008301526148668161482a565b9050919050565b600061487882613a0d565b915061488383613a0d565b925082820390508181111561489b5761489a613e36565b5b92915050565b600081905092915050565b50565b60006148bc6000836148a1565b91506148c7826148ac565b600082019050919050565b60006148dd826148af565b9150819050919050565b60006060820190506148fc6000830186613b60565b6149096020830185613b60565b6149166040830184613b60565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061497a602183613903565b91506149858261491e565b604082019050919050565b600060208201905081810360008301526149a98161496d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614a1d816139e1565b92915050565b600060208284031215614a3957614a386139aa565b5b6000614a4784828501614a0e565b91505092915050565b6000819050919050565b6000614a75614a70614a6b84614a50565b613ae6565b613a0d565b9050919050565b614a8581614a5a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ac0816139cf565b82525050565b6000614ad28383614ab7565b60208301905092915050565b6000602082019050919050565b6000614af682614a8b565b614b008185614a96565b9350614b0b83614aa7565b8060005b83811015614b3c578151614b238882614ac6565b9750614b2e83614ade565b925050600181019050614b0f565b5085935050505092915050565b600060a082019050614b5e6000830188613b60565b614b6b6020830187614a7c565b8181036040830152614b7d8186614aeb565b9050614b8c6060830185613bdd565b614b996080830184613b60565b9695505050505050565b600060c082019050614bb86000830189613bdd565b614bc56020830188613b60565b614bd26040830187614a7c565b614bdf6060830186614a7c565b614bec6080830185613bdd565b614bf960a0830184613b60565b979650505050505050565b600081519050614c1381613a17565b92915050565b600080600060608486031215614c3257614c316139aa565b5b6000614c4086828701614c04565b9350506020614c5186828701614c04565b9250506040614c6286828701614c04565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220028d7ff4112646ba0f455170f4062199e7f8050634c39dd3a623541986c1043464736f6c63430008100033

Deployed Bytecode Sourcemap

29331:14125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7511:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9678:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30704:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29414:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8631:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30483:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30443;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10329:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29517:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8473:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11093:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29472:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29798:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34071:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30294:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29878:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8802:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21956:148;;;;;;;;;;;;;:::i;:::-;;33886:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34668:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29609:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30183;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34824:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33718:112;;;;;;;;;;;;;:::i;:::-;;21314:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29646:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30329:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7730:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36009:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30257:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30523:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30405:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11814:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9142:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30926:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29838:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35819:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35203:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30101:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29683:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34274:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30149:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9380:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29725:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35589:222;;;;;;;;;;;;;:::i;:::-;;30220:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22259:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30367:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29765:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7511:100;7565:13;7598:5;7591:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7511:100;:::o;9678:169::-;9761:4;9778:39;9787:12;:10;:12::i;:::-;9801:7;9810:6;9778:8;:39::i;:::-;9835:4;9828:11;;9678:169;;;;:::o;30704:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29414:51::-;;;:::o;8631:108::-;8692:7;8719:12;;8712:19;;8631:108;:::o;30483:33::-;;;;:::o;30443:::-;;;;:::o;10329:355::-;10469:4;10486:36;10496:6;10504:9;10515:6;10486:9;:36::i;:::-;10533:121;10542:6;10550:12;:10;:12::i;:::-;10564:89;10602:6;10564:89;;;;;;;;;;;;;;;;;:11;:19;10576:6;10564:19;;;;;;;;;;;;;;;:33;10584:12;:10;:12::i;:::-;10564:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10533:8;:121::i;:::-;10672:4;10665:11;;10329:355;;;;;:::o;29517:53::-;29563:6;29517:53;:::o;8473:93::-;8531:5;8556:2;8549:9;;8473:93;:::o;11093:218::-;11181:4;11198:83;11207:12;:10;:12::i;:::-;11221:7;11230:50;11269:10;11230:11;:25;11242:12;:10;:12::i;:::-;11230:25;;;;;;;;;;;;;;;:34;11256:7;11230:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11198:8;:83::i;:::-;11299:4;11292:11;;11093:218;;;;:::o;29472:38::-;;;:::o;29798:33::-;;;;;;;;;;;;;:::o;34071:128::-;34125:4;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34164:5:::1;34141:20;;:28;;;;;;;;;;;;;;;;;;34187:4;34180:11;;34071:128:::0;:::o;30294:28::-;;;;:::o;29878:31::-;;;;;;;;;;;;;:::o;8802:127::-;8876:7;8903:9;:18;8913:7;8903:18;;;;;;;;;;;;;;;;8896:25;;8802:127;;;:::o;21956:148::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22063:1:::1;22026:40;;22047:6;;;;;;;;;;;22026:40;;;;;;;;;;;;22094:1;22077:6;;:19;;;;;;;;;;;;;;;;;;21956:148::o:0;33886:120::-;33938:4;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33971:5:::1;33954:14;;:22;;;;;;;;;;;;;;;;;;33994:4;33987:11;;33886:120:::0;:::o;34668:144::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34800:4:::1;34758:31;:39;34790:6;34758:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34668:144:::0;;:::o;29609:30::-;;;;;;;;;;;;;:::o;30183:::-;;;;:::o;34824:367::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34958:13:::1;34940:15;:31;;;;35000:13;34982:15;:31;;;;35036:7;35024:9;:19;;;;35105:9;;35087:15;;35069;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;35054:12;:60;;;;35149:1;35133:12;;:17;;35125:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34824:367:::0;;;:::o;33718:112::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33789:4:::1;33773:13;;:20;;;;;;;;;;;;;;;;;;33818:4;33804:11;;:18;;;;;;;;;;;;;;;;;;33718:112::o:0;21314:79::-;21352:7;21379:6;;;;;;;;;;;21372:13;;21314:79;:::o;29646:24::-;;;;;;;;;;;;;:::o;30329:31::-;;;;:::o;7730:104::-;7786:13;7819:7;7812:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7730:104;:::o;36009:242::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36116:13:::1;36108:21;;:4;:21;;::::0;36100:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36202:41;36231:4;36237:5;36202:28;:41::i;:::-;36009:242:::0;;:::o;30257:24::-;;;;:::o;30523:27::-;;;;:::o;30405:25::-;;;;:::o;11814:269::-;11907:4;11924:129;11933:12;:10;:12::i;:::-;11947:7;11956:96;11995:15;11956:96;;;;;;;;;;;;;;;;;:11;:25;11968:12;:10;:12::i;:::-;11956:25;;;;;;;;;;;;;;;:34;11982:7;11956:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11924:8;:129::i;:::-;12071:4;12064:11;;11814:269;;;;:::o;9142:175::-;9228:4;9245:42;9255:12;:10;:12::i;:::-;9269:9;9280:6;9245:9;:42::i;:::-;9305:4;9298:11;;9142:175;;;;:::o;30926:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29838:33::-;;;;;;;;;;;;;:::o;35819:182::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35935:8:::1;35904:19;:28;35924:7;35904:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35975:7;35959:34;;;35984:8;35959:34;;;;;;:::i;:::-;;;;;;;;35819:182:::0;;:::o;35203:378::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35339:13:::1;35320:16;:32;;;;35382:13;35363:16;:32;;;;35419:7;35406:10;:20;;;;35491:10;;35472:16;;35453;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;35437:13;:64;;;;35537:2;35520:13;;:19;;35512:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35203:378:::0;;;:::o;30101:39::-;;;;;;;;;;;;;:::o;29683:35::-;;;;:::o;34274:382::-;34355:4;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34411:6:::1;34407:1;34391:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34378:9;:39;;34370:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34527:4;34522:2;34506:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;34493:9;:38;;34485:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;34619:9;34598:18;:30;;;;34645:4;34638:11;;34274:382:::0;;;:::o;30149:27::-;;;;:::o;9380:151::-;9469:7;9496:11;:18;9508:5;9496:18;;;;;;;;;;;;;;;:27;9515:7;9496:27;;;;;;;;;;;;;;;;9489:34;;9380:151;;;;:::o;29725:33::-;;;;:::o;35589:222::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35661:1:::1;35643:15;:19;;;;35691:1;35673:15;:19;;;;35715:1;35703:9;:13;;;;35746:1;35727:16;:20;;;;35777:1;35758:16;:20;;;;35802:1;35789:10;:14;;;;35589:222::o:0;30220:30::-;;;;:::o;22259:244::-;21536:12;:10;:12::i;:::-;21526:22;;:6;;;;;;;;;;;:22;;;21518:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22368:1:::1;22348:22;;:8;:22;;::::0;22340:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22458:8;22429:38;;22450:6;;;;;;;;;;;22429:38;;;;;;;;;;;;22487:8;22478:6;;:17;;;;;;;;;;;;;;;;;;22259:244:::0;:::o;30367:31::-;;;;:::o;29765:24::-;;;;:::o;16364:179::-;16422:7;16442:9;16458:1;16454;:5;;;;:::i;:::-;16442:17;;16483:1;16478;:6;;16470:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16534:1;16527:8;;;16364:179;;;;:::o;298:98::-;351:7;378:10;371:17;;298:98;:::o;14988:378::-;15141:1;15124:19;;:5;:19;;;15116:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15222:1;15203:21;;:7;:21;;;15195:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15304:6;15274:11;:18;15286:5;15274:18;;;;;;;;;;;;;;;:27;15293:7;15274:27;;;;;;;;;;;;;;;:36;;;;15342:7;15326:32;;15335:5;15326:32;;;15351:6;15326:32;;;;;;:::i;:::-;;;;;;;;14988:378;;;:::o;36507:4248::-;36655:1;36639:18;;:4;:18;;;36631:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36732:1;36718:16;;:2;:16;;;36710:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36809:1;36799:6;:11;36796:92;;36827:28;36843:4;36849:2;36853:1;36827:15;:28::i;:::-;36870:7;;36796:92;36911:14;;;;;;;;;;;36908:1985;;;36971:7;:5;:7::i;:::-;36963:15;;:4;:15;;;;:49;;;;;37005:7;:5;:7::i;:::-;36999:13;;:2;:13;;;;36963:49;:86;;;;;37047:1;37033:16;;:2;:16;;;;36963:86;:128;;;;;37084:6;37070:21;;:2;:21;;;;36963:128;:158;;;;;37113:8;;;;;;;;;;;37112:9;36963:158;36941:1941;;;37159:13;;;;;;;;;;;37155:148;;37204:19;:25;37224:4;37204:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37233:19;:23;37253:2;37233:23;;;;;;;;;;;;;;;;;;;;;;;;;37204:52;37196:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37155:148;37461:20;;;;;;;;;;;37457:423;;;37515:7;:5;:7::i;:::-;37509:13;;:2;:13;;;;:47;;;;;37540:15;37526:30;;:2;:30;;;;37509:47;:79;;;;;37574:13;37560:28;;:2;:28;;;;37509:79;37505:356;;;37666:12;37624:28;:39;37653:9;37624:39;;;;;;;;;;;;;;;;:54;37616:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37825:12;37783:28;:39;37812:9;37783:39;;;;;;;;;;;;;;;:54;;;;37505:356;37457:423;37898:20;37921:16;;37898:39;;37988:25;:31;38014:4;37988:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38024:31;:35;38056:2;38024:35;;;;;;;;;;;;;;;;;;;;;;;;;38023:36;37988:71;37984:883;;;38106:20;;38096:6;:30;;38088:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38245:9;;38228:13;38238:2;38228:9;:13::i;:::-;38219:6;:22;;;;:::i;:::-;:35;;38211:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37984:883;;;38372:25;:29;38398:2;38372:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38406:31;:37;38438:4;38406:37;;;;;;;;;;;;;;;;;;;;;;;;;38405:38;38372:71;38368:499;;;38490:20;;38480:6;:30;;38472:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38619:1;38604:12;:16;38596:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;38368:499;;;38721:31;:35;38753:2;38721:35;;;;;;;;;;;;;;;;;;;;;;;;;38717:150;;38814:9;;38797:13;38807:2;38797:9;:13::i;:::-;38788:6;:22;;;;:::i;:::-;:35;;38780:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38717:150;38368:499;37984:883;37136:1746;36941:1941;36908:1985;38907:28;38938:24;38956:4;38938:9;:24::i;:::-;38907:55;;38973:12;39012:18;;38988:20;:42;;38973:57;;39061:7;:35;;;;;39085:11;;;;;;;;;;;39061:35;:61;;;;;39114:8;;;;;;;;;;;39113:9;39061:61;:110;;;;;39140:25;:31;39166:4;39140:31;;;;;;;;;;;;;;;;;;;;;;;;;39139:32;39061:110;:153;;;;;39189:19;:25;39209:4;39189:25;;;;;;;;;;;;;;;;;;;;;;;;;39188:26;39061:153;:194;;;;;39232:19;:23;39252:2;39232:23;;;;;;;;;;;;;;;;;;;;;;;;;39231:24;39061:194;39043:338;;;39293:4;39282:8;;:15;;;;;;;;;;;;;;;;;;39326:10;:8;:10::i;:::-;39364:5;39353:8;;:16;;;;;;;;;;;;;;;;;;39043:338;39393:12;39409:8;;;;;;;;;;;39408:9;39393:24;;39518:19;:25;39538:4;39518:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39547:19;:23;39567:2;39547:23;;;;;;;;;;;;;;;;;;;;;;;;;39518:52;39515:99;;;39597:5;39587:15;;39515:99;39634:12;39738:7;39735:967;;;39789:25;:29;39815:2;39789:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39838:1;39822:13;;:17;39789:50;39785:748;;;39866:34;39896:3;39866:25;39877:13;;39866:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39859:41;;39967:13;;39948:16;;39941:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39919:18;;:61;;;;;;;:::i;:::-;;;;;;;;40035:13;;40022:10;;40015:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39999:12;;:49;;;;;;;:::i;:::-;;;;;;;;40115:13;;40096:16;;40089:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40067:18;;:61;;;;;;;:::i;:::-;;;;;;;;39785:748;;;40189:25;:31;40215:4;40189:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40239:1;40224:12;;:16;40189:51;40186:347;;;40265:33;40294:3;40265:24;40276:12;;40265:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40258:40;;40361:12;;40343:15;;40336:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40314:18;;:59;;;;;;;:::i;:::-;;;;;;;;40427:12;;40415:9;;40408:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40392:12;;:47;;;;;;;:::i;:::-;;;;;;;;40505:12;;40487:15;;40480:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40458:18;;:59;;;;;;;:::i;:::-;;;;;;;;40186:347;39785:748;40571:1;40564:4;:8;40561:93;;;40596:42;40612:4;40626;40633;40596:15;:42::i;:::-;40561:93;40686:4;40676:14;;;;;:::i;:::-;;;39735:967;40714:33;40730:4;40736:2;40740:6;40714:15;:33::i;:::-;36620:4135;;;;36507:4248;;;;:::o;17265:190::-;17351:7;17384:1;17379;:6;;17387:12;17371:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17411:9;17427:1;17423;:5;;;;:::i;:::-;17411:17;;17446:1;17439:8;;;17265:190;;;;;:::o;36259:186::-;36376:5;36342:25;:31;36368:4;36342:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36431:5;36397:40;;36425:4;36397:40;;;;;;;;;;;;36259:186;;:::o;12573:569::-;12731:1;12713:20;;:6;:20;;;12705:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12815:1;12794:23;;:9;:23;;;12786:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12868:47;12889:6;12897:9;12908:6;12868:20;:47::i;:::-;12946:71;12968:6;12946:71;;;;;;;;;;;;;;;;;:9;:17;12956:6;12946:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12926:9;:17;12936:6;12926:17;;;;;;;;;;;;;;;:91;;;;13051:32;13076:6;13051:9;:20;13061:9;13051:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13028:9;:20;13038:9;13028:20;;;;;;;;;;;;;;;:55;;;;13116:9;13099:35;;13108:6;13099:35;;;13127:6;13099:35;;;;;;:::i;:::-;;;;;;;;12573:569;;;:::o;41901:1552::-;41940:23;41966:24;41984:4;41966:9;:24::i;:::-;41940:50;;42001:25;42071:12;;42050:18;;42029;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;42001:82;;42094:12;42139:1;42120:15;:20;:46;;;;42165:1;42144:17;:22;42120:46;42117:60;;;42169:7;;;;;42117:60;42229:2;42208:18;;:23;;;;:::i;:::-;42190:15;:41;42187:111;;;42284:2;42263:18;;:23;;;;:::i;:::-;42245:41;;42187:111;42357:23;42442:1;42422:17;42401:18;;42383:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42357:86;;42454:26;42483:36;42503:15;42483;:19;;:36;;;;:::i;:::-;42454:65;;42530:25;42558:21;42530:49;;42590:36;42607:18;42590:16;:36::i;:::-;42638:18;42659:44;42685:17;42659:21;:25;;:44;;;;:::i;:::-;42638:65;;42714:23;42740:57;42779:17;42740:34;42755:18;;42740:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42714:83;;42808:17;42828:51;42861:17;42828:28;42843:12;;42828:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42808:71;;42890:23;42947:9;42929:15;42916:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42890:66;;42988:1;42967:18;:22;;;;43021:1;43000:18;:22;;;;43048:1;43033:12;:16;;;;43081:9;;;;;;;;;;;43073:23;;43104:9;43073:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43060:58;;;;;43160:1;43142:15;:19;:42;;;;;43183:1;43165:15;:19;43142:42;43139:210;;;43200:46;43213:15;43230;43200:12;:46::i;:::-;43266:71;43281:18;43301:15;43318:18;;43266:71;;;;;;;;:::i;:::-;;;;;;;;43139:210;43390:15;;;;;;;;;;;43382:29;;43419:21;43382:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43369:76;;;;;41929:1524;;;;;;;;;;41901:1552;:::o;17714:469::-;17772:7;18022:1;18017;:6;18013:47;;18047:1;18040:8;;;;18013:47;18072:9;18088:1;18084;:5;;;;:::i;:::-;18072:17;;18117:1;18112;18108;:5;;;;:::i;:::-;:10;18100:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18174:1;18167:8;;;17714:469;;;;;:::o;18659:132::-;18717:7;18744:39;18748:1;18751;18744:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18737:46;;18659:132;;;;:::o;15969:125::-;;;;:::o;16826:136::-;16884:7;16911:43;16915:1;16918;16911:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16904:50;;16826:136;;;;:::o;40763:601::-;40891:21;40929:1;40915:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40891:40;;40960:4;40942;40947:1;40942:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40986:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40976:4;40981:1;40976:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41021:62;41038:4;41053:15;41071:11;41021:8;:62::i;:::-;41122:15;:66;;;41203:11;41229:1;41273:4;41300;41320:15;41122:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40818:546;40763:601;:::o;41376:517::-;41524:62;41541:4;41556:15;41574:11;41524:8;:62::i;:::-;41629:15;:31;;;41668:9;41701:4;41721:11;41747:1;41790;29563:6;41859:15;41629:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41376:517;;:::o;19287:278::-;19373:7;19405:1;19401;:5;19408:12;19393:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19432:9;19448:1;19444;:5;;;;:::i;:::-;19432:17;;19556:1;19549:8;;;19287:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:118::-;5823:24;5841:5;5823:24;:::i;:::-;5818:3;5811:37;5736:118;;:::o;5860:222::-;5953:4;5991:2;5980:9;5976:18;5968:26;;6004:71;6072:1;6061:9;6057:17;6048:6;6004:71;:::i;:::-;5860:222;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:116::-;6588:21;6603:5;6588:21;:::i;:::-;6581:5;6578:32;6568:60;;6624:1;6621;6614:12;6568:60;6518:116;:::o;6640:133::-;6683:5;6721:6;6708:20;6699:29;;6737:30;6761:5;6737:30;:::i;:::-;6640:133;;;;:::o;6779:468::-;6844:6;6852;6901:2;6889:9;6880:7;6876:23;6872:32;6869:119;;;6907:79;;:::i;:::-;6869:119;7027:1;7052:53;7097:7;7088:6;7077:9;7073:22;7052:53;:::i;:::-;7042:63;;6998:117;7154:2;7180:50;7222:7;7213:6;7202:9;7198:22;7180:50;:::i;:::-;7170:60;;7125:115;6779:468;;;;;:::o;7253:619::-;7330:6;7338;7346;7395:2;7383:9;7374:7;7370:23;7366:32;7363:119;;;7401:79;;:::i;:::-;7363:119;7521:1;7546:53;7591:7;7582:6;7571:9;7567:22;7546:53;:::i;:::-;7536:63;;7492:117;7648:2;7674:53;7719:7;7710:6;7699:9;7695:22;7674:53;:::i;:::-;7664:63;;7619:118;7776:2;7802:53;7847:7;7838:6;7827:9;7823:22;7802:53;:::i;:::-;7792:63;;7747:118;7253:619;;;;;:::o;7878:329::-;7937:6;7986:2;7974:9;7965:7;7961:23;7957:32;7954:119;;;7992:79;;:::i;:::-;7954:119;8112:1;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8083:117;7878:329;;;;:::o;8213:474::-;8281:6;8289;8338:2;8326:9;8317:7;8313:23;8309:32;8306:119;;;8344:79;;:::i;:::-;8306:119;8464:1;8489:53;8534:7;8525:6;8514:9;8510:22;8489:53;:::i;:::-;8479:63;;8435:117;8591:2;8617:53;8662:7;8653:6;8642:9;8638:22;8617:53;:::i;:::-;8607:63;;8562:118;8213:474;;;;;:::o;8693:180::-;8741:77;8738:1;8731:88;8838:4;8835:1;8828:15;8862:4;8859:1;8852:15;8879:320;8923:6;8960:1;8954:4;8950:12;8940:22;;9007:1;9001:4;8997:12;9028:18;9018:81;;9084:4;9076:6;9072:17;9062:27;;9018:81;9146:2;9138:6;9135:14;9115:18;9112:38;9109:84;;9165:18;;:::i;:::-;9109:84;8930:269;8879:320;;;:::o;9205:182::-;9345:34;9341:1;9333:6;9329:14;9322:58;9205:182;:::o;9393:366::-;9535:3;9556:67;9620:2;9615:3;9556:67;:::i;:::-;9549:74;;9632:93;9721:3;9632:93;:::i;:::-;9750:2;9745:3;9741:12;9734:19;;9393:366;;;:::o;9765:419::-;9931:4;9969:2;9958:9;9954:18;9946:26;;10018:9;10012:4;10008:20;10004:1;9993:9;9989:17;9982:47;10046:131;10172:4;10046:131;:::i;:::-;10038:139;;9765:419;;;:::o;10190:180::-;10238:77;10235:1;10228:88;10335:4;10332:1;10325:15;10359:4;10356:1;10349:15;10376:191;10416:3;10435:20;10453:1;10435:20;:::i;:::-;10430:25;;10469:20;10487:1;10469:20;:::i;:::-;10464:25;;10512:1;10509;10505:9;10498:16;;10533:3;10530:1;10527:10;10524:36;;;10540:18;;:::i;:::-;10524:36;10376:191;;;;:::o;10573:178::-;10713:30;10709:1;10701:6;10697:14;10690:54;10573:178;:::o;10757:366::-;10899:3;10920:67;10984:2;10979:3;10920:67;:::i;:::-;10913:74;;10996:93;11085:3;10996:93;:::i;:::-;11114:2;11109:3;11105:12;11098:19;;10757:366;;;:::o;11129:419::-;11295:4;11333:2;11322:9;11318:18;11310:26;;11382:9;11376:4;11372:20;11368:1;11357:9;11353:17;11346:47;11410:131;11536:4;11410:131;:::i;:::-;11402:139;;11129:419;;;:::o;11554:244::-;11694:34;11690:1;11682:6;11678:14;11671:58;11763:27;11758:2;11750:6;11746:15;11739:52;11554:244;:::o;11804:366::-;11946:3;11967:67;12031:2;12026:3;11967:67;:::i;:::-;11960:74;;12043:93;12132:3;12043:93;:::i;:::-;12161:2;12156:3;12152:12;12145:19;;11804:366;;;:::o;12176:419::-;12342:4;12380:2;12369:9;12365:18;12357:26;;12429:9;12423:4;12419:20;12415:1;12404:9;12400:17;12393:47;12457:131;12583:4;12457:131;:::i;:::-;12449:139;;12176:419;;;:::o;12601:179::-;12741:31;12737:1;12729:6;12725:14;12718:55;12601:179;:::o;12786:366::-;12928:3;12949:67;13013:2;13008:3;12949:67;:::i;:::-;12942:74;;13025:93;13114:3;13025:93;:::i;:::-;13143:2;13138:3;13134:12;13127:19;;12786:366;;;:::o;13158:419::-;13324:4;13362:2;13351:9;13347:18;13339:26;;13411:9;13405:4;13401:20;13397:1;13386:9;13382:17;13375:47;13439:131;13565:4;13439:131;:::i;:::-;13431:139;;13158:419;;;:::o;13583:348::-;13623:7;13646:20;13664:1;13646:20;:::i;:::-;13641:25;;13680:20;13698:1;13680:20;:::i;:::-;13675:25;;13868:1;13800:66;13796:74;13793:1;13790:81;13785:1;13778:9;13771:17;13767:105;13764:131;;;13875:18;;:::i;:::-;13764:131;13923:1;13920;13916:9;13905:20;;13583:348;;;;:::o;13937:180::-;13985:77;13982:1;13975:88;14082:4;14079:1;14072:15;14106:4;14103:1;14096:15;14123:185;14163:1;14180:20;14198:1;14180:20;:::i;:::-;14175:25;;14214:20;14232:1;14214:20;:::i;:::-;14209:25;;14253:1;14243:35;;14258:18;;:::i;:::-;14243:35;14300:1;14297;14293:9;14288:14;;14123:185;;;;:::o;14314:240::-;14454:34;14450:1;14442:6;14438:14;14431:58;14523:23;14518:2;14510:6;14506:15;14499:48;14314:240;:::o;14560:366::-;14702:3;14723:67;14787:2;14782:3;14723:67;:::i;:::-;14716:74;;14799:93;14888:3;14799:93;:::i;:::-;14917:2;14912:3;14908:12;14901:19;;14560:366;;;:::o;14932:419::-;15098:4;15136:2;15125:9;15121:18;15113:26;;15185:9;15179:4;15175:20;15171:1;15160:9;15156:17;15149:47;15213:131;15339:4;15213:131;:::i;:::-;15205:139;;14932:419;;;:::o;15357:239::-;15497:34;15493:1;15485:6;15481:14;15474:58;15566:22;15561:2;15553:6;15549:15;15542:47;15357:239;:::o;15602:366::-;15744:3;15765:67;15829:2;15824:3;15765:67;:::i;:::-;15758:74;;15841:93;15930:3;15841:93;:::i;:::-;15959:2;15954:3;15950:12;15943:19;;15602:366;;;:::o;15974:419::-;16140:4;16178:2;16167:9;16163:18;16155:26;;16227:9;16221:4;16217:20;16213:1;16202:9;16198:17;16191:47;16255:131;16381:4;16255:131;:::i;:::-;16247:139;;15974:419;;;:::o;16399:225::-;16539:34;16535:1;16527:6;16523:14;16516:58;16608:8;16603:2;16595:6;16591:15;16584:33;16399:225;:::o;16630:366::-;16772:3;16793:67;16857:2;16852:3;16793:67;:::i;:::-;16786:74;;16869:93;16958:3;16869:93;:::i;:::-;16987:2;16982:3;16978:12;16971:19;;16630:366;;;:::o;17002:419::-;17168:4;17206:2;17195:9;17191:18;17183:26;;17255:9;17249:4;17245:20;17241:1;17230:9;17226:17;17219:47;17283:131;17409:4;17283:131;:::i;:::-;17275:139;;17002:419;;;:::o;17427:177::-;17567:29;17563:1;17555:6;17551:14;17544:53;17427:177;:::o;17610:366::-;17752:3;17773:67;17837:2;17832:3;17773:67;:::i;:::-;17766:74;;17849:93;17938:3;17849:93;:::i;:::-;17967:2;17962:3;17958:12;17951:19;;17610:366;;;:::o;17982:419::-;18148:4;18186:2;18175:9;18171:18;18163:26;;18235:9;18229:4;18225:20;18221:1;18210:9;18206:17;18199:47;18263:131;18389:4;18263:131;:::i;:::-;18255:139;;17982:419;;;:::o;18407:223::-;18547:34;18543:1;18535:6;18531:14;18524:58;18616:6;18611:2;18603:6;18599:15;18592:31;18407:223;:::o;18636:366::-;18778:3;18799:67;18863:2;18858:3;18799:67;:::i;:::-;18792:74;;18875:93;18964:3;18875:93;:::i;:::-;18993:2;18988:3;18984:12;18977:19;;18636:366;;;:::o;19008:419::-;19174:4;19212:2;19201:9;19197:18;19189:26;;19261:9;19255:4;19251:20;19247:1;19236:9;19232:17;19225:47;19289:131;19415:4;19289:131;:::i;:::-;19281:139;;19008:419;;;:::o;19433:221::-;19573:34;19569:1;19561:6;19557:14;19550:58;19642:4;19637:2;19629:6;19625:15;19618:29;19433:221;:::o;19660:366::-;19802:3;19823:67;19887:2;19882:3;19823:67;:::i;:::-;19816:74;;19899:93;19988:3;19899:93;:::i;:::-;20017:2;20012:3;20008:12;20001:19;;19660:366;;;:::o;20032:419::-;20198:4;20236:2;20225:9;20221:18;20213:26;;20285:9;20279:4;20275:20;20271:1;20260:9;20256:17;20249:47;20313:131;20439:4;20313:131;:::i;:::-;20305:139;;20032:419;;;:::o;20457:224::-;20597:34;20593:1;20585:6;20581:14;20574:58;20666:7;20661:2;20653:6;20649:15;20642:32;20457:224;:::o;20687:366::-;20829:3;20850:67;20914:2;20909:3;20850:67;:::i;:::-;20843:74;;20926:93;21015:3;20926:93;:::i;:::-;21044:2;21039:3;21035:12;21028:19;;20687:366;;;:::o;21059:419::-;21225:4;21263:2;21252:9;21248:18;21240:26;;21312:9;21306:4;21302:20;21298:1;21287:9;21283:17;21276:47;21340:131;21466:4;21340:131;:::i;:::-;21332:139;;21059:419;;;:::o;21484:222::-;21624:34;21620:1;21612:6;21608:14;21601:58;21693:5;21688:2;21680:6;21676:15;21669:30;21484:222;:::o;21712:366::-;21854:3;21875:67;21939:2;21934:3;21875:67;:::i;:::-;21868:74;;21951:93;22040:3;21951:93;:::i;:::-;22069:2;22064:3;22060:12;22053:19;;21712:366;;;:::o;22084:419::-;22250:4;22288:2;22277:9;22273:18;22265:26;;22337:9;22331:4;22327:20;22323:1;22312:9;22308:17;22301:47;22365:131;22491:4;22365:131;:::i;:::-;22357:139;;22084:419;;;:::o;22509:172::-;22649:24;22645:1;22637:6;22633:14;22626:48;22509:172;:::o;22687:366::-;22829:3;22850:67;22914:2;22909:3;22850:67;:::i;:::-;22843:74;;22926:93;23015:3;22926:93;:::i;:::-;23044:2;23039:3;23035:12;23028:19;;22687:366;;;:::o;23059:419::-;23225:4;23263:2;23252:9;23248:18;23240:26;;23312:9;23306:4;23302:20;23298:1;23287:9;23283:17;23276:47;23340:131;23466:4;23340:131;:::i;:::-;23332:139;;23059:419;;;:::o;23484:297::-;23624:34;23620:1;23612:6;23608:14;23601:58;23693:34;23688:2;23680:6;23676:15;23669:59;23762:11;23757:2;23749:6;23745:15;23738:36;23484:297;:::o;23787:366::-;23929:3;23950:67;24014:2;24009:3;23950:67;:::i;:::-;23943:74;;24026:93;24115:3;24026:93;:::i;:::-;24144:2;24139:3;24135:12;24128:19;;23787:366;;;:::o;24159:419::-;24325:4;24363:2;24352:9;24348:18;24340:26;;24412:9;24406:4;24402:20;24398:1;24387:9;24383:17;24376:47;24440:131;24566:4;24440:131;:::i;:::-;24432:139;;24159:419;;;:::o;24584:240::-;24724:34;24720:1;24712:6;24708:14;24701:58;24793:23;24788:2;24780:6;24776:15;24769:48;24584:240;:::o;24830:366::-;24972:3;24993:67;25057:2;25052:3;24993:67;:::i;:::-;24986:74;;25069:93;25158:3;25069:93;:::i;:::-;25187:2;25182:3;25178:12;25171:19;;24830:366;;;:::o;25202:419::-;25368:4;25406:2;25395:9;25391:18;25383:26;;25455:9;25449:4;25445:20;25441:1;25430:9;25426:17;25419:47;25483:131;25609:4;25483:131;:::i;:::-;25475:139;;25202:419;;;:::o;25627:169::-;25767:21;25763:1;25755:6;25751:14;25744:45;25627:169;:::o;25802:366::-;25944:3;25965:67;26029:2;26024:3;25965:67;:::i;:::-;25958:74;;26041:93;26130:3;26041:93;:::i;:::-;26159:2;26154:3;26150:12;26143:19;;25802:366;;;:::o;26174:419::-;26340:4;26378:2;26367:9;26363:18;26355:26;;26427:9;26421:4;26417:20;26413:1;26402:9;26398:17;26391:47;26455:131;26581:4;26455:131;:::i;:::-;26447:139;;26174:419;;;:::o;26599:241::-;26739:34;26735:1;26727:6;26723:14;26716:58;26808:24;26803:2;26795:6;26791:15;26784:49;26599:241;:::o;26846:366::-;26988:3;27009:67;27073:2;27068:3;27009:67;:::i;:::-;27002:74;;27085:93;27174:3;27085:93;:::i;:::-;27203:2;27198:3;27194:12;27187:19;;26846:366;;;:::o;27218:419::-;27384:4;27422:2;27411:9;27407:18;27399:26;;27471:9;27465:4;27461:20;27457:1;27446:9;27442:17;27435:47;27499:131;27625:4;27499:131;:::i;:::-;27491:139;;27218:419;;;:::o;27643:236::-;27783:34;27779:1;27771:6;27767:14;27760:58;27852:19;27847:2;27839:6;27835:15;27828:44;27643:236;:::o;27885:366::-;28027:3;28048:67;28112:2;28107:3;28048:67;:::i;:::-;28041:74;;28124:93;28213:3;28124:93;:::i;:::-;28242:2;28237:3;28233:12;28226:19;;27885:366;;;:::o;28257:419::-;28423:4;28461:2;28450:9;28446:18;28438:26;;28510:9;28504:4;28500:20;28496:1;28485:9;28481:17;28474:47;28538:131;28664:4;28538:131;:::i;:::-;28530:139;;28257:419;;;:::o;28682:194::-;28722:4;28742:20;28760:1;28742:20;:::i;:::-;28737:25;;28776:20;28794:1;28776:20;:::i;:::-;28771:25;;28820:1;28817;28813:9;28805:17;;28844:1;28838:4;28835:11;28832:37;;;28849:18;;:::i;:::-;28832:37;28682:194;;;;:::o;28882:147::-;28983:11;29020:3;29005:18;;28882:147;;;;:::o;29035:114::-;;:::o;29155:398::-;29314:3;29335:83;29416:1;29411:3;29335:83;:::i;:::-;29328:90;;29427:93;29516:3;29427:93;:::i;:::-;29545:1;29540:3;29536:11;29529:18;;29155:398;;;:::o;29559:379::-;29743:3;29765:147;29908:3;29765:147;:::i;:::-;29758:154;;29929:3;29922:10;;29559:379;;;:::o;29944:442::-;30093:4;30131:2;30120:9;30116:18;30108:26;;30144:71;30212:1;30201:9;30197:17;30188:6;30144:71;:::i;:::-;30225:72;30293:2;30282:9;30278:18;30269:6;30225:72;:::i;:::-;30307;30375:2;30364:9;30360:18;30351:6;30307:72;:::i;:::-;29944:442;;;;;;:::o;30392:220::-;30532:34;30528:1;30520:6;30516:14;30509:58;30601:3;30596:2;30588:6;30584:15;30577:28;30392:220;:::o;30618:366::-;30760:3;30781:67;30845:2;30840:3;30781:67;:::i;:::-;30774:74;;30857:93;30946:3;30857:93;:::i;:::-;30975:2;30970:3;30966:12;30959:19;;30618:366;;;:::o;30990:419::-;31156:4;31194:2;31183:9;31179:18;31171:26;;31243:9;31237:4;31233:20;31229:1;31218:9;31214:17;31207:47;31271:131;31397:4;31271:131;:::i;:::-;31263:139;;30990:419;;;:::o;31415:180::-;31463:77;31460:1;31453:88;31560:4;31557:1;31550:15;31584:4;31581:1;31574:15;31601:180;31649:77;31646:1;31639:88;31746:4;31743:1;31736:15;31770:4;31767:1;31760:15;31787:143;31844:5;31875:6;31869:13;31860:22;;31891:33;31918:5;31891:33;:::i;:::-;31787:143;;;;:::o;31936:351::-;32006:6;32055:2;32043:9;32034:7;32030:23;32026:32;32023:119;;;32061:79;;:::i;:::-;32023:119;32181:1;32206:64;32262:7;32253:6;32242:9;32238:22;32206:64;:::i;:::-;32196:74;;32152:128;31936:351;;;;:::o;32293:85::-;32338:7;32367:5;32356:16;;32293:85;;;:::o;32384:158::-;32442:9;32475:61;32493:42;32502:32;32528:5;32502:32;:::i;:::-;32493:42;:::i;:::-;32475:61;:::i;:::-;32462:74;;32384:158;;;:::o;32548:147::-;32643:45;32682:5;32643:45;:::i;:::-;32638:3;32631:58;32548:147;;:::o;32701:114::-;32768:6;32802:5;32796:12;32786:22;;32701:114;;;:::o;32821:184::-;32920:11;32954:6;32949:3;32942:19;32994:4;32989:3;32985:14;32970:29;;32821:184;;;;:::o;33011:132::-;33078:4;33101:3;33093:11;;33131:4;33126:3;33122:14;33114:22;;33011:132;;;:::o;33149:108::-;33226:24;33244:5;33226:24;:::i;:::-;33221:3;33214:37;33149:108;;:::o;33263:179::-;33332:10;33353:46;33395:3;33387:6;33353:46;:::i;:::-;33431:4;33426:3;33422:14;33408:28;;33263:179;;;;:::o;33448:113::-;33518:4;33550;33545:3;33541:14;33533:22;;33448:113;;;:::o;33597:732::-;33716:3;33745:54;33793:5;33745:54;:::i;:::-;33815:86;33894:6;33889:3;33815:86;:::i;:::-;33808:93;;33925:56;33975:5;33925:56;:::i;:::-;34004:7;34035:1;34020:284;34045:6;34042:1;34039:13;34020:284;;;34121:6;34115:13;34148:63;34207:3;34192:13;34148:63;:::i;:::-;34141:70;;34234:60;34287:6;34234:60;:::i;:::-;34224:70;;34080:224;34067:1;34064;34060:9;34055:14;;34020:284;;;34024:14;34320:3;34313:10;;33721:608;;;33597:732;;;;:::o;34335:831::-;34598:4;34636:3;34625:9;34621:19;34613:27;;34650:71;34718:1;34707:9;34703:17;34694:6;34650:71;:::i;:::-;34731:80;34807:2;34796:9;34792:18;34783:6;34731:80;:::i;:::-;34858:9;34852:4;34848:20;34843:2;34832:9;34828:18;34821:48;34886:108;34989:4;34980:6;34886:108;:::i;:::-;34878:116;;35004:72;35072:2;35061:9;35057:18;35048:6;35004:72;:::i;:::-;35086:73;35154:3;35143:9;35139:19;35130:6;35086:73;:::i;:::-;34335:831;;;;;;;;:::o;35172:807::-;35421:4;35459:3;35448:9;35444:19;35436:27;;35473:71;35541:1;35530:9;35526:17;35517:6;35473:71;:::i;:::-;35554:72;35622:2;35611:9;35607:18;35598:6;35554:72;:::i;:::-;35636:80;35712:2;35701:9;35697:18;35688:6;35636:80;:::i;:::-;35726;35802:2;35791:9;35787:18;35778:6;35726:80;:::i;:::-;35816:73;35884:3;35873:9;35869:19;35860:6;35816:73;:::i;:::-;35899;35967:3;35956:9;35952:19;35943:6;35899:73;:::i;:::-;35172:807;;;;;;;;;:::o;35985:143::-;36042:5;36073:6;36067:13;36058:22;;36089:33;36116:5;36089:33;:::i;:::-;35985:143;;;;:::o;36134:663::-;36222:6;36230;36238;36287:2;36275:9;36266:7;36262:23;36258:32;36255:119;;;36293:79;;:::i;:::-;36255:119;36413:1;36438:64;36494:7;36485:6;36474:9;36470:22;36438:64;:::i;:::-;36428:74;;36384:128;36551:2;36577:64;36633:7;36624:6;36613:9;36609:22;36577:64;:::i;:::-;36567:74;;36522:129;36690:2;36716:64;36772:7;36763:6;36752:9;36748:22;36716:64;:::i;:::-;36706:74;;36661:129;36134:663;;;;;:::o

Swarm Source

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