ETH Price: $3,420.69 (-1.60%)
Gas: 7 Gwei

Token

Dawkins Memes (GENES)
 

Overview

Max Total Supply

1,000,000,000 GENES

Holders

86

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
118,352,523.915120598 GENES

Value
$0.00
0x43b04b83cd86faced44c0ab235397feba37d24eb
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:
Dawkins

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

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

    function allPairs(uint256) external view returns (address pair);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface IERC20 {
    /**
     * @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
    );

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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

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

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

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

abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @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 9;
    }

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /** @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");

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += 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");

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= 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 Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);
    }
}

contract Dawkins is ERC20, Ownable {
    string private _name = "Dawkins Memes";
    string private _symbol = "GENES";
    uint8 private _decimals = 9;
    uint256 private _supply = 1000000000;
    uint256 public taxForLiquidity = 47; //sniper protection
    uint256 public taxForMarketing = 47; //sniper protection
    uint256 public maxTxAmount = 10000001 * 10**_decimals;
    uint256 public maxWalletAmount = 10000001 * 10**_decimals;
    address public marketingWallet = 0x768B34663eb4c6c90685FA27Fe041C6472fbC598;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _marketingReserves = 0;
    uint256 public numTokensSellToAddToLiquidity = 1000000 * 10**_decimals;
    uint256 public numTokensSellToAddToETH = 500000 * 10**_decimals;
    bool inSwapAndLiquify;
	address public uniswapV2Pair;
	mapping(address => bool) public _isExcludedFromFee;

    IUniswapV2Router02 public immutable uniswapV2Router;

	event ExcludedFromFeeUpdated(address _address, bool _status);
    event PairUpdated(address _address);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10**_decimals));

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //eth mainnet
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[marketingWallet] = true;
    }

    function updatePair(address _pair) external onlyOwner {
        require(_pair != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(_pair != address(0), "LP Pair cannot be the Dead wallet, or 0!");
        uniswapV2Pair = _pair;
        emit PairUpdated(_pair);
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This 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:
     *
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");

        if ((from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify) {
            if (from != uniswapV2Pair) {
				uint256 contractBalance = balanceOf(address(this));
				uint256 contractLiquidityBalance = 0;
				
				if(contractBalance > _marketingReserves){
					contractLiquidityBalance = balanceOf(address(this)) - _marketingReserves;
				}
                
                if (contractLiquidityBalance >= numTokensSellToAddToLiquidity) {
                    _swapAndLiquify(numTokensSellToAddToLiquidity);
                }
                if ((_marketingReserves) >= numTokensSellToAddToETH) {
                    _swapTokensForEth(numTokensSellToAddToETH);
                    _marketingReserves -= numTokensSellToAddToETH;
                    bool sent = payable(marketingWallet).send(address(this).balance);
                    require(sent, "Failed to send ETH");
                }
            }

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
                transferAmount = amount;
            } 
            else {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
                if(from == uniswapV2Pair){
                    require((amount + balanceOf(to)) <= maxWalletAmount, "ERC20: balance amount exceeded max wallet amount limit");
                }

                uint256 marketingShare = (taxForMarketing > 0) ? ((amount * taxForMarketing) / 100) : 0;
                uint256 liquidityShare = (taxForLiquidity > 0) ? ((amount * taxForLiquidity) / 100) : 0;
                transferAmount = amount - (marketingShare + liquidityShare);
                _marketingReserves += marketingShare;

                super._transfer(from, address(this), (marketingShare + liquidityShare));
            }
            super._transfer(from, to, transferAmount);
        } 
        else {
            super._transfer(from, to, amount);
        }
    }

    function excludeFromFee(address _address, bool _status) external onlyOwner {
        _isExcludedFromFee[_address] = _status;
        emit ExcludedFromFeeUpdated(_address, _status);
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount)
        private
        lockTheSwap
    {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            marketingWallet,
            block.timestamp
        );
    }

    function changeMarketingWallet(address newWallet)
        public
        onlyOwner
        returns (bool)
    {
        require(newWallet != DEAD, "marketing wallet cannot be the Dead wallet, or 0!");
        require(newWallet != address(0), "marketing wallet cannot be the Dead wallet, or 0!");
        marketingWallet = newWallet;
		_isExcludedFromFee[marketingWallet] = true;
        return true;
    }

    function changeTaxForLiquidityAndMarketing(uint256 _taxForLiquidity, uint256 _taxForMarketing)
        public
        onlyOwner
        returns (bool)
    {
        require((_taxForLiquidity+_taxForMarketing) <= 10, "ERC20: total tax must not be greater than 10%");
        taxForLiquidity = _taxForLiquidity;
        taxForMarketing = _taxForMarketing;

        return true;
    }

    function changeSwapThresholds(uint256 _numTokensSellToAddToLiquidity, uint256 _numTokensSellToAddToETH)
        public
        onlyOwner
        returns (bool)
    {
        require(_numTokensSellToAddToLiquidity < _supply / 98, "Cannot liquidate more than 2% of the supply at once!");
        require(_numTokensSellToAddToETH < _supply / 98, "Cannot liquidate more than 2% of the supply at once!");
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity * 10**_decimals;
        numTokensSellToAddToETH = _numTokensSellToAddToETH * 10**_decimals;

        return true;
    }

    function changeMaxTxAmount(uint256 _maxTxAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxWalletAmount = _maxWalletAmount;

        return true;
    }

    receive() external payable {}
}

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":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludedFromFeeUpdated","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":false,"internalType":"address","name":"_address","type":"address"}],"name":"PairUpdated","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":"tokensIntoLiqudity","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"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"_numTokensSellToAddToETH","type":"uint256"}],"name":"changeSwapThresholds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"}],"name":"changeTaxForLiquidityAndMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","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":"numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600d81526020017f4461776b696e73204d656d657300000000000000000000000000000000000000815250600690816200004a919062000b8b565b506040518060400160405280600581526020017f47454e45530000000000000000000000000000000000000000000000000000008152506007908162000091919062000b8b565b506009600860006101000a81548160ff021916908360ff160217905550633b9aca00600955602f600a55602f600b55600860009054906101000a900460ff16600a620000de919062000e02565b62989681620000ee919062000e53565b600c55600860009054906101000a900460ff16600a6200010f919062000e02565b629896816200011f919062000e53565b600d5573768b34663eb4c6c90685fa27fe041c6472fbc598600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601055600860009054906101000a900460ff16600a620001dd919062000e02565b620f4240620001ed919062000e53565b601155600860009054906101000a900460ff16600a6200020e919062000e02565b6207a1206200021e919062000e53565b6012553480156200022e57600080fd5b50600680546200023e906200097a565b80601f01602080910402602001604051908101604052809291908181526020018280546200026c906200097a565b8015620002bd5780601f106200029157610100808354040283529160200191620002bd565b820191906000526020600020905b8154815290600101906020018083116200029f57829003601f168201915b505050505060078054620002d1906200097a565b80601f0160208091040260200160405190810160405280929190818152602001828054620002ff906200097a565b8015620003505780601f10620003245761010080835404028352916020019162000350565b820191906000526020600020905b8154815290600101906020018083116200033257829003601f168201915b5050505050816003908162000366919062000b8b565b50806004908162000378919062000b8b565b5050506200039b6200038f620006fe60201b60201c565b6200070660201b60201c565b620003d933600860009054906101000a900460ff16600a620003be919062000e02565b600954620003cd919062000e53565b620007cc60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000464919062000f1e565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f2919062000f1e565b6040518363ffffffff1660e01b81526004016200051192919062000f61565b6020604051808303816000875af115801562000531573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000557919062000f1e565b601360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016014600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160146000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200107a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200083e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008359062000fef565b60405180910390fd5b806002600082825462000852919062001011565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200090591906200105d565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099357607f821691505b602082108103620009a957620009a86200094b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009d4565b62000a1f8683620009d4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a6c62000a6662000a608462000a37565b62000a41565b62000a37565b9050919050565b6000819050919050565b62000a888362000a4b565b62000aa062000a978262000a73565b848454620009e1565b825550505050565b600090565b62000ab762000aa8565b62000ac481848462000a7d565b505050565b5b8181101562000aec5762000ae060008262000aad565b60018101905062000aca565b5050565b601f82111562000b3b5762000b0581620009af565b62000b1084620009c4565b8101602085101562000b20578190505b62000b3862000b2f85620009c4565b83018262000ac9565b50505b505050565b600082821c905092915050565b600062000b606000198460080262000b40565b1980831691505092915050565b600062000b7b838362000b4d565b9150826002028217905092915050565b62000b968262000911565b67ffffffffffffffff81111562000bb25762000bb16200091c565b5b62000bbe82546200097a565b62000bcb82828562000af0565b600060209050601f83116001811462000c03576000841562000bee578287015190505b62000bfa858262000b6d565b86555062000c6a565b601f19841662000c1386620009af565b60005b8281101562000c3d5784890151825560018201915060208501945060208101905062000c16565b8683101562000c5d578489015162000c59601f89168262000b4d565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d005780860481111562000cd85762000cd762000c72565b5b600185161562000ce85780820291505b808102905062000cf88562000ca1565b945062000cb8565b94509492505050565b60008262000d1b576001905062000dee565b8162000d2b576000905062000dee565b816001811462000d44576002811462000d4f5762000d85565b600191505062000dee565b60ff84111562000d645762000d6362000c72565b5b8360020a91508482111562000d7e5762000d7d62000c72565b5b5062000dee565b5060208310610133831016604e8410600b841016171562000dbf5782820a90508381111562000db95762000db862000c72565b5b62000dee565b62000dce848484600162000cae565b9250905081840481111562000de85762000de762000c72565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e0f8262000a37565b915062000e1c8362000df5565b925062000e4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d09565b905092915050565b600062000e608262000a37565b915062000e6d8362000a37565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ea95762000ea862000c72565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ee68262000eb9565b9050919050565b62000ef88162000ed9565b811462000f0457600080fd5b50565b60008151905062000f188162000eed565b92915050565b60006020828403121562000f375762000f3662000eb4565b5b600062000f478482850162000f07565b91505092915050565b62000f5b8162000ed9565b82525050565b600060408201905062000f78600083018562000f50565b62000f87602083018462000f50565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fd7601f8362000f8e565b915062000fe48262000f9f565b602082019050919050565b600060208201905081810360008301526200100a8162000fc8565b9050919050565b60006200101e8262000a37565b91506200102b8362000a37565b925082820190508082111562001046576200104562000c72565b5b92915050565b620010578162000a37565b82525050565b60006020820190506200107460008301846200104c565b92915050565b608051613681620010b96000396000818161093601528181611da801528181611e8901528181611eb0015281816121e2015261220901526136816000f3fe6080604052600436106101f25760003560e01c8063768dc7101161010d578063ad16a0cf116100a0578063d12a76881161006f578063d12a768814610774578063dd62ed3e1461079f578063df8408fe146107dc578063f2fde38b14610805578063f345bd851461082e576101f9565b8063ad16a0cf146106a4578063af8af690146106cf578063bb85c6d11461070c578063c0fdea5714610749576101f9565b806395d89b41116100dc57806395d89b41146105d4578063a457c2d7146105ff578063a9059cbb1461063c578063aa4bde2814610679576101f9565b8063768dc7101461050457806381bfdcca146105415780638c0b5e221461057e5780638da5cb5b146105a9576101f9565b8063313ce56711610185578063677daa5711610154578063677daa571461044857806370a0823114610485578063715018a6146104c257806375f0a874146104d9576101f9565b8063313ce5671461038a57806339509351146103b557806349bd5a5e146103f2578063527ffabd1461041d576101f9565b806318160ddd116101c157806318160ddd146102bc5780631b56bbf9146102e757806323b872dd1461031057806330b63d801461034d576101f9565b806303fd2a45146101fe57806306fdde0314610229578063095ea7b3146102545780631694505e14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610213610859565b6040516102209190612334565b60405180910390f35b34801561023557600080fd5b5061023e61087f565b60405161024b91906123df565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612468565b610911565b60405161028891906124c3565b60405180910390f35b34801561029d57600080fd5b506102a6610934565b6040516102b3919061253d565b60405180910390f35b3480156102c857600080fd5b506102d1610958565b6040516102de9190612567565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190612582565b610962565b005b34801561031c57600080fd5b50610337600480360381019061033291906125af565b610ae4565b60405161034491906124c3565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190612602565b610b13565b60405161038191906124c3565b60405180910390f35b34801561039657600080fd5b5061039f610c21565b6040516103ac919061265e565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190612468565b610c2a565b6040516103e991906124c3565b60405180910390f35b3480156103fe57600080fd5b50610407610c61565b6040516104149190612334565b60405180910390f35b34801561042957600080fd5b50610432610c87565b60405161043f9190612567565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190612679565b610c8d565b60405161047c91906124c3565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190612582565b610ca7565b6040516104b99190612567565b60405180910390f35b3480156104ce57600080fd5b506104d7610cef565b005b3480156104e557600080fd5b506104ee610d03565b6040516104fb9190612334565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190612582565b610d29565b60405161053891906124c3565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612679565b610d49565b60405161057591906124c3565b60405180910390f35b34801561058a57600080fd5b50610593610d63565b6040516105a09190612567565b60405180910390f35b3480156105b557600080fd5b506105be610d69565b6040516105cb9190612334565b60405180910390f35b3480156105e057600080fd5b506105e9610d93565b6040516105f691906123df565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190612468565b610e25565b60405161063391906124c3565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190612468565b610e9c565b60405161067091906124c3565b60405180910390f35b34801561068557600080fd5b5061068e610ebf565b60405161069b9190612567565b60405180910390f35b3480156106b057600080fd5b506106b9610ec5565b6040516106c69190612567565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190612602565b610ecb565b60405161070391906124c3565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190612582565b610f3c565b60405161074091906124c3565b60405180910390f35b34801561075557600080fd5b5061075e611109565b60405161076b9190612567565b60405180910390f35b34801561078057600080fd5b5061078961110f565b6040516107969190612567565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c191906126a6565b611115565b6040516107d39190612567565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe9190612712565b61119c565b005b34801561081157600080fd5b5061082c60048036038101906108279190612582565b611238565b005b34801561083a57600080fd5b506108436112bb565b6040516108509190612567565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461088e90612781565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90612781565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b60008061091c6112c1565b90506109298185856112c9565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b61096a611492565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190612824565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090612824565b60405180910390fd5b80601360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f81604051610ad99190612334565b60405180910390a150565b600080610aef6112c1565b9050610afc858285611510565b610b0785858561159c565b60019150509392505050565b6000610b1d611492565b6062600954610b2c91906128a2565b8310610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490612945565b60405180910390fd5b6062600954610b7c91906128a2565b8210610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb490612945565b60405180910390fd5b600860009054906101000a900460ff16600a610bd99190612a98565b83610be49190612ae3565b601181905550600860009054906101000a900460ff16600a610c069190612a98565b82610c119190612ae3565b6012819055506001905092915050565b60006009905090565b600080610c356112c1565b9050610c56818585610c478589611115565b610c519190612b3d565b6112c9565b600191505092915050565b601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000610c97611492565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf7611492565b610d016000611b67565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b6000610d53611492565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610da290612781565b80601f0160208091040260200160405190810160405280929190818152602001828054610dce90612781565b8015610e1b5780601f10610df057610100808354040283529160200191610e1b565b820191906000526020600020905b815481529060010190602001808311610dfe57829003601f168201915b5050505050905090565b600080610e306112c1565b90506000610e3e8286611115565b905083811015610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90612be3565b60405180910390fd5b610e9082868684036112c9565b60019250505092915050565b600080610ea76112c1565b9050610eb481858561159c565b600191505092915050565b600d5481565b60125481565b6000610ed5611492565b600a8284610ee39190612b3d565b1115610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90612c75565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b6000610f46611492565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90612d07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90612d07565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60105481565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111a4611492565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff2828260405161122c929190612d27565b60405180910390a15050565b611240611492565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690612dc2565b60405180910390fd5b6112b881611b67565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90612e54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612ee6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114859190612567565b60405180910390a3505050565b61149a6112c1565b73ffffffffffffffffffffffffffffffffffffffff166114b8610d69565b73ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590612f52565b60405180910390fd5b565b600061151c8484611115565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115965781811015611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90612fbe565b60405180910390fd5b61159584848484036112c9565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613050565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361167a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611671906130e2565b60405180910390fd5b8061168484610ca7565b10156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90613174565b60405180910390fd5b601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061176e5750601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156117875750601360009054906101000a900460ff16155b15611b5657601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118f95760006117ec30610ca7565b905060006010548211156118135760105461180630610ca7565b6118109190613194565b90505b601154811061182857611827601154611c2d565b5b601254601054106118f65761183e601254611cee565b601254601060008282546118529190613194565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613214565b60405180910390fd5b505b50505b6000601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061199c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156119a957819050611b45565b600c548211156119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e5906132a6565b60405180910390fd5b601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a9c57600d54611a4f84610ca7565b83611a5a9190612b3d565b1115611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290613338565b60405180910390fd5b5b600080600b5411611aae576000611ac9565b6064600b5484611abe9190612ae3565b611ac891906128a2565b5b9050600080600a5411611add576000611af8565b6064600a5485611aed9190612ae3565b611af791906128a2565b5b90508082611b069190612b3d565b84611b119190613194565b92508160106000828254611b259190612b3d565b92505081905550611b4286308385611b3d9190612b3d565b611f61565b50505b611b50848483611f61565b50611b62565b611b61838383611f61565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360006101000a81548160ff0219169083151502179055506000600282611c5791906128a2565b905060008183611c679190613194565b90506000479050611c7783611cee565b60008147611c859190613194565b9050611c9183826121c1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611cc493929190613358565b60405180910390a1505050506000601360006101000a81548160ff02191690831515021790555050565b6001601360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611d2657611d2561338f565b5b604051908082528060200260200182016040528015611d545781602001602082028036833780820191505090505b5090503081600081518110611d6c57611d6b6133be565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e359190613402565b81600181518110611e4957611e486133be565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611eae307f0000000000000000000000000000000000000000000000000000000000000000846112c9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f10959493929190613528565b600060405180830381600087803b158015611f2a57600080fd5b505af1158015611f3e573d6000803e3d6000fd5b50505050506000601360006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790613050565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361203f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612036906130e2565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90613174565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121b39190612567565b60405180910390a350505050565b6001601360006101000a81548160ff021916908315150217905550612207307f0000000000000000000000000000000000000000000000000000000000000000846112c9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161228e96959493929190613582565b60606040518083038185885af11580156122ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122d191906135f8565b5050506000601360006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061231e826122f3565b9050919050565b61232e81612313565b82525050565b60006020820190506123496000830184612325565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561238957808201518184015260208101905061236e565b60008484015250505050565b6000601f19601f8301169050919050565b60006123b18261234f565b6123bb818561235a565b93506123cb81856020860161236b565b6123d481612395565b840191505092915050565b600060208201905081810360008301526123f981846123a6565b905092915050565b600080fd5b61240f81612313565b811461241a57600080fd5b50565b60008135905061242c81612406565b92915050565b6000819050919050565b61244581612432565b811461245057600080fd5b50565b6000813590506124628161243c565b92915050565b6000806040838503121561247f5761247e612401565b5b600061248d8582860161241d565b925050602061249e85828601612453565b9150509250929050565b60008115159050919050565b6124bd816124a8565b82525050565b60006020820190506124d860008301846124b4565b92915050565b6000819050919050565b60006125036124fe6124f9846122f3565b6124de565b6122f3565b9050919050565b6000612515826124e8565b9050919050565b60006125278261250a565b9050919050565b6125378161251c565b82525050565b6000602082019050612552600083018461252e565b92915050565b61256181612432565b82525050565b600060208201905061257c6000830184612558565b92915050565b60006020828403121561259857612597612401565b5b60006125a68482850161241d565b91505092915050565b6000806000606084860312156125c8576125c7612401565b5b60006125d68682870161241d565b93505060206125e78682870161241d565b92505060406125f886828701612453565b9150509250925092565b6000806040838503121561261957612618612401565b5b600061262785828601612453565b925050602061263885828601612453565b9150509250929050565b600060ff82169050919050565b61265881612642565b82525050565b6000602082019050612673600083018461264f565b92915050565b60006020828403121561268f5761268e612401565b5b600061269d84828501612453565b91505092915050565b600080604083850312156126bd576126bc612401565b5b60006126cb8582860161241d565b92505060206126dc8582860161241d565b9150509250929050565b6126ef816124a8565b81146126fa57600080fd5b50565b60008135905061270c816126e6565b92915050565b6000806040838503121561272957612728612401565b5b60006127378582860161241d565b9250506020612748858286016126fd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061279957607f821691505b6020821081036127ac576127ab612752565b5b50919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b600061280e60288361235a565b9150612819826127b2565b604082019050919050565b6000602082019050818103600083015261283d81612801565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128ad82612432565b91506128b883612432565b9250826128c8576128c7612844565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b600061292f60348361235a565b915061293a826128d3565b604082019050919050565b6000602082019050818103600083015261295e81612922565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156129bc5780860481111561299857612997612873565b5b60018516156129a75780820291505b80810290506129b585612965565b945061297c565b94509492505050565b6000826129d55760019050612a91565b816129e35760009050612a91565b81600181146129f95760028114612a0357612a32565b6001915050612a91565b60ff841115612a1557612a14612873565b5b8360020a915084821115612a2c57612a2b612873565b5b50612a91565b5060208310610133831016604e8410600b8410161715612a675782820a905083811115612a6257612a61612873565b5b612a91565b612a748484846001612972565b92509050818404811115612a8b57612a8a612873565b5b81810290505b9392505050565b6000612aa382612432565b9150612aae83612642565b9250612adb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846129c5565b905092915050565b6000612aee82612432565b9150612af983612432565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b3257612b31612873565b5b828202905092915050565b6000612b4882612432565b9150612b5383612432565b9250828201905080821115612b6b57612b6a612873565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612bcd60258361235a565b9150612bd882612b71565b604082019050919050565b60006020820190508181036000830152612bfc81612bc0565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000612c5f602d8361235a565b9150612c6a82612c03565b604082019050919050565b60006020820190508181036000830152612c8e81612c52565b9050919050565b7f6d61726b6574696e672077616c6c65742063616e6e6f7420626520746865204460008201527f6561642077616c6c65742c206f72203021000000000000000000000000000000602082015250565b6000612cf160318361235a565b9150612cfc82612c95565b604082019050919050565b60006020820190508181036000830152612d2081612ce4565b9050919050565b6000604082019050612d3c6000830185612325565b612d4960208301846124b4565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612dac60268361235a565b9150612db782612d50565b604082019050919050565b60006020820190508181036000830152612ddb81612d9f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612e3e60248361235a565b9150612e4982612de2565b604082019050919050565b60006020820190508181036000830152612e6d81612e31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ed060228361235a565b9150612edb82612e74565b604082019050919050565b60006020820190508181036000830152612eff81612ec3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f3c60208361235a565b9150612f4782612f06565b602082019050919050565b60006020820190508181036000830152612f6b81612f2f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612fa8601d8361235a565b9150612fb382612f72565b602082019050919050565b60006020820190508181036000830152612fd781612f9b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061303a60258361235a565b915061304582612fde565b604082019050919050565b600060208201905081810360008301526130698161302d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006130cc60238361235a565b91506130d782613070565b604082019050919050565b600060208201905081810360008301526130fb816130bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061315e60268361235a565b915061316982613102565b604082019050919050565b6000602082019050818103600083015261318d81613151565b9050919050565b600061319f82612432565b91506131aa83612432565b92508282039050818111156131c2576131c1612873565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006131fe60128361235a565b9150613209826131c8565b602082019050919050565b6000602082019050818103600083015261322d816131f1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061329060398361235a565b915061329b82613234565b604082019050919050565b600060208201905081810360008301526132bf81613283565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b600061332260368361235a565b915061332d826132c6565b604082019050919050565b6000602082019050818103600083015261335181613315565b9050919050565b600060608201905061336d6000830186612558565b61337a6020830185612558565b6133876040830184612558565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506133fc81612406565b92915050565b60006020828403121561341857613417612401565b5b6000613426848285016133ed565b91505092915050565b6000819050919050565b600061345461344f61344a8461342f565b6124de565b612432565b9050919050565b61346481613439565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61349f81612313565b82525050565b60006134b18383613496565b60208301905092915050565b6000602082019050919050565b60006134d58261346a565b6134df8185613475565b93506134ea83613486565b8060005b8381101561351b57815161350288826134a5565b975061350d836134bd565b9250506001810190506134ee565b5085935050505092915050565b600060a08201905061353d6000830188612558565b61354a602083018761345b565b818103604083015261355c81866134ca565b905061356b6060830185612325565b6135786080830184612558565b9695505050505050565b600060c0820190506135976000830189612325565b6135a46020830188612558565b6135b1604083018761345b565b6135be606083018661345b565b6135cb6080830185612325565b6135d860a0830184612558565b979650505050505050565b6000815190506135f28161243c565b92915050565b60008060006060848603121561361157613610612401565b5b600061361f868287016135e3565b9350506020613630868287016135e3565b9250506040613641868287016135e3565b915050925092509256fea2646970667358221220a6e75c1de119e2b3abc294adf44f9325b0d74f1524e4b3a015036bdcb064c17564736f6c63430008100033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c8063768dc7101161010d578063ad16a0cf116100a0578063d12a76881161006f578063d12a768814610774578063dd62ed3e1461079f578063df8408fe146107dc578063f2fde38b14610805578063f345bd851461082e576101f9565b8063ad16a0cf146106a4578063af8af690146106cf578063bb85c6d11461070c578063c0fdea5714610749576101f9565b806395d89b41116100dc57806395d89b41146105d4578063a457c2d7146105ff578063a9059cbb1461063c578063aa4bde2814610679576101f9565b8063768dc7101461050457806381bfdcca146105415780638c0b5e221461057e5780638da5cb5b146105a9576101f9565b8063313ce56711610185578063677daa5711610154578063677daa571461044857806370a0823114610485578063715018a6146104c257806375f0a874146104d9576101f9565b8063313ce5671461038a57806339509351146103b557806349bd5a5e146103f2578063527ffabd1461041d576101f9565b806318160ddd116101c157806318160ddd146102bc5780631b56bbf9146102e757806323b872dd1461031057806330b63d801461034d576101f9565b806303fd2a45146101fe57806306fdde0314610229578063095ea7b3146102545780631694505e14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b50610213610859565b6040516102209190612334565b60405180910390f35b34801561023557600080fd5b5061023e61087f565b60405161024b91906123df565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190612468565b610911565b60405161028891906124c3565b60405180910390f35b34801561029d57600080fd5b506102a6610934565b6040516102b3919061253d565b60405180910390f35b3480156102c857600080fd5b506102d1610958565b6040516102de9190612567565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190612582565b610962565b005b34801561031c57600080fd5b50610337600480360381019061033291906125af565b610ae4565b60405161034491906124c3565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190612602565b610b13565b60405161038191906124c3565b60405180910390f35b34801561039657600080fd5b5061039f610c21565b6040516103ac919061265e565b60405180910390f35b3480156103c157600080fd5b506103dc60048036038101906103d79190612468565b610c2a565b6040516103e991906124c3565b60405180910390f35b3480156103fe57600080fd5b50610407610c61565b6040516104149190612334565b60405180910390f35b34801561042957600080fd5b50610432610c87565b60405161043f9190612567565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190612679565b610c8d565b60405161047c91906124c3565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190612582565b610ca7565b6040516104b99190612567565b60405180910390f35b3480156104ce57600080fd5b506104d7610cef565b005b3480156104e557600080fd5b506104ee610d03565b6040516104fb9190612334565b60405180910390f35b34801561051057600080fd5b5061052b60048036038101906105269190612582565b610d29565b60405161053891906124c3565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612679565b610d49565b60405161057591906124c3565b60405180910390f35b34801561058a57600080fd5b50610593610d63565b6040516105a09190612567565b60405180910390f35b3480156105b557600080fd5b506105be610d69565b6040516105cb9190612334565b60405180910390f35b3480156105e057600080fd5b506105e9610d93565b6040516105f691906123df565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190612468565b610e25565b60405161063391906124c3565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190612468565b610e9c565b60405161067091906124c3565b60405180910390f35b34801561068557600080fd5b5061068e610ebf565b60405161069b9190612567565b60405180910390f35b3480156106b057600080fd5b506106b9610ec5565b6040516106c69190612567565b60405180910390f35b3480156106db57600080fd5b506106f660048036038101906106f19190612602565b610ecb565b60405161070391906124c3565b60405180910390f35b34801561071857600080fd5b50610733600480360381019061072e9190612582565b610f3c565b60405161074091906124c3565b60405180910390f35b34801561075557600080fd5b5061075e611109565b60405161076b9190612567565b60405180910390f35b34801561078057600080fd5b5061078961110f565b6040516107969190612567565b60405180910390f35b3480156107ab57600080fd5b506107c660048036038101906107c191906126a6565b611115565b6040516107d39190612567565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe9190612712565b61119c565b005b34801561081157600080fd5b5061082c60048036038101906108279190612582565b611238565b005b34801561083a57600080fd5b506108436112bb565b6040516108509190612567565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606003805461088e90612781565b80601f01602080910402602001604051908101604052809291908181526020018280546108ba90612781565b80156109075780601f106108dc57610100808354040283529160200191610907565b820191906000526020600020905b8154815290600101906020018083116108ea57829003601f168201915b5050505050905090565b60008061091c6112c1565b90506109298185856112c9565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b61096a611492565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190612824565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6090612824565b60405180910390fd5b80601360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f81604051610ad99190612334565b60405180910390a150565b600080610aef6112c1565b9050610afc858285611510565b610b0785858561159c565b60019150509392505050565b6000610b1d611492565b6062600954610b2c91906128a2565b8310610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6490612945565b60405180910390fd5b6062600954610b7c91906128a2565b8210610bbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb490612945565b60405180910390fd5b600860009054906101000a900460ff16600a610bd99190612a98565b83610be49190612ae3565b601181905550600860009054906101000a900460ff16600a610c069190612a98565b82610c119190612ae3565b6012819055506001905092915050565b60006009905090565b600080610c356112c1565b9050610c56818585610c478589611115565b610c519190612b3d565b6112c9565b600191505092915050565b601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000610c97611492565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf7611492565b610d016000611b67565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b6000610d53611492565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610da290612781565b80601f0160208091040260200160405190810160405280929190818152602001828054610dce90612781565b8015610e1b5780601f10610df057610100808354040283529160200191610e1b565b820191906000526020600020905b815481529060010190602001808311610dfe57829003601f168201915b5050505050905090565b600080610e306112c1565b90506000610e3e8286611115565b905083811015610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90612be3565b60405180910390fd5b610e9082868684036112c9565b60019250505092915050565b600080610ea76112c1565b9050610eb481858561159c565b600191505092915050565b600d5481565b60125481565b6000610ed5611492565b600a8284610ee39190612b3d565b1115610f24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1b90612c75565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b6000610f46611492565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90612d07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103c90612d07565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160146000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060019050919050565b60105481565b60115481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111a4611492565b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff2828260405161122c929190612d27565b60405180910390a15050565b611240611492565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a690612dc2565b60405180910390fd5b6112b881611b67565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611338576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132f90612e54565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e90612ee6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114859190612567565b60405180910390a3505050565b61149a6112c1565b73ffffffffffffffffffffffffffffffffffffffff166114b8610d69565b73ffffffffffffffffffffffffffffffffffffffff161461150e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150590612f52565b60405180910390fd5b565b600061151c8484611115565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115965781811015611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90612fbe565b60405180910390fd5b61159584848484036112c9565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361160b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160290613050565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361167a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611671906130e2565b60405180910390fd5b8061168484610ca7565b10156116c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bc90613174565b60405180910390fd5b601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061176e5750601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156117875750601360009054906101000a900460ff16155b15611b5657601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118f95760006117ec30610ca7565b905060006010548211156118135760105461180630610ca7565b6118109190613194565b90505b601154811061182857611827601154611c2d565b5b601254601054106118f65761183e601254611cee565b601254601060008282546118529190613194565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb90613214565b60405180910390fd5b505b50505b6000601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061199c5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156119a957819050611b45565b600c548211156119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e5906132a6565b60405180910390fd5b601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611a9c57600d54611a4f84610ca7565b83611a5a9190612b3d565b1115611a9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9290613338565b60405180910390fd5b5b600080600b5411611aae576000611ac9565b6064600b5484611abe9190612ae3565b611ac891906128a2565b5b9050600080600a5411611add576000611af8565b6064600a5485611aed9190612ae3565b611af791906128a2565b5b90508082611b069190612b3d565b84611b119190613194565b92508160106000828254611b259190612b3d565b92505081905550611b4286308385611b3d9190612b3d565b611f61565b50505b611b50848483611f61565b50611b62565b611b61838383611f61565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360006101000a81548160ff0219169083151502179055506000600282611c5791906128a2565b905060008183611c679190613194565b90506000479050611c7783611cee565b60008147611c859190613194565b9050611c9183826121c1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611cc493929190613358565b60405180910390a1505050506000601360006101000a81548160ff02191690831515021790555050565b6001601360006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611d2657611d2561338f565b5b604051908082528060200260200182016040528015611d545781602001602082028036833780820191505090505b5090503081600081518110611d6c57611d6b6133be565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e359190613402565b81600181518110611e4957611e486133be565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611eae307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112c9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611f10959493929190613528565b600060405180830381600087803b158015611f2a57600080fd5b505af1158015611f3e573d6000803e3d6000fd5b50505050506000601360006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790613050565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361203f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612036906130e2565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90613174565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121b39190612567565b60405180910390a350505050565b6001601360006101000a81548160ff021916908315150217905550612207307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846112c9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161228e96959493929190613582565b60606040518083038185885af11580156122ac573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122d191906135f8565b5050506000601360006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061231e826122f3565b9050919050565b61232e81612313565b82525050565b60006020820190506123496000830184612325565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561238957808201518184015260208101905061236e565b60008484015250505050565b6000601f19601f8301169050919050565b60006123b18261234f565b6123bb818561235a565b93506123cb81856020860161236b565b6123d481612395565b840191505092915050565b600060208201905081810360008301526123f981846123a6565b905092915050565b600080fd5b61240f81612313565b811461241a57600080fd5b50565b60008135905061242c81612406565b92915050565b6000819050919050565b61244581612432565b811461245057600080fd5b50565b6000813590506124628161243c565b92915050565b6000806040838503121561247f5761247e612401565b5b600061248d8582860161241d565b925050602061249e85828601612453565b9150509250929050565b60008115159050919050565b6124bd816124a8565b82525050565b60006020820190506124d860008301846124b4565b92915050565b6000819050919050565b60006125036124fe6124f9846122f3565b6124de565b6122f3565b9050919050565b6000612515826124e8565b9050919050565b60006125278261250a565b9050919050565b6125378161251c565b82525050565b6000602082019050612552600083018461252e565b92915050565b61256181612432565b82525050565b600060208201905061257c6000830184612558565b92915050565b60006020828403121561259857612597612401565b5b60006125a68482850161241d565b91505092915050565b6000806000606084860312156125c8576125c7612401565b5b60006125d68682870161241d565b93505060206125e78682870161241d565b92505060406125f886828701612453565b9150509250925092565b6000806040838503121561261957612618612401565b5b600061262785828601612453565b925050602061263885828601612453565b9150509250929050565b600060ff82169050919050565b61265881612642565b82525050565b6000602082019050612673600083018461264f565b92915050565b60006020828403121561268f5761268e612401565b5b600061269d84828501612453565b91505092915050565b600080604083850312156126bd576126bc612401565b5b60006126cb8582860161241d565b92505060206126dc8582860161241d565b9150509250929050565b6126ef816124a8565b81146126fa57600080fd5b50565b60008135905061270c816126e6565b92915050565b6000806040838503121561272957612728612401565b5b60006127378582860161241d565b9250506020612748858286016126fd565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061279957607f821691505b6020821081036127ac576127ab612752565b5b50919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b600061280e60288361235a565b9150612819826127b2565b604082019050919050565b6000602082019050818103600083015261283d81612801565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006128ad82612432565b91506128b883612432565b9250826128c8576128c7612844565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b600061292f60348361235a565b915061293a826128d3565b604082019050919050565b6000602082019050818103600083015261295e81612922565b9050919050565b60008160011c9050919050565b6000808291508390505b60018511156129bc5780860481111561299857612997612873565b5b60018516156129a75780820291505b80810290506129b585612965565b945061297c565b94509492505050565b6000826129d55760019050612a91565b816129e35760009050612a91565b81600181146129f95760028114612a0357612a32565b6001915050612a91565b60ff841115612a1557612a14612873565b5b8360020a915084821115612a2c57612a2b612873565b5b50612a91565b5060208310610133831016604e8410600b8410161715612a675782820a905083811115612a6257612a61612873565b5b612a91565b612a748484846001612972565b92509050818404811115612a8b57612a8a612873565b5b81810290505b9392505050565b6000612aa382612432565b9150612aae83612642565b9250612adb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846129c5565b905092915050565b6000612aee82612432565b9150612af983612432565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612b3257612b31612873565b5b828202905092915050565b6000612b4882612432565b9150612b5383612432565b9250828201905080821115612b6b57612b6a612873565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612bcd60258361235a565b9150612bd882612b71565b604082019050919050565b60006020820190508181036000830152612bfc81612bc0565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000612c5f602d8361235a565b9150612c6a82612c03565b604082019050919050565b60006020820190508181036000830152612c8e81612c52565b9050919050565b7f6d61726b6574696e672077616c6c65742063616e6e6f7420626520746865204460008201527f6561642077616c6c65742c206f72203021000000000000000000000000000000602082015250565b6000612cf160318361235a565b9150612cfc82612c95565b604082019050919050565b60006020820190508181036000830152612d2081612ce4565b9050919050565b6000604082019050612d3c6000830185612325565b612d4960208301846124b4565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612dac60268361235a565b9150612db782612d50565b604082019050919050565b60006020820190508181036000830152612ddb81612d9f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612e3e60248361235a565b9150612e4982612de2565b604082019050919050565b60006020820190508181036000830152612e6d81612e31565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612ed060228361235a565b9150612edb82612e74565b604082019050919050565b60006020820190508181036000830152612eff81612ec3565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f3c60208361235a565b9150612f4782612f06565b602082019050919050565b60006020820190508181036000830152612f6b81612f2f565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612fa8601d8361235a565b9150612fb382612f72565b602082019050919050565b60006020820190508181036000830152612fd781612f9b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061303a60258361235a565b915061304582612fde565b604082019050919050565b600060208201905081810360008301526130698161302d565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006130cc60238361235a565b91506130d782613070565b604082019050919050565b600060208201905081810360008301526130fb816130bf565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061315e60268361235a565b915061316982613102565b604082019050919050565b6000602082019050818103600083015261318d81613151565b9050919050565b600061319f82612432565b91506131aa83612432565b92508282039050818111156131c2576131c1612873565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006131fe60128361235a565b9150613209826131c8565b602082019050919050565b6000602082019050818103600083015261322d816131f1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b600061329060398361235a565b915061329b82613234565b604082019050919050565b600060208201905081810360008301526132bf81613283565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b600061332260368361235a565b915061332d826132c6565b604082019050919050565b6000602082019050818103600083015261335181613315565b9050919050565b600060608201905061336d6000830186612558565b61337a6020830185612558565b6133876040830184612558565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506133fc81612406565b92915050565b60006020828403121561341857613417612401565b5b6000613426848285016133ed565b91505092915050565b6000819050919050565b600061345461344f61344a8461342f565b6124de565b612432565b9050919050565b61346481613439565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61349f81612313565b82525050565b60006134b18383613496565b60208301905092915050565b6000602082019050919050565b60006134d58261346a565b6134df8185613475565b93506134ea83613486565b8060005b8381101561351b57815161350288826134a5565b975061350d836134bd565b9250506001810190506134ee565b5085935050505092915050565b600060a08201905061353d6000830188612558565b61354a602083018761345b565b818103604083015261355c81866134ca565b905061356b6060830185612325565b6135786080830184612558565b9695505050505050565b600060c0820190506135976000830189612325565b6135a46020830188612558565b6135b1604083018761345b565b6135be606083018661345b565b6135cb6080830185612325565b6135d860a0830184612558565b979650505050505050565b6000815190506135f28161243c565b92915050565b60008060006060848603121561361157613610612401565b5b600061361f868287016135e3565b9350506020613630868287016135e3565b9250506040613641868287016135e3565b915050925092509256fea2646970667358221220a6e75c1de119e2b3abc294adf44f9325b0d74f1524e4b3a015036bdcb064c17564736f6c63430008100033

Deployed Bytecode Sourcemap

24540:8481:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25073:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15455:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17729:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25451:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16593:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26439:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18553:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31983:602;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16436:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20269:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25360:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24805:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32593:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15620:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13910:103;;;;;;;;;;;;;:::i;:::-;;24991:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25392:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32783:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24867:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13262:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15279:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19353:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17173:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24927:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25265:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31584:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31161:415;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25144:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25188:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16766:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29572:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14168:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24743:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25073:64;;;;;;;;;;;;;:::o;15455:102::-;15511:13;15544:5;15537:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15455:102;:::o;17729:244::-;17850:4;17872:13;17888:12;:10;:12::i;:::-;17872:28;;17911:32;17920:5;17927:7;17936:6;17911:8;:32::i;:::-;17961:4;17954:11;;;17729:244;;;;:::o;25451:51::-;;;:::o;16593:110::-;16656:7;16683:12;;16676:19;;16593:110;:::o;26439:288::-;13148:13;:11;:13::i;:::-;26521:4:::1;;;;;;;;;;;26512:13;;:5;:13;;::::0;26504:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26606:1;26589:19;;:5;:19;;::::0;26581:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26680:5;26664:13;;:21;;;;;;;;;;;;;;;;;;26701:18;26713:5;26701:18;;;;;;:::i;:::-;;;;;;;;26439:288:::0;:::o;18553:297::-;18686:4;18703:15;18721:12;:10;:12::i;:::-;18703:30;;18744:38;18760:4;18766:7;18775:6;18744:15;:38::i;:::-;18793:27;18803:4;18809:2;18813:6;18793:9;:27::i;:::-;18838:4;18831:11;;;18553:297;;;;;:::o;31983:602::-;32140:4;13148:13;:11;:13::i;:::-;32213:2:::1;32203:7;;:12;;;;:::i;:::-;32170:30;:45;32162:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32328:2;32318:7;;:12;;;;:::i;:::-;32291:24;:39;32283:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;32467:9;;;;;;;;;;;32463:2;:13;;;;:::i;:::-;32430:30;:46;;;;:::i;:::-;32398:29;:78;;;;32544:9;;;;;;;;;;;32540:2;:13;;;;:::i;:::-;32513:24;:40;;;;:::i;:::-;32487:23;:66;;;;32573:4;32566:11;;31983:602:::0;;;;:::o;16436:92::-;16494:5;16519:1;16512:8;;16436:92;:::o;20269:272::-;20386:4;20408:13;20424:12;:10;:12::i;:::-;20408:28;;20447:64;20456:5;20463:7;20500:10;20472:25;20482:5;20489:7;20472:9;:25::i;:::-;:38;;;;:::i;:::-;20447:8;:64::i;:::-;20529:4;20522:11;;;20269:272;;;;:::o;25360:28::-;;;;;;;;;;;;;:::o;24805:35::-;;;;:::o;32593:182::-;32695:4;13148:13;:11;:13::i;:::-;32731:12:::1;32717:11;:26;;;;32763:4;32756:11;;32593:182:::0;;;:::o;15620:177::-;15739:7;15771:9;:18;15781:7;15771:18;;;;;;;;;;;;;;;;15764:25;;15620:177;;;:::o;13910:103::-;13148:13;:11;:13::i;:::-;13975:30:::1;14002:1;13975:18;:30::i;:::-;13910:103::o:0;24991:75::-;;;;;;;;;;;;;:::o;25392:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;32783:198::-;32893:4;13148:13;:11;:13::i;:::-;32933:16:::1;32915:15;:34;;;;32969:4;32962:11;;32783:198:::0;;;:::o;24867:53::-;;;;:::o;13262:87::-;13308:7;13335:6;;;;;;;;;;;13328:13;;13262:87;:::o;15279:106::-;15337:13;15370:7;15363:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15279:106;:::o;19353:507::-;19475:4;19497:13;19513:12;:10;:12::i;:::-;19497:28;;19536:24;19563:25;19573:5;19580:7;19563:9;:25::i;:::-;19536:52;;19641:15;19621:16;:35;;19599:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;19757:60;19766:5;19773:7;19801:15;19782:16;:34;19757:8;:60::i;:::-;19848:4;19841:11;;;;19353:507;;;;:::o;17173:236::-;17290:4;17312:13;17328:12;:10;:12::i;:::-;17312:28;;17351;17361:5;17368:2;17372:6;17351:9;:28::i;:::-;17397:4;17390:11;;;17173:236;;;;:::o;24927:57::-;;;;:::o;25265:63::-;;;;:::o;31584:391::-;31732:4;13148:13;:11;:13::i;:::-;31801:2:::1;31780:16;31763;:33;;;;:::i;:::-;31762:41;;31754:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;31882:16;31864:15;:34;;;;31927:16;31909:15;:34;;;;31963:4;31956:11;;31584:391:::0;;;;:::o;31161:415::-;31264:4;13148:13;:11;:13::i;:::-;31307:4:::1;;;;;;;;;;;31294:17;;:9;:17;;::::0;31286:79:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31405:1;31384:23;;:9;:23;;::::0;31376:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31490:9;31472:15;;:27;;;;;;;;;;;;;;;;;;31542:4;31504:18;:35;31523:15;;;;;;;;;;;31504:35;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;31564:4;31557:11;;31161:415:::0;;;:::o;25144:37::-;;;;:::o;25188:70::-;;;;:::o;16766:201::-;16900:7;16932:11;:18;16944:5;16932:18;;;;;;;;;;;;;;;:27;16951:7;16932:27;;;;;;;;;;;;;;;;16925:34;;16766:201;;;;:::o;29572:189::-;13148:13;:11;:13::i;:::-;29689:7:::1;29658:18;:28;29677:8;29658:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;29712:41;29735:8;29745:7;29712:41;;;;;;;:::i;:::-;;;;;;;;29572:189:::0;;:::o;14168:238::-;13148:13;:11;:13::i;:::-;14291:1:::1;14271:22;;:8;:22;;::::0;14249:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14370:28;14389:8;14370:18;:28::i;:::-;14168:238:::0;:::o;24743:35::-;;;;:::o;12562:98::-;12615:7;12642:10;12635:17;;12562:98;:::o;22576:380::-;22729:1;22712:19;;:5;:19;;;22704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22810:1;22791:21;;:7;:21;;;22783:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22894:6;22864:11;:18;22876:5;22864:18;;;;;;;;;;;;;;;:27;22883:7;22864:27;;;;;;;;;;;;;;;:36;;;;22932:7;22916:32;;22925:5;22916:32;;;22941:6;22916:32;;;;;;:::i;:::-;;;;;;;;22576:380;;;:::o;13427:132::-;13502:12;:10;:12::i;:::-;13491:23;;:7;:5;:7::i;:::-;:23;;;13483:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13427:132::o;23247:502::-;23382:24;23409:25;23419:5;23426:7;23409:9;:25::i;:::-;23382:52;;23469:17;23449:16;:37;23445:297;;23549:6;23529:16;:26;;23503:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;23664:51;23673:5;23680:7;23708:6;23689:16;:25;23664:8;:51::i;:::-;23445:297;23371:378;23247:502;;;:::o;27205:2359::-;27319:1;27303:18;;:4;:18;;;27295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27396:1;27382:16;;:2;:16;;;27374:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27476:6;27457:15;27467:4;27457:9;:15::i;:::-;:25;;27449:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27551:13;;;;;;;;;;;27543:21;;:4;:21;;;:44;;;;27574:13;;;;;;;;;;;27568:19;;:2;:19;;;27543:44;27542:67;;;;;27593:16;;;;;;;;;;;27592:17;27542:67;27538:2019;;;27638:13;;;;;;;;;;;27630:21;;:4;:21;;;27626:840;;27660:23;27686:24;27704:4;27686:9;:24::i;:::-;27660:50;;27717:32;27787:18;;27769:15;:36;27766:128;;;27868:18;;27841:24;27859:4;27841:9;:24::i;:::-;:45;;;;:::i;:::-;27814:72;;27766:128;27962:29;;27934:24;:57;27930:152;;28016:46;28032:29;;28016:15;:46::i;:::-;27930:152;28128:23;;28105:18;;28104:47;28100:351;;28176:42;28194:23;;28176:17;:42::i;:::-;28263:23;;28241:18;;:45;;;;;;;:::i;:::-;;;;;;;;28309:9;28329:15;;;;;;;;;;;28321:29;;:52;28351:21;28321:52;;;;;;;;;;;;;;;;;;;;;;;28309:64;;28404:4;28396:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;28153:298;28100:351;27653:813;;27626:840;28482:22;28523:18;:24;28542:4;28523:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;28551:18;:22;28570:2;28551:22;;;;;;;;;;;;;;;;;;;;;;;;;28523:50;28519:895;;;28611:6;28594:23;;28519:895;;;28690:11;;28680:6;:21;;28672:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;28793:13;;;;;;;;;;;28785:21;;:4;:21;;;28782:178;;28866:15;;28848:13;28858:2;28848:9;:13::i;:::-;28839:6;:22;;;;:::i;:::-;28838:43;;28830:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28782:178;28980:22;29024:1;29006:15;;:19;29005:62;;29066:1;29005:62;;;29059:3;29040:15;;29031:6;:24;;;;:::i;:::-;29030:32;;;;:::i;:::-;29005:62;28980:87;;29086:22;29130:1;29112:15;;:19;29111:62;;29172:1;29111:62;;;29165:3;29146:15;;29137:6;:24;;;;:::i;:::-;29136:32;;;;:::i;:::-;29111:62;29086:87;;29236:14;29219;:31;;;;:::i;:::-;29209:6;:42;;;;:::i;:::-;29192:59;;29292:14;29270:18;;:36;;;;;;;:::i;:::-;;;;;;;;29327:71;29343:4;29357;29382:14;29365;:31;;;;:::i;:::-;29327:15;:71::i;:::-;28653:761;;28519:895;29428:41;29444:4;29450:2;29454:14;29428:15;:41::i;:::-;27611:1870;27538:2019;;;29512:33;29528:4;29534:2;29538:6;29512:15;:33::i;:::-;27538:2019;27205:2359;;;:::o;14566:191::-;14640:16;14659:6;;;;;;;;;;;14640:25;;14685:8;14676:6;;:17;;;;;;;;;;;;;;;;;;14740:8;14709:40;;14730:8;14709:40;;;;;;;;;;;;14629:128;14566:191;:::o;29769:474::-;25805:4;25786:16;;:23;;;;;;;;;;;;;;;;;;29855:12:::1;29894:1;29871:20;:24;;;;:::i;:::-;29855:41;;29907:17;29951:4;29928:20;:27;;;;:::i;:::-;29907:49;;29969:22;29994:21;29969:46;;30028:23;30046:4;30028:17;:23::i;:::-;30064:18;30110:14;30086:21;:38;;;;:::i;:::-;30064:61;;30138:36;30152:9;30163:10;30138:13;:36::i;:::-;30192:43;30207:4;30213:10;30225:9;30192:43;;;;;;;;:::i;:::-;;;;;;;;29844:399;;;;25851:5:::0;25832:16;;:24;;;;;;;;;;;;;;;;;;29769:474;:::o;30251:488::-;25805:4;25786:16;;:23;;;;;;;;;;;;;;;;;;30330:21:::1;30368:1;30354:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30330:40;;30399:4;30381;30386:1;30381:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30425:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30415:4;30420:1;30415:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;30460:62;30477:4;30492:15;30510:11;30460:8;:62::i;:::-;30535:15;:66;;;30616:11;30642:1;30658:4;30685;30705:15;30535:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30319:420;25851:5:::0;25832:16;;:24;;;;;;;;;;;;;;;;;;30251:488;:::o;23757:776::-;23904:1;23888:18;;:4;:18;;;23880:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23981:1;23967:16;;:2;:16;;;23959:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24036:19;24058:9;:15;24068:4;24058:15;;;;;;;;;;;;;;;;24036:37;;24121:6;24106:11;:21;;24084:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;24261:6;24247:11;:20;24229:9;:15;24239:4;24229:15;;;;;;;;;;;;;;;:38;;;;24464:6;24447:9;:13;24457:2;24447:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;24514:2;24499:26;;24508:4;24499:26;;;24518:6;24499:26;;;;;;:::i;:::-;;;;;;;;23869:664;23757:776;;;:::o;30747:406::-;25805:4;25786:16;;:23;;;;;;;;;;;;;;;;;;30864:62:::1;30881:4;30896:15;30914:11;30864:8;:62::i;:::-;30939:15;:31;;;30978:9;31011:4;31031:11;31057:1;31073::::0;31089:15:::1;;;;;;;;;;;31119;30939:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25851:5:::0;25832:16;;:24;;;;;;;;;;;;;;;;;;30747:406;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:118::-;4858:24;4876:5;4858:24;:::i;:::-;4853:3;4846:37;4771:118;;:::o;4895:222::-;4988:4;5026:2;5015:9;5011:18;5003:26;;5039:71;5107:1;5096:9;5092:17;5083:6;5039:71;:::i;:::-;4895:222;;;;:::o;5123:329::-;5182:6;5231:2;5219:9;5210:7;5206:23;5202:32;5199:119;;;5237:79;;:::i;:::-;5199:119;5357:1;5382:53;5427:7;5418:6;5407:9;5403:22;5382:53;:::i;:::-;5372:63;;5328:117;5123:329;;;;:::o;5458:619::-;5535:6;5543;5551;5600:2;5588:9;5579:7;5575:23;5571:32;5568:119;;;5606:79;;:::i;:::-;5568:119;5726:1;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5697:117;5853:2;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5824:118;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;5458:619;;;;;:::o;6083:474::-;6151:6;6159;6208:2;6196:9;6187:7;6183:23;6179:32;6176:119;;;6214:79;;:::i;:::-;6176:119;6334:1;6359:53;6404:7;6395:6;6384:9;6380:22;6359:53;:::i;:::-;6349:63;;6305:117;6461:2;6487:53;6532:7;6523:6;6512:9;6508:22;6487:53;:::i;:::-;6477:63;;6432:118;6083:474;;;;;:::o;6563:86::-;6598:7;6638:4;6631:5;6627:16;6616:27;;6563:86;;;:::o;6655:112::-;6738:22;6754:5;6738:22;:::i;:::-;6733:3;6726:35;6655:112;;:::o;6773:214::-;6862:4;6900:2;6889:9;6885:18;6877:26;;6913:67;6977:1;6966:9;6962:17;6953:6;6913:67;:::i;:::-;6773:214;;;;:::o;6993:329::-;7052:6;7101:2;7089:9;7080:7;7076:23;7072:32;7069:119;;;7107:79;;:::i;:::-;7069:119;7227:1;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7198:117;6993:329;;;;:::o;7328:474::-;7396:6;7404;7453:2;7441:9;7432:7;7428:23;7424:32;7421:119;;;7459:79;;:::i;:::-;7421:119;7579:1;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7550:117;7706:2;7732:53;7777:7;7768:6;7757:9;7753:22;7732:53;:::i;:::-;7722:63;;7677:118;7328:474;;;;;:::o;7808:116::-;7878:21;7893:5;7878:21;:::i;:::-;7871:5;7868:32;7858:60;;7914:1;7911;7904:12;7858:60;7808:116;:::o;7930:133::-;7973:5;8011:6;7998:20;7989:29;;8027:30;8051:5;8027:30;:::i;:::-;7930:133;;;;:::o;8069:468::-;8134:6;8142;8191:2;8179:9;8170:7;8166:23;8162:32;8159:119;;;8197:79;;:::i;:::-;8159:119;8317:1;8342:53;8387:7;8378:6;8367:9;8363:22;8342:53;:::i;:::-;8332:63;;8288:117;8444:2;8470:50;8512:7;8503:6;8492:9;8488:22;8470:50;:::i;:::-;8460:60;;8415:115;8069:468;;;;;:::o;8543:180::-;8591:77;8588:1;8581:88;8688:4;8685:1;8678:15;8712:4;8709:1;8702:15;8729:320;8773:6;8810:1;8804:4;8800:12;8790:22;;8857:1;8851:4;8847:12;8878:18;8868:81;;8934:4;8926:6;8922:17;8912:27;;8868:81;8996:2;8988:6;8985:14;8965:18;8962:38;8959:84;;9015:18;;:::i;:::-;8959:84;8780:269;8729:320;;;:::o;9055:227::-;9195:34;9191:1;9183:6;9179:14;9172:58;9264:10;9259:2;9251:6;9247:15;9240:35;9055:227;:::o;9288:366::-;9430:3;9451:67;9515:2;9510:3;9451:67;:::i;:::-;9444:74;;9527:93;9616:3;9527:93;:::i;:::-;9645:2;9640:3;9636:12;9629:19;;9288:366;;;:::o;9660:419::-;9826:4;9864:2;9853:9;9849:18;9841:26;;9913:9;9907:4;9903:20;9899:1;9888:9;9884:17;9877:47;9941:131;10067:4;9941:131;:::i;:::-;9933:139;;9660:419;;;:::o;10085:180::-;10133:77;10130:1;10123:88;10230:4;10227:1;10220:15;10254:4;10251:1;10244:15;10271:180;10319:77;10316:1;10309:88;10416:4;10413:1;10406:15;10440:4;10437:1;10430:15;10457:185;10497:1;10514:20;10532:1;10514:20;:::i;:::-;10509:25;;10548:20;10566:1;10548:20;:::i;:::-;10543:25;;10587:1;10577:35;;10592:18;;:::i;:::-;10577:35;10634:1;10631;10627:9;10622:14;;10457:185;;;;:::o;10648:239::-;10788:34;10784:1;10776:6;10772:14;10765:58;10857:22;10852:2;10844:6;10840:15;10833:47;10648:239;:::o;10893:366::-;11035:3;11056:67;11120:2;11115:3;11056:67;:::i;:::-;11049:74;;11132:93;11221:3;11132:93;:::i;:::-;11250:2;11245:3;11241:12;11234:19;;10893:366;;;:::o;11265:419::-;11431:4;11469:2;11458:9;11454:18;11446:26;;11518:9;11512:4;11508:20;11504:1;11493:9;11489:17;11482:47;11546:131;11672:4;11546:131;:::i;:::-;11538:139;;11265:419;;;:::o;11690:102::-;11732:8;11779:5;11776:1;11772:13;11751:34;;11690:102;;;:::o;11798:848::-;11859:5;11866:4;11890:6;11881:15;;11914:5;11905:14;;11928:712;11949:1;11939:8;11936:15;11928:712;;;12044:4;12039:3;12035:14;12029:4;12026:24;12023:50;;;12053:18;;:::i;:::-;12023:50;12103:1;12093:8;12089:16;12086:451;;;12518:4;12511:5;12507:16;12498:25;;12086:451;12568:4;12562;12558:15;12550:23;;12598:32;12621:8;12598:32;:::i;:::-;12586:44;;11928:712;;;11798:848;;;;;;;:::o;12652:1073::-;12706:5;12897:8;12887:40;;12918:1;12909:10;;12920:5;;12887:40;12946:4;12936:36;;12963:1;12954:10;;12965:5;;12936:36;13032:4;13080:1;13075:27;;;;13116:1;13111:191;;;;13025:277;;13075:27;13093:1;13084:10;;13095:5;;;13111:191;13156:3;13146:8;13143:17;13140:43;;;13163:18;;:::i;:::-;13140:43;13212:8;13209:1;13205:16;13196:25;;13247:3;13240:5;13237:14;13234:40;;;13254:18;;:::i;:::-;13234:40;13287:5;;;13025:277;;13411:2;13401:8;13398:16;13392:3;13386:4;13383:13;13379:36;13361:2;13351:8;13348:16;13343:2;13337:4;13334:12;13330:35;13314:111;13311:246;;;13467:8;13461:4;13457:19;13448:28;;13502:3;13495:5;13492:14;13489:40;;;13509:18;;:::i;:::-;13489:40;13542:5;;13311:246;13582:42;13620:3;13610:8;13604:4;13601:1;13582:42;:::i;:::-;13567:57;;;;13656:4;13651:3;13647:14;13640:5;13637:25;13634:51;;;13665:18;;:::i;:::-;13634:51;13714:4;13707:5;13703:16;13694:25;;12652:1073;;;;;;:::o;13731:281::-;13789:5;13813:23;13831:4;13813:23;:::i;:::-;13805:31;;13857:25;13873:8;13857:25;:::i;:::-;13845:37;;13901:104;13938:66;13928:8;13922:4;13901:104;:::i;:::-;13892:113;;13731:281;;;;:::o;14018:348::-;14058:7;14081:20;14099:1;14081:20;:::i;:::-;14076:25;;14115:20;14133:1;14115:20;:::i;:::-;14110:25;;14303:1;14235:66;14231:74;14228:1;14225:81;14220:1;14213:9;14206:17;14202:105;14199:131;;;14310:18;;:::i;:::-;14199:131;14358:1;14355;14351:9;14340:20;;14018:348;;;;:::o;14372:191::-;14412:3;14431:20;14449:1;14431:20;:::i;:::-;14426:25;;14465:20;14483:1;14465:20;:::i;:::-;14460:25;;14508:1;14505;14501:9;14494:16;;14529:3;14526:1;14523:10;14520:36;;;14536:18;;:::i;:::-;14520:36;14372:191;;;;:::o;14569:224::-;14709:34;14705:1;14697:6;14693:14;14686:58;14778:7;14773:2;14765:6;14761:15;14754:32;14569:224;:::o;14799:366::-;14941:3;14962:67;15026:2;15021:3;14962:67;:::i;:::-;14955:74;;15038:93;15127:3;15038:93;:::i;:::-;15156:2;15151:3;15147:12;15140:19;;14799:366;;;:::o;15171:419::-;15337:4;15375:2;15364:9;15360:18;15352:26;;15424:9;15418:4;15414:20;15410:1;15399:9;15395:17;15388:47;15452:131;15578:4;15452:131;:::i;:::-;15444:139;;15171:419;;;:::o;15596:232::-;15736:34;15732:1;15724:6;15720:14;15713:58;15805:15;15800:2;15792:6;15788:15;15781:40;15596:232;:::o;15834:366::-;15976:3;15997:67;16061:2;16056:3;15997:67;:::i;:::-;15990:74;;16073:93;16162:3;16073:93;:::i;:::-;16191:2;16186:3;16182:12;16175:19;;15834:366;;;:::o;16206:419::-;16372:4;16410:2;16399:9;16395:18;16387:26;;16459:9;16453:4;16449:20;16445:1;16434:9;16430:17;16423:47;16487:131;16613:4;16487:131;:::i;:::-;16479:139;;16206:419;;;:::o;16631:236::-;16771:34;16767:1;16759:6;16755:14;16748:58;16840:19;16835:2;16827:6;16823:15;16816:44;16631:236;:::o;16873:366::-;17015:3;17036:67;17100:2;17095:3;17036:67;:::i;:::-;17029:74;;17112:93;17201:3;17112:93;:::i;:::-;17230:2;17225:3;17221:12;17214:19;;16873:366;;;:::o;17245:419::-;17411:4;17449:2;17438:9;17434:18;17426:26;;17498:9;17492:4;17488:20;17484:1;17473:9;17469:17;17462:47;17526:131;17652:4;17526:131;:::i;:::-;17518:139;;17245:419;;;:::o;17670:320::-;17785:4;17823:2;17812:9;17808:18;17800:26;;17836:71;17904:1;17893:9;17889:17;17880:6;17836:71;:::i;:::-;17917:66;17979:2;17968:9;17964:18;17955:6;17917:66;:::i;:::-;17670:320;;;;;:::o;17996:225::-;18136:34;18132:1;18124:6;18120:14;18113:58;18205:8;18200:2;18192:6;18188:15;18181:33;17996:225;:::o;18227:366::-;18369:3;18390:67;18454:2;18449:3;18390:67;:::i;:::-;18383:74;;18466:93;18555:3;18466:93;:::i;:::-;18584:2;18579:3;18575:12;18568:19;;18227:366;;;:::o;18599:419::-;18765:4;18803:2;18792:9;18788:18;18780:26;;18852:9;18846:4;18842:20;18838:1;18827:9;18823:17;18816:47;18880:131;19006:4;18880:131;:::i;:::-;18872:139;;18599:419;;;:::o;19024:223::-;19164:34;19160:1;19152:6;19148:14;19141:58;19233:6;19228:2;19220:6;19216:15;19209:31;19024:223;:::o;19253:366::-;19395:3;19416:67;19480:2;19475:3;19416:67;:::i;:::-;19409:74;;19492:93;19581:3;19492:93;:::i;:::-;19610:2;19605:3;19601:12;19594:19;;19253:366;;;:::o;19625:419::-;19791:4;19829:2;19818:9;19814:18;19806:26;;19878:9;19872:4;19868:20;19864:1;19853:9;19849:17;19842:47;19906:131;20032:4;19906:131;:::i;:::-;19898:139;;19625:419;;;:::o;20050:221::-;20190:34;20186:1;20178:6;20174:14;20167:58;20259:4;20254:2;20246:6;20242:15;20235:29;20050:221;:::o;20277:366::-;20419:3;20440:67;20504:2;20499:3;20440:67;:::i;:::-;20433:74;;20516:93;20605:3;20516:93;:::i;:::-;20634:2;20629:3;20625:12;20618:19;;20277:366;;;:::o;20649:419::-;20815:4;20853:2;20842:9;20838:18;20830:26;;20902:9;20896:4;20892:20;20888:1;20877:9;20873:17;20866:47;20930:131;21056:4;20930:131;:::i;:::-;20922:139;;20649:419;;;:::o;21074:182::-;21214:34;21210:1;21202:6;21198:14;21191:58;21074:182;:::o;21262:366::-;21404:3;21425:67;21489:2;21484:3;21425:67;:::i;:::-;21418:74;;21501:93;21590:3;21501:93;:::i;:::-;21619:2;21614:3;21610:12;21603:19;;21262:366;;;:::o;21634:419::-;21800:4;21838:2;21827:9;21823:18;21815:26;;21887:9;21881:4;21877:20;21873:1;21862:9;21858:17;21851:47;21915:131;22041:4;21915:131;:::i;:::-;21907:139;;21634:419;;;:::o;22059:179::-;22199:31;22195:1;22187:6;22183:14;22176:55;22059:179;:::o;22244:366::-;22386:3;22407:67;22471:2;22466:3;22407:67;:::i;:::-;22400:74;;22483:93;22572:3;22483:93;:::i;:::-;22601:2;22596:3;22592:12;22585:19;;22244:366;;;:::o;22616:419::-;22782:4;22820:2;22809:9;22805:18;22797:26;;22869:9;22863:4;22859:20;22855:1;22844:9;22840:17;22833:47;22897:131;23023:4;22897:131;:::i;:::-;22889:139;;22616:419;;;:::o;23041:224::-;23181:34;23177:1;23169:6;23165:14;23158:58;23250:7;23245:2;23237:6;23233:15;23226:32;23041:224;:::o;23271:366::-;23413:3;23434:67;23498:2;23493:3;23434:67;:::i;:::-;23427:74;;23510:93;23599:3;23510:93;:::i;:::-;23628:2;23623:3;23619:12;23612:19;;23271:366;;;:::o;23643:419::-;23809:4;23847:2;23836:9;23832:18;23824:26;;23896:9;23890:4;23886:20;23882:1;23871:9;23867:17;23860:47;23924:131;24050:4;23924:131;:::i;:::-;23916:139;;23643:419;;;:::o;24068:222::-;24208:34;24204:1;24196:6;24192:14;24185:58;24277:5;24272:2;24264:6;24260:15;24253:30;24068:222;:::o;24296:366::-;24438:3;24459:67;24523:2;24518:3;24459:67;:::i;:::-;24452:74;;24535:93;24624:3;24535:93;:::i;:::-;24653:2;24648:3;24644:12;24637:19;;24296:366;;;:::o;24668:419::-;24834:4;24872:2;24861:9;24857:18;24849:26;;24921:9;24915:4;24911:20;24907:1;24896:9;24892:17;24885:47;24949:131;25075:4;24949:131;:::i;:::-;24941:139;;24668:419;;;:::o;25093:225::-;25233:34;25229:1;25221:6;25217:14;25210:58;25302:8;25297:2;25289:6;25285:15;25278:33;25093:225;:::o;25324:366::-;25466:3;25487:67;25551:2;25546:3;25487:67;:::i;:::-;25480:74;;25563:93;25652:3;25563:93;:::i;:::-;25681:2;25676:3;25672:12;25665:19;;25324:366;;;:::o;25696:419::-;25862:4;25900:2;25889:9;25885:18;25877:26;;25949:9;25943:4;25939:20;25935:1;25924:9;25920:17;25913:47;25977:131;26103:4;25977:131;:::i;:::-;25969:139;;25696:419;;;:::o;26121:194::-;26161:4;26181:20;26199:1;26181:20;:::i;:::-;26176:25;;26215:20;26233:1;26215:20;:::i;:::-;26210:25;;26259:1;26256;26252:9;26244:17;;26283:1;26277:4;26274:11;26271:37;;;26288:18;;:::i;:::-;26271:37;26121:194;;;;:::o;26321:168::-;26461:20;26457:1;26449:6;26445:14;26438:44;26321:168;:::o;26495:366::-;26637:3;26658:67;26722:2;26717:3;26658:67;:::i;:::-;26651:74;;26734:93;26823:3;26734:93;:::i;:::-;26852:2;26847:3;26843:12;26836:19;;26495:366;;;:::o;26867:419::-;27033:4;27071:2;27060:9;27056:18;27048:26;;27120:9;27114:4;27110:20;27106:1;27095:9;27091:17;27084:47;27148:131;27274:4;27148:131;:::i;:::-;27140:139;;26867:419;;;:::o;27292:244::-;27432:34;27428:1;27420:6;27416:14;27409:58;27501:27;27496:2;27488:6;27484:15;27477:52;27292:244;:::o;27542:366::-;27684:3;27705:67;27769:2;27764:3;27705:67;:::i;:::-;27698:74;;27781:93;27870:3;27781:93;:::i;:::-;27899:2;27894:3;27890:12;27883:19;;27542:366;;;:::o;27914:419::-;28080:4;28118:2;28107:9;28103:18;28095:26;;28167:9;28161:4;28157:20;28153:1;28142:9;28138:17;28131:47;28195:131;28321:4;28195:131;:::i;:::-;28187:139;;27914:419;;;:::o;28339:241::-;28479:34;28475:1;28467:6;28463:14;28456:58;28548:24;28543:2;28535:6;28531:15;28524:49;28339:241;:::o;28586:366::-;28728:3;28749:67;28813:2;28808:3;28749:67;:::i;:::-;28742:74;;28825:93;28914:3;28825:93;:::i;:::-;28943:2;28938:3;28934:12;28927:19;;28586:366;;;:::o;28958:419::-;29124:4;29162:2;29151:9;29147:18;29139:26;;29211:9;29205:4;29201:20;29197:1;29186:9;29182:17;29175:47;29239:131;29365:4;29239:131;:::i;:::-;29231:139;;28958:419;;;:::o;29383:442::-;29532:4;29570:2;29559:9;29555:18;29547:26;;29583:71;29651:1;29640:9;29636:17;29627:6;29583:71;:::i;:::-;29664:72;29732:2;29721:9;29717:18;29708:6;29664:72;:::i;:::-;29746;29814:2;29803:9;29799:18;29790:6;29746:72;:::i;:::-;29383:442;;;;;;:::o;29831:180::-;29879:77;29876:1;29869:88;29976:4;29973:1;29966:15;30000:4;29997:1;29990:15;30017:180;30065:77;30062:1;30055:88;30162:4;30159:1;30152:15;30186:4;30183:1;30176:15;30203:143;30260:5;30291:6;30285:13;30276:22;;30307:33;30334:5;30307:33;:::i;:::-;30203:143;;;;:::o;30352:351::-;30422:6;30471:2;30459:9;30450:7;30446:23;30442:32;30439:119;;;30477:79;;:::i;:::-;30439:119;30597:1;30622:64;30678:7;30669:6;30658:9;30654:22;30622:64;:::i;:::-;30612:74;;30568:128;30352:351;;;;:::o;30709:85::-;30754:7;30783:5;30772:16;;30709:85;;;:::o;30800:158::-;30858:9;30891:61;30909:42;30918:32;30944:5;30918:32;:::i;:::-;30909:42;:::i;:::-;30891:61;:::i;:::-;30878:74;;30800:158;;;:::o;30964:147::-;31059:45;31098:5;31059:45;:::i;:::-;31054:3;31047:58;30964:147;;:::o;31117:114::-;31184:6;31218:5;31212:12;31202:22;;31117:114;;;:::o;31237:184::-;31336:11;31370:6;31365:3;31358:19;31410:4;31405:3;31401:14;31386:29;;31237:184;;;;:::o;31427:132::-;31494:4;31517:3;31509:11;;31547:4;31542:3;31538:14;31530:22;;31427:132;;;:::o;31565:108::-;31642:24;31660:5;31642:24;:::i;:::-;31637:3;31630:37;31565:108;;:::o;31679:179::-;31748:10;31769:46;31811:3;31803:6;31769:46;:::i;:::-;31847:4;31842:3;31838:14;31824:28;;31679:179;;;;:::o;31864:113::-;31934:4;31966;31961:3;31957:14;31949:22;;31864:113;;;:::o;32013:732::-;32132:3;32161:54;32209:5;32161:54;:::i;:::-;32231:86;32310:6;32305:3;32231:86;:::i;:::-;32224:93;;32341:56;32391:5;32341:56;:::i;:::-;32420:7;32451:1;32436:284;32461:6;32458:1;32455:13;32436:284;;;32537:6;32531:13;32564:63;32623:3;32608:13;32564:63;:::i;:::-;32557:70;;32650:60;32703:6;32650:60;:::i;:::-;32640:70;;32496:224;32483:1;32480;32476:9;32471:14;;32436:284;;;32440:14;32736:3;32729:10;;32137:608;;;32013:732;;;;:::o;32751:831::-;33014:4;33052:3;33041:9;33037:19;33029:27;;33066:71;33134:1;33123:9;33119:17;33110:6;33066:71;:::i;:::-;33147:80;33223:2;33212:9;33208:18;33199:6;33147:80;:::i;:::-;33274:9;33268:4;33264:20;33259:2;33248:9;33244:18;33237:48;33302:108;33405:4;33396:6;33302:108;:::i;:::-;33294:116;;33420:72;33488:2;33477:9;33473:18;33464:6;33420:72;:::i;:::-;33502:73;33570:3;33559:9;33555:19;33546:6;33502:73;:::i;:::-;32751:831;;;;;;;;:::o;33588:807::-;33837:4;33875:3;33864:9;33860:19;33852:27;;33889:71;33957:1;33946:9;33942:17;33933:6;33889:71;:::i;:::-;33970:72;34038:2;34027:9;34023:18;34014:6;33970:72;:::i;:::-;34052:80;34128:2;34117:9;34113:18;34104:6;34052:80;:::i;:::-;34142;34218:2;34207:9;34203:18;34194:6;34142:80;:::i;:::-;34232:73;34300:3;34289:9;34285:19;34276:6;34232:73;:::i;:::-;34315;34383:3;34372:9;34368:19;34359:6;34315:73;:::i;:::-;33588:807;;;;;;;;;:::o;34401:143::-;34458:5;34489:6;34483:13;34474:22;;34505:33;34532:5;34505:33;:::i;:::-;34401:143;;;;:::o;34550:663::-;34638:6;34646;34654;34703:2;34691:9;34682:7;34678:23;34674:32;34671:119;;;34709:79;;:::i;:::-;34671:119;34829:1;34854:64;34910:7;34901:6;34890:9;34886:22;34854:64;:::i;:::-;34844:74;;34800:128;34967:2;34993:64;35049:7;35040:6;35029:9;35025:22;34993:64;:::i;:::-;34983:74;;34938:129;35106:2;35132:64;35188:7;35179:6;35168:9;35164:22;35132:64;:::i;:::-;35122:74;;35077:129;34550:663;;;;;:::o

Swarm Source

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