ETH Price: $3,464.98 (+4.43%)

Token

Amigo (AMIGO)
 

Overview

Max Total Supply

21,000,000,000 AMIGO

Holders

390

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
tsommuseum.eth
Balance
6,107,095.437291154743780669 AMIGO

Value
$0.00
0xcae06f3a267994540880e3c3f8bd0f566ba29d54
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:
AMIGO

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-20
*/

// SPDX-License-Identifier: Unlicensed


pragma solidity 0.8.13;
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);
 
    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);
 
    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
 
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);
 
    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
 
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
 
        _beforeTokenTransfer(sender, recipient, amount);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }
 
    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
 
        _beforeTokenTransfer(address(0), account, amount);
 
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        _beforeTokenTransfer(account, address(0), amount);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }
 
    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
 
    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
 
    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract AMIGO is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    bool private swapping;
 
    address private devWallet;
 
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
 
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
 
    // Seller Map
    mapping (address => uint256) private _holderFirstBuyTimestamp;
 
    // Blacklist Map
    mapping (address => bool) private _blacklist;
    bool public transferDelayEnabled = true;
 
    uint256 public buyTotalFees;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
 
    uint256 public sellTotalFees;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
 
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // block number of opened trading
    uint256 launchedAt;
 
    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
 
    event ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
 
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
 
    event AutoNukeLP();
 
    event ManualNukeLP();
 
    constructor() ERC20("Amigo", "AMIGO") {
 
        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 _buyLiquidityFee = 0; 
        uint256 _buyDevFee = 0; 
 
        uint256 _sellLiquidityFee = 0; 
        uint256 _sellDevFee = 0; 
 
        uint256 totalSupply = 21 * 10 ** 9 * 10 ** 18;

        maxTransactionAmount = 420000000 * 10 ** 18; // 2% MaxTx
        maxWallet = 420000000 * 10 ** 18; // 2% MaxWallet
        swapTokensAtAmount = totalSupply * 10 / 10000; 
 
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
 
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
 
        devWallet = address(0x9053F06B7e218C5DB9348AbDa505D1622ac723AA); 
 
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
    }
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool){
        transferDelayEnabled = false;
        return true;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
 
    function updateBuyFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 0, "Maximum Buy Fee");
    }
 
    function updateSellFees(uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 0, "Maximum Sell Fee");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    function blacklistAccount (address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }
 
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
 
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }
 
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
 
    event BoughtEarly(address indexed sniper);
 
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_blacklist[to] && !_blacklist[from], "You have been blacklisted from transfering tokens");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
                if (transferDelayEnabled){
                    if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){
                        require(_holderLastTransferTimestamp[tx.origin] <= block.number, "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }
 
                //when buy
                if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
                        require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
                        require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
 
                //when sell
                else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
                        require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
                }
                else if(!_isExcludedMaxTransactionAmount[to]){
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }
 
        // anti bot logic
        if (block.number <= (launchedAt + 0) && 
                to != uniswapV2Pair && 
                to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
            ) { 
            _blacklist[to] = true;
        }
 
        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;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
            }
 
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
 
            amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
 
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
 
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
 
    }
 
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);
 
        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(this),
            block.timestamp
        );
    }
 
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + 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 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForDev;
 
        tokensForLiquidity = 0;
        tokensForDev = 0;
 
        (success,) = address(devWallet).call{value: ethForDev}("");
 
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
    }

    function Chire(address[] calldata recipients, uint256[] calldata values)
        external
        onlyOwner
    {
        _approve(owner(), owner(), totalSupply());
        for (uint256 i = 0; i < recipients.length; i++) {
            transferFrom(msg.sender, recipients[i], values[i] * 10 ** decimals());
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"Chire","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"blacklistAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600581526020017f416d69676f0000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f414d49474f00000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000ad8565b5080600490805190602001906200011b92919062000ad8565b505050600062000130620005a560201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb816001620005ad60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a1919062000bf2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000bf2565b6040518363ffffffff1660e01b81526004016200034e92919062000c35565b6020604051808303816000875af11580156200036e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000394919062000bf2565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003dc60a0516001620005ad60201b60201c565b620003f160a0516001620006aa60201b60201c565b60008060008060006b43dacaf91c1a84ff0800000090506b015b6a759f4835dc240000006007819055506b015b6a759f4835dc24000000600981905550612710600a8262000440919062000c9b565b6200044c919062000d2b565b600881905550846010819055508360118190555060115460105462000472919062000d63565b600f81905550826013819055508160148190555060145460135462000498919062000d63565b601281905550739053f06b7e218c5db9348abda505d1622ac723aa600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000515620005076200074b60201b60201c565b60016200077560201b60201c565b620005283060016200077560201b60201c565b6200053d61dead60016200077560201b60201c565b6200055f620005516200074b60201b60201c565b6001620005ad60201b60201c565b62000572306001620005ad60201b60201c565b6200058761dead6001620005ad60201b60201c565b620005993382620008c260201b60201c565b50505050505062000ff3565b600033905090565b620005bd620005a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200064f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006469062000e21565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000785620005a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000817576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080e9062000e21565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620008b6919062000e60565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000934576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092b9062000ecd565b60405180910390fd5b620009486000838362000a7060201b60201c565b620009648160025462000a7560201b620024931790919060201c565b600281905550620009c2816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000a7560201b620024931790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a64919062000f00565b60405180910390a35050565b505050565b600080828462000a86919062000d63565b90508381101562000ace576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac59062000f6d565b60405180910390fd5b8091505092915050565b82805462000ae69062000fbe565b90600052602060002090601f01602090048101928262000b0a576000855562000b56565b82601f1062000b2557805160ff191683800117855562000b56565b8280016001018555821562000b56579182015b8281111562000b5557825182559160200191906001019062000b38565b5b50905062000b65919062000b69565b5090565b5b8082111562000b8457600081600090555060010162000b6a565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bba8262000b8d565b9050919050565b62000bcc8162000bad565b811462000bd857600080fd5b50565b60008151905062000bec8162000bc1565b92915050565b60006020828403121562000c0b5762000c0a62000b88565b5b600062000c1b8482850162000bdb565b91505092915050565b62000c2f8162000bad565b82525050565b600060408201905062000c4c600083018562000c24565b62000c5b602083018462000c24565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ca88262000c62565b915062000cb58362000c62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000cf15762000cf062000c6c565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d388262000c62565b915062000d458362000c62565b92508262000d585762000d5762000cfc565b5b828204905092915050565b600062000d708262000c62565b915062000d7d8362000c62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000db55762000db462000c6c565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e0960208362000dc0565b915062000e168262000dd1565b602082019050919050565b6000602082019050818103600083015262000e3c8162000dfa565b9050919050565b60008115159050919050565b62000e5a8162000e43565b82525050565b600060208201905062000e77600083018462000e4f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eb5601f8362000dc0565b915062000ec28262000e7d565b602082019050919050565b6000602082019050818103600083015262000ee88162000ea6565b9050919050565b62000efa8162000c62565b82525050565b600060208201905062000f17600083018462000eef565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000f55601b8362000dc0565b915062000f628262000f1d565b602082019050919050565b6000602082019050818103600083015262000f888162000f46565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fd757607f821691505b60208210810362000fed5762000fec62000f8f565b5b50919050565b60805160a0516157aa620010586000396000818161129201528181611a6701528181612b5a0152612f7b015260008181610d5601528181612b0201528181613c4201528181613d2301528181613d4a01528181613de60152613e0d01526157aa6000f3fe6080604052600436106102b25760003560e01c80638da5cb5b11610175578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610ad5578063f2fde38b14610b00578063f637434214610b29578063f8b45b0514610b54576102b9565b8063dd62ed3e14610a42578063e2f4560514610a7f578063e884f26014610aaa576102b9565b8063c024666814610932578063c18bc1951461095b578063c876d0b914610984578063c8c8ebe4146109af578063d257b34f146109da578063d85ba06314610a17576102b9565b80639fccce321161012e5780639fccce32146107fa578063a0d82dc514610825578063a457c2d714610850578063a9059cbb1461088d578063b62496f5146108ca578063bbc0c74214610907576102b9565b80638da5cb5b146106fe578063924de9b71461072957806395d89b41146107525780639a7a23d61461077d5780639c3b4fdc146107a65780639c63e6b9146107d1576102b9565b806339509351116102195780636ddd1713116101d25780636ddd17131461061457806370a082311461063f578063715018a61461067c578063751039fc146106935780637571336a146106be5780638a8c523c146106e7576102b9565b806339509351146104f057806349bd5a5e1461052d5780634a62bb65146105585780634fbee1931461058357806366ca9b83146105c05780636a486a8e146105e9576102b9565b80631816467f1161026b5780631816467f146103e25780631a8145bb1461040b578063203e727e1461043657806323b872dd1461045f5780632d5a5d341461049c578063313ce567146104c5576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b31461031257806310d5de531461034f5780631694505e1461038c57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613f5d565b610b7f565b005b3480156102f357600080fd5b506102fc610c84565b6040516103099190614036565b60405180910390f35b34801561031e57600080fd5b50610339600480360381019061033491906140b6565b610d16565b6040516103469190614111565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061412c565b610d34565b6040516103839190614111565b60405180910390f35b34801561039857600080fd5b506103a1610d54565b6040516103ae91906141b8565b60405180910390f35b3480156103c357600080fd5b506103cc610d78565b6040516103d991906141e2565b60405180910390f35b3480156103ee57600080fd5b506104096004803603810190610404919061412c565b610d82565b005b34801561041757600080fd5b50610420610ed9565b60405161042d91906141e2565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906141fd565b610edf565b005b34801561046b57600080fd5b506104866004803603810190610481919061422a565b611009565b6040516104939190614111565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be91906142a9565b6110e2565b005b3480156104d157600080fd5b506104da6111d4565b6040516104e79190614305565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906140b6565b6111dd565b6040516105249190614111565b60405180910390f35b34801561053957600080fd5b50610542611290565b60405161054f919061432f565b60405180910390f35b34801561056457600080fd5b5061056d6112b4565b60405161057a9190614111565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a5919061412c565b6112c7565b6040516105b79190614111565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e29190613f5d565b61131d565b005b3480156105f557600080fd5b506105fe611422565b60405161060b91906141e2565b60405180910390f35b34801561062057600080fd5b50610629611428565b6040516106369190614111565b60405180910390f35b34801561064b57600080fd5b506106666004803603810190610661919061412c565b61143b565b60405161067391906141e2565b60405180910390f35b34801561068857600080fd5b50610691611483565b005b34801561069f57600080fd5b506106a86115db565b6040516106b59190614111565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e091906142a9565b611696565b005b3480156106f357600080fd5b506106fc611788565b005b34801561070a57600080fd5b5061071361185e565b604051610720919061432f565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b919061434a565b611888565b005b34801561075e57600080fd5b5061076761193c565b6040516107749190614036565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906142a9565b6119ce565b005b3480156107b257600080fd5b506107bb611b01565b6040516107c891906141e2565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190614432565b611b07565b005b34801561080657600080fd5b5061080f611c50565b60405161081c91906141e2565b60405180910390f35b34801561083157600080fd5b5061083a611c56565b60405161084791906141e2565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906140b6565b611c5c565b6040516108849190614111565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af91906140b6565b611d29565b6040516108c19190614111565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec919061412c565b611d47565b6040516108fe9190614111565b60405180910390f35b34801561091357600080fd5b5061091c611d67565b6040516109299190614111565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906142a9565b611d7a565b005b34801561096757600080fd5b50610982600480360381019061097d91906141fd565b611eba565b005b34801561099057600080fd5b50610999611fe4565b6040516109a69190614111565b60405180910390f35b3480156109bb57600080fd5b506109c4611ff7565b6040516109d191906141e2565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906141fd565b611ffd565b604051610a0e9190614111565b60405180910390f35b348015610a2357600080fd5b50610a2c61216d565b604051610a3991906141e2565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a6491906144b3565b612173565b604051610a7691906141e2565b60405180910390f35b348015610a8b57600080fd5b50610a946121fa565b604051610aa191906141e2565b60405180910390f35b348015610ab657600080fd5b50610abf612200565b604051610acc9190614111565b60405180910390f35b348015610ae157600080fd5b50610aea6122bb565b604051610af791906141e2565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b22919061412c565b6122c1565b005b348015610b3557600080fd5b50610b3e612487565b604051610b4b91906141e2565b60405180910390f35b348015610b6057600080fd5b50610b6961248d565b604051610b7691906141e2565b60405180910390f35b610b876124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d9061453f565b60405180910390fd5b8160138190555080601481905550601454601354610c34919061458e565b60128190555060006012541115610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790614630565b60405180910390fd5b5050565b606060038054610c939061467f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbf9061467f565b8015610d0c5780601f10610ce157610100808354040283529160200191610d0c565b820191906000526020600020905b815481529060010190602001808311610cef57829003601f168201915b5050505050905090565b6000610d2a610d236124f1565b84846124f9565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610d8a6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e109061453f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610ee76124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d9061453f565b60405180910390fd5b670de0b6b3a76400006103e86001610f8c610d78565b610f9691906146b0565b610fa09190614739565b610faa9190614739565b811015610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe3906147dc565b60405180910390fd5b670de0b6b3a76400008161100091906146b0565b60078190555050565b60006110168484846126c2565b6110d7846110226124f1565b6110d28560405180606001604052806028815260200161572860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110886124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6124f9565b600190509392505050565b6110ea6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111709061453f565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006112866111ea6124f1565b8461128185600160006111fb6124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249390919063ffffffff16565b6124f9565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113256124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061453f565b60405180910390fd5b81601081905550806011819055506011546010546113d2919061458e565b600f819055506000600f54111561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614848565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148b6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115119061453f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115e56124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b9061453f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61169e6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061453f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117906124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061453f565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118906124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119169061453f565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461194b9061467f565b80601f01602080910402602001604051908101604052809291908181526020018280546119779061467f565b80156119c45780601f10611999576101008083540402835291602001916119c4565b820191906000526020600020905b8154815290600101906020018083116119a757829003601f168201915b5050505050905090565b6119d66124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c9061453f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea906148da565b60405180910390fd5b611afd828261354f565b5050565b60115481565b611b0f6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b959061453f565b60405180910390fd5b611bbe611ba961185e565b611bb161185e565b611bb9610d78565b6124f9565b60005b84849050811015611c4957611c3533868684818110611be357611be26148fa565b5b9050602002016020810190611bf8919061412c565b611c006111d4565b600a611c0c9190614a5c565b868686818110611c1f57611c1e6148fa565b5b90506020020135611c3091906146b0565b611009565b508080611c4190614aa7565b915050611bc1565b5050505050565b60165481565b60145481565b6000611d1f611c696124f1565b84611d1a856040518060600160405280602581526020016157506025913960016000611c936124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6124f9565b6001905092915050565b6000611d3d611d366124f1565b84846126c2565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611d826124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e089061453f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eae9190614111565b60405180910390a25050565b611ec26124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f489061453f565b60405180910390fd5b670de0b6b3a76400006103e86005611f67610d78565b611f7191906146b0565b611f7b9190614739565b611f859190614739565b811015611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe90614b61565b60405180910390fd5b670de0b6b3a764000081611fdb91906146b0565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b60006120076124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d9061453f565b60405180910390fd5b620186a060016120a4610d78565b6120ae91906146b0565b6120b89190614739565b8210156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f190614bf3565b60405180910390fd5b6103e86005612107610d78565b61211191906146b0565b61211b9190614739565b82111561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614c85565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600061220a6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122909061453f565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60105481565b6122c96124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f9061453f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614d17565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60095481565b60008082846124a2919061458e565b9050838110156124e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124de90614d83565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614e15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614ea7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b591906141e2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614f39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614fcb565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128445750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a9061505d565b60405180910390fd5b6000810361289c57612897838360006135f0565b6134e6565b600a60009054906101000a900460ff1615612f60576128b961185e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561292757506128f761185e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129605750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129b35750600560149054906101000a900460ff16155b15612f5f57600a60019054906101000a900460ff16612aad57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a6d5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa3906150c9565b60405180910390fd5b5b600e60009054906101000a900460ff1615612c7657612aca61185e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b5157507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ba957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c755743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2790615181565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d195750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc057600754811115612d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a90615213565b60405180910390fd5b600954612d6f8361143b565b82612d7a919061458e565b1115612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db29061527f565b60405180910390fd5b612f5e565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e635750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eb257600754811115612ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea490615311565b60405180910390fd5b612f5d565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f5c57600954612f0f8361143b565b82612f1a919061458e565b1115612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f529061527f565b60405180910390fd5b5b5b5b5b5b6000601754612f6f919061458e565b4311158015612fca57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130165750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613074576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061307f3061143b565b9050600060085482101590508080156130a45750600a60029054906101000a900460ff165b80156130bd5750600560149054906101000a900460ff16155b80156131135750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131bf5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613203576001600560146101000a81548160ff0219169083151502179055506131e7613883565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132b95750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c357600090505b600081156134d657601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332657506000601254115b156133c057613353606461334560125488613a9090919063ffffffff16565b613b0a90919063ffffffff16565b90506012546013548261336691906146b0565b6133709190614739565b60156000828254613381919061458e565b925050819055506012546014548261339991906146b0565b6133a39190614739565b601660008282546133b4919061458e565b925050819055506134b2565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561341b57506000600f54115b156134b157613448606461343a600f5488613a9090919063ffffffff16565b613b0a90919063ffffffff16565b9050600f546010548261345b91906146b0565b6134659190614739565b60156000828254613476919061458e565b92505081905550600f546011548261348e91906146b0565b6134989190614739565b601660008282546134a9919061458e565b925050819055505b5b60008111156134c7576134c68730836135f0565b5b80856134d39190615331565b94505b6134e18787876135f0565b505050505b505050565b6000838311158290613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a9190614036565b60405180910390fd5b50600083856135429190615331565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361365f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365690614f39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c590614fcb565b60405180910390fd5b6136d9838383613b54565b61374481604051806060016040528060268152602001615702602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137d7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161387691906141e2565b60405180910390a3505050565b600061388e3061143b565b905060006016546015546138a2919061458e565b90506000808314806138b45750600082145b156138c157505050613a8e565b60146008546138d091906146b0565b8311156138e95760146008546138e691906146b0565b92505b6000600283601554866138fc91906146b0565b6139069190614739565b6139109190614739565b905060006139278286613b5990919063ffffffff16565b9050600047905061393782613ba3565b600061394c8247613b5990919063ffffffff16565b905060006139778761396960165485613a9090919063ffffffff16565b613b0a90919063ffffffff16565b9050600081836139879190615331565b905060006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139df90615396565b60006040518083038185875af1925050503d8060008114613a1c576040519150601f19603f3d011682016040523d82523d6000602084013e613a21565b606091505b505080975050600086118015613a375750600081115b15613a8457613a468682613de0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613a7b939291906153ab565b60405180910390a15b5050505050505050505b565b6000808303613aa25760009050613b04565b60008284613ab091906146b0565b9050828482613abf9190614739565b14613aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af690615454565b60405180910390fd5b809150505b92915050565b6000613b4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613eba565b905092915050565b505050565b6000613b9b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134eb565b905092915050565b6000600267ffffffffffffffff811115613bc057613bbf615474565b5b604051908082528060200260200182016040528015613bee5781602001602082028036833780820191505090505b5090503081600081518110613c0657613c056148fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccf91906154b8565b81600181518110613ce357613ce26148fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d48307f0000000000000000000000000000000000000000000000000000000000000000846124f9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613daa9594939291906155de565b600060405180830381600087803b158015613dc457600080fd5b505af1158015613dd8573d6000803e3d6000fd5b505050505050565b613e0b307f0000000000000000000000000000000000000000000000000000000000000000846124f9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e7096959493929190615638565b60606040518083038185885af1158015613e8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613eb391906156ae565b5050505050565b60008083118290613f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef89190614036565b60405180910390fd5b5060008385613f109190614739565b9050809150509392505050565b600080fd5b600080fd5b6000819050919050565b613f3a81613f27565b8114613f4557600080fd5b50565b600081359050613f5781613f31565b92915050565b60008060408385031215613f7457613f73613f1d565b5b6000613f8285828601613f48565b9250506020613f9385828601613f48565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fd7578082015181840152602081019050613fbc565b83811115613fe6576000848401525b50505050565b6000601f19601f8301169050919050565b600061400882613f9d565b6140128185613fa8565b9350614022818560208601613fb9565b61402b81613fec565b840191505092915050565b600060208201905081810360008301526140508184613ffd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061408382614058565b9050919050565b61409381614078565b811461409e57600080fd5b50565b6000813590506140b08161408a565b92915050565b600080604083850312156140cd576140cc613f1d565b5b60006140db858286016140a1565b92505060206140ec85828601613f48565b9150509250929050565b60008115159050919050565b61410b816140f6565b82525050565b60006020820190506141266000830184614102565b92915050565b60006020828403121561414257614141613f1d565b5b6000614150848285016140a1565b91505092915050565b6000819050919050565b600061417e61417961417484614058565b614159565b614058565b9050919050565b600061419082614163565b9050919050565b60006141a282614185565b9050919050565b6141b281614197565b82525050565b60006020820190506141cd60008301846141a9565b92915050565b6141dc81613f27565b82525050565b60006020820190506141f760008301846141d3565b92915050565b60006020828403121561421357614212613f1d565b5b600061422184828501613f48565b91505092915050565b60008060006060848603121561424357614242613f1d565b5b6000614251868287016140a1565b9350506020614262868287016140a1565b925050604061427386828701613f48565b9150509250925092565b614286816140f6565b811461429157600080fd5b50565b6000813590506142a38161427d565b92915050565b600080604083850312156142c0576142bf613f1d565b5b60006142ce858286016140a1565b92505060206142df85828601614294565b9150509250929050565b600060ff82169050919050565b6142ff816142e9565b82525050565b600060208201905061431a60008301846142f6565b92915050565b61432981614078565b82525050565b60006020820190506143446000830184614320565b92915050565b6000602082840312156143605761435f613f1d565b5b600061436e84828501614294565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261439c5761439b614377565b5b8235905067ffffffffffffffff8111156143b9576143b861437c565b5b6020830191508360208202830111156143d5576143d4614381565b5b9250929050565b60008083601f8401126143f2576143f1614377565b5b8235905067ffffffffffffffff81111561440f5761440e61437c565b5b60208301915083602082028301111561442b5761442a614381565b5b9250929050565b6000806000806040858703121561444c5761444b613f1d565b5b600085013567ffffffffffffffff81111561446a57614469613f22565b5b61447687828801614386565b9450945050602085013567ffffffffffffffff81111561449957614498613f22565b5b6144a5878288016143dc565b925092505092959194509250565b600080604083850312156144ca576144c9613f1d565b5b60006144d8858286016140a1565b92505060206144e9858286016140a1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614529602083613fa8565b9150614534826144f3565b602082019050919050565b600060208201905081810360008301526145588161451c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061459982613f27565b91506145a483613f27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145d9576145d861455f565b5b828201905092915050565b7f4d6178696d756d2053656c6c2046656500000000000000000000000000000000600082015250565b600061461a601083613fa8565b9150614625826145e4565b602082019050919050565b600060208201905081810360008301526146498161460d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061469757607f821691505b6020821081036146aa576146a9614650565b5b50919050565b60006146bb82613f27565b91506146c683613f27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146ff576146fe61455f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474482613f27565b915061474f83613f27565b92508261475f5761475e61470a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006147c6602f83613fa8565b91506147d18261476a565b604082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b7f4d6178696d756d20427579204665650000000000000000000000000000000000600082015250565b6000614832600f83613fa8565b915061483d826147fc565b602082019050919050565b6000602082019050818103600083015261486181614825565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148c4603983613fa8565b91506148cf82614868565b604082019050919050565b600060208201905081810360008301526148f3816148b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156149805780860481111561495c5761495b61455f565b5b600185161561496b5780820291505b808102905061497985614929565b9450614940565b94509492505050565b6000826149995760019050614a55565b816149a75760009050614a55565b81600181146149bd57600281146149c7576149f6565b6001915050614a55565b60ff8411156149d9576149d861455f565b5b8360020a9150848211156149f0576149ef61455f565b5b50614a55565b5060208310610133831016604e8410600b8410161715614a2b5782820a905083811115614a2657614a2561455f565b5b614a55565b614a388484846001614936565b92509050818404811115614a4f57614a4e61455f565b5b81810290505b9392505050565b6000614a6782613f27565b9150614a72836142e9565b9250614a9f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614989565b905092915050565b6000614ab282613f27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ae457614ae361455f565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b4b602483613fa8565b9150614b5682614aef565b604082019050919050565b60006020820190508181036000830152614b7a81614b3e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614bdd603583613fa8565b9150614be882614b81565b604082019050919050565b60006020820190508181036000830152614c0c81614bd0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c6f603483613fa8565b9150614c7a82614c13565b604082019050919050565b60006020820190508181036000830152614c9e81614c62565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d01602683613fa8565b9150614d0c82614ca5565b604082019050919050565b60006020820190508181036000830152614d3081614cf4565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d6d601b83613fa8565b9150614d7882614d37565b602082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614dff602483613fa8565b9150614e0a82614da3565b604082019050919050565b60006020820190508181036000830152614e2e81614df2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e91602283613fa8565b9150614e9c82614e35565b604082019050919050565b60006020820190508181036000830152614ec081614e84565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f23602583613fa8565b9150614f2e82614ec7565b604082019050919050565b60006020820190508181036000830152614f5281614f16565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fb5602383613fa8565b9150614fc082614f59565b604082019050919050565b60006020820190508181036000830152614fe481614fa8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000615047603183613fa8565b915061505282614feb565b604082019050919050565b600060208201905081810360008301526150768161503a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150b3601683613fa8565b91506150be8261507d565b602082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061516b604983613fa8565b9150615176826150e9565b606082019050919050565b6000602082019050818103600083015261519a8161515e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006151fd603583613fa8565b9150615208826151a1565b604082019050919050565b6000602082019050818103600083015261522c816151f0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615269601383613fa8565b915061527482615233565b602082019050919050565b600060208201905081810360008301526152988161525c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006152fb603683613fa8565b91506153068261529f565b604082019050919050565b6000602082019050818103600083015261532a816152ee565b9050919050565b600061533c82613f27565b915061534783613f27565b92508282101561535a5761535961455f565b5b828203905092915050565b600081905092915050565b50565b6000615380600083615365565b915061538b82615370565b600082019050919050565b60006153a182615373565b9150819050919050565b60006060820190506153c060008301866141d3565b6153cd60208301856141d3565b6153da60408301846141d3565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061543e602183613fa8565b9150615449826153e2565b604082019050919050565b6000602082019050818103600083015261546d81615431565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154b28161408a565b92915050565b6000602082840312156154ce576154cd613f1d565b5b60006154dc848285016154a3565b91505092915050565b6000819050919050565b600061550a615505615500846154e5565b614159565b613f27565b9050919050565b61551a816154ef565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61555581614078565b82525050565b6000615567838361554c565b60208301905092915050565b6000602082019050919050565b600061558b82615520565b615595818561552b565b93506155a08361553c565b8060005b838110156155d15781516155b8888261555b565b97506155c383615573565b9250506001810190506155a4565b5085935050505092915050565b600060a0820190506155f360008301886141d3565b6156006020830187615511565b81810360408301526156128186615580565b90506156216060830185614320565b61562e60808301846141d3565b9695505050505050565b600060c08201905061564d6000830189614320565b61565a60208301886141d3565b6156676040830187615511565b6156746060830186615511565b6156816080830185614320565b61568e60a08301846141d3565b979650505050505050565b6000815190506156a881613f31565b92915050565b6000806000606084860312156156c7576156c6613f1d565b5b60006156d586828701615699565b93505060206156e686828701615699565b92505060406156f786828701615699565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4c86bf92a9484bf141a931b7b9031d77109a1d848c514026d37fe72f70060ac64736f6c634300080d0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80638da5cb5b11610175578063c0246668116100dc578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610ad5578063f2fde38b14610b00578063f637434214610b29578063f8b45b0514610b54576102b9565b8063dd62ed3e14610a42578063e2f4560514610a7f578063e884f26014610aaa576102b9565b8063c024666814610932578063c18bc1951461095b578063c876d0b914610984578063c8c8ebe4146109af578063d257b34f146109da578063d85ba06314610a17576102b9565b80639fccce321161012e5780639fccce32146107fa578063a0d82dc514610825578063a457c2d714610850578063a9059cbb1461088d578063b62496f5146108ca578063bbc0c74214610907576102b9565b80638da5cb5b146106fe578063924de9b71461072957806395d89b41146107525780639a7a23d61461077d5780639c3b4fdc146107a65780639c63e6b9146107d1576102b9565b806339509351116102195780636ddd1713116101d25780636ddd17131461061457806370a082311461063f578063715018a61461067c578063751039fc146106935780637571336a146106be5780638a8c523c146106e7576102b9565b806339509351146104f057806349bd5a5e1461052d5780634a62bb65146105585780634fbee1931461058357806366ca9b83146105c05780636a486a8e146105e9576102b9565b80631816467f1161026b5780631816467f146103e25780631a8145bb1461040b578063203e727e1461043657806323b872dd1461045f5780632d5a5d341461049c578063313ce567146104c5576102b9565b806302dbd8f8146102be57806306fdde03146102e7578063095ea7b31461031257806310d5de531461034f5780631694505e1461038c57806318160ddd146103b7576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102e560048036038101906102e09190613f5d565b610b7f565b005b3480156102f357600080fd5b506102fc610c84565b6040516103099190614036565b60405180910390f35b34801561031e57600080fd5b50610339600480360381019061033491906140b6565b610d16565b6040516103469190614111565b60405180910390f35b34801561035b57600080fd5b506103766004803603810190610371919061412c565b610d34565b6040516103839190614111565b60405180910390f35b34801561039857600080fd5b506103a1610d54565b6040516103ae91906141b8565b60405180910390f35b3480156103c357600080fd5b506103cc610d78565b6040516103d991906141e2565b60405180910390f35b3480156103ee57600080fd5b506104096004803603810190610404919061412c565b610d82565b005b34801561041757600080fd5b50610420610ed9565b60405161042d91906141e2565b60405180910390f35b34801561044257600080fd5b5061045d600480360381019061045891906141fd565b610edf565b005b34801561046b57600080fd5b506104866004803603810190610481919061422a565b611009565b6040516104939190614111565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be91906142a9565b6110e2565b005b3480156104d157600080fd5b506104da6111d4565b6040516104e79190614305565b60405180910390f35b3480156104fc57600080fd5b50610517600480360381019061051291906140b6565b6111dd565b6040516105249190614111565b60405180910390f35b34801561053957600080fd5b50610542611290565b60405161054f919061432f565b60405180910390f35b34801561056457600080fd5b5061056d6112b4565b60405161057a9190614111565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a5919061412c565b6112c7565b6040516105b79190614111565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e29190613f5d565b61131d565b005b3480156105f557600080fd5b506105fe611422565b60405161060b91906141e2565b60405180910390f35b34801561062057600080fd5b50610629611428565b6040516106369190614111565b60405180910390f35b34801561064b57600080fd5b506106666004803603810190610661919061412c565b61143b565b60405161067391906141e2565b60405180910390f35b34801561068857600080fd5b50610691611483565b005b34801561069f57600080fd5b506106a86115db565b6040516106b59190614111565b60405180910390f35b3480156106ca57600080fd5b506106e560048036038101906106e091906142a9565b611696565b005b3480156106f357600080fd5b506106fc611788565b005b34801561070a57600080fd5b5061071361185e565b604051610720919061432f565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b919061434a565b611888565b005b34801561075e57600080fd5b5061076761193c565b6040516107749190614036565b60405180910390f35b34801561078957600080fd5b506107a4600480360381019061079f91906142a9565b6119ce565b005b3480156107b257600080fd5b506107bb611b01565b6040516107c891906141e2565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190614432565b611b07565b005b34801561080657600080fd5b5061080f611c50565b60405161081c91906141e2565b60405180910390f35b34801561083157600080fd5b5061083a611c56565b60405161084791906141e2565b60405180910390f35b34801561085c57600080fd5b50610877600480360381019061087291906140b6565b611c5c565b6040516108849190614111565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af91906140b6565b611d29565b6040516108c19190614111565b60405180910390f35b3480156108d657600080fd5b506108f160048036038101906108ec919061412c565b611d47565b6040516108fe9190614111565b60405180910390f35b34801561091357600080fd5b5061091c611d67565b6040516109299190614111565b60405180910390f35b34801561093e57600080fd5b50610959600480360381019061095491906142a9565b611d7a565b005b34801561096757600080fd5b50610982600480360381019061097d91906141fd565b611eba565b005b34801561099057600080fd5b50610999611fe4565b6040516109a69190614111565b60405180910390f35b3480156109bb57600080fd5b506109c4611ff7565b6040516109d191906141e2565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc91906141fd565b611ffd565b604051610a0e9190614111565b60405180910390f35b348015610a2357600080fd5b50610a2c61216d565b604051610a3991906141e2565b60405180910390f35b348015610a4e57600080fd5b50610a696004803603810190610a6491906144b3565b612173565b604051610a7691906141e2565b60405180910390f35b348015610a8b57600080fd5b50610a946121fa565b604051610aa191906141e2565b60405180910390f35b348015610ab657600080fd5b50610abf612200565b604051610acc9190614111565b60405180910390f35b348015610ae157600080fd5b50610aea6122bb565b604051610af791906141e2565b60405180910390f35b348015610b0c57600080fd5b50610b276004803603810190610b22919061412c565b6122c1565b005b348015610b3557600080fd5b50610b3e612487565b604051610b4b91906141e2565b60405180910390f35b348015610b6057600080fd5b50610b6961248d565b604051610b7691906141e2565b60405180910390f35b610b876124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0d9061453f565b60405180910390fd5b8160138190555080601481905550601454601354610c34919061458e565b60128190555060006012541115610c80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7790614630565b60405180910390fd5b5050565b606060038054610c939061467f565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbf9061467f565b8015610d0c5780601f10610ce157610100808354040283529160200191610d0c565b820191906000526020600020905b815481529060010190602001808311610cef57829003601f168201915b5050505050905090565b6000610d2a610d236124f1565b84846124f9565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610d8a6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e109061453f565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b610ee76124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d9061453f565b60405180910390fd5b670de0b6b3a76400006103e86001610f8c610d78565b610f9691906146b0565b610fa09190614739565b610faa9190614739565b811015610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe3906147dc565b60405180910390fd5b670de0b6b3a76400008161100091906146b0565b60078190555050565b60006110168484846126c2565b6110d7846110226124f1565b6110d28560405180606001604052806028815260200161572860289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006110886124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6124f9565b600190509392505050565b6110ea6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611179576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111709061453f565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006012905090565b60006112866111ea6124f1565b8461128185600160006111fb6124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249390919063ffffffff16565b6124f9565b6001905092915050565b7f000000000000000000000000e293dd6afc44f576f43219c75bb868e31193832481565b600a60009054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113256124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ab9061453f565b60405180910390fd5b81601081905550806011819055506011546010546113d2919061458e565b600f819055506000600f54111561141e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141590614848565b60405180910390fd5b5050565b60125481565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148b6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461151a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115119061453f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115e56124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b9061453f565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b61169e6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461172d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061453f565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117906124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461181f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118169061453f565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff02191690831515021790555043601781905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118906124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461191f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119169061453f565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b60606004805461194b9061467f565b80601f01602080910402602001604051908101604052809291908181526020018280546119779061467f565b80156119c45780601f10611999576101008083540402835291602001916119c4565b820191906000526020600020905b8154815290600101906020018083116119a757829003601f168201915b5050505050905090565b6119d66124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5c9061453f565b60405180910390fd5b7f000000000000000000000000e293dd6afc44f576f43219c75bb868e31193832473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea906148da565b60405180910390fd5b611afd828261354f565b5050565b60115481565b611b0f6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b959061453f565b60405180910390fd5b611bbe611ba961185e565b611bb161185e565b611bb9610d78565b6124f9565b60005b84849050811015611c4957611c3533868684818110611be357611be26148fa565b5b9050602002016020810190611bf8919061412c565b611c006111d4565b600a611c0c9190614a5c565b868686818110611c1f57611c1e6148fa565b5b90506020020135611c3091906146b0565b611009565b508080611c4190614aa7565b915050611bc1565b5050505050565b60165481565b60145481565b6000611d1f611c696124f1565b84611d1a856040518060600160405280602581526020016157506025913960016000611c936124f1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6124f9565b6001905092915050565b6000611d3d611d366124f1565b84846126c2565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b611d826124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e089061453f565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611eae9190614111565b60405180910390a25050565b611ec26124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f489061453f565b60405180910390fd5b670de0b6b3a76400006103e86005611f67610d78565b611f7191906146b0565b611f7b9190614739565b611f859190614739565b811015611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe90614b61565b60405180910390fd5b670de0b6b3a764000081611fdb91906146b0565b60098190555050565b600e60009054906101000a900460ff1681565b60075481565b60006120076124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d9061453f565b60405180910390fd5b620186a060016120a4610d78565b6120ae91906146b0565b6120b89190614739565b8210156120fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f190614bf3565b60405180910390fd5b6103e86005612107610d78565b61211191906146b0565b61211b9190614739565b82111561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614c85565b60405180910390fd5b8160088190555060019050919050565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b600061220a6124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122909061453f565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60105481565b6122c96124f1565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612358576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234f9061453f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123be90614d17565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b60095481565b60008082846124a2919061458e565b9050838110156124e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124de90614d83565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161255f90614e15565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ce90614ea7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516126b591906141e2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612731576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272890614f39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279790614fcb565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128445750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287a9061505d565b60405180910390fd5b6000810361289c57612897838360006135f0565b6134e6565b600a60009054906101000a900460ff1615612f60576128b961185e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561292757506128f761185e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129605750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129b35750600560149054906101000a900460ff16155b15612f5f57600a60019054906101000a900460ff16612aad57601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a6d5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612aac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa3906150c9565b60405180910390fd5b5b600e60009054906101000a900460ff1615612c7657612aca61185e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b5157507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ba957507f000000000000000000000000e293dd6afc44f576f43219c75bb868e31193832473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c755743600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115612c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2790615181565b60405180910390fd5b43600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d195750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dc057600754811115612d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d5a90615213565b60405180910390fd5b600954612d6f8361143b565b82612d7a919061458e565b1115612dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db29061527f565b60405180910390fd5b612f5e565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e635750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eb257600754811115612ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ea490615311565b60405180910390fd5b612f5d565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f5c57600954612f0f8361143b565b82612f1a919061458e565b1115612f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f529061527f565b60405180910390fd5b5b5b5b5b5b6000601754612f6f919061458e565b4311158015612fca57507f000000000000000000000000e293dd6afc44f576f43219c75bb868e31193832473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130165750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613074576001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061307f3061143b565b9050600060085482101590508080156130a45750600a60029054906101000a900460ff165b80156130bd5750600560149054906101000a900460ff16155b80156131135750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131695750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131bf5750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613203576001600560146101000a81548160ff0219169083151502179055506131e7613883565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132b95750601860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c357600090505b600081156134d657601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561332657506000601254115b156133c057613353606461334560125488613a9090919063ffffffff16565b613b0a90919063ffffffff16565b90506012546013548261336691906146b0565b6133709190614739565b60156000828254613381919061458e565b925050819055506012546014548261339991906146b0565b6133a39190614739565b601660008282546133b4919061458e565b925050819055506134b2565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561341b57506000600f54115b156134b157613448606461343a600f5488613a9090919063ffffffff16565b613b0a90919063ffffffff16565b9050600f546010548261345b91906146b0565b6134659190614739565b60156000828254613476919061458e565b92505081905550600f546011548261348e91906146b0565b6134989190614739565b601660008282546134a9919061458e565b925050819055505b5b60008111156134c7576134c68730836135f0565b5b80856134d39190615331565b94505b6134e18787876135f0565b505050505b505050565b6000838311158290613533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352a9190614036565b60405180910390fd5b50600083856135429190615331565b9050809150509392505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361365f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365690614f39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036136ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136c590614fcb565b60405180910390fd5b6136d9838383613b54565b61374481604051806060016040528060268152602001615702602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134eb9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137d7816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461249390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161387691906141e2565b60405180910390a3505050565b600061388e3061143b565b905060006016546015546138a2919061458e565b90506000808314806138b45750600082145b156138c157505050613a8e565b60146008546138d091906146b0565b8311156138e95760146008546138e691906146b0565b92505b6000600283601554866138fc91906146b0565b6139069190614739565b6139109190614739565b905060006139278286613b5990919063ffffffff16565b9050600047905061393782613ba3565b600061394c8247613b5990919063ffffffff16565b905060006139778761396960165485613a9090919063ffffffff16565b613b0a90919063ffffffff16565b9050600081836139879190615331565b905060006015819055506000601681905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139df90615396565b60006040518083038185875af1925050503d8060008114613a1c576040519150601f19603f3d011682016040523d82523d6000602084013e613a21565b606091505b505080975050600086118015613a375750600081115b15613a8457613a468682613de0565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613a7b939291906153ab565b60405180910390a15b5050505050505050505b565b6000808303613aa25760009050613b04565b60008284613ab091906146b0565b9050828482613abf9190614739565b14613aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613af690615454565b60405180910390fd5b809150505b92915050565b6000613b4c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613eba565b905092915050565b505050565b6000613b9b83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134eb565b905092915050565b6000600267ffffffffffffffff811115613bc057613bbf615474565b5b604051908082528060200260200182016040528015613bee5781602001602082028036833780820191505090505b5090503081600081518110613c0657613c056148fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ccf91906154b8565b81600181518110613ce357613ce26148fa565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d48307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124f9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613daa9594939291906155de565b600060405180830381600087803b158015613dc457600080fd5b505af1158015613dd8573d6000803e3d6000fd5b505050505050565b613e0b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846124f9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e7096959493929190615638565b60606040518083038185885af1158015613e8e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613eb391906156ae565b5050505050565b60008083118290613f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ef89190614036565b60405180910390fd5b5060008385613f109190614739565b9050809150509392505050565b600080fd5b600080fd5b6000819050919050565b613f3a81613f27565b8114613f4557600080fd5b50565b600081359050613f5781613f31565b92915050565b60008060408385031215613f7457613f73613f1d565b5b6000613f8285828601613f48565b9250506020613f9385828601613f48565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613fd7578082015181840152602081019050613fbc565b83811115613fe6576000848401525b50505050565b6000601f19601f8301169050919050565b600061400882613f9d565b6140128185613fa8565b9350614022818560208601613fb9565b61402b81613fec565b840191505092915050565b600060208201905081810360008301526140508184613ffd565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061408382614058565b9050919050565b61409381614078565b811461409e57600080fd5b50565b6000813590506140b08161408a565b92915050565b600080604083850312156140cd576140cc613f1d565b5b60006140db858286016140a1565b92505060206140ec85828601613f48565b9150509250929050565b60008115159050919050565b61410b816140f6565b82525050565b60006020820190506141266000830184614102565b92915050565b60006020828403121561414257614141613f1d565b5b6000614150848285016140a1565b91505092915050565b6000819050919050565b600061417e61417961417484614058565b614159565b614058565b9050919050565b600061419082614163565b9050919050565b60006141a282614185565b9050919050565b6141b281614197565b82525050565b60006020820190506141cd60008301846141a9565b92915050565b6141dc81613f27565b82525050565b60006020820190506141f760008301846141d3565b92915050565b60006020828403121561421357614212613f1d565b5b600061422184828501613f48565b91505092915050565b60008060006060848603121561424357614242613f1d565b5b6000614251868287016140a1565b9350506020614262868287016140a1565b925050604061427386828701613f48565b9150509250925092565b614286816140f6565b811461429157600080fd5b50565b6000813590506142a38161427d565b92915050565b600080604083850312156142c0576142bf613f1d565b5b60006142ce858286016140a1565b92505060206142df85828601614294565b9150509250929050565b600060ff82169050919050565b6142ff816142e9565b82525050565b600060208201905061431a60008301846142f6565b92915050565b61432981614078565b82525050565b60006020820190506143446000830184614320565b92915050565b6000602082840312156143605761435f613f1d565b5b600061436e84828501614294565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261439c5761439b614377565b5b8235905067ffffffffffffffff8111156143b9576143b861437c565b5b6020830191508360208202830111156143d5576143d4614381565b5b9250929050565b60008083601f8401126143f2576143f1614377565b5b8235905067ffffffffffffffff81111561440f5761440e61437c565b5b60208301915083602082028301111561442b5761442a614381565b5b9250929050565b6000806000806040858703121561444c5761444b613f1d565b5b600085013567ffffffffffffffff81111561446a57614469613f22565b5b61447687828801614386565b9450945050602085013567ffffffffffffffff81111561449957614498613f22565b5b6144a5878288016143dc565b925092505092959194509250565b600080604083850312156144ca576144c9613f1d565b5b60006144d8858286016140a1565b92505060206144e9858286016140a1565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614529602083613fa8565b9150614534826144f3565b602082019050919050565b600060208201905081810360008301526145588161451c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061459982613f27565b91506145a483613f27565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145d9576145d861455f565b5b828201905092915050565b7f4d6178696d756d2053656c6c2046656500000000000000000000000000000000600082015250565b600061461a601083613fa8565b9150614625826145e4565b602082019050919050565b600060208201905081810360008301526146498161460d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061469757607f821691505b6020821081036146aa576146a9614650565b5b50919050565b60006146bb82613f27565b91506146c683613f27565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146ff576146fe61455f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061474482613f27565b915061474f83613f27565b92508261475f5761475e61470a565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006147c6602f83613fa8565b91506147d18261476a565b604082019050919050565b600060208201905081810360008301526147f5816147b9565b9050919050565b7f4d6178696d756d20427579204665650000000000000000000000000000000000600082015250565b6000614832600f83613fa8565b915061483d826147fc565b602082019050919050565b6000602082019050818103600083015261486181614825565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006148c4603983613fa8565b91506148cf82614868565b604082019050919050565b600060208201905081810360008301526148f3816148b7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156149805780860481111561495c5761495b61455f565b5b600185161561496b5780820291505b808102905061497985614929565b9450614940565b94509492505050565b6000826149995760019050614a55565b816149a75760009050614a55565b81600181146149bd57600281146149c7576149f6565b6001915050614a55565b60ff8411156149d9576149d861455f565b5b8360020a9150848211156149f0576149ef61455f565b5b50614a55565b5060208310610133831016604e8410600b8410161715614a2b5782820a905083811115614a2657614a2561455f565b5b614a55565b614a388484846001614936565b92509050818404811115614a4f57614a4e61455f565b5b81810290505b9392505050565b6000614a6782613f27565b9150614a72836142e9565b9250614a9f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614989565b905092915050565b6000614ab282613f27565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ae457614ae361455f565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614b4b602483613fa8565b9150614b5682614aef565b604082019050919050565b60006020820190508181036000830152614b7a81614b3e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614bdd603583613fa8565b9150614be882614b81565b604082019050919050565b60006020820190508181036000830152614c0c81614bd0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614c6f603483613fa8565b9150614c7a82614c13565b604082019050919050565b60006020820190508181036000830152614c9e81614c62565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614d01602683613fa8565b9150614d0c82614ca5565b604082019050919050565b60006020820190508181036000830152614d3081614cf4565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614d6d601b83613fa8565b9150614d7882614d37565b602082019050919050565b60006020820190508181036000830152614d9c81614d60565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614dff602483613fa8565b9150614e0a82614da3565b604082019050919050565b60006020820190508181036000830152614e2e81614df2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e91602283613fa8565b9150614e9c82614e35565b604082019050919050565b60006020820190508181036000830152614ec081614e84565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f23602583613fa8565b9150614f2e82614ec7565b604082019050919050565b60006020820190508181036000830152614f5281614f16565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fb5602383613fa8565b9150614fc082614f59565b604082019050919050565b60006020820190508181036000830152614fe481614fa8565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000615047603183613fa8565b915061505282614feb565b604082019050919050565b600060208201905081810360008301526150768161503a565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150b3601683613fa8565b91506150be8261507d565b602082019050919050565b600060208201905081810360008301526150e2816150a6565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061516b604983613fa8565b9150615176826150e9565b606082019050919050565b6000602082019050818103600083015261519a8161515e565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006151fd603583613fa8565b9150615208826151a1565b604082019050919050565b6000602082019050818103600083015261522c816151f0565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615269601383613fa8565b915061527482615233565b602082019050919050565b600060208201905081810360008301526152988161525c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006152fb603683613fa8565b91506153068261529f565b604082019050919050565b6000602082019050818103600083015261532a816152ee565b9050919050565b600061533c82613f27565b915061534783613f27565b92508282101561535a5761535961455f565b5b828203905092915050565b600081905092915050565b50565b6000615380600083615365565b915061538b82615370565b600082019050919050565b60006153a182615373565b9150819050919050565b60006060820190506153c060008301866141d3565b6153cd60208301856141d3565b6153da60408301846141d3565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061543e602183613fa8565b9150615449826153e2565b604082019050919050565b6000602082019050818103600083015261546d81615431565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506154b28161408a565b92915050565b6000602082840312156154ce576154cd613f1d565b5b60006154dc848285016154a3565b91505092915050565b6000819050919050565b600061550a615505615500846154e5565b614159565b613f27565b9050919050565b61551a816154ef565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61555581614078565b82525050565b6000615567838361554c565b60208301905092915050565b6000602082019050919050565b600061558b82615520565b615595818561552b565b93506155a08361553c565b8060005b838110156155d15781516155b8888261555b565b97506155c383615573565b9250506001810190506155a4565b5085935050505092915050565b600060a0820190506155f360008301886141d3565b6156006020830187615511565b81810360408301526156128186615580565b90506156216060830185614320565b61562e60808301846141d3565b9695505050505050565b600060c08201905061564d6000830189614320565b61565a60208301886141d3565b6156676040830187615511565b6156746060830186615511565b6156816080830185614320565b61568e60a08301846141d3565b979650505050505050565b6000815190506156a881613f31565b92915050565b6000806000606084860312156156c7576156c6613f1d565b5b60006156d586828701615699565b93505060206156e686828701615699565b92505060406156f786828701615699565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220d4c86bf92a9484bf141a931b7b9031d77109a1d848c514026d37fe72f70060ac64736f6c634300080d0033

Deployed Bytecode Sourcemap

29313:14649:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35493:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7414:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9588:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30691:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29389:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8537:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36568:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30405:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34395:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10240:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35972:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8378:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11005:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29447:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29677:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36734:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35213:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30297:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29757:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8709:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21916:148;;;;;;;;;;;;;:::i;:::-;;33612:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34862:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33411:148;;;;;;;;;;;;;:::i;:::-;;21272:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35103:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7634:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36116:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30263:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43630:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30445:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30370:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11727:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9050:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30914:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29717:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35781:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34638:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30143:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29561:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34000:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30192:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9289:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29603:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33794:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30226:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22220:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30332:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29643:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35493:279;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35606:13:::1;35587:16;:32;;;;35643:7;35630:10;:20;;;;35696:10;;35677:16;;:29;;;;:::i;:::-;35661:13;:45;;;;35742:1;35725:13;;:18;;35717:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;35493:279:::0;;:::o;7414:100::-;7468:13;7501:5;7494:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7414:100;:::o;9588:169::-;9671:4;9688:39;9697:12;:10;:12::i;:::-;9711:7;9720:6;9688:8;:39::i;:::-;9745:4;9738:11;;9588:169;;;;:::o;30691:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29389:51::-;;;:::o;8537:108::-;8598:7;8625:12;;8618:19;;8537:108;:::o;36568:157::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36675:9:::1;;;;;;;;;;;36647:38;;36664:9;36647:38;;;;;;;;;;;;36708:9;36696;;:21;;;;;;;;;;;;;;;;;;36568:157:::0;:::o;30405:33::-;;;;:::o;34395:234::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34514:4:::1;34508;34504:1;34488:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34487:31;;;;:::i;:::-;34477:6;:41;;34469:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;34614:6;34604;:17;;;;:::i;:::-;34581:20;:40;;;;34395:234:::0;:::o;10240:355::-;10380:4;10397:36;10407:6;10415:9;10426:6;10397:9;:36::i;:::-;10444:121;10453:6;10461:12;:10;:12::i;:::-;10475:89;10513:6;10475:89;;;;;;;;;;;;;;;;;:11;:19;10487:6;10475:19;;;;;;;;;;;;;;;:33;10495:12;:10;:12::i;:::-;10475:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10444:8;:121::i;:::-;10583:4;10576:11;;10240:355;;;;;:::o;35972:135::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36086:13:::1;36064:10;:19;36075:7;36064:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35972:135:::0;;:::o;8378:93::-;8436:5;8461:2;8454:9;;8378:93;:::o;11005:218::-;11093:4;11110:83;11119:12;:10;:12::i;:::-;11133:7;11142:50;11181:10;11142:11;:25;11154:12;:10;:12::i;:::-;11142:25;;;;;;;;;;;;;;;:34;11168:7;11142:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11110:8;:83::i;:::-;11211:4;11204:11;;11005:218;;;;:::o;29447:38::-;;;:::o;29677:33::-;;;;;;;;;;;;;:::o;36734:125::-;36799:4;36823:19;:28;36843:7;36823:28;;;;;;;;;;;;;;;;;;;;;;;;;36816:35;;36734:125;;;:::o;35213:271::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35324:13:::1;35306:15;:31;;;;35360:7;35348:9;:19;;;;35411:9;;35393:15;;:27;;;;:::i;:::-;35378:12;:42;;;;35455:1;35439:12;;:17;;35431:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;35213:271:::0;;:::o;30297:28::-;;;;:::o;29757:31::-;;;;;;;;;;;;;:::o;8709:127::-;8783:7;8810:9;:18;8820:7;8810:18;;;;;;;;;;;;;;;;8803:25;;8709:127;;;:::o;21916:148::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22023:1:::1;21986:40;;22007:6;;;;;;;;;;;21986:40;;;;;;;;;;;;22054:1;22037:6;;:19;;;;;;;;;;;;;;;;;;21916:148::o:0;33612:120::-;33664:4;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33697:5:::1;33680:14;;:22;;;;;;;;;;;;;;;;;;33720:4;33713:11;;33612:120:::0;:::o;34862:144::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34994:4:::1;34952:31;:39;34984:6;34952:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34862:144:::0;;:::o;33411:148::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33482:4:::1;33466:13;;:20;;;;;;;;;;;;;;;;;;33511:4;33497:11;;:18;;;;;;;;;;;;;;;;;;33539:12;33526:10;:25;;;;33411:148::o:0;21272:79::-;21310:7;21337:6;;;;;;;;;;;21330:13;;21272:79;:::o;35103:101::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35189:7:::1;35175:11;;:21;;;;;;;;;;;;;;;;;;35103:101:::0;:::o;7634:104::-;7690:13;7723:7;7716:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7634:104;:::o;36116:245::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36223:13:::1;36215:21;;:4;:21;;::::0;36207:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36312:41;36341:4;36347:5;36312:28;:41::i;:::-;36116:245:::0;;:::o;30263:24::-;;;;:::o;43630:329::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43756:41:::1;43765:7;:5;:7::i;:::-;43774;:5;:7::i;:::-;43783:13;:11;:13::i;:::-;43756:8;:41::i;:::-;43813:9;43808:144;43832:10;;:17;;43828:1;:21;43808:144;;;43871:69;43884:10;43896;;43907:1;43896:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;43929:10;:8;:10::i;:::-;43923:2;:16;;;;:::i;:::-;43911:6;;43918:1;43911:9;;;;;;;:::i;:::-;;;;;;;;:28;;;;:::i;:::-;43871:12;:69::i;:::-;;43851:3;;;;;:::i;:::-;;;;43808:144;;;;43630:329:::0;;;;:::o;30445:27::-;;;;:::o;30370:25::-;;;;:::o;11727:269::-;11820:4;11837:129;11846:12;:10;:12::i;:::-;11860:7;11869:96;11908:15;11869:96;;;;;;;;;;;;;;;;;:11;:25;11881:12;:10;:12::i;:::-;11869:25;;;;;;;;;;;;;;;:34;11895:7;11869:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11837:8;:129::i;:::-;11984:4;11977:11;;11727:269;;;;:::o;9050:175::-;9136:4;9153:42;9163:12;:10;:12::i;:::-;9177:9;9188:6;9153:9;:42::i;:::-;9213:4;9206:11;;9050:175;;;;:::o;30914:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;29717:33::-;;;;;;;;;;;;;:::o;35781:182::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35897:8:::1;35866:19;:28;35886:7;35866:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35937:7;35921:34;;;35946:8;35921:34;;;;;;:::i;:::-;;;;;;;;35781:182:::0;;:::o;34638:215::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34760:4:::1;34754;34750:1;34734:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34733:31;;;;:::i;:::-;34723:6;:41;;34715:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;34838:6;34828;:17;;;;:::i;:::-;34816:9;:29;;;;34638:215:::0;:::o;30143:39::-;;;;;;;;;;;;;:::o;29561:35::-;;;;:::o;34000:386::-;34081:4;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34138:6:::1;34134:1;34118:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34105:9;:39;;34097:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34254:4;34250:1;34234:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34221:9;:37;;34213:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;34347:9;34326:18;:30;;;;34374:4;34367:11;;34000:386:::0;;;:::o;30192:27::-;;;;:::o;9289:151::-;9378:7;9405:11;:18;9417:5;9405:18;;;;;;;;;;;;;;;:27;9424:7;9405:27;;;;;;;;;;;;;;;;9398:34;;9289:151;;;;:::o;29603:33::-;;;;:::o;33794:134::-;33854:4;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33893:5:::1;33870:20;;:28;;;;;;;;;;;;;;;;;;33916:4;33909:11;;33794:134:::0;:::o;30226:30::-;;;;:::o;22220:244::-;21495:12;:10;:12::i;:::-;21485:22;;:6;;;;;;;;;;;:22;;;21477:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22329:1:::1;22309:22;;:8;:22;;::::0;22301:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22419:8;22390:38;;22411:6;;;;;;;;;;;22390:38;;;;;;;;;;;;22448:8;22439:6;;:17;;;;;;;;;;;;;;;;;;22220:244:::0;:::o;30332:31::-;;;;:::o;29643:24::-;;;;:::o;16304:182::-;16362:7;16382:9;16398:1;16394;:5;;;;:::i;:::-;16382:17;;16423:1;16418;:6;;16410:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16477:1;16470:8;;;16304:182;;;;:::o;105:98::-;158:7;185:10;178:17;;105:98;:::o;14923:381::-;15076:1;15059:19;;:5;:19;;;15051:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15157:1;15138:21;;:7;:21;;;15130:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15242:6;15212:11;:18;15224:5;15212:18;;;;;;;;;;;;;;;:27;15231:7;15212:27;;;;;;;;;;;;;;;:36;;;;15280:7;15264:32;;15273:5;15264:32;;;15289:6;15264:32;;;;;;:::i;:::-;;;;;;;;14923:381;;;:::o;36919:4250::-;37067:1;37051:18;;:4;:18;;;37043:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37144:1;37130:16;;:2;:16;;;37122:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37206:10;:14;37217:2;37206:14;;;;;;;;;;;;;;;;;;;;;;;;;37205:15;:36;;;;;37225:10;:16;37236:4;37225:16;;;;;;;;;;;;;;;;;;;;;;;;;37224:17;37205:36;37197:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;37320:1;37310:6;:11;37307:92;;37338:28;37354:4;37360:2;37364:1;37338:15;:28::i;:::-;37381:7;;37307:92;37415:14;;;;;;;;;;;37412:1812;;;37475:7;:5;:7::i;:::-;37467:15;;:4;:15;;;;:49;;;;;37509:7;:5;:7::i;:::-;37503:13;;:2;:13;;;;37467:49;:86;;;;;37551:1;37537:16;;:2;:16;;;;37467:86;:128;;;;;37588:6;37574:21;;:2;:21;;;;37467:128;:158;;;;;37617:8;;;;;;;;;;;37616:9;37467:158;37445:1768;;;37663:13;;;;;;;;;;;37659:148;;37708:19;:25;37728:4;37708:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37737:19;:23;37757:2;37737:23;;;;;;;;;;;;;;;;;;;;;;;;;37708:52;37700:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37659:148;37966:20;;;;;;;;;;;37962:424;;;38020:7;:5;:7::i;:::-;38014:13;;:2;:13;;;;:47;;;;;38045:15;38031:30;;:2;:30;;;;38014:47;:79;;;;;38079:13;38065:28;;:2;:28;;;;38014:79;38010:357;;;38172:12;38129:28;:39;38158:9;38129:39;;;;;;;;;;;;;;;;:55;;38121:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38331:12;38289:28;:39;38318:9;38289:39;;;;;;;;;;;;;;;:54;;;;38010:357;37962:424;38439:25;:31;38465:4;38439:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38475:31;:35;38507:2;38475:35;;;;;;;;;;;;;;;;;;;;;;;;;38474:36;38439:71;38435:763;;;38557:20;;38547:6;:30;;38539:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;38696:9;;38679:13;38689:2;38679:9;:13::i;:::-;38670:6;:22;;;;:::i;:::-;:35;;38662:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38435:763;;;38808:25;:29;38834:2;38808:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38842:31;:37;38874:4;38842:37;;;;;;;;;;;;;;;;;;;;;;;;;38841:38;38808:71;38804:394;;;38926:20;;38916:6;:30;;38908:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;38804:394;;;39052:31;:35;39084:2;39052:35;;;;;;;;;;;;;;;;;;;;;;;;;39048:150;;39145:9;;39128:13;39138:2;39128:9;:13::i;:::-;39119:6;:22;;;;:::i;:::-;:35;;39111:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39048:150;38804:394;38435:763;37445:1768;37412:1812;39298:1;39285:10;;:14;;;;:::i;:::-;39268:12;:32;;:73;;;;;39328:13;39322:19;;:2;:19;;;;39268:73;:152;;;;;39377:42;39363:57;;:2;:57;;;;39268:152;39264:221;;;39469:4;39452:10;:14;39463:2;39452:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39264:221;39498:28;39529:24;39547:4;39529:9;:24::i;:::-;39498:55;;39567:12;39606:18;;39582:20;:42;;39567:57;;39656:7;:35;;;;;39680:11;;;;;;;;;;;39656:35;:61;;;;;39709:8;;;;;;;;;;;39708:9;39656:61;:110;;;;;39735:25;:31;39761:4;39735:31;;;;;;;;;;;;;;;;;;;;;;;;;39734:32;39656:110;:153;;;;;39784:19;:25;39804:4;39784:25;;;;;;;;;;;;;;;;;;;;;;;;;39783:26;39656:153;:194;;;;;39827:19;:23;39847:2;39827:23;;;;;;;;;;;;;;;;;;;;;;;;;39826:24;39656:194;39638:328;;;39888:4;39877:8;;:15;;;;;;;;;;;;;;;;;;39910:10;:8;:10::i;:::-;39949:5;39938:8;;:16;;;;;;;;;;;;;;;;;;39638:328;39980:12;39996:8;;;;;;;;;;;39995:9;39980:24;;40106:19;:25;40126:4;40106:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40135:19;:23;40155:2;40135:23;;;;;;;;;;;;;;;;;;;;;;;;;40106:52;40103:99;;;40185:5;40175:15;;40103:99;40215:12;40319:7;40316:799;;;40370:25;:29;40396:2;40370:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40419:1;40403:13;;:17;40370:50;40366:596;;;40447:34;40477:3;40447:25;40458:13;;40447:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40440:41;;40548:13;;40529:16;;40522:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40500:18;;:61;;;;;;;:::i;:::-;;;;;;;;40616:13;;40603:10;;40596:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40580:12;;:49;;;;;;;:::i;:::-;;;;;;;;40366:596;;;40690:25;:31;40716:4;40690:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40740:1;40725:12;;:16;40690:51;40687:275;;;40769:33;40798:3;40769:24;40780:12;;40769:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40762:40;;40868:12;;40850:15;;40843:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40821:18;;:59;;;;;;;:::i;:::-;;;;;;;;40934:12;;40922:9;;40915:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40899:12;;:47;;;;;;;:::i;:::-;;;;;;;;40687:275;40366:596;40989:1;40982:4;:8;40979:93;;;41014:42;41030:4;41044;41051;41014:15;:42::i;:::-;40979:93;41099:4;41089:14;;;;;:::i;:::-;;;40316:799;41128:33;41144:4;41150:2;41154:6;41128:15;:33::i;:::-;37032:4137;;;;36919:4250;;;;:::o;17210:193::-;17296:7;17329:1;17324;:6;;17332:12;17316:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17356:9;17372:1;17368;:5;;;;:::i;:::-;17356:17;;17394:1;17387:8;;;17210:193;;;;;:::o;36370:189::-;36487:5;36453:25;:31;36479:4;36453:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36545:5;36511:40;;36539:4;36511:40;;;;;;;;;;;;36370:189;;:::o;12487:575::-;12645:1;12627:20;;:6;:20;;;12619:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12729:1;12708:23;;:9;:23;;;12700:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12785:47;12806:6;12814:9;12825:6;12785:20;:47::i;:::-;12866:71;12888:6;12866:71;;;;;;;;;;;;;;;;;:9;:17;12876:6;12866:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12846:9;:17;12856:6;12846:17;;;;;;;;;;;;;;;:91;;;;12971:32;12996:6;12971:9;:20;12981:9;12971:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;12948:9;:20;12958:9;12948:20;;;;;;;;;;;;;;;:55;;;;13036:9;13019:35;;13028:6;13019:35;;;13047:6;13019:35;;;;;;:::i;:::-;;;;;;;;12487:575;;;:::o;42313:1309::-;42352:23;42378:24;42396:4;42378:9;:24::i;:::-;42352:50;;42413:25;42462:12;;42441:18;;:33;;;;:::i;:::-;42413:61;;42485:12;42533:1;42514:15;:20;:46;;;;42559:1;42538:17;:22;42514:46;42511:60;;;42563:7;;;;;42511:60;42626:2;42605:18;;:23;;;;:::i;:::-;42587:15;:41;42584:111;;;42681:2;42660:18;;:23;;;;:::i;:::-;42642:41;;42584:111;42757:23;42842:1;42822:17;42801:18;;42783:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42757:86;;42854:26;42883:36;42903:15;42883;:19;;:36;;;;:::i;:::-;42854:65;;42933:25;42961:21;42933:49;;42996:36;43013:18;42996:16;:36::i;:::-;43047:18;43068:44;43094:17;43068:21;:25;;:44;;;;:::i;:::-;43047:65;;43126:17;43146:51;43179:17;43146:28;43161:12;;43146:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43126:71;;43208:23;43247:9;43234:10;:22;;;;:::i;:::-;43208:48;;43291:1;43270:18;:22;;;;43318:1;43303:12;:16;;;;43354:9;;;;;;;;;;;43346:23;;43377:9;43346:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43333:58;;;;;43426:1;43408:15;:19;:42;;;;;43449:1;43431:15;:19;43408:42;43405:210;;;43466:46;43479:15;43496;43466:12;:46::i;:::-;43532:71;43547:18;43567:15;43584:18;;43532:71;;;;;;;;:::i;:::-;;;;;;;;43405:210;42341:1281;;;;;;;;;42313:1309;:::o;17663:473::-;17721:7;17971:1;17966;:6;17962:47;;17996:1;17989:8;;;;17962:47;18022:9;18038:1;18034;:5;;;;:::i;:::-;18022:17;;18067:1;18062;18058;:5;;;;:::i;:::-;:10;18050:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18127:1;18120:8;;;17663:473;;;;;:::o;18613:132::-;18671:7;18698:39;18702:1;18705;18698:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;18691:46;;18613:132;;;;:::o;15908:125::-;;;;:::o;16770:136::-;16828:7;16855:43;16859:1;16862;16855:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;16848:50;;16770:136;;;;:::o;41178:597::-;41307:21;41345:1;41331:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41307:40;;41376:4;41358;41363:1;41358:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41402:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41392:4;41397:1;41392:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41438:62;41455:4;41470:15;41488:11;41438:8;:62::i;:::-;41540:15;:66;;;41621:11;41647:1;41691:4;41718;41738:15;41540:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41233:542;41178:597;:::o;41784:520::-;41932:62;41949:4;41964:15;41982:11;41932:8;:62::i;:::-;42038:15;:31;;;42077:9;42110:4;42130:11;42156:1;42199;42250:4;42270:15;42038:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41784:520;;:::o;19242:279::-;19328:7;19360:1;19356;:5;19363:12;19348:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19387:9;19403:1;19399;:5;;;;:::i;:::-;19387:17;;19512:1;19505:8;;;19242:279;;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:307::-;1518:1;1528:113;1542:6;1539:1;1536:13;1528:113;;;1627:1;1622:3;1618:11;1612:18;1608:1;1603:3;1599:11;1592:39;1564:2;1561:1;1557:10;1552:15;;1528:113;;;1659:6;1656:1;1653:13;1650:101;;;1739:1;1730:6;1725:3;1721:16;1714:27;1650:101;1499:258;1450:307;;;:::o;1763:102::-;1804:6;1855:2;1851:7;1846:2;1839:5;1835:14;1831:28;1821:38;;1763:102;;;:::o;1871:364::-;1959:3;1987:39;2020:5;1987:39;:::i;:::-;2042:71;2106:6;2101:3;2042:71;:::i;:::-;2035:78;;2122:52;2167:6;2162:3;2155:4;2148:5;2144:16;2122:52;:::i;:::-;2199:29;2221:6;2199:29;:::i;:::-;2194:3;2190:39;2183:46;;1963:272;1871:364;;;;:::o;2241:313::-;2354:4;2392:2;2381:9;2377:18;2369:26;;2441:9;2435:4;2431:20;2427:1;2416:9;2412:17;2405:47;2469:78;2542:4;2533:6;2469:78;:::i;:::-;2461:86;;2241:313;;;;:::o;2560:126::-;2597:7;2637:42;2630:5;2626:54;2615:65;;2560:126;;;:::o;2692:96::-;2729:7;2758:24;2776:5;2758:24;:::i;:::-;2747:35;;2692:96;;;:::o;2794:122::-;2867:24;2885:5;2867:24;:::i;:::-;2860:5;2857:35;2847:63;;2906:1;2903;2896:12;2847:63;2794:122;:::o;2922:139::-;2968:5;3006:6;2993:20;2984:29;;3022:33;3049:5;3022:33;:::i;:::-;2922:139;;;;:::o;3067:474::-;3135:6;3143;3192:2;3180:9;3171:7;3167:23;3163:32;3160:119;;;3198:79;;:::i;:::-;3160:119;3318:1;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3289:117;3445:2;3471:53;3516:7;3507:6;3496:9;3492:22;3471:53;:::i;:::-;3461:63;;3416:118;3067:474;;;;;:::o;3547:90::-;3581:7;3624:5;3617:13;3610:21;3599:32;;3547:90;;;:::o;3643:109::-;3724:21;3739:5;3724:21;:::i;:::-;3719:3;3712:34;3643:109;;:::o;3758:210::-;3845:4;3883:2;3872:9;3868:18;3860:26;;3896:65;3958:1;3947:9;3943:17;3934:6;3896:65;:::i;:::-;3758:210;;;;:::o;3974:329::-;4033:6;4082:2;4070:9;4061:7;4057:23;4053:32;4050:119;;;4088:79;;:::i;:::-;4050:119;4208:1;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4179:117;3974:329;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:329::-;5698:6;5747:2;5735:9;5726:7;5722:23;5718:32;5715:119;;;5753:79;;:::i;:::-;5715:119;5873:1;5898:53;5943:7;5934:6;5923:9;5919:22;5898:53;:::i;:::-;5888:63;;5844:117;5639:329;;;;:::o;5974:619::-;6051:6;6059;6067;6116:2;6104:9;6095:7;6091:23;6087:32;6084:119;;;6122:79;;:::i;:::-;6084:119;6242:1;6267:53;6312:7;6303:6;6292:9;6288:22;6267:53;:::i;:::-;6257:63;;6213:117;6369:2;6395:53;6440:7;6431:6;6420:9;6416:22;6395:53;:::i;:::-;6385:63;;6340:118;6497:2;6523:53;6568:7;6559:6;6548:9;6544:22;6523:53;:::i;:::-;6513:63;;6468:118;5974:619;;;;;:::o;6599:116::-;6669:21;6684:5;6669:21;:::i;:::-;6662:5;6659:32;6649:60;;6705:1;6702;6695:12;6649:60;6599:116;:::o;6721:133::-;6764:5;6802:6;6789:20;6780:29;;6818:30;6842:5;6818:30;:::i;:::-;6721:133;;;;:::o;6860:468::-;6925:6;6933;6982:2;6970:9;6961:7;6957:23;6953:32;6950:119;;;6988:79;;:::i;:::-;6950:119;7108:1;7133:53;7178:7;7169:6;7158:9;7154:22;7133:53;:::i;:::-;7123:63;;7079:117;7235:2;7261:50;7303:7;7294:6;7283:9;7279:22;7261:50;:::i;:::-;7251:60;;7206:115;6860:468;;;;;:::o;7334:86::-;7369:7;7409:4;7402:5;7398:16;7387:27;;7334:86;;;:::o;7426:112::-;7509:22;7525:5;7509:22;:::i;:::-;7504:3;7497:35;7426:112;;:::o;7544:214::-;7633:4;7671:2;7660:9;7656:18;7648:26;;7684:67;7748:1;7737:9;7733:17;7724:6;7684:67;:::i;:::-;7544:214;;;;:::o;7764:118::-;7851:24;7869:5;7851:24;:::i;:::-;7846:3;7839:37;7764:118;;:::o;7888:222::-;7981:4;8019:2;8008:9;8004:18;7996:26;;8032:71;8100:1;8089:9;8085:17;8076:6;8032:71;:::i;:::-;7888:222;;;;:::o;8116:323::-;8172:6;8221:2;8209:9;8200:7;8196:23;8192:32;8189:119;;;8227:79;;:::i;:::-;8189:119;8347:1;8372:50;8414:7;8405:6;8394:9;8390:22;8372:50;:::i;:::-;8362:60;;8318:114;8116:323;;;;:::o;8445:117::-;8554:1;8551;8544:12;8568:117;8677:1;8674;8667:12;8691:117;8800:1;8797;8790:12;8831:568;8904:8;8914:6;8964:3;8957:4;8949:6;8945:17;8941:27;8931:122;;8972:79;;:::i;:::-;8931:122;9085:6;9072:20;9062:30;;9115:18;9107:6;9104:30;9101:117;;;9137:79;;:::i;:::-;9101:117;9251:4;9243:6;9239:17;9227:29;;9305:3;9297:4;9289:6;9285:17;9275:8;9271:32;9268:41;9265:128;;;9312:79;;:::i;:::-;9265:128;8831:568;;;;;:::o;9422:::-;9495:8;9505:6;9555:3;9548:4;9540:6;9536:17;9532:27;9522:122;;9563:79;;:::i;:::-;9522:122;9676:6;9663:20;9653:30;;9706:18;9698:6;9695:30;9692:117;;;9728:79;;:::i;:::-;9692:117;9842:4;9834:6;9830:17;9818:29;;9896:3;9888:4;9880:6;9876:17;9866:8;9862:32;9859:41;9856:128;;;9903:79;;:::i;:::-;9856:128;9422:568;;;;;:::o;9996:934::-;10118:6;10126;10134;10142;10191:2;10179:9;10170:7;10166:23;10162:32;10159:119;;;10197:79;;:::i;:::-;10159:119;10345:1;10334:9;10330:17;10317:31;10375:18;10367:6;10364:30;10361:117;;;10397:79;;:::i;:::-;10361:117;10510:80;10582:7;10573:6;10562:9;10558:22;10510:80;:::i;:::-;10492:98;;;;10288:312;10667:2;10656:9;10652:18;10639:32;10698:18;10690:6;10687:30;10684:117;;;10720:79;;:::i;:::-;10684:117;10833:80;10905:7;10896:6;10885:9;10881:22;10833:80;:::i;:::-;10815:98;;;;10610:313;9996:934;;;;;;;:::o;10936:474::-;11004:6;11012;11061:2;11049:9;11040:7;11036:23;11032:32;11029:119;;;11067:79;;:::i;:::-;11029:119;11187:1;11212:53;11257:7;11248:6;11237:9;11233:22;11212:53;:::i;:::-;11202:63;;11158:117;11314:2;11340:53;11385:7;11376:6;11365:9;11361:22;11340:53;:::i;:::-;11330:63;;11285:118;10936:474;;;;;:::o;11416:182::-;11556:34;11552:1;11544:6;11540:14;11533:58;11416:182;:::o;11604:366::-;11746:3;11767:67;11831:2;11826:3;11767:67;:::i;:::-;11760:74;;11843:93;11932:3;11843:93;:::i;:::-;11961:2;11956:3;11952:12;11945:19;;11604:366;;;:::o;11976:419::-;12142:4;12180:2;12169:9;12165:18;12157:26;;12229:9;12223:4;12219:20;12215:1;12204:9;12200:17;12193:47;12257:131;12383:4;12257:131;:::i;:::-;12249:139;;11976:419;;;:::o;12401:180::-;12449:77;12446:1;12439:88;12546:4;12543:1;12536:15;12570:4;12567:1;12560:15;12587:305;12627:3;12646:20;12664:1;12646:20;:::i;:::-;12641:25;;12680:20;12698:1;12680:20;:::i;:::-;12675:25;;12834:1;12766:66;12762:74;12759:1;12756:81;12753:107;;;12840:18;;:::i;:::-;12753:107;12884:1;12881;12877:9;12870:16;;12587:305;;;;:::o;12898:166::-;13038:18;13034:1;13026:6;13022:14;13015:42;12898:166;:::o;13070:366::-;13212:3;13233:67;13297:2;13292:3;13233:67;:::i;:::-;13226:74;;13309:93;13398:3;13309:93;:::i;:::-;13427:2;13422:3;13418:12;13411:19;;13070:366;;;:::o;13442:419::-;13608:4;13646:2;13635:9;13631:18;13623:26;;13695:9;13689:4;13685:20;13681:1;13670:9;13666:17;13659:47;13723:131;13849:4;13723:131;:::i;:::-;13715:139;;13442:419;;;:::o;13867:180::-;13915:77;13912:1;13905:88;14012:4;14009:1;14002:15;14036:4;14033:1;14026:15;14053:320;14097:6;14134:1;14128:4;14124:12;14114:22;;14181:1;14175:4;14171:12;14202:18;14192:81;;14258:4;14250:6;14246:17;14236:27;;14192:81;14320:2;14312:6;14309:14;14289:18;14286:38;14283:84;;14339:18;;:::i;:::-;14283:84;14104:269;14053:320;;;:::o;14379:348::-;14419:7;14442:20;14460:1;14442:20;:::i;:::-;14437:25;;14476:20;14494:1;14476:20;:::i;:::-;14471:25;;14664:1;14596:66;14592:74;14589:1;14586:81;14581:1;14574:9;14567:17;14563:105;14560:131;;;14671:18;;:::i;:::-;14560:131;14719:1;14716;14712:9;14701:20;;14379:348;;;;:::o;14733:180::-;14781:77;14778:1;14771:88;14878:4;14875:1;14868:15;14902:4;14899:1;14892:15;14919:185;14959:1;14976:20;14994:1;14976:20;:::i;:::-;14971:25;;15010:20;15028:1;15010:20;:::i;:::-;15005:25;;15049:1;15039:35;;15054:18;;:::i;:::-;15039:35;15096:1;15093;15089:9;15084:14;;14919:185;;;;:::o;15110:234::-;15250:34;15246:1;15238:6;15234:14;15227:58;15319:17;15314:2;15306:6;15302:15;15295:42;15110:234;:::o;15350:366::-;15492:3;15513:67;15577:2;15572:3;15513:67;:::i;:::-;15506:74;;15589:93;15678:3;15589:93;:::i;:::-;15707:2;15702:3;15698:12;15691:19;;15350:366;;;:::o;15722:419::-;15888:4;15926:2;15915:9;15911:18;15903:26;;15975:9;15969:4;15965:20;15961:1;15950:9;15946:17;15939:47;16003:131;16129:4;16003:131;:::i;:::-;15995:139;;15722:419;;;:::o;16147:165::-;16287:17;16283:1;16275:6;16271:14;16264:41;16147:165;:::o;16318:366::-;16460:3;16481:67;16545:2;16540:3;16481:67;:::i;:::-;16474:74;;16557:93;16646:3;16557:93;:::i;:::-;16675:2;16670:3;16666:12;16659:19;;16318:366;;;:::o;16690:419::-;16856:4;16894:2;16883:9;16879:18;16871:26;;16943:9;16937:4;16933:20;16929:1;16918:9;16914:17;16907:47;16971:131;17097:4;16971:131;:::i;:::-;16963:139;;16690:419;;;:::o;17115:244::-;17255:34;17251:1;17243:6;17239:14;17232:58;17324:27;17319:2;17311:6;17307:15;17300:52;17115:244;:::o;17365:366::-;17507:3;17528:67;17592:2;17587:3;17528:67;:::i;:::-;17521:74;;17604:93;17693:3;17604:93;:::i;:::-;17722:2;17717:3;17713:12;17706:19;;17365:366;;;:::o;17737:419::-;17903:4;17941:2;17930:9;17926:18;17918:26;;17990:9;17984:4;17980:20;17976:1;17965:9;17961:17;17954:47;18018:131;18144:4;18018:131;:::i;:::-;18010:139;;17737:419;;;:::o;18162:180::-;18210:77;18207:1;18200:88;18307:4;18304:1;18297:15;18331:4;18328:1;18321:15;18348:102;18390:8;18437:5;18434:1;18430:13;18409:34;;18348:102;;;:::o;18456:848::-;18517:5;18524:4;18548:6;18539:15;;18572:5;18563:14;;18586:712;18607:1;18597:8;18594:15;18586:712;;;18702:4;18697:3;18693:14;18687:4;18684:24;18681:50;;;18711:18;;:::i;:::-;18681:50;18761:1;18751:8;18747:16;18744:451;;;19176:4;19169:5;19165:16;19156:25;;18744:451;19226:4;19220;19216:15;19208:23;;19256:32;19279:8;19256:32;:::i;:::-;19244:44;;18586:712;;;18456:848;;;;;;;:::o;19310:1073::-;19364:5;19555:8;19545:40;;19576:1;19567:10;;19578:5;;19545:40;19604:4;19594:36;;19621:1;19612:10;;19623:5;;19594:36;19690:4;19738:1;19733:27;;;;19774:1;19769:191;;;;19683:277;;19733:27;19751:1;19742:10;;19753:5;;;19769:191;19814:3;19804:8;19801:17;19798:43;;;19821:18;;:::i;:::-;19798:43;19870:8;19867:1;19863:16;19854:25;;19905:3;19898:5;19895:14;19892:40;;;19912:18;;:::i;:::-;19892:40;19945:5;;;19683:277;;20069:2;20059:8;20056:16;20050:3;20044:4;20041:13;20037:36;20019:2;20009:8;20006:16;20001:2;19995:4;19992:12;19988:35;19972:111;19969:246;;;20125:8;20119:4;20115:19;20106:28;;20160:3;20153:5;20150:14;20147:40;;;20167:18;;:::i;:::-;20147:40;20200:5;;19969:246;20240:42;20278:3;20268:8;20262:4;20259:1;20240:42;:::i;:::-;20225:57;;;;20314:4;20309:3;20305:14;20298:5;20295:25;20292:51;;;20323:18;;:::i;:::-;20292:51;20372:4;20365:5;20361:16;20352:25;;19310:1073;;;;;;:::o;20389:281::-;20447:5;20471:23;20489:4;20471:23;:::i;:::-;20463:31;;20515:25;20531:8;20515:25;:::i;:::-;20503:37;;20559:104;20596:66;20586:8;20580:4;20559:104;:::i;:::-;20550:113;;20389:281;;;;:::o;20676:233::-;20715:3;20738:24;20756:5;20738:24;:::i;:::-;20729:33;;20784:66;20777:5;20774:77;20771:103;;20854:18;;:::i;:::-;20771:103;20901:1;20894:5;20890:13;20883:20;;20676:233;;;:::o;20915:223::-;21055:34;21051:1;21043:6;21039:14;21032:58;21124:6;21119:2;21111:6;21107:15;21100:31;20915:223;:::o;21144:366::-;21286:3;21307:67;21371:2;21366:3;21307:67;:::i;:::-;21300:74;;21383:93;21472:3;21383:93;:::i;:::-;21501:2;21496:3;21492:12;21485:19;;21144:366;;;:::o;21516:419::-;21682:4;21720:2;21709:9;21705:18;21697:26;;21769:9;21763:4;21759:20;21755:1;21744:9;21740:17;21733:47;21797:131;21923:4;21797:131;:::i;:::-;21789:139;;21516:419;;;:::o;21941:240::-;22081:34;22077:1;22069:6;22065:14;22058:58;22150:23;22145:2;22137:6;22133:15;22126:48;21941:240;:::o;22187:366::-;22329:3;22350:67;22414:2;22409:3;22350:67;:::i;:::-;22343:74;;22426:93;22515:3;22426:93;:::i;:::-;22544:2;22539:3;22535:12;22528:19;;22187:366;;;:::o;22559:419::-;22725:4;22763:2;22752:9;22748:18;22740:26;;22812:9;22806:4;22802:20;22798:1;22787:9;22783:17;22776:47;22840:131;22966:4;22840:131;:::i;:::-;22832:139;;22559:419;;;:::o;22984:239::-;23124:34;23120:1;23112:6;23108:14;23101:58;23193:22;23188:2;23180:6;23176:15;23169:47;22984:239;:::o;23229:366::-;23371:3;23392:67;23456:2;23451:3;23392:67;:::i;:::-;23385:74;;23468:93;23557:3;23468:93;:::i;:::-;23586:2;23581:3;23577:12;23570:19;;23229:366;;;:::o;23601:419::-;23767:4;23805:2;23794:9;23790:18;23782:26;;23854:9;23848:4;23844:20;23840:1;23829:9;23825:17;23818:47;23882:131;24008:4;23882:131;:::i;:::-;23874:139;;23601:419;;;:::o;24026:225::-;24166:34;24162:1;24154:6;24150:14;24143:58;24235:8;24230:2;24222:6;24218:15;24211:33;24026:225;:::o;24257:366::-;24399:3;24420:67;24484:2;24479:3;24420:67;:::i;:::-;24413:74;;24496:93;24585:3;24496:93;:::i;:::-;24614:2;24609:3;24605:12;24598:19;;24257:366;;;:::o;24629:419::-;24795:4;24833:2;24822:9;24818:18;24810:26;;24882:9;24876:4;24872:20;24868:1;24857:9;24853:17;24846:47;24910:131;25036:4;24910:131;:::i;:::-;24902:139;;24629:419;;;:::o;25054:177::-;25194:29;25190:1;25182:6;25178:14;25171:53;25054:177;:::o;25237:366::-;25379:3;25400:67;25464:2;25459:3;25400:67;:::i;:::-;25393:74;;25476:93;25565:3;25476:93;:::i;:::-;25594:2;25589:3;25585:12;25578:19;;25237:366;;;:::o;25609:419::-;25775:4;25813:2;25802:9;25798:18;25790:26;;25862:9;25856:4;25852:20;25848:1;25837:9;25833:17;25826:47;25890:131;26016:4;25890:131;:::i;:::-;25882:139;;25609:419;;;:::o;26034:223::-;26174:34;26170:1;26162:6;26158:14;26151:58;26243:6;26238:2;26230:6;26226:15;26219:31;26034:223;:::o;26263:366::-;26405:3;26426:67;26490:2;26485:3;26426:67;:::i;:::-;26419:74;;26502:93;26591:3;26502:93;:::i;:::-;26620:2;26615:3;26611:12;26604:19;;26263:366;;;:::o;26635:419::-;26801:4;26839:2;26828:9;26824:18;26816:26;;26888:9;26882:4;26878:20;26874:1;26863:9;26859:17;26852:47;26916:131;27042:4;26916:131;:::i;:::-;26908:139;;26635:419;;;:::o;27060:221::-;27200:34;27196:1;27188:6;27184:14;27177:58;27269:4;27264:2;27256:6;27252:15;27245:29;27060:221;:::o;27287:366::-;27429:3;27450:67;27514:2;27509:3;27450:67;:::i;:::-;27443:74;;27526:93;27615:3;27526:93;:::i;:::-;27644:2;27639:3;27635:12;27628:19;;27287:366;;;:::o;27659:419::-;27825:4;27863:2;27852:9;27848:18;27840:26;;27912:9;27906:4;27902:20;27898:1;27887:9;27883:17;27876:47;27940:131;28066:4;27940:131;:::i;:::-;27932:139;;27659:419;;;:::o;28084:224::-;28224:34;28220:1;28212:6;28208:14;28201:58;28293:7;28288:2;28280:6;28276:15;28269:32;28084:224;:::o;28314:366::-;28456:3;28477:67;28541:2;28536:3;28477:67;:::i;:::-;28470:74;;28553:93;28642:3;28553:93;:::i;:::-;28671:2;28666:3;28662:12;28655:19;;28314:366;;;:::o;28686:419::-;28852:4;28890:2;28879:9;28875:18;28867:26;;28939:9;28933:4;28929:20;28925:1;28914:9;28910:17;28903:47;28967:131;29093:4;28967:131;:::i;:::-;28959:139;;28686:419;;;:::o;29111:222::-;29251:34;29247:1;29239:6;29235:14;29228:58;29320:5;29315:2;29307:6;29303:15;29296:30;29111:222;:::o;29339:366::-;29481:3;29502:67;29566:2;29561:3;29502:67;:::i;:::-;29495:74;;29578:93;29667:3;29578:93;:::i;:::-;29696:2;29691:3;29687:12;29680:19;;29339:366;;;:::o;29711:419::-;29877:4;29915:2;29904:9;29900:18;29892:26;;29964:9;29958:4;29954:20;29950:1;29939:9;29935:17;29928:47;29992:131;30118:4;29992:131;:::i;:::-;29984:139;;29711:419;;;:::o;30136:236::-;30276:34;30272:1;30264:6;30260:14;30253:58;30345:19;30340:2;30332:6;30328:15;30321:44;30136:236;:::o;30378:366::-;30520:3;30541:67;30605:2;30600:3;30541:67;:::i;:::-;30534:74;;30617:93;30706:3;30617:93;:::i;:::-;30735:2;30730:3;30726:12;30719:19;;30378:366;;;:::o;30750:419::-;30916:4;30954:2;30943:9;30939:18;30931:26;;31003:9;30997:4;30993:20;30989:1;30978:9;30974:17;30967:47;31031:131;31157:4;31031:131;:::i;:::-;31023:139;;30750:419;;;:::o;31175:172::-;31315:24;31311:1;31303:6;31299:14;31292:48;31175:172;:::o;31353:366::-;31495:3;31516:67;31580:2;31575:3;31516:67;:::i;:::-;31509:74;;31592:93;31681:3;31592:93;:::i;:::-;31710:2;31705:3;31701:12;31694:19;;31353:366;;;:::o;31725:419::-;31891:4;31929:2;31918:9;31914:18;31906:26;;31978:9;31972:4;31968:20;31964:1;31953:9;31949:17;31942:47;32006:131;32132:4;32006:131;:::i;:::-;31998:139;;31725:419;;;:::o;32150:297::-;32290:34;32286:1;32278:6;32274:14;32267:58;32359:34;32354:2;32346:6;32342:15;32335:59;32428:11;32423:2;32415:6;32411:15;32404:36;32150:297;:::o;32453:366::-;32595:3;32616:67;32680:2;32675:3;32616:67;:::i;:::-;32609:74;;32692:93;32781:3;32692:93;:::i;:::-;32810:2;32805:3;32801:12;32794:19;;32453:366;;;:::o;32825:419::-;32991:4;33029:2;33018:9;33014:18;33006:26;;33078:9;33072:4;33068:20;33064:1;33053:9;33049:17;33042:47;33106:131;33232:4;33106:131;:::i;:::-;33098:139;;32825:419;;;:::o;33250:240::-;33390:34;33386:1;33378:6;33374:14;33367:58;33459:23;33454:2;33446:6;33442:15;33435:48;33250:240;:::o;33496:366::-;33638:3;33659:67;33723:2;33718:3;33659:67;:::i;:::-;33652:74;;33735:93;33824:3;33735:93;:::i;:::-;33853:2;33848:3;33844:12;33837:19;;33496:366;;;:::o;33868:419::-;34034:4;34072:2;34061:9;34057:18;34049:26;;34121:9;34115:4;34111:20;34107:1;34096:9;34092:17;34085:47;34149:131;34275:4;34149:131;:::i;:::-;34141:139;;33868:419;;;:::o;34293:169::-;34433:21;34429:1;34421:6;34417:14;34410:45;34293:169;:::o;34468:366::-;34610:3;34631:67;34695:2;34690:3;34631:67;:::i;:::-;34624:74;;34707:93;34796:3;34707:93;:::i;:::-;34825:2;34820:3;34816:12;34809:19;;34468:366;;;:::o;34840:419::-;35006:4;35044:2;35033:9;35029:18;35021:26;;35093:9;35087:4;35083:20;35079:1;35068:9;35064:17;35057:47;35121:131;35247:4;35121:131;:::i;:::-;35113:139;;34840:419;;;:::o;35265:241::-;35405:34;35401:1;35393:6;35389:14;35382:58;35474:24;35469:2;35461:6;35457:15;35450:49;35265:241;:::o;35512:366::-;35654:3;35675:67;35739:2;35734:3;35675:67;:::i;:::-;35668:74;;35751:93;35840:3;35751:93;:::i;:::-;35869:2;35864:3;35860:12;35853:19;;35512:366;;;:::o;35884:419::-;36050:4;36088:2;36077:9;36073:18;36065:26;;36137:9;36131:4;36127:20;36123:1;36112:9;36108:17;36101:47;36165:131;36291:4;36165:131;:::i;:::-;36157:139;;35884:419;;;:::o;36309:191::-;36349:4;36369:20;36387:1;36369:20;:::i;:::-;36364:25;;36403:20;36421:1;36403:20;:::i;:::-;36398:25;;36442:1;36439;36436:8;36433:34;;;36447:18;;:::i;:::-;36433:34;36492:1;36489;36485:9;36477:17;;36309:191;;;;:::o;36506:147::-;36607:11;36644:3;36629:18;;36506:147;;;;:::o;36659:114::-;;:::o;36779:398::-;36938:3;36959:83;37040:1;37035:3;36959:83;:::i;:::-;36952:90;;37051:93;37140:3;37051:93;:::i;:::-;37169:1;37164:3;37160:11;37153:18;;36779:398;;;:::o;37183:379::-;37367:3;37389:147;37532:3;37389:147;:::i;:::-;37382:154;;37553:3;37546:10;;37183:379;;;:::o;37568:442::-;37717:4;37755:2;37744:9;37740:18;37732:26;;37768:71;37836:1;37825:9;37821:17;37812:6;37768:71;:::i;:::-;37849:72;37917:2;37906:9;37902:18;37893:6;37849:72;:::i;:::-;37931;37999:2;37988:9;37984:18;37975:6;37931:72;:::i;:::-;37568:442;;;;;;:::o;38016:220::-;38156:34;38152:1;38144:6;38140:14;38133:58;38225:3;38220:2;38212:6;38208:15;38201:28;38016:220;:::o;38242:366::-;38384:3;38405:67;38469:2;38464:3;38405:67;:::i;:::-;38398:74;;38481:93;38570:3;38481:93;:::i;:::-;38599:2;38594:3;38590:12;38583:19;;38242:366;;;:::o;38614:419::-;38780:4;38818:2;38807:9;38803:18;38795:26;;38867:9;38861:4;38857:20;38853:1;38842:9;38838:17;38831:47;38895:131;39021:4;38895:131;:::i;:::-;38887:139;;38614:419;;;:::o;39039:180::-;39087:77;39084:1;39077:88;39184:4;39181:1;39174:15;39208:4;39205:1;39198:15;39225:143;39282:5;39313:6;39307:13;39298:22;;39329:33;39356:5;39329:33;:::i;:::-;39225:143;;;;:::o;39374:351::-;39444:6;39493:2;39481:9;39472:7;39468:23;39464:32;39461:119;;;39499:79;;:::i;:::-;39461:119;39619:1;39644:64;39700:7;39691:6;39680:9;39676:22;39644:64;:::i;:::-;39634:74;;39590:128;39374:351;;;;:::o;39731:85::-;39776:7;39805:5;39794:16;;39731:85;;;:::o;39822:158::-;39880:9;39913:61;39931:42;39940:32;39966:5;39940:32;:::i;:::-;39931:42;:::i;:::-;39913:61;:::i;:::-;39900:74;;39822:158;;;:::o;39986:147::-;40081:45;40120:5;40081:45;:::i;:::-;40076:3;40069:58;39986:147;;:::o;40139:114::-;40206:6;40240:5;40234:12;40224:22;;40139:114;;;:::o;40259:184::-;40358:11;40392:6;40387:3;40380:19;40432:4;40427:3;40423:14;40408:29;;40259:184;;;;:::o;40449:132::-;40516:4;40539:3;40531:11;;40569:4;40564:3;40560:14;40552:22;;40449:132;;;:::o;40587:108::-;40664:24;40682:5;40664:24;:::i;:::-;40659:3;40652:37;40587:108;;:::o;40701:179::-;40770:10;40791:46;40833:3;40825:6;40791:46;:::i;:::-;40869:4;40864:3;40860:14;40846:28;;40701:179;;;;:::o;40886:113::-;40956:4;40988;40983:3;40979:14;40971:22;;40886:113;;;:::o;41035:732::-;41154:3;41183:54;41231:5;41183:54;:::i;:::-;41253:86;41332:6;41327:3;41253:86;:::i;:::-;41246:93;;41363:56;41413:5;41363:56;:::i;:::-;41442:7;41473:1;41458:284;41483:6;41480:1;41477:13;41458:284;;;41559:6;41553:13;41586:63;41645:3;41630:13;41586:63;:::i;:::-;41579:70;;41672:60;41725:6;41672:60;:::i;:::-;41662:70;;41518:224;41505:1;41502;41498:9;41493:14;;41458:284;;;41462:14;41758:3;41751:10;;41159:608;;;41035:732;;;;:::o;41773:831::-;42036:4;42074:3;42063:9;42059:19;42051:27;;42088:71;42156:1;42145:9;42141:17;42132:6;42088:71;:::i;:::-;42169:80;42245:2;42234:9;42230:18;42221:6;42169:80;:::i;:::-;42296:9;42290:4;42286:20;42281:2;42270:9;42266:18;42259:48;42324:108;42427:4;42418:6;42324:108;:::i;:::-;42316:116;;42442:72;42510:2;42499:9;42495:18;42486:6;42442:72;:::i;:::-;42524:73;42592:3;42581:9;42577:19;42568:6;42524:73;:::i;:::-;41773:831;;;;;;;;:::o;42610:807::-;42859:4;42897:3;42886:9;42882:19;42874:27;;42911:71;42979:1;42968:9;42964:17;42955:6;42911:71;:::i;:::-;42992:72;43060:2;43049:9;43045:18;43036:6;42992:72;:::i;:::-;43074:80;43150:2;43139:9;43135:18;43126:6;43074:80;:::i;:::-;43164;43240:2;43229:9;43225:18;43216:6;43164:80;:::i;:::-;43254:73;43322:3;43311:9;43307:19;43298:6;43254:73;:::i;:::-;43337;43405:3;43394:9;43390:19;43381:6;43337:73;:::i;:::-;42610:807;;;;;;;;;:::o;43423:143::-;43480:5;43511:6;43505:13;43496:22;;43527:33;43554:5;43527:33;:::i;:::-;43423:143;;;;:::o;43572:663::-;43660:6;43668;43676;43725:2;43713:9;43704:7;43700:23;43696:32;43693:119;;;43731:79;;:::i;:::-;43693:119;43851:1;43876:64;43932:7;43923:6;43912:9;43908:22;43876:64;:::i;:::-;43866:74;;43822:128;43989:2;44015:64;44071:7;44062:6;44051:9;44047:22;44015:64;:::i;:::-;44005:74;;43960:129;44128:2;44154:64;44210:7;44201:6;44190:9;44186:22;44154:64;:::i;:::-;44144:74;;44099:129;43572:663;;;;;:::o

Swarm Source

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