ETH Price: $2,632.50 (+1.04%)
Gas: 8.75 Gwei

Token

GUCCI DOGE (GG)
 

Overview

Max Total Supply

1,000,000,000 GG

Holders

42

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
964,083.867934378270970869 GG

Value
$0.00
0x690E7141cf49b10cAc703d8d89d9aBFa3f76353B
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:
GUCCIDOGE

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-23
*/

/**
 *Submitted for verification at Etherscan.io on 2022-04-19
*/

/**
 * GUCCI DOGE TOKEN - BE A GUCCI!
 * 
 * Telegram: https://t.me/GucciDoge 
 * Twitter: https://Twitter.com/GucciDogeERC
 * Website: https://GucciDoge.tech
 * 
 */
 

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

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public liquidityWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
    
    /******************/

    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet);    
    event devWalletUpdated(address indexed newWallet, address indexed oldWallet);
    event liquidityWalletUpdated(address indexed newWallet, address indexed oldWallet);

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
   
    event OwnerForcedSwapBack(uint256 timestamp);

    constructor() ERC20("GUCCI DOGE", "GG") {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
        
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        
        uint256 _buyMarketingFee = 3;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyDevFee = 2;

        uint256 _sellMarketingFee = 3;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellDevFee = 2;
        
        uint256 totalSupply = 1 * 1e9 * 1e18;
        
        maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% maxWallet
        swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        
    	marketingWallet = address(0xd7B02aa58D55014A85ED51eCf59B62e513313b1a); // set as marketing wallet
    	devWallet = address(0xB60654a0782afa433f3867B1ec1Db6B378C855Ee); // set as dev wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

  	}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
    
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        transferDelayEnabled = 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 updateMaxAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
    
    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    
    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 99, "Just for the snipers at launch");
    }
    
    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 25, "Must keep fees at 25% or less");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }
    
    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function updateLiquidityWallet(address newWallet) external onlyOwner {
        emit liquidityWalletUpdated(newWallet, liquidityWallet);
        liquidityWallet = newWallet;
    }
    

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }    

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
        
        if(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }

                // 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 {
                    require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
                }
            }
        }   
        
		uint256 contractTokenBalance = balanceOf(address(this));
        
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapping = false;
        }
        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0){
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees;
                tokensForDev += fees * sellDevFee / sellTotalFees;
                tokensForMarketing += fees * sellMarketingFee / sellTotalFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) {
        	    fees = amount.mul(buyTotalFees).div(100);
        	    tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees;
                tokensForDev += fees * buyDevFee / buyTotalFees;
                tokensForMarketing += fees * buyMarketingFee / buyTotalFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
        	
        	amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
        
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        
        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);        
        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;        
        
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        
        (bool success,) = address(marketingWallet).call{value: ethForMarketing}("");
        (success,) = address(devWallet).call{value: ethForDev}("");
        
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }       
    }
    
    // force Swap back if slippage above 49% for launch.
    function forceSwapBack() external onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        require(contractBalance >= totalSupply() / 100, "Can only swap back if more than 1% of tokens stuck on contract");
        swapBack();
        emit OwnerForcedSwapBack(block.timestamp);
    }

    function withdrawDustETH(address _recipient) external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        (bool success, ) = _recipient.call{ value: contractETHBalance }("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[],"name":"forceSwapBack","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":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"withdrawDustETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600a81526020017f475543434920444f4745000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f474700000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000bcb565b5080600490805190602001906200011b92919062000bcb565b5050506000620001306200069760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200069f60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000ce5565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000ce5565b6040518363ffffffff1660e01b81526004016200036e92919062000d28565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000ce5565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200069f60201b60201c565b6200042160a05160016200079c60201b60201c565b60006003905060006001905060006002905060006003905060006001905060006002905060006b033b2e3c9fd0803ce800000090506103e860148262000468919062000d8e565b62000474919062000e1e565b60098190555060646002826200048b919062000d8e565b62000497919062000e1e565b600b81905550612710600582620004af919062000d8e565b620004bb919062000e1e565b600a81905550866010819055508560118190555084601281905550601254601154601054620004eb919062000e56565b620004f7919062000e56565b600f8190555083601481905550826015819055508160168190555060165460155460145462000527919062000e56565b62000533919062000e56565b60138190555073d7b02aa58d55014a85ed51ecf59b62e513313b1a600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b60654a0782afa433f3867b1ec1db6b378c855ee600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000605620005f76200083d60201b60201c565b60016200086760201b60201c565b620006183060016200086760201b60201c565b6200062d61dead60016200086760201b60201c565b6200064f620006416200083d60201b60201c565b60016200069f60201b60201c565b620006623060016200069f60201b60201c565b6200067761dead60016200069f60201b60201c565b620006893382620009b460201b60201c565b5050505050505050620010e7565b600033905090565b620006af6200069760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007389062000f14565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008776200069760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000909576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009009062000f14565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009a8919062000f53565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a1e9062000fc0565b60405180910390fd5b62000a3b6000838362000b6360201b60201c565b62000a578160025462000b6860201b620028ff1790919060201c565b60028190555062000ab5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b6860201b620028ff1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b57919062000ff3565b60405180910390a35050565b505050565b600080828462000b79919062000e56565b90508381101562000bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bb89062001060565b60405180910390fd5b8091505092915050565b82805462000bd990620010b1565b90600052602060002090601f01602090048101928262000bfd576000855562000c49565b82601f1062000c1857805160ff191683800117855562000c49565b8280016001018555821562000c49579182015b8281111562000c4857825182559160200191906001019062000c2b565b5b50905062000c58919062000c5c565b5090565b5b8082111562000c7757600081600090555060010162000c5d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000cad8262000c80565b9050919050565b62000cbf8162000ca0565b811462000ccb57600080fd5b50565b60008151905062000cdf8162000cb4565b92915050565b60006020828403121562000cfe5762000cfd62000c7b565b5b600062000d0e8482850162000cce565b91505092915050565b62000d228162000ca0565b82525050565b600060408201905062000d3f600083018562000d17565b62000d4e602083018462000d17565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d9b8262000d55565b915062000da88362000d55565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000de45762000de362000d5f565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e2b8262000d55565b915062000e388362000d55565b92508262000e4b5762000e4a62000def565b5b828204905092915050565b600062000e638262000d55565b915062000e708362000d55565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000ea85762000ea762000d5f565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000efc60208362000eb3565b915062000f098262000ec4565b602082019050919050565b6000602082019050818103600083015262000f2f8162000eed565b9050919050565b60008115159050919050565b62000f4d8162000f36565b82525050565b600060208201905062000f6a600083018462000f42565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fa8601f8362000eb3565b915062000fb58262000f70565b602082019050919050565b6000602082019050818103600083015262000fdb8162000f99565b9050919050565b62000fed8162000d55565b82525050565b60006020820190506200100a600083018462000fe2565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001048601b8362000eb3565b9150620010558262001010565b602082019050919050565b600060208201905081810360008301526200107b8162001039565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ca57607f821691505b60208210811415620010e157620010e062001082565b5b50919050565b60805160a051615837620011456000396000818161127701528181611c090152612ee8015260008181610f5101528181612e9001528181613f7d0152818161406d0152818161409401528181614130015261415701526158376000f3fe60806040526004361061036f5760003560e01c806392136913116101c6578063c876d0b9116100f7578063e37ba8f911610095578063f11a24d31161006f578063f11a24d314610cab578063f2fde38b14610cd6578063f637434214610cff578063f8b45b0514610d2a57610376565b8063e37ba8f914610c2e578063e393c29414610c57578063e884f26014610c8057610376565b8063d4698016116100d1578063d469801614610b70578063d85ba06314610b9b578063dd62ed3e14610bc6578063e2f4560514610c0357610376565b8063c876d0b914610add578063c8c8ebe414610b08578063d257b34f14610b3357610376565b8063a457c2d711610164578063b62496f51161013e578063b62496f514610a23578063bbc0c74214610a60578063c024666814610a8b578063c17b5b8c14610ab457610376565b8063a457c2d714610980578063a9059cbb146109bd578063aacebbe3146109fa57610376565b80639a7a23d6116101a05780639a7a23d6146108d65780639c3b4fdc146108ff5780639fccce321461092a578063a0d82dc51461095557610376565b80639213691314610857578063924de9b71461088257806395d89b41146108ab57610376565b80634fbee193116102a05780637571336a1161023e5780638095d564116102185780638095d564146107c15780638a8c523c146107ea5780638da5cb5b146108015780638ea5220f1461082c57610376565b80637571336a1461074257806375f0a8741461076b5780637bce5a041461079657610376565b80636ddd17131161027a5780636ddd17131461069857806370a08231146106c3578063715018a614610700578063751039fc1461071757610376565b80634fbee1931461061957806351f205e4146106565780636a486a8e1461066d57610376565b80631a8145bb1161030d578063313ce567116102e7578063313ce5671461055b578063395093511461058657806349bd5a5e146105c35780634a62bb65146105ee57610376565b80631a8145bb146104c85780631f3fed8f146104f357806323b872dd1461051e57610376565b806310d5de531161034957806310d5de531461040c5780631694505e1461044957806318160ddd146104745780631816467f1461049f57610376565b806306fdde031461037b578063095ea7b3146103a6578063106b5da1146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d55565b60405161039d9190614336565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906143f1565b610de7565b6040516103da919061444c565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614467565b610e05565b005b34801561041857600080fd5b50610433600480360381019061042e9190614494565b610f2f565b604051610440919061444c565b60405180910390f35b34801561045557600080fd5b5061045e610f4f565b60405161046b9190614520565b60405180910390f35b34801561048057600080fd5b50610489610f73565b604051610496919061454a565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190614494565b610f7d565b005b3480156104d457600080fd5b506104dd6110d4565b6040516104ea919061454a565b60405180910390f35b3480156104ff57600080fd5b506105086110da565b604051610515919061454a565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190614565565b6110e0565b604051610552919061444c565b60405180910390f35b34801561056757600080fd5b506105706111b9565b60405161057d91906145d4565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a891906143f1565b6111c2565b6040516105ba919061444c565b60405180910390f35b3480156105cf57600080fd5b506105d8611275565b6040516105e591906145fe565b60405180910390f35b3480156105fa57600080fd5b50610603611299565b604051610610919061444c565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614494565b6112ac565b60405161064d919061444c565b60405180910390f35b34801561066257600080fd5b5061066b611302565b005b34801561067957600080fd5b5061068261143e565b60405161068f919061454a565b60405180910390f35b3480156106a457600080fd5b506106ad611444565b6040516106ba919061444c565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190614494565b611457565b6040516106f7919061454a565b60405180910390f35b34801561070c57600080fd5b5061071561149f565b005b34801561072357600080fd5b5061072c6115f7565b604051610739919061444c565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190614645565b6116cd565b005b34801561077757600080fd5b506107806117bf565b60405161078d91906145fe565b60405180910390f35b3480156107a257600080fd5b506107ab6117e5565b6040516107b8919061454a565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190614685565b6117eb565b005b3480156107f657600080fd5b506107ff611905565b005b34801561080d57600080fd5b506108166119d4565b60405161082391906145fe565b60405180910390f35b34801561083857600080fd5b506108416119fe565b60405161084e91906145fe565b60405180910390f35b34801561086357600080fd5b5061086c611a24565b604051610879919061454a565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a491906146d8565b611a2a565b005b3480156108b757600080fd5b506108c0611ade565b6040516108cd9190614336565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f89190614645565b611b70565b005b34801561090b57600080fd5b50610914611ca4565b604051610921919061454a565b60405180910390f35b34801561093657600080fd5b5061093f611caa565b60405161094c919061454a565b60405180910390f35b34801561096157600080fd5b5061096a611cb0565b604051610977919061454a565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906143f1565b611cb6565b6040516109b4919061444c565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906143f1565b611d83565b6040516109f1919061444c565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190614494565b611da1565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a459190614494565b611ef8565b604051610a57919061444c565b60405180910390f35b348015610a6c57600080fd5b50610a75611f18565b604051610a82919061444c565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad9190614645565b611f2b565b005b348015610ac057600080fd5b50610adb6004803603810190610ad69190614685565b61206b565b005b348015610ae957600080fd5b50610af2612185565b604051610aff919061444c565b60405180910390f35b348015610b1457600080fd5b50610b1d612198565b604051610b2a919061454a565b60405180910390f35b348015610b3f57600080fd5b50610b5a6004803603810190610b559190614467565b61219e565b604051610b67919061444c565b60405180910390f35b348015610b7c57600080fd5b50610b8561230e565b604051610b9291906145fe565b60405180910390f35b348015610ba757600080fd5b50610bb0612334565b604051610bbd919061454a565b60405180910390f35b348015610bd257600080fd5b50610bed6004803603810190610be89190614705565b61233a565b604051610bfa919061454a565b60405180910390f35b348015610c0f57600080fd5b50610c186123c1565b604051610c25919061454a565b60405180910390f35b348015610c3a57600080fd5b50610c556004803603810190610c509190614494565b6123c7565b005b348015610c6357600080fd5b50610c7e6004803603810190610c799190614494565b61251e565b005b348015610c8c57600080fd5b50610c9561266b565b604051610ca2919061444c565b60405180910390f35b348015610cb757600080fd5b50610cc0612726565b604051610ccd919061454a565b60405180910390f35b348015610ce257600080fd5b50610cfd6004803603810190610cf89190614494565b61272c565b005b348015610d0b57600080fd5b50610d146128f3565b604051610d21919061454a565b60405180910390f35b348015610d3657600080fd5b50610d3f6128f9565b604051610d4c919061454a565b60405180910390f35b606060038054610d6490614774565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9090614774565b8015610ddd5780601f10610db257610100808354040283529160200191610ddd565b820191906000526020600020905b815481529060010190602001808311610dc057829003601f168201915b5050505050905090565b6000610dfb610df461295d565b8484612965565b6001905092915050565b610e0d61295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e93906147f2565b60405180910390fd5b670de0b6b3a76400006103e86005610eb2610f73565b610ebc9190614841565b610ec691906148ca565b610ed091906148ca565b811015610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099061496d565b60405180910390fd5b670de0b6b3a764000081610f269190614841565b60098190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f8561295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b906147f2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b60006110ed848484612b30565b6111ae846110f961295d565b6111a9856040518060600160405280602881526020016157b560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061115f61295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137789092919063ffffffff16565b612965565b600190509392505050565b60006012905090565b600061126b6111cf61295d565b8461126685600160006111e061295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128ff90919063ffffffff16565b612965565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61130a61295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611399576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611390906147f2565b60405180910390fd5b60006113a430611457565b905060646113b0610f73565b6113ba91906148ca565b8110156113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f3906149ff565b60405180910390fd5b6114046137dc565b7f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3242604051611433919061454a565b60405180910390a150565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a761295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d906147f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061160161295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611687906147f2565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055506001905090565b6116d561295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b906147f2565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6117f361295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611882576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611879906147f2565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546118aa9190614a1f565b6118b49190614a1f565b600f819055506063600f541115611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790614ac1565b60405180910390fd5b505050565b61190d61295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611993906147f2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a3261295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab8906147f2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611aed90614774565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1990614774565b8015611b665780601f10611b3b57610100808354040283529160200191611b66565b820191906000526020600020905b815481529060010190602001808311611b4957829003601f168201915b5050505050905090565b611b7861295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906147f2565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90614b53565b60405180910390fd5b611ca08282613a99565b5050565b60125481565b60195481565b60165481565b6000611d79611cc361295d565b84611d74856040518060600160405280602581526020016157dd6025913960016000611ced61295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137789092919063ffffffff16565b612965565b6001905092915050565b6000611d97611d9061295d565b8484612b30565b6001905092915050565b611da961295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f906147f2565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611f3361295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb9906147f2565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161205f919061444c565b60405180910390a25050565b61207361295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f9906147f2565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461212a9190614a1f565b6121349190614a1f565b60138190555060196013541115612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790614bbf565b60405180910390fd5b505050565b600e60009054906101000a900460ff1681565b60095481565b60006121a861295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e906147f2565b60405180910390fd5b620186a06001612245610f73565b61224f9190614841565b61225991906148ca565b82101561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614c51565b60405180910390fd5b6103e860056122a8610f73565b6122b29190614841565b6122bc91906148ca565b8211156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614ce3565b60405180910390fd5b81600a8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6123cf61295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461245e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612455906147f2565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61252661295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906147f2565b60405180910390fd5b600047905060008273ffffffffffffffffffffffffffffffffffffffff16826040516125e090614d34565b60006040518083038185875af1925050503d806000811461261d576040519150601f19603f3d011682016040523d82523d6000602084013e612622565b606091505b5050905080612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90614dbb565b60405180910390fd5b505050565b600061267561295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb906147f2565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61273461295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba906147f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614e4d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600b5481565b600080828461290e9190614a1f565b905083811015612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90614eb9565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc90614f4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614fdd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b23919061454a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b979061506f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0790615101565b60405180910390fd5b6000811415612c2a57612c2583836000613b3a565b613773565b600c60009054906101000a900460ff161561329b57612c476119d4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cb55750612c856119d4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cee5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d28575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d415750600560149054906101000a900460ff16155b1561329a57600c60019054906101000a900460ff16612e3b57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfb5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e319061516d565b60405180910390fd5b5b600e60009054906101000a900460ff161561300357612e586119d4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612edf57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f3757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130025743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490615225565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130a65750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561314d576009548111156130f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e7906152b7565b60405180910390fd5b600b546130fc83611457565b826131079190614a1f565b1115613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90615323565b60405180910390fd5b613299565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f05750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323f5760095481111561323a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613231906153b5565b60405180910390fd5b613298565b600b5461324b83611457565b826132569190614a1f565b1115613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328e90615323565b60405180910390fd5b5b5b5b5b60006132a630611457565b90506000600a5482101590508080156132cb5750600c60029054906101000a900460ff165b80156132e45750600560149054906101000a900460ff16155b801561333a5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133905750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133e65750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561342a576001600560146101000a81548160ff02191690831515021790555061340e6137dc565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134e05750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134ea57600090505b6000811561376357601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561354d57506000601354115b1561361a5761357a606461356c60135488613dcf90919063ffffffff16565b613e4a90919063ffffffff16565b90506013546015548261358d9190614841565b61359791906148ca565b601860008282546135a89190614a1f565b92505081905550601354601654826135c09190614841565b6135ca91906148ca565b601960008282546135db9190614a1f565b92505081905550601354601454826135f39190614841565b6135fd91906148ca565b6017600082825461360e9190614a1f565b9250508190555061373f565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561367557506000600f54115b1561373e576136a26064613694600f5488613dcf90919063ffffffff16565b613e4a90919063ffffffff16565b9050600f54601154826136b59190614841565b6136bf91906148ca565b601860008282546136d09190614a1f565b92505081905550600f54601254826136e89190614841565b6136f291906148ca565b601960008282546137039190614a1f565b92505081905550600f546010548261371b9190614841565b61372591906148ca565b601760008282546137369190614a1f565b925050819055505b5b600081111561375457613753873083613b3a565b5b808561376091906153d5565b94505b61376e878787613b3a565b505050505b505050565b60008383111582906137c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b79190614336565b60405180910390fd5b50600083856137cf91906153d5565b9050809150509392505050565b60006137e730611457565b905060006019546017546018546137fe9190614a1f565b6138089190614a1f565b905060008214806138195750600081145b15613825575050613a97565b6000600282601854856138389190614841565b61384291906148ca565b61384c91906148ca565b905060006138638285613e9490919063ffffffff16565b9050600047905061387382613ede565b60006138888247613e9490919063ffffffff16565b905060006138b3866138a560175485613dcf90919063ffffffff16565b613e4a90919063ffffffff16565b905060006138de876138d060195486613dcf90919063ffffffff16565b613e4a90919063ffffffff16565b905060008183856138ef91906153d5565b6138f991906153d5565b90506000601881905550600060178190555060006019819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161395b90614d34565b60006040518083038185875af1925050503d8060008114613998576040519150601f19603f3d011682016040523d82523d6000602084013e61399d565b606091505b50509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516139e790614d34565b60006040518083038185875af1925050503d8060008114613a24576040519150601f19603f3d011682016040523d82523d6000602084013e613a29565b606091505b505080915050600088118015613a3f5750600082115b15613a8c57613a4e888361412a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601854604051613a8393929190615409565b60405180910390a15b505050505050505050505b565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba19061506f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c1190615101565b60405180910390fd5b613c25838383614235565b613c908160405180606001604052806026815260200161578f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137789092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d23816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128ff90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613dc2919061454a565b60405180910390a3505050565b600080831415613de25760009050613e44565b60008284613df09190614841565b9050828482613dff91906148ca565b14613e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e36906154b2565b60405180910390fd5b809150505b92915050565b6000613e8c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061423a565b905092915050565b6000613ed683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613778565b905092915050565b6000600267ffffffffffffffff811115613efb57613efa6154d2565b5b604051908082528060200260200182016040528015613f295781602001602082028036833780820191505090505b5090503081600081518110613f4157613f40615501565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613fe157600080fd5b505afa158015613ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140199190615545565b8160018151811061402d5761402c615501565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614092307f000000000000000000000000000000000000000000000000000000000000000084612965565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140f495949392919061566b565b600060405180830381600087803b15801561410e57600080fd5b505af1158015614122573d6000803e3d6000fd5b505050505050565b614155307f000000000000000000000000000000000000000000000000000000000000000084612965565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016141dc969594939291906156c5565b6060604051808303818588803b1580156141f557600080fd5b505af1158015614209573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061422e919061573b565b5050505050565b505050565b60008083118290614281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142789190614336565b60405180910390fd5b506000838561429091906148ca565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142d75780820151818401526020810190506142bc565b838111156142e6576000848401525b50505050565b6000601f19601f8301169050919050565b60006143088261429d565b61431281856142a8565b93506143228185602086016142b9565b61432b816142ec565b840191505092915050565b6000602082019050818103600083015261435081846142fd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143888261435d565b9050919050565b6143988161437d565b81146143a357600080fd5b50565b6000813590506143b58161438f565b92915050565b6000819050919050565b6143ce816143bb565b81146143d957600080fd5b50565b6000813590506143eb816143c5565b92915050565b6000806040838503121561440857614407614358565b5b6000614416858286016143a6565b9250506020614427858286016143dc565b9150509250929050565b60008115159050919050565b61444681614431565b82525050565b6000602082019050614461600083018461443d565b92915050565b60006020828403121561447d5761447c614358565b5b600061448b848285016143dc565b91505092915050565b6000602082840312156144aa576144a9614358565b5b60006144b8848285016143a6565b91505092915050565b6000819050919050565b60006144e66144e16144dc8461435d565b6144c1565b61435d565b9050919050565b60006144f8826144cb565b9050919050565b600061450a826144ed565b9050919050565b61451a816144ff565b82525050565b60006020820190506145356000830184614511565b92915050565b614544816143bb565b82525050565b600060208201905061455f600083018461453b565b92915050565b60008060006060848603121561457e5761457d614358565b5b600061458c868287016143a6565b935050602061459d868287016143a6565b92505060406145ae868287016143dc565b9150509250925092565b600060ff82169050919050565b6145ce816145b8565b82525050565b60006020820190506145e960008301846145c5565b92915050565b6145f88161437d565b82525050565b600060208201905061461360008301846145ef565b92915050565b61462281614431565b811461462d57600080fd5b50565b60008135905061463f81614619565b92915050565b6000806040838503121561465c5761465b614358565b5b600061466a858286016143a6565b925050602061467b85828601614630565b9150509250929050565b60008060006060848603121561469e5761469d614358565b5b60006146ac868287016143dc565b93505060206146bd868287016143dc565b92505060406146ce868287016143dc565b9150509250925092565b6000602082840312156146ee576146ed614358565b5b60006146fc84828501614630565b91505092915050565b6000806040838503121561471c5761471b614358565b5b600061472a858286016143a6565b925050602061473b858286016143a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061478c57607f821691505b602082108114156147a05761479f614745565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147dc6020836142a8565b91506147e7826147a6565b602082019050919050565b6000602082019050818103600083015261480b816147cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061484c826143bb565b9150614857836143bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148905761488f614812565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d5826143bb565b91506148e0836143bb565b9250826148f0576148ef61489b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614957602f836142a8565b9150614962826148fb565b604082019050919050565b600060208201905081810360008301526149868161494a565b9050919050565b7f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060008201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e74726163740000602082015250565b60006149e9603e836142a8565b91506149f48261498d565b604082019050919050565b60006020820190508181036000830152614a18816149dc565b9050919050565b6000614a2a826143bb565b9150614a35836143bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a6a57614a69614812565b5b828201905092915050565b7f4a75737420666f722074686520736e6970657273206174206c61756e63680000600082015250565b6000614aab601e836142a8565b9150614ab682614a75565b602082019050919050565b60006020820190508181036000830152614ada81614a9e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b3d6039836142a8565b9150614b4882614ae1565b604082019050919050565b60006020820190508181036000830152614b6c81614b30565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614ba9601d836142a8565b9150614bb482614b73565b602082019050919050565b60006020820190508181036000830152614bd881614b9c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c3b6035836142a8565b9150614c4682614bdf565b604082019050919050565b60006020820190508181036000830152614c6a81614c2e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ccd6034836142a8565b9150614cd882614c71565b604082019050919050565b60006020820190508181036000830152614cfc81614cc0565b9050919050565b600081905092915050565b50565b6000614d1e600083614d03565b9150614d2982614d0e565b600082019050919050565b6000614d3f82614d11565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614da5603a836142a8565b9150614db082614d49565b604082019050919050565b60006020820190508181036000830152614dd481614d98565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e376026836142a8565b9150614e4282614ddb565b604082019050919050565b60006020820190508181036000830152614e6681614e2a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ea3601b836142a8565b9150614eae82614e6d565b602082019050919050565b60006020820190508181036000830152614ed281614e96565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f356024836142a8565b9150614f4082614ed9565b604082019050919050565b60006020820190508181036000830152614f6481614f28565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fc76022836142a8565b9150614fd282614f6b565b604082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150596025836142a8565b915061506482614ffd565b604082019050919050565b600060208201905081810360008301526150888161504c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150eb6023836142a8565b91506150f68261508f565b604082019050919050565b6000602082019050818103600083015261511a816150de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006151576016836142a8565b915061516282615121565b602082019050919050565b600060208201905081810360008301526151868161514a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061520f6049836142a8565b915061521a8261518d565b606082019050919050565b6000602082019050818103600083015261523e81615202565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006152a16035836142a8565b91506152ac82615245565b604082019050919050565b600060208201905081810360008301526152d081615294565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061530d6013836142a8565b9150615318826152d7565b602082019050919050565b6000602082019050818103600083015261533c81615300565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061539f6036836142a8565b91506153aa82615343565b604082019050919050565b600060208201905081810360008301526153ce81615392565b9050919050565b60006153e0826143bb565b91506153eb836143bb565b9250828210156153fe576153fd614812565b5b828203905092915050565b600060608201905061541e600083018661453b565b61542b602083018561453b565b615438604083018461453b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061549c6021836142a8565b91506154a782615440565b604082019050919050565b600060208201905081810360008301526154cb8161548f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061553f8161438f565b92915050565b60006020828403121561555b5761555a614358565b5b600061556984828501615530565b91505092915050565b6000819050919050565b600061559761559261558d84615572565b6144c1565b6143bb565b9050919050565b6155a78161557c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155e28161437d565b82525050565b60006155f483836155d9565b60208301905092915050565b6000602082019050919050565b6000615618826155ad565b61562281856155b8565b935061562d836155c9565b8060005b8381101561565e57815161564588826155e8565b975061565083615600565b925050600181019050615631565b5085935050505092915050565b600060a082019050615680600083018861453b565b61568d602083018761559e565b818103604083015261569f818661560d565b90506156ae60608301856145ef565b6156bb608083018461453b565b9695505050505050565b600060c0820190506156da60008301896145ef565b6156e7602083018861453b565b6156f4604083018761559e565b615701606083018661559e565b61570e60808301856145ef565b61571b60a083018461453b565b979650505050505050565b600081519050615735816143c5565b92915050565b60008060006060848603121561575457615753614358565b5b600061576286828701615726565b935050602061577386828701615726565b925050604061578486828701615726565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220755b1b5ead9fb61c85c2fba2d8c6330c581448e152d97a28ecbb80998f53a57164736f6c63430008090033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806392136913116101c6578063c876d0b9116100f7578063e37ba8f911610095578063f11a24d31161006f578063f11a24d314610cab578063f2fde38b14610cd6578063f637434214610cff578063f8b45b0514610d2a57610376565b8063e37ba8f914610c2e578063e393c29414610c57578063e884f26014610c8057610376565b8063d4698016116100d1578063d469801614610b70578063d85ba06314610b9b578063dd62ed3e14610bc6578063e2f4560514610c0357610376565b8063c876d0b914610add578063c8c8ebe414610b08578063d257b34f14610b3357610376565b8063a457c2d711610164578063b62496f51161013e578063b62496f514610a23578063bbc0c74214610a60578063c024666814610a8b578063c17b5b8c14610ab457610376565b8063a457c2d714610980578063a9059cbb146109bd578063aacebbe3146109fa57610376565b80639a7a23d6116101a05780639a7a23d6146108d65780639c3b4fdc146108ff5780639fccce321461092a578063a0d82dc51461095557610376565b80639213691314610857578063924de9b71461088257806395d89b41146108ab57610376565b80634fbee193116102a05780637571336a1161023e5780638095d564116102185780638095d564146107c15780638a8c523c146107ea5780638da5cb5b146108015780638ea5220f1461082c57610376565b80637571336a1461074257806375f0a8741461076b5780637bce5a041461079657610376565b80636ddd17131161027a5780636ddd17131461069857806370a08231146106c3578063715018a614610700578063751039fc1461071757610376565b80634fbee1931461061957806351f205e4146106565780636a486a8e1461066d57610376565b80631a8145bb1161030d578063313ce567116102e7578063313ce5671461055b578063395093511461058657806349bd5a5e146105c35780634a62bb65146105ee57610376565b80631a8145bb146104c85780631f3fed8f146104f357806323b872dd1461051e57610376565b806310d5de531161034957806310d5de531461040c5780631694505e1461044957806318160ddd146104745780631816467f1461049f57610376565b806306fdde031461037b578063095ea7b3146103a6578063106b5da1146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d55565b60405161039d9190614336565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906143f1565b610de7565b6040516103da919061444c565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614467565b610e05565b005b34801561041857600080fd5b50610433600480360381019061042e9190614494565b610f2f565b604051610440919061444c565b60405180910390f35b34801561045557600080fd5b5061045e610f4f565b60405161046b9190614520565b60405180910390f35b34801561048057600080fd5b50610489610f73565b604051610496919061454a565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c19190614494565b610f7d565b005b3480156104d457600080fd5b506104dd6110d4565b6040516104ea919061454a565b60405180910390f35b3480156104ff57600080fd5b506105086110da565b604051610515919061454a565b60405180910390f35b34801561052a57600080fd5b5061054560048036038101906105409190614565565b6110e0565b604051610552919061444c565b60405180910390f35b34801561056757600080fd5b506105706111b9565b60405161057d91906145d4565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a891906143f1565b6111c2565b6040516105ba919061444c565b60405180910390f35b3480156105cf57600080fd5b506105d8611275565b6040516105e591906145fe565b60405180910390f35b3480156105fa57600080fd5b50610603611299565b604051610610919061444c565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614494565b6112ac565b60405161064d919061444c565b60405180910390f35b34801561066257600080fd5b5061066b611302565b005b34801561067957600080fd5b5061068261143e565b60405161068f919061454a565b60405180910390f35b3480156106a457600080fd5b506106ad611444565b6040516106ba919061444c565b60405180910390f35b3480156106cf57600080fd5b506106ea60048036038101906106e59190614494565b611457565b6040516106f7919061454a565b60405180910390f35b34801561070c57600080fd5b5061071561149f565b005b34801561072357600080fd5b5061072c6115f7565b604051610739919061444c565b60405180910390f35b34801561074e57600080fd5b5061076960048036038101906107649190614645565b6116cd565b005b34801561077757600080fd5b506107806117bf565b60405161078d91906145fe565b60405180910390f35b3480156107a257600080fd5b506107ab6117e5565b6040516107b8919061454a565b60405180910390f35b3480156107cd57600080fd5b506107e860048036038101906107e39190614685565b6117eb565b005b3480156107f657600080fd5b506107ff611905565b005b34801561080d57600080fd5b506108166119d4565b60405161082391906145fe565b60405180910390f35b34801561083857600080fd5b506108416119fe565b60405161084e91906145fe565b60405180910390f35b34801561086357600080fd5b5061086c611a24565b604051610879919061454a565b60405180910390f35b34801561088e57600080fd5b506108a960048036038101906108a491906146d8565b611a2a565b005b3480156108b757600080fd5b506108c0611ade565b6040516108cd9190614336565b60405180910390f35b3480156108e257600080fd5b506108fd60048036038101906108f89190614645565b611b70565b005b34801561090b57600080fd5b50610914611ca4565b604051610921919061454a565b60405180910390f35b34801561093657600080fd5b5061093f611caa565b60405161094c919061454a565b60405180910390f35b34801561096157600080fd5b5061096a611cb0565b604051610977919061454a565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906143f1565b611cb6565b6040516109b4919061444c565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df91906143f1565b611d83565b6040516109f1919061444c565b60405180910390f35b348015610a0657600080fd5b50610a216004803603810190610a1c9190614494565b611da1565b005b348015610a2f57600080fd5b50610a4a6004803603810190610a459190614494565b611ef8565b604051610a57919061444c565b60405180910390f35b348015610a6c57600080fd5b50610a75611f18565b604051610a82919061444c565b60405180910390f35b348015610a9757600080fd5b50610ab26004803603810190610aad9190614645565b611f2b565b005b348015610ac057600080fd5b50610adb6004803603810190610ad69190614685565b61206b565b005b348015610ae957600080fd5b50610af2612185565b604051610aff919061444c565b60405180910390f35b348015610b1457600080fd5b50610b1d612198565b604051610b2a919061454a565b60405180910390f35b348015610b3f57600080fd5b50610b5a6004803603810190610b559190614467565b61219e565b604051610b67919061444c565b60405180910390f35b348015610b7c57600080fd5b50610b8561230e565b604051610b9291906145fe565b60405180910390f35b348015610ba757600080fd5b50610bb0612334565b604051610bbd919061454a565b60405180910390f35b348015610bd257600080fd5b50610bed6004803603810190610be89190614705565b61233a565b604051610bfa919061454a565b60405180910390f35b348015610c0f57600080fd5b50610c186123c1565b604051610c25919061454a565b60405180910390f35b348015610c3a57600080fd5b50610c556004803603810190610c509190614494565b6123c7565b005b348015610c6357600080fd5b50610c7e6004803603810190610c799190614494565b61251e565b005b348015610c8c57600080fd5b50610c9561266b565b604051610ca2919061444c565b60405180910390f35b348015610cb757600080fd5b50610cc0612726565b604051610ccd919061454a565b60405180910390f35b348015610ce257600080fd5b50610cfd6004803603810190610cf89190614494565b61272c565b005b348015610d0b57600080fd5b50610d146128f3565b604051610d21919061454a565b60405180910390f35b348015610d3657600080fd5b50610d3f6128f9565b604051610d4c919061454a565b60405180910390f35b606060038054610d6490614774565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9090614774565b8015610ddd5780601f10610db257610100808354040283529160200191610ddd565b820191906000526020600020905b815481529060010190602001808311610dc057829003601f168201915b5050505050905090565b6000610dfb610df461295d565b8484612965565b6001905092915050565b610e0d61295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e93906147f2565b60405180910390fd5b670de0b6b3a76400006103e86005610eb2610f73565b610ebc9190614841565b610ec691906148ca565b610ed091906148ca565b811015610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099061496d565b60405180910390fd5b670de0b6b3a764000081610f269190614841565b60098190555050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f8561295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611014576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100b906147f2565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60185481565b60175481565b60006110ed848484612b30565b6111ae846110f961295d565b6111a9856040518060600160405280602881526020016157b560289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061115f61295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137789092919063ffffffff16565b612965565b600190509392505050565b60006012905090565b600061126b6111cf61295d565b8461126685600160006111e061295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128ff90919063ffffffff16565b612965565b6001905092915050565b7f000000000000000000000000320d02b7b73c20cd4008169380991e0aed98177f81565b600c60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61130a61295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611399576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611390906147f2565b60405180910390fd5b60006113a430611457565b905060646113b0610f73565b6113ba91906148ca565b8110156113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f3906149ff565b60405180910390fd5b6114046137dc565b7f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb3242604051611433919061454a565b60405180910390a150565b60135481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114a761295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d906147f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061160161295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611690576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611687906147f2565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506000600e60006101000a81548160ff0219169083151502179055506001905090565b6116d561295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175b906147f2565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6117f361295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611882576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611879906147f2565b60405180910390fd5b8260108190555081601181905550806012819055506012546011546010546118aa9190614a1f565b6118b49190614a1f565b600f819055506063600f541115611900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f790614ac1565b60405180910390fd5b505050565b61190d61295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461199c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611993906147f2565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b611a3261295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab8906147f2565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611aed90614774565b80601f0160208091040260200160405190810160405280929190818152602001828054611b1990614774565b8015611b665780601f10611b3b57610100808354040283529160200191611b66565b820191906000526020600020905b815481529060010190602001808311611b4957829003601f168201915b5050505050905090565b611b7861295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfe906147f2565b60405180910390fd5b7f000000000000000000000000320d02b7b73c20cd4008169380991e0aed98177f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8d90614b53565b60405180910390fd5b611ca08282613a99565b5050565b60125481565b60195481565b60165481565b6000611d79611cc361295d565b84611d74856040518060600160405280602581526020016157dd6025913960016000611ced61295d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137789092919063ffffffff16565b612965565b6001905092915050565b6000611d97611d9061295d565b8484612b30565b6001905092915050565b611da961295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2f906147f2565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611f3361295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb9906147f2565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161205f919061444c565b60405180910390a25050565b61207361295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612102576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f9906147f2565b60405180910390fd5b82601481905550816015819055508060168190555060165460155460145461212a9190614a1f565b6121349190614a1f565b60138190555060196013541115612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790614bbf565b60405180910390fd5b505050565b600e60009054906101000a900460ff1681565b60095481565b60006121a861295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e906147f2565b60405180910390fd5b620186a06001612245610f73565b61224f9190614841565b61225991906148ca565b82101561229b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229290614c51565b60405180910390fd5b6103e860056122a8610f73565b6122b29190614841565b6122bc91906148ca565b8211156122fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f590614ce3565b60405180910390fd5b81600a8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6123cf61295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461245e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612455906147f2565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61252661295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ac906147f2565b60405180910390fd5b600047905060008273ffffffffffffffffffffffffffffffffffffffff16826040516125e090614d34565b60006040518083038185875af1925050503d806000811461261d576040519150601f19603f3d011682016040523d82523d6000602084013e612622565b606091505b5050905080612666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265d90614dbb565b60405180910390fd5b505050565b600061267561295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612704576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fb906147f2565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b61273461295d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ba906147f2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282a90614e4d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600b5481565b600080828461290e9190614a1f565b905083811015612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a90614eb9565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cc90614f4b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614fdd565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b23919061454a565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b979061506f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0790615101565b60405180910390fd5b6000811415612c2a57612c2583836000613b3a565b613773565b600c60009054906101000a900460ff161561329b57612c476119d4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612cb55750612c856119d4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cee5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d28575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d415750600560149054906101000a900460ff16155b1561329a57600c60019054906101000a900460ff16612e3b57601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612dfb5750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e319061516d565b60405180910390fd5b5b600e60009054906101000a900460ff161561300357612e586119d4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612edf57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f3757507f000000000000000000000000320d02b7b73c20cd4008169380991e0aed98177f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156130025743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb490615225565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130a65750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561314d576009548111156130f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130e7906152b7565b60405180910390fd5b600b546130fc83611457565b826131079190614a1f565b1115613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90615323565b60405180910390fd5b613299565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131f05750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561323f5760095481111561323a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613231906153b5565b60405180910390fd5b613298565b600b5461324b83611457565b826132569190614a1f565b1115613297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161328e90615323565b60405180910390fd5b5b5b5b5b60006132a630611457565b90506000600a5482101590508080156132cb5750600c60029054906101000a900460ff165b80156132e45750600560149054906101000a900460ff16155b801561333a5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133905750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133e65750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561342a576001600560146101000a81548160ff02191690831515021790555061340e6137dc565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134e05750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134ea57600090505b6000811561376357601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561354d57506000601354115b1561361a5761357a606461356c60135488613dcf90919063ffffffff16565b613e4a90919063ffffffff16565b90506013546015548261358d9190614841565b61359791906148ca565b601860008282546135a89190614a1f565b92505081905550601354601654826135c09190614841565b6135ca91906148ca565b601960008282546135db9190614a1f565b92505081905550601354601454826135f39190614841565b6135fd91906148ca565b6017600082825461360e9190614a1f565b9250508190555061373f565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561367557506000600f54115b1561373e576136a26064613694600f5488613dcf90919063ffffffff16565b613e4a90919063ffffffff16565b9050600f54601154826136b59190614841565b6136bf91906148ca565b601860008282546136d09190614a1f565b92505081905550600f54601254826136e89190614841565b6136f291906148ca565b601960008282546137039190614a1f565b92505081905550600f546010548261371b9190614841565b61372591906148ca565b601760008282546137369190614a1f565b925050819055505b5b600081111561375457613753873083613b3a565b5b808561376091906153d5565b94505b61376e878787613b3a565b505050505b505050565b60008383111582906137c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137b79190614336565b60405180910390fd5b50600083856137cf91906153d5565b9050809150509392505050565b60006137e730611457565b905060006019546017546018546137fe9190614a1f565b6138089190614a1f565b905060008214806138195750600081145b15613825575050613a97565b6000600282601854856138389190614841565b61384291906148ca565b61384c91906148ca565b905060006138638285613e9490919063ffffffff16565b9050600047905061387382613ede565b60006138888247613e9490919063ffffffff16565b905060006138b3866138a560175485613dcf90919063ffffffff16565b613e4a90919063ffffffff16565b905060006138de876138d060195486613dcf90919063ffffffff16565b613e4a90919063ffffffff16565b905060008183856138ef91906153d5565b6138f991906153d5565b90506000601881905550600060178190555060006019819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168460405161395b90614d34565b60006040518083038185875af1925050503d8060008114613998576040519150601f19603f3d011682016040523d82523d6000602084013e61399d565b606091505b50509050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516139e790614d34565b60006040518083038185875af1925050503d8060008114613a24576040519150601f19603f3d011682016040523d82523d6000602084013e613a29565b606091505b505080915050600088118015613a3f5750600082115b15613a8c57613a4e888361412a565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618783601854604051613a8393929190615409565b60405180910390a15b505050505050505050505b565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613baa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba19061506f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c1190615101565b60405180910390fd5b613c25838383614235565b613c908160405180606001604052806026815260200161578f602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137789092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d23816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128ff90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613dc2919061454a565b60405180910390a3505050565b600080831415613de25760009050613e44565b60008284613df09190614841565b9050828482613dff91906148ca565b14613e3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e36906154b2565b60405180910390fd5b809150505b92915050565b6000613e8c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061423a565b905092915050565b6000613ed683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613778565b905092915050565b6000600267ffffffffffffffff811115613efb57613efa6154d2565b5b604051908082528060200260200182016040528015613f295781602001602082028036833780820191505090505b5090503081600081518110613f4157613f40615501565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613fe157600080fd5b505afa158015613ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140199190615545565b8160018151811061402d5761402c615501565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614092307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612965565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016140f495949392919061566b565b600060405180830381600087803b15801561410e57600080fd5b505af1158015614122573d6000803e3d6000fd5b505050505050565b614155307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612965565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016141dc969594939291906156c5565b6060604051808303818588803b1580156141f557600080fd5b505af1158015614209573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061422e919061573b565b5050505050565b505050565b60008083118290614281576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016142789190614336565b60405180910390fd5b506000838561429091906148ca565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156142d75780820151818401526020810190506142bc565b838111156142e6576000848401525b50505050565b6000601f19601f8301169050919050565b60006143088261429d565b61431281856142a8565b93506143228185602086016142b9565b61432b816142ec565b840191505092915050565b6000602082019050818103600083015261435081846142fd565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143888261435d565b9050919050565b6143988161437d565b81146143a357600080fd5b50565b6000813590506143b58161438f565b92915050565b6000819050919050565b6143ce816143bb565b81146143d957600080fd5b50565b6000813590506143eb816143c5565b92915050565b6000806040838503121561440857614407614358565b5b6000614416858286016143a6565b9250506020614427858286016143dc565b9150509250929050565b60008115159050919050565b61444681614431565b82525050565b6000602082019050614461600083018461443d565b92915050565b60006020828403121561447d5761447c614358565b5b600061448b848285016143dc565b91505092915050565b6000602082840312156144aa576144a9614358565b5b60006144b8848285016143a6565b91505092915050565b6000819050919050565b60006144e66144e16144dc8461435d565b6144c1565b61435d565b9050919050565b60006144f8826144cb565b9050919050565b600061450a826144ed565b9050919050565b61451a816144ff565b82525050565b60006020820190506145356000830184614511565b92915050565b614544816143bb565b82525050565b600060208201905061455f600083018461453b565b92915050565b60008060006060848603121561457e5761457d614358565b5b600061458c868287016143a6565b935050602061459d868287016143a6565b92505060406145ae868287016143dc565b9150509250925092565b600060ff82169050919050565b6145ce816145b8565b82525050565b60006020820190506145e960008301846145c5565b92915050565b6145f88161437d565b82525050565b600060208201905061461360008301846145ef565b92915050565b61462281614431565b811461462d57600080fd5b50565b60008135905061463f81614619565b92915050565b6000806040838503121561465c5761465b614358565b5b600061466a858286016143a6565b925050602061467b85828601614630565b9150509250929050565b60008060006060848603121561469e5761469d614358565b5b60006146ac868287016143dc565b93505060206146bd868287016143dc565b92505060406146ce868287016143dc565b9150509250925092565b6000602082840312156146ee576146ed614358565b5b60006146fc84828501614630565b91505092915050565b6000806040838503121561471c5761471b614358565b5b600061472a858286016143a6565b925050602061473b858286016143a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061478c57607f821691505b602082108114156147a05761479f614745565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006147dc6020836142a8565b91506147e7826147a6565b602082019050919050565b6000602082019050818103600083015261480b816147cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061484c826143bb565b9150614857836143bb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148905761488f614812565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d5826143bb565b91506148e0836143bb565b9250826148f0576148ef61489b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614957602f836142a8565b9150614962826148fb565b604082019050919050565b600060208201905081810360008301526149868161494a565b9050919050565b7f43616e206f6e6c792073776170206261636b206966206d6f7265207468616e2060008201527f3125206f6620746f6b656e7320737475636b206f6e20636f6e74726163740000602082015250565b60006149e9603e836142a8565b91506149f48261498d565b604082019050919050565b60006020820190508181036000830152614a18816149dc565b9050919050565b6000614a2a826143bb565b9150614a35836143bb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614a6a57614a69614812565b5b828201905092915050565b7f4a75737420666f722074686520736e6970657273206174206c61756e63680000600082015250565b6000614aab601e836142a8565b9150614ab682614a75565b602082019050919050565b60006020820190508181036000830152614ada81614a9e565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b3d6039836142a8565b9150614b4882614ae1565b604082019050919050565b60006020820190508181036000830152614b6c81614b30565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614ba9601d836142a8565b9150614bb482614b73565b602082019050919050565b60006020820190508181036000830152614bd881614b9c565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c3b6035836142a8565b9150614c4682614bdf565b604082019050919050565b60006020820190508181036000830152614c6a81614c2e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614ccd6034836142a8565b9150614cd882614c71565b604082019050919050565b60006020820190508181036000830152614cfc81614cc0565b9050919050565b600081905092915050565b50565b6000614d1e600083614d03565b9150614d2982614d0e565b600082019050919050565b6000614d3f82614d11565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b6000614da5603a836142a8565b9150614db082614d49565b604082019050919050565b60006020820190508181036000830152614dd481614d98565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e376026836142a8565b9150614e4282614ddb565b604082019050919050565b60006020820190508181036000830152614e6681614e2a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ea3601b836142a8565b9150614eae82614e6d565b602082019050919050565b60006020820190508181036000830152614ed281614e96565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f356024836142a8565b9150614f4082614ed9565b604082019050919050565b60006020820190508181036000830152614f6481614f28565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614fc76022836142a8565b9150614fd282614f6b565b604082019050919050565b60006020820190508181036000830152614ff681614fba565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006150596025836142a8565b915061506482614ffd565b604082019050919050565b600060208201905081810360008301526150888161504c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006150eb6023836142a8565b91506150f68261508f565b604082019050919050565b6000602082019050818103600083015261511a816150de565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006151576016836142a8565b915061516282615121565b602082019050919050565b600060208201905081810360008301526151868161514a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061520f6049836142a8565b915061521a8261518d565b606082019050919050565b6000602082019050818103600083015261523e81615202565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006152a16035836142a8565b91506152ac82615245565b604082019050919050565b600060208201905081810360008301526152d081615294565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061530d6013836142a8565b9150615318826152d7565b602082019050919050565b6000602082019050818103600083015261533c81615300565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061539f6036836142a8565b91506153aa82615343565b604082019050919050565b600060208201905081810360008301526153ce81615392565b9050919050565b60006153e0826143bb565b91506153eb836143bb565b9250828210156153fe576153fd614812565b5b828203905092915050565b600060608201905061541e600083018661453b565b61542b602083018561453b565b615438604083018461453b565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061549c6021836142a8565b91506154a782615440565b604082019050919050565b600060208201905081810360008301526154cb8161548f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061553f8161438f565b92915050565b60006020828403121561555b5761555a614358565b5b600061556984828501615530565b91505092915050565b6000819050919050565b600061559761559261558d84615572565b6144c1565b6143bb565b9050919050565b6155a78161557c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155e28161437d565b82525050565b60006155f483836155d9565b60208301905092915050565b6000602082019050919050565b6000615618826155ad565b61562281856155b8565b935061562d836155c9565b8060005b8381101561565e57815161564588826155e8565b975061565083615600565b925050600181019050615631565b5085935050505092915050565b600060a082019050615680600083018861453b565b61568d602083018761559e565b818103604083015261569f818661560d565b90506156ae60608301856145ef565b6156bb608083018461453b565b9695505050505050565b600060c0820190506156da60008301896145ef565b6156e7602083018861453b565b6156f4604083018761559e565b615701606083018661559e565b61570e60808301856145ef565b61571b60a083018461453b565b979650505050505050565b600081519050615735816143c5565b92915050565b60008060006060848603121561575457615753614358565b5b600061576286828701615726565b935050602061577386828701615726565b925050604061578486828701615726565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220755b1b5ead9fb61c85c2fba2d8c6330c581448e152d97a28ecbb80998f53a57164736f6c63430008090033

Deployed Bytecode Sourcemap

27722:15914:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7840:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10007:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33448:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29068:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27801:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8960:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35674:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28847:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28807;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10658:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8802:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11422:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27859:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28162:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36034:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42978:310;;;;;;;;;;;;;:::i;:::-;;28658:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28242:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9131:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22305:148;;;;;;;;;;;;;:::i;:::-;;32622:159;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33691:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27936:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28547;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34048:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32454:112;;;;;;;;;;;;;:::i;:::-;;21663:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27973:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28693:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33935:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8059:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35006:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28621:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28887:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28769:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12143:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9471:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35454:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29290:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28202:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34816:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34430:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28465:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28047:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33055:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28004:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28513:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9709:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28089:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35839:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43296:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32846:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28584:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22608:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28731:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28129:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7840:100;7894:13;7927:5;7920:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7840:100;:::o;10007:169::-;10090:4;10107:39;10116:12;:10;:12::i;:::-;10130:7;10139:6;10107:8;:39::i;:::-;10164:4;10157:11;;10007:169;;;;:::o;33448:231::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33564:4:::1;33558;33554:1;33538:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33537:31;;;;:::i;:::-;33527:6;:41;;33519:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;33664:6;33654;:17;;;;:::i;:::-;33631:20;:40;;;;33448:231:::0;:::o;29068:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;27801:51::-;;;:::o;8960:108::-;9021:7;9048:12;;9041:19;;8960:108;:::o;35674:157::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35781:9:::1;;;;;;;;;;;35753:38;;35770:9;35753:38;;;;;;;;;;;;35814:9;35802;;:21;;;;;;;;;;;;;;;;;;35674:157:::0;:::o;28847:33::-;;;;:::o;28807:::-;;;;:::o;10658:355::-;10798:4;10815:36;10825:6;10833:9;10844:6;10815:9;:36::i;:::-;10862:121;10871:6;10879:12;:10;:12::i;:::-;10893:89;10931:6;10893:89;;;;;;;;;;;;;;;;;:11;:19;10905:6;10893:19;;;;;;;;;;;;;;;:33;10913:12;:10;:12::i;:::-;10893:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10862:8;:121::i;:::-;11001:4;10994:11;;10658:355;;;;;:::o;8802:93::-;8860:5;8885:2;8878:9;;8802:93;:::o;11422:218::-;11510:4;11527:83;11536:12;:10;:12::i;:::-;11550:7;11559:50;11598:10;11559:11;:25;11571:12;:10;:12::i;:::-;11559:25;;;;;;;;;;;;;;;:34;11585:7;11559:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11527:8;:83::i;:::-;11628:4;11621:11;;11422:218;;;;:::o;27859:38::-;;;:::o;28162:33::-;;;;;;;;;;;;;:::o;36034:125::-;36099:4;36123:19;:28;36143:7;36123:28;;;;;;;;;;;;;;;;;;;;;;;;;36116:35;;36034:125;;;:::o;42978:310::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43033:23:::1;43059:24;43077:4;43059:9;:24::i;:::-;43033:50;;43137:3;43121:13;:11;:13::i;:::-;:19;;;;:::i;:::-;43102:15;:38;;43094:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;43218:10;:8;:10::i;:::-;43244:36;43264:15;43244:36;;;;;;:::i;:::-;;;;;;;;43022:266;42978:310::o:0;28658:28::-;;;;:::o;28242:31::-;;;;;;;;;;;;;:::o;9131:127::-;9205:7;9232:9;:18;9242:7;9232:18;;;;;;;;;;;;;;;;9225:25;;9131:127;;;:::o;22305:148::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22412:1:::1;22375:40;;22396:6;;;;;;;;;;;22375:40;;;;;;;;;;;;22443:1;22426:6;;:19;;;;;;;;;;;;;;;;;;22305:148::o:0;32622:159::-;32674:4;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32707:5:::1;32690:14;;:22;;;;;;;;;;;;;;;;;;32746:5;32723:20;;:28;;;;;;;;;;;;;;;;;;32769:4;32762:11;;32622:159:::0;:::o;33691:144::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33823:4:::1;33781:31;:39;33813:6;33781:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33691:144:::0;;:::o;27936:30::-;;;;;;;;;;;;;:::o;28547:::-;;;;:::o;34048:370::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34182:13:::1;34164:15;:31;;;;34224:13;34206:15;:31;;;;34260:7;34248:9;:19;;;;34329:9;;34311:15;;34293;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;34278:12;:60;;;;34373:2;34357:12;;:18;;34349:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34048:370:::0;;;:::o;32454:112::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32525:4:::1;32509:13;;:20;;;;;;;;;;;;;;;;;;32554:4;32540:11;;:18;;;;;;;;;;;;;;;;;;32454:112::o:0;21663:79::-;21701:7;21728:6;;;;;;;;;;;21721:13;;21663:79;:::o;27973:24::-;;;;;;;;;;;;;:::o;28693:31::-;;;;:::o;33935:101::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34021:7:::1;34007:11;;:21;;;;;;;;;;;;;;;;;;33935:101:::0;:::o;8059:104::-;8115:13;8148:7;8141:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8059:104;:::o;35006:244::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:13:::1;35105:21;;:4;:21;;;;35097:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35201:41;35230:4;35236:5;35201:28;:41::i;:::-;35006:244:::0;;:::o;28621:24::-;;;;:::o;28887:27::-;;;;:::o;28769:25::-;;;;:::o;12143:269::-;12236:4;12253:129;12262:12;:10;:12::i;:::-;12276:7;12285:96;12324:15;12285:96;;;;;;;;;;;;;;;;;:11;:25;12297:12;:10;:12::i;:::-;12285:25;;;;;;;;;;;;;;;:34;12311:7;12285:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12253:8;:129::i;:::-;12400:4;12393:11;;12143:269;;;;:::o;9471:175::-;9557:4;9574:42;9584:12;:10;:12::i;:::-;9598:9;9609:6;9574:9;:42::i;:::-;9634:4;9627:11;;9471:175;;;;:::o;35454:208::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35591:15:::1;;;;;;;;;;;35548:59;;35571:18;35548:59;;;;;;;;;;;;35636:18;35618:15;;:36;;;;;;;;;;;;;;;;;;35454:208:::0;:::o;29290:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;28202:33::-;;;;;;;;;;;;;:::o;34816:182::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34932:8:::1;34901:19;:28;34921:7;34901:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34972:7;34956:34;;;34981:8;34956:34;;;;;;:::i;:::-;;;;;;;;34816:182:::0;;:::o;34430:378::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34566:13:::1;34547:16;:32;;;;34609:13;34590:16;:32;;;;34646:7;34633:10;:20;;;;34718:10;;34699:16;;34680;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;34664:13;:64;;;;34764:2;34747:13;;:19;;34739:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34430:378:::0;;;:::o;28465:39::-;;;;;;;;;;;;;:::o;28047:35::-;;;;:::o;33055:381::-;33136:4;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33192:6:::1;33188:1;33172:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;33159:9;:39;;33151:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;33307:4;33303:1;33287:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;33274:9;:37;;33266:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;33399:9;33378:18;:30;;;;33425:4;33418:11;;33055:381:::0;;;:::o;28004:30::-;;;;;;;;;;;;;:::o;28513:27::-;;;;:::o;9709:151::-;9798:7;9825:11;:18;9837:5;9825:18;;;;;;;;;;;;;;;:27;9844:7;9825:27;;;;;;;;;;;;;;;;9818:34;;9709:151;;;;:::o;28089:33::-;;;;:::o;35839:181::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35958:15:::1;;;;;;;;;;;35924:50;;35947:9;35924:50;;;;;;;;;;;;36003:9;35985:15;;:27;;;;;;;;;;;;;;;;;;35839:181:::0;:::o;43296:337::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43371:26:::1;43400:21;43371:50;;43433:12;43451:10;:15;;43475:18;43451:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43432:67;;;43532:7;43510:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;43360:273;;43296:337:::0;:::o;32846:134::-;32906:4;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32945:5:::1;32922:20;;:28;;;;;;;;;;;;;;;;;;32968:4;32961:11;;32846:134:::0;:::o;28584:30::-;;;;:::o;22608:244::-;21885:12;:10;:12::i;:::-;21875:22;;:6;;;;;;;;;;;:22;;;21867:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22717:1:::1;22697:22;;:8;:22;;;;22689:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22807:8;22778:38;;22799:6;;;;;;;;;;;22778:38;;;;;;;;;;;;22836:8;22827:6;;:17;;;;;;;;;;;;;;;;;;22608:244:::0;:::o;28731:31::-;;;;:::o;28129:24::-;;;;:::o;16707:181::-;16765:7;16785:9;16801:1;16797;:5;;;;:::i;:::-;16785:17;;16826:1;16821;:6;;16813:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16879:1;16872:8;;;16707:181;;;;:::o;476:98::-;529:7;556:10;549:17;;476:98;:::o;15329:380::-;15482:1;15465:19;;:5;:19;;;;15457:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15563:1;15544:21;;:7;:21;;;;15536:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15647:6;15617:11;:18;15629:5;15617:18;;;;;;;;;;;;;;;:27;15636:7;15617:27;;;;;;;;;;;;;;;:36;;;;15685:7;15669:32;;15678:5;15669:32;;;15694:6;15669:32;;;;;;:::i;:::-;;;;;;;;15329:380;;;:::o;36171:4085::-;36319:1;36303:18;;:4;:18;;;;36295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36396:1;36382:16;;:2;:16;;;;36374:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36473:1;36463:6;:11;36460:92;;;36491:28;36507:4;36513:2;36517:1;36491:15;:28::i;:::-;36534:7;;36460:92;36575:14;;;;;;;;;;;36572:1801;;;36635:7;:5;:7::i;:::-;36627:15;;:4;:15;;;;:49;;;;;36669:7;:5;:7::i;:::-;36663:13;;:2;:13;;;;36627:49;:86;;;;;36711:1;36697:16;;:2;:16;;;;36627:86;:128;;;;;36748:6;36734:21;;:2;:21;;;;36627:128;:158;;;;;36777:8;;;;;;;;;;;36776:9;36627:158;36605:1757;;;36823:13;;;;;;;;;;;36819:148;;36868:19;:25;36888:4;36868:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36897:19;:23;36917:2;36897:23;;;;;;;;;;;;;;;;;;;;;;;;;36868:52;36860:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36819:148;37125:20;;;;;;;;;;;37121:423;;;37179:7;:5;:7::i;:::-;37173:13;;:2;:13;;;;:47;;;;;37204:15;37190:30;;:2;:30;;;;37173:47;:79;;;;;37238:13;37224:28;;:2;:28;;;;37173:79;37169:356;;;37330:12;37288:28;:39;37317:9;37288:39;;;;;;;;;;;;;;;;:54;37280:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37489:12;37447:28;:39;37476:9;37447:39;;;;;;;;;;;;;;;:54;;;;37169:356;37121:423;37613:25;:31;37639:4;37613:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37649:31;:35;37681:2;37649:35;;;;;;;;;;;;;;;;;;;;;;;;;37648:36;37613:71;37609:738;;;37731:20;;37721:6;:30;;37713:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;37870:9;;37853:13;37863:2;37853:9;:13::i;:::-;37844:6;:22;;;;:::i;:::-;:35;;37836:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37609:738;;;37997:25;:29;38023:2;37997:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;38031:31;:37;38063:4;38031:37;;;;;;;;;;;;;;;;;;;;;;;;;38030:38;37997:71;37993:354;;;38115:20;;38105:6;:30;;38097:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37993:354;;;38294:9;;38277:13;38287:2;38277:9;:13::i;:::-;38268:6;:22;;;;:::i;:::-;:35;;38260:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37993:354;37609:738;36605:1757;36572:1801;38390:28;38421:24;38439:4;38421:9;:24::i;:::-;38390:55;;38466:12;38505:18;;38481:20;:42;;38466:57;;38554:7;:35;;;;;38578:11;;;;;;;;;;;38554:35;:61;;;;;38607:8;;;;;;;;;;;38606:9;38554:61;:110;;;;;38633:25;:31;38659:4;38633:31;;;;;;;;;;;;;;;;;;;;;;;;;38632:32;38554:110;:153;;;;;38682:19;:25;38702:4;38682:25;;;;;;;;;;;;;;;;;;;;;;;;;38681:26;38554:153;:194;;;;;38725:19;:23;38745:2;38725:23;;;;;;;;;;;;;;;;;;;;;;;;;38724:24;38554:194;38536:338;;;38786:4;38775:8;;:15;;;;;;;;;;;;;;;;;;38819:10;:8;:10::i;:::-;38857:5;38846:8;;:16;;;;;;;;;;;;;;;;;;38536:338;38894:12;38910:8;;;;;;;;;;;38909:9;38894:24;;39019:19;:25;39039:4;39019:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39048:19;:23;39068:2;39048:23;;;;;;;;;;;;;;;;;;;;;;;;;39019:52;39016:99;;;39098:5;39088:15;;39016:99;39135:12;39239:7;39236:967;;;39290:25;:29;39316:2;39290:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39339:1;39323:13;;:17;39290:50;39286:748;;;39367:34;39397:3;39367:25;39378:13;;39367:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39360:41;;39468:13;;39449:16;;39442:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39420:18;;:61;;;;;;;:::i;:::-;;;;;;;;39536:13;;39523:10;;39516:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;39500:12;;:49;;;;;;;:::i;:::-;;;;;;;;39616:13;;39597:16;;39590:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;39568:18;;:61;;;;;;;:::i;:::-;;;;;;;;39286:748;;;39690:25;:31;39716:4;39690:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39740:1;39725:12;;:16;39690:51;39687:347;;;39766:33;39795:3;39766:24;39777:12;;39766:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39759:40;;39862:12;;39844:15;;39837:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39815:18;;:59;;;;;;;:::i;:::-;;;;;;;;39928:12;;39916:9;;39909:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;39893:12;;:47;;;;;;;:::i;:::-;;;;;;;;40006:12;;39988:15;;39981:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39959:18;;:59;;;;;;;:::i;:::-;;;;;;;;39687:347;39286:748;40072:1;40065:4;:8;40062:93;;;40097:42;40113:4;40127;40134;40097:15;:42::i;:::-;40062:93;40187:4;40177:14;;;;;:::i;:::-;;;39236:967;40215:33;40231:4;40237:2;40241:6;40215:15;:33::i;:::-;36284:3972;;;;36171:4085;;;;:::o;17610:192::-;17696:7;17729:1;17724;:6;;17732:12;17716:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17756:9;17772:1;17768;:5;;;;:::i;:::-;17756:17;;17793:1;17786:8;;;17610:192;;;;;:::o;41406:1502::-;41445:23;41471:24;41489:4;41471:9;:24::i;:::-;41445:50;;41506:25;41576:12;;41555:18;;41534;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;41506:82;;41631:1;41612:15;:20;:46;;;;41657:1;41636:17;:22;41612:46;41609:60;;;41661:7;;;;41609:60;41738:23;41823:1;41803:17;41782:18;;41764:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;41738:86;;41835:26;41864:36;41884:15;41864;:19;;:36;;;;:::i;:::-;41835:65;;41921:25;41949:21;41921:49;;41983:36;42000:18;41983:16;:36::i;:::-;42041:18;42062:44;42088:17;42062:21;:25;;:44;;;;:::i;:::-;42041:65;;42127:23;42153:57;42192:17;42153:34;42168:18;;42153:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;42127:83;;42221:17;42241:51;42274:17;42241:28;42256:12;;42241:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42221:71;;42321:23;42378:9;42360:15;42347:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;42321:66;;42437:1;42416:18;:22;;;;42470:1;42449:18;:22;;;;42497:1;42482:12;:16;;;;42520:12;42545:15;;;;;;;;;;;42537:29;;42574:15;42537:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42519:75;;;42626:9;;;;;;;;;;;42618:23;;42649:9;42618:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42605:58;;;;;42705:1;42687:15;:19;:42;;;;;42728:1;42710:15;:19;42687:42;42684:210;;;42745:46;42758:15;42775;42745:12;:46::i;:::-;42811:71;42826:18;42846:15;42863:18;;42811:71;;;;;;;;:::i;:::-;;;;;;;;42684:210;41434:1474;;;;;;;;;;41406:1502;:::o;35258:188::-;35375:5;35341:25;:31;35367:4;35341:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35432:5;35398:40;;35426:4;35398:40;;;;;;;;;;;;35258:188;;:::o;12902:573::-;13060:1;13042:20;;:6;:20;;;;13034:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13144:1;13123:23;;:9;:23;;;;13115:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13199:47;13220:6;13228:9;13239:6;13199:20;:47::i;:::-;13279:71;13301:6;13279:71;;;;;;;;;;;;;;;;;:9;:17;13289:6;13279:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13259:9;:17;13269:6;13259:17;;;;;;;;;;;;;;;:91;;;;13384:32;13409:6;13384:9;:20;13394:9;13384:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13361:9;:20;13371:9;13361:20;;;;;;;;;;;;;;;:55;;;;13449:9;13432:35;;13441:6;13432:35;;;13460:6;13432:35;;;;;;:::i;:::-;;;;;;;;12902:573;;;:::o;18061:471::-;18119:7;18369:1;18364;:6;18360:47;;;18394:1;18387:8;;;;18360:47;18419:9;18435:1;18431;:5;;;;:::i;:::-;18419:17;;18464:1;18459;18455;:5;;;;:::i;:::-;:10;18447:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18523:1;18516:8;;;18061:471;;;;;:::o;19008:132::-;19066:7;19093:39;19097:1;19100;19093:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19086:46;;19008:132;;;;:::o;17171:136::-;17229:7;17256:43;17260:1;17263;17256:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17249:50;;17171:136;;;;:::o;40264:601::-;40392:21;40430:1;40416:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40392:40;;40461:4;40443;40448:1;40443:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40487:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40477:4;40482:1;40477:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40522:62;40539:4;40554:15;40572:11;40522:8;:62::i;:::-;40623:15;:66;;;40704:11;40730:1;40774:4;40801;40821:15;40623:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40319:546;40264:601;:::o;40877:521::-;41025:62;41042:4;41057:15;41075:11;41025:8;:62::i;:::-;41130:15;:31;;;41169:9;41202:4;41222:11;41248:1;41291;41334:15;;;;;;;;;;;41364;41130:260;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40877:521;;:::o;16312:125::-;;;;:::o;19636:278::-;19722:7;19754:1;19750;:5;19757:12;19742:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19781:9;19797:1;19793;:5;;;;:::i;:::-;19781:17;;19905:1;19898:8;;;19636:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:::-;3888:6;3937:2;3925:9;3916:7;3912:23;3908:32;3905:119;;;3943:79;;:::i;:::-;3905:119;4063:1;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4034:117;3829:329;;;;:::o;4164:60::-;4192:3;4213:5;4206:12;;4164:60;;;:::o;4230:142::-;4280:9;4313:53;4331:34;4340:24;4358:5;4340:24;:::i;:::-;4331:34;:::i;:::-;4313:53;:::i;:::-;4300:66;;4230:142;;;:::o;4378:126::-;4428:9;4461:37;4492:5;4461:37;:::i;:::-;4448:50;;4378:126;;;:::o;4510:153::-;4587:9;4620:37;4651:5;4620:37;:::i;:::-;4607:50;;4510:153;;;:::o;4669:185::-;4783:64;4841:5;4783:64;:::i;:::-;4778:3;4771:77;4669:185;;:::o;4860:276::-;4980:4;5018:2;5007:9;5003:18;4995:26;;5031:98;5126:1;5115:9;5111:17;5102:6;5031:98;:::i;:::-;4860:276;;;;:::o;5142:118::-;5229:24;5247:5;5229:24;:::i;:::-;5224:3;5217:37;5142:118;;:::o;5266:222::-;5359:4;5397:2;5386:9;5382:18;5374:26;;5410:71;5478:1;5467:9;5463:17;5454:6;5410:71;:::i;:::-;5266:222;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:249::-;12661:34;12657:1;12649:6;12645:14;12638:58;12730:32;12725:2;12717:6;12713:15;12706:57;12521:249;:::o;12776:366::-;12918:3;12939:67;13003:2;12998:3;12939:67;:::i;:::-;12932:74;;13015:93;13104:3;13015:93;:::i;:::-;13133:2;13128:3;13124:12;13117:19;;12776:366;;;:::o;13148:419::-;13314:4;13352:2;13341:9;13337:18;13329:26;;13401:9;13395:4;13391:20;13387:1;13376:9;13372:17;13365:47;13429:131;13555:4;13429:131;:::i;:::-;13421:139;;13148:419;;;:::o;13573:305::-;13613:3;13632:20;13650:1;13632:20;:::i;:::-;13627:25;;13666:20;13684:1;13666:20;:::i;:::-;13661:25;;13820:1;13752:66;13748:74;13745:1;13742:81;13739:107;;;13826:18;;:::i;:::-;13739:107;13870:1;13867;13863:9;13856:16;;13573:305;;;;:::o;13884:180::-;14024:32;14020:1;14012:6;14008:14;14001:56;13884:180;:::o;14070:366::-;14212:3;14233:67;14297:2;14292:3;14233:67;:::i;:::-;14226:74;;14309:93;14398:3;14309:93;:::i;:::-;14427:2;14422:3;14418:12;14411:19;;14070:366;;;:::o;14442:419::-;14608:4;14646:2;14635:9;14631:18;14623:26;;14695:9;14689:4;14685:20;14681:1;14670:9;14666:17;14659:47;14723:131;14849:4;14723:131;:::i;:::-;14715:139;;14442:419;;;:::o;14867:244::-;15007:34;15003:1;14995:6;14991:14;14984:58;15076:27;15071:2;15063:6;15059:15;15052:52;14867:244;:::o;15117:366::-;15259:3;15280:67;15344:2;15339:3;15280:67;:::i;:::-;15273:74;;15356:93;15445:3;15356:93;:::i;:::-;15474:2;15469:3;15465:12;15458:19;;15117:366;;;:::o;15489:419::-;15655:4;15693:2;15682:9;15678:18;15670:26;;15742:9;15736:4;15732:20;15728:1;15717:9;15713:17;15706:47;15770:131;15896:4;15770:131;:::i;:::-;15762:139;;15489:419;;;:::o;15914:179::-;16054:31;16050:1;16042:6;16038:14;16031:55;15914:179;:::o;16099:366::-;16241:3;16262:67;16326:2;16321:3;16262:67;:::i;:::-;16255:74;;16338:93;16427:3;16338:93;:::i;:::-;16456:2;16451:3;16447:12;16440:19;;16099:366;;;:::o;16471:419::-;16637:4;16675:2;16664:9;16660:18;16652:26;;16724:9;16718:4;16714:20;16710:1;16699:9;16695:17;16688:47;16752:131;16878:4;16752:131;:::i;:::-;16744:139;;16471:419;;;:::o;16896:240::-;17036:34;17032:1;17024:6;17020:14;17013:58;17105:23;17100:2;17092:6;17088:15;17081:48;16896:240;:::o;17142:366::-;17284:3;17305:67;17369:2;17364:3;17305:67;:::i;:::-;17298:74;;17381:93;17470:3;17381:93;:::i;:::-;17499:2;17494:3;17490:12;17483:19;;17142:366;;;:::o;17514:419::-;17680:4;17718:2;17707:9;17703:18;17695:26;;17767:9;17761:4;17757:20;17753:1;17742:9;17738:17;17731:47;17795:131;17921:4;17795:131;:::i;:::-;17787:139;;17514:419;;;:::o;17939:239::-;18079:34;18075:1;18067:6;18063:14;18056:58;18148:22;18143:2;18135:6;18131:15;18124:47;17939:239;:::o;18184:366::-;18326:3;18347:67;18411:2;18406:3;18347:67;:::i;:::-;18340:74;;18423:93;18512:3;18423:93;:::i;:::-;18541:2;18536:3;18532:12;18525:19;;18184:366;;;:::o;18556:419::-;18722:4;18760:2;18749:9;18745:18;18737:26;;18809:9;18803:4;18799:20;18795:1;18784:9;18780:17;18773:47;18837:131;18963:4;18837:131;:::i;:::-;18829:139;;18556:419;;;:::o;18981:147::-;19082:11;19119:3;19104:18;;18981:147;;;;:::o;19134:114::-;;:::o;19254:398::-;19413:3;19434:83;19515:1;19510:3;19434:83;:::i;:::-;19427:90;;19526:93;19615:3;19526:93;:::i;:::-;19644:1;19639:3;19635:11;19628:18;;19254:398;;;:::o;19658:379::-;19842:3;19864:147;20007:3;19864:147;:::i;:::-;19857:154;;20028:3;20021:10;;19658:379;;;:::o;20043:245::-;20183:34;20179:1;20171:6;20167:14;20160:58;20252:28;20247:2;20239:6;20235:15;20228:53;20043:245;:::o;20294:366::-;20436:3;20457:67;20521:2;20516:3;20457:67;:::i;:::-;20450:74;;20533:93;20622:3;20533:93;:::i;:::-;20651:2;20646:3;20642:12;20635:19;;20294:366;;;:::o;20666:419::-;20832:4;20870:2;20859:9;20855:18;20847:26;;20919:9;20913:4;20909:20;20905:1;20894:9;20890:17;20883:47;20947:131;21073:4;20947:131;:::i;:::-;20939:139;;20666:419;;;:::o;21091:225::-;21231:34;21227:1;21219:6;21215:14;21208:58;21300:8;21295:2;21287:6;21283:15;21276:33;21091:225;:::o;21322:366::-;21464:3;21485:67;21549:2;21544:3;21485:67;:::i;:::-;21478:74;;21561:93;21650:3;21561:93;:::i;:::-;21679:2;21674:3;21670:12;21663:19;;21322:366;;;:::o;21694:419::-;21860:4;21898:2;21887:9;21883:18;21875:26;;21947:9;21941:4;21937:20;21933:1;21922:9;21918:17;21911:47;21975:131;22101:4;21975:131;:::i;:::-;21967:139;;21694:419;;;:::o;22119:177::-;22259:29;22255:1;22247:6;22243:14;22236:53;22119:177;:::o;22302:366::-;22444:3;22465:67;22529:2;22524:3;22465:67;:::i;:::-;22458:74;;22541:93;22630:3;22541:93;:::i;:::-;22659:2;22654:3;22650:12;22643:19;;22302:366;;;:::o;22674:419::-;22840:4;22878:2;22867:9;22863:18;22855:26;;22927:9;22921:4;22917:20;22913:1;22902:9;22898:17;22891:47;22955:131;23081:4;22955:131;:::i;:::-;22947:139;;22674:419;;;:::o;23099:223::-;23239:34;23235:1;23227:6;23223:14;23216:58;23308:6;23303:2;23295:6;23291:15;23284:31;23099:223;:::o;23328:366::-;23470:3;23491:67;23555:2;23550:3;23491:67;:::i;:::-;23484:74;;23567:93;23656:3;23567:93;:::i;:::-;23685:2;23680:3;23676:12;23669:19;;23328:366;;;:::o;23700:419::-;23866:4;23904:2;23893:9;23889:18;23881:26;;23953:9;23947:4;23943:20;23939:1;23928:9;23924:17;23917:47;23981:131;24107:4;23981:131;:::i;:::-;23973:139;;23700:419;;;:::o;24125:221::-;24265:34;24261:1;24253:6;24249:14;24242:58;24334:4;24329:2;24321:6;24317:15;24310:29;24125:221;:::o;24352:366::-;24494:3;24515:67;24579:2;24574:3;24515:67;:::i;:::-;24508:74;;24591:93;24680:3;24591:93;:::i;:::-;24709:2;24704:3;24700:12;24693:19;;24352:366;;;:::o;24724:419::-;24890:4;24928:2;24917:9;24913:18;24905:26;;24977:9;24971:4;24967:20;24963:1;24952:9;24948:17;24941:47;25005:131;25131:4;25005:131;:::i;:::-;24997:139;;24724:419;;;:::o;25149:224::-;25289:34;25285:1;25277:6;25273:14;25266:58;25358:7;25353:2;25345:6;25341:15;25334:32;25149:224;:::o;25379:366::-;25521:3;25542:67;25606:2;25601:3;25542:67;:::i;:::-;25535:74;;25618:93;25707:3;25618:93;:::i;:::-;25736:2;25731:3;25727:12;25720:19;;25379:366;;;:::o;25751:419::-;25917:4;25955:2;25944:9;25940:18;25932:26;;26004:9;25998:4;25994:20;25990:1;25979:9;25975:17;25968:47;26032:131;26158:4;26032:131;:::i;:::-;26024:139;;25751:419;;;:::o;26176:222::-;26316:34;26312:1;26304:6;26300:14;26293:58;26385:5;26380:2;26372:6;26368:15;26361:30;26176:222;:::o;26404:366::-;26546:3;26567:67;26631:2;26626:3;26567:67;:::i;:::-;26560:74;;26643:93;26732:3;26643:93;:::i;:::-;26761:2;26756:3;26752:12;26745:19;;26404:366;;;:::o;26776:419::-;26942:4;26980:2;26969:9;26965:18;26957:26;;27029:9;27023:4;27019:20;27015:1;27004:9;27000:17;26993:47;27057:131;27183:4;27057:131;:::i;:::-;27049:139;;26776:419;;;:::o;27201:172::-;27341:24;27337:1;27329:6;27325:14;27318:48;27201:172;:::o;27379:366::-;27521:3;27542:67;27606:2;27601:3;27542:67;:::i;:::-;27535:74;;27618:93;27707:3;27618:93;:::i;:::-;27736:2;27731:3;27727:12;27720:19;;27379:366;;;:::o;27751:419::-;27917:4;27955:2;27944:9;27940:18;27932:26;;28004:9;27998:4;27994:20;27990:1;27979:9;27975:17;27968:47;28032:131;28158:4;28032:131;:::i;:::-;28024:139;;27751:419;;;:::o;28176:297::-;28316:34;28312:1;28304:6;28300:14;28293:58;28385:34;28380:2;28372:6;28368:15;28361:59;28454:11;28449:2;28441:6;28437:15;28430:36;28176:297;:::o;28479:366::-;28621:3;28642:67;28706:2;28701:3;28642:67;:::i;:::-;28635:74;;28718:93;28807:3;28718:93;:::i;:::-;28836:2;28831:3;28827:12;28820:19;;28479:366;;;:::o;28851:419::-;29017:4;29055:2;29044:9;29040:18;29032:26;;29104:9;29098:4;29094:20;29090:1;29079:9;29075:17;29068:47;29132:131;29258:4;29132:131;:::i;:::-;29124:139;;28851:419;;;:::o;29276:240::-;29416:34;29412:1;29404:6;29400:14;29393:58;29485:23;29480:2;29472:6;29468:15;29461:48;29276:240;:::o;29522:366::-;29664:3;29685:67;29749:2;29744:3;29685:67;:::i;:::-;29678:74;;29761:93;29850:3;29761:93;:::i;:::-;29879:2;29874:3;29870:12;29863:19;;29522:366;;;:::o;29894:419::-;30060:4;30098:2;30087:9;30083:18;30075:26;;30147:9;30141:4;30137:20;30133:1;30122:9;30118:17;30111:47;30175:131;30301:4;30175:131;:::i;:::-;30167:139;;29894:419;;;:::o;30319:169::-;30459:21;30455:1;30447:6;30443:14;30436:45;30319:169;:::o;30494:366::-;30636:3;30657:67;30721:2;30716:3;30657:67;:::i;:::-;30650:74;;30733:93;30822:3;30733:93;:::i;:::-;30851:2;30846:3;30842:12;30835:19;;30494:366;;;:::o;30866:419::-;31032:4;31070:2;31059:9;31055:18;31047:26;;31119:9;31113:4;31109:20;31105:1;31094:9;31090:17;31083:47;31147:131;31273:4;31147:131;:::i;:::-;31139:139;;30866:419;;;:::o;31291:241::-;31431:34;31427:1;31419:6;31415:14;31408:58;31500:24;31495:2;31487:6;31483:15;31476:49;31291:241;:::o;31538:366::-;31680:3;31701:67;31765:2;31760:3;31701:67;:::i;:::-;31694:74;;31777:93;31866:3;31777:93;:::i;:::-;31895:2;31890:3;31886:12;31879:19;;31538:366;;;:::o;31910:419::-;32076:4;32114:2;32103:9;32099:18;32091:26;;32163:9;32157:4;32153:20;32149:1;32138:9;32134:17;32127:47;32191:131;32317:4;32191:131;:::i;:::-;32183:139;;31910:419;;;:::o;32335:191::-;32375:4;32395:20;32413:1;32395:20;:::i;:::-;32390:25;;32429:20;32447:1;32429:20;:::i;:::-;32424:25;;32468:1;32465;32462:8;32459:34;;;32473:18;;:::i;:::-;32459:34;32518:1;32515;32511:9;32503:17;;32335:191;;;;:::o;32532:442::-;32681:4;32719:2;32708:9;32704:18;32696:26;;32732:71;32800:1;32789:9;32785:17;32776:6;32732:71;:::i;:::-;32813:72;32881:2;32870:9;32866:18;32857:6;32813:72;:::i;:::-;32895;32963:2;32952:9;32948:18;32939:6;32895:72;:::i;:::-;32532:442;;;;;;:::o;32980:220::-;33120:34;33116:1;33108:6;33104:14;33097:58;33189:3;33184:2;33176:6;33172:15;33165:28;32980:220;:::o;33206:366::-;33348:3;33369:67;33433:2;33428:3;33369:67;:::i;:::-;33362:74;;33445:93;33534:3;33445:93;:::i;:::-;33563:2;33558:3;33554:12;33547:19;;33206:366;;;:::o;33578:419::-;33744:4;33782:2;33771:9;33767:18;33759:26;;33831:9;33825:4;33821:20;33817:1;33806:9;33802:17;33795:47;33859:131;33985:4;33859:131;:::i;:::-;33851:139;;33578:419;;;:::o;34003:180::-;34051:77;34048:1;34041:88;34148:4;34145:1;34138:15;34172:4;34169:1;34162:15;34189:180;34237:77;34234:1;34227:88;34334:4;34331:1;34324:15;34358:4;34355:1;34348:15;34375:143;34432:5;34463:6;34457:13;34448:22;;34479:33;34506:5;34479:33;:::i;:::-;34375:143;;;;:::o;34524:351::-;34594:6;34643:2;34631:9;34622:7;34618:23;34614:32;34611:119;;;34649:79;;:::i;:::-;34611:119;34769:1;34794:64;34850:7;34841:6;34830:9;34826:22;34794:64;:::i;:::-;34784:74;;34740:128;34524:351;;;;:::o;34881:85::-;34926:7;34955:5;34944:16;;34881:85;;;:::o;34972:158::-;35030:9;35063:61;35081:42;35090:32;35116:5;35090:32;:::i;:::-;35081:42;:::i;:::-;35063:61;:::i;:::-;35050:74;;34972:158;;;:::o;35136:147::-;35231:45;35270:5;35231:45;:::i;:::-;35226:3;35219:58;35136:147;;:::o;35289:114::-;35356:6;35390:5;35384:12;35374:22;;35289:114;;;:::o;35409:184::-;35508:11;35542:6;35537:3;35530:19;35582:4;35577:3;35573:14;35558:29;;35409:184;;;;:::o;35599:132::-;35666:4;35689:3;35681:11;;35719:4;35714:3;35710:14;35702:22;;35599:132;;;:::o;35737:108::-;35814:24;35832:5;35814:24;:::i;:::-;35809:3;35802:37;35737:108;;:::o;35851:179::-;35920:10;35941:46;35983:3;35975:6;35941:46;:::i;:::-;36019:4;36014:3;36010:14;35996:28;;35851:179;;;;:::o;36036:113::-;36106:4;36138;36133:3;36129:14;36121:22;;36036:113;;;:::o;36185:732::-;36304:3;36333:54;36381:5;36333:54;:::i;:::-;36403:86;36482:6;36477:3;36403:86;:::i;:::-;36396:93;;36513:56;36563:5;36513:56;:::i;:::-;36592:7;36623:1;36608:284;36633:6;36630:1;36627:13;36608:284;;;36709:6;36703:13;36736:63;36795:3;36780:13;36736:63;:::i;:::-;36729:70;;36822:60;36875:6;36822:60;:::i;:::-;36812:70;;36668:224;36655:1;36652;36648:9;36643:14;;36608:284;;;36612:14;36908:3;36901:10;;36309:608;;;36185:732;;;;:::o;36923:831::-;37186:4;37224:3;37213:9;37209:19;37201:27;;37238:71;37306:1;37295:9;37291:17;37282:6;37238:71;:::i;:::-;37319:80;37395:2;37384:9;37380:18;37371:6;37319:80;:::i;:::-;37446:9;37440:4;37436:20;37431:2;37420:9;37416:18;37409:48;37474:108;37577:4;37568:6;37474:108;:::i;:::-;37466:116;;37592:72;37660:2;37649:9;37645:18;37636:6;37592:72;:::i;:::-;37674:73;37742:3;37731:9;37727:19;37718:6;37674:73;:::i;:::-;36923:831;;;;;;;;:::o;37760:807::-;38009:4;38047:3;38036:9;38032:19;38024:27;;38061:71;38129:1;38118:9;38114:17;38105:6;38061:71;:::i;:::-;38142:72;38210:2;38199:9;38195:18;38186:6;38142:72;:::i;:::-;38224:80;38300:2;38289:9;38285:18;38276:6;38224:80;:::i;:::-;38314;38390:2;38379:9;38375:18;38366:6;38314:80;:::i;:::-;38404:73;38472:3;38461:9;38457:19;38448:6;38404:73;:::i;:::-;38487;38555:3;38544:9;38540:19;38531:6;38487:73;:::i;:::-;37760:807;;;;;;;;;:::o;38573:143::-;38630:5;38661:6;38655:13;38646:22;;38677:33;38704:5;38677:33;:::i;:::-;38573:143;;;;:::o;38722:663::-;38810:6;38818;38826;38875:2;38863:9;38854:7;38850:23;38846:32;38843:119;;;38881:79;;:::i;:::-;38843:119;39001:1;39026:64;39082:7;39073:6;39062:9;39058:22;39026:64;:::i;:::-;39016:74;;38972:128;39139:2;39165:64;39221:7;39212:6;39201:9;39197:22;39165:64;:::i;:::-;39155:74;;39110:129;39278:2;39304:64;39360:7;39351:6;39340:9;39336:22;39304:64;:::i;:::-;39294:74;;39249:129;38722:663;;;;;:::o

Swarm Source

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