ETH Price: $2,693.27 (+2.39%)
Gas: 2 Gwei

Token

TYPHOON (TYPH)
 

Overview

Max Total Supply

1,000,000,000,000,000,000,000,000,000 TYPH

Holders

248

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 0 Decimals)

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:
TYPHOONPRIVACY

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-05-31
*/

// SPDX-License-Identifier: MIT

/**
$TYPHOON - The Privacy Storm on Ethereum 🪙

$TYPHOON is a project designed to revolutionize privacy on the Ethereum blockchain. 
Just like its namesake, $TYPHOON will unleash a storm of privacy, 
ensuring that your Ethereum transactions remain confidential and untraceable.

How It Works:
$TYPHOON leverages cutting-edge zk-SNARKs technology to obfuscate transaction details, 
making it virtually impossible to trace the origin and destination of your funds.

Deposit and withdrawal your funds with 100% privacy 🪙

Benefits of $TYPHOON:
😎 Complete Anonymity
🪙 Decentralization
🔒 User-Friendly Interface
💰 Security

Features of $TYPHOON:
💳 Non KYC Creditcards
📈 $TYPHOON Staking
😎 Private Transactions
🪙 Multichain

Join us as we redefine privacy in the world of cryptocurrencies. 
Together, we'll create a storm of privacy that will protect your Ethereum transactions from all angles 🪙

$TYPHOON links:
Twitter: https://twitter.com/typhoonprivacy
Docs: https://typhoonprivacy.gitbook.io/typhoon-privacy/
Telegram: https://t.me/typhoonprivacy
Website: https://typhoonprivacy.com/

*/


pragma solidity 0.8.17;
pragma experimental ABIEncoderV2;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling 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);
    }
}


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

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


    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 symbol of the token.
     */
    function symbol() external view returns (string memory);

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


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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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


    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

    function approve(address spender, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }


    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }


    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }


    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        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;
    }


    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");

        _beforeTokenTransfer(from, to, amount);

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

        _afterTokenTransfer(from, to, amount);
    }


    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _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);

        _afterTokenTransfer(address(0), account, amount);
    }


    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

        _afterTokenTransfer(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);
            }
        }
    }

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

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}



interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable returns (
        uint256 amountToken,
        uint256 amountETH,
        uint256 liquidity
    );
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

contract TYPHOONPRIVACY is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    address public marketingWallet;
    address public burnWallet;
    address public liquidityWallet;
    address public constant deadAddress = address(0xdead);

    bool public tradingActive;
    bool public swapEnabled;
    bool private _swapping;

    uint256 public maxTransaction;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyBurnFee;
    uint256 private _buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 private _sellMarketingFee;
    uint256 private _sellBurnFee;
    uint256 private _sellLiquidityFee;

    uint256 private _tokensForMarketing;
    uint256 private _tokensForBurn;
    uint256 private _tokensForLiquidity;
    uint256 private _previousFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedFromMaxTransaction;
    mapping(address => bool) private _automatedMarketMakerPairs;
    
    mapping(address => bool) public _isBlacklisted;

      
    
    address UNIRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;


    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

   

    event BlackListed(address indexed account, bool isExcluded);

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

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

    event burnWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

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

    constructor() ERC20("TYPHOON", "TYPH") {
        uint256 totalSupply = 1_000_000_000 ether;

        marketingWallet = 0xc06293640036E19a4bdee0cA1dc6B2C7d5735e75;
        burnWallet = 0x44b37643dc0eAc2F47B94D1A92703bffAA4edE94;
        liquidityWallet = 0xc06293640036E19a4bdee0cA1dc6B2C7d5735e75;
        
        uniswapV2Router = IUniswapV2Router02(UNIRouter);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        maxTransaction = 5000000000000000000000000;
        maxWallet = 10000000000000000000000000;
        swapTokensAtAmount = 500000000000000000000000;

        _buyMarketingFee = 2400;
        _buyBurnFee = 100;
        _buyLiquidityFee = 0; // leave 0
        
        buyTotalFees = 
            _buyMarketingFee + 
            _buyBurnFee + 
            _buyLiquidityFee;

        _sellMarketingFee = 3900;
        _sellBurnFee = 100;
        _sellLiquidityFee = 0;  // leave 0
        
        sellTotalFees =
            _sellMarketingFee +
            _sellBurnFee +
            _sellLiquidityFee;

        _previousFee = sellTotalFees;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        
        excludeFromFees(marketingWallet, true);
        excludeFromFees(burnWallet, true);
        excludeFromFees(liquidityWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(address(UNIRouter), true);
        
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(burnWallet, true);
        excludeFromMaxTransaction(liquidityWallet, true);

        
        _mint(owner(), totalSupply);
    }

    receive() external payable {}

    function burn(uint256 amount) public {
        _burn(msg.sender, amount);
    }


    function SetPair(address _pair) public onlyOwner {
        uniswapV2Pair = _pair;
        _setAutomatedMarketMakerPair(address(_pair), true);
        excludeFromMaxTransaction(address(_pair), true);
        _approve(address(this), address(_pair), type(uint256).max);
    
    }


    function setRouter(address router) public onlyOwner {
        UNIRouter = router; 
        uniswapV2Router = IUniswapV2Router02(UNIRouter);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        excludeFromMaxTransaction(address(router), true);
    }

    function launch() public onlyOwner {
        require(!tradingActive, "Trading already active.");
        tradingActive = true;
        swapEnabled = true;
  
    }

    function setSwapEnabled(bool value) public onlyOwner {
        swapEnabled = value;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {

        swapTokensAtAmount = amount;
    }

    function setMaxWalletAndMaxTransaction(
        uint256 _maxTransaction,
        uint256 _maxWallet
    ) public onlyOwner {
       
        maxTransaction = _maxTransaction;
        maxWallet = _maxWallet;
    }

    function setBuyFees(
        uint256 _marketingFee,
        uint256 _burnFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        require(
            _marketingFee + _burnFee + _liquidityFee <= 5000,
            "ERC20: Must keep fees at 50% or less"
        );
        _buyMarketingFee = _marketingFee;
        _buyBurnFee = _burnFee;
        _buyLiquidityFee = _liquidityFee;
        buyTotalFees = _buyMarketingFee + _buyBurnFee + _buyLiquidityFee;
    }

    function setSellFees(
        uint256 _marketingFee,
        uint256 _burnFee,
        uint256 _liquidityFee
    ) public onlyOwner {
        require(
            _marketingFee + _burnFee + _liquidityFee <= 5000,
            "ERC20: Must keep fees at 50% or less"
        );
        _sellMarketingFee = _marketingFee;
        _sellBurnFee = _burnFee;
        _sellLiquidityFee = _liquidityFee;
        sellTotalFees =
            _sellMarketingFee +
            _sellBurnFee +
            _sellLiquidityFee;
        _previousFee = sellTotalFees;
    }

    function setMarketingWallet(address _marketingWallet) public onlyOwner {
        require(_marketingWallet != address(0), "ERC20: Address 0");
        address oldWallet = marketingWallet;
        marketingWallet = _marketingWallet;
        emit marketingWalletUpdated(marketingWallet, oldWallet);
    }

    function setBurnWallet(address _burnWallet) public onlyOwner {
        require(_burnWallet != address(0), "ERC20: Address 0");
        address oldWallet = burnWallet;
        burnWallet = _burnWallet;
        emit burnWalletUpdated(burnWallet, oldWallet);
    }

    function setLiquidityWallet(address _liquidityWallet) public onlyOwner {
        require(_liquidityWallet != address(0), "ERC20: Address 0");
        address oldWallet = liquidityWallet;
        liquidityWallet = _liquidityWallet;
        emit liquidityWalletUpdated(liquidityWallet, oldWallet);
    }

    function excludeFromMaxTransaction(address account, bool value)
        public
        onlyOwner
    {
        _isExcludedFromMaxTransaction[account] = value;
        emit ExcludeFromLimits(account, value);
    }


    function bulkExcludeFromMaxTransaction(
        address[] calldata accounts,
        bool value
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromMaxTransaction[accounts[i]] = value;
            emit ExcludeFromLimits(accounts[i], value);
        }
    }

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

    function bulkExcludeFromFees(address[] calldata accounts, bool value)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFees[accounts[i]] = value;
            emit ExcludeFromFees(accounts[i], value);
        }
    }


    function setBlackListed(address account, bool value)
        public
        onlyOwner
    {
        _isBlacklisted[account] = value;
        emit BlackListed(account, value);
    }

    function bulkSetBlackListed(
        address[] calldata accounts,
        bool value
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = value;
            emit BlackListed(accounts[i], value);
        }
    }

    function withdrawStuckTokens(address tkn) public onlyOwner {
        bool success;
        if (tkn == address(0))
            (success, ) = address(msg.sender).call{
                value: address(this).balance
            }("");
        else {
            require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
            uint256 amount = IERC20(tkn).balanceOf(address(this));
            IERC20(tkn).transfer(msg.sender, amount);
        }
    }

    function withdrawStuckEth() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }

    function isExcludedFromMaxTransaction(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxTransaction[account];
    }

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



    function _setAutomatedMarketMakerPair(address pair, bool value) internal {
        _automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    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");

        bool blackfrom = _isBlacklisted[from];
        bool blackto = _isBlacklisted[to];

        require(blackfrom != true, "ECR20: BlackListed Address");
        require(blackto != true, "ECR20: BlackListed Address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != deadAddress &&
            !_swapping
        ) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to], 
                    "ERC20: Trading is not active."
                );
            }

            //when buy
            if (
                _automatedMarketMakerPairs[from] &&
                !_isExcludedFromMaxTransaction[to]
            ) {
                require(
                    amount <= maxTransaction,
                    "ERC20: Buy transfer amount exceeds the maxTransaction."
                );
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
            //when sell
            else if (
                _automatedMarketMakerPairs[to] &&
                !_isExcludedFromMaxTransaction[from]
            ) {
                require(
                    amount <= maxTransaction,
                    "ERC20: Sell transfer amount exceeds the maxTransaction."
                );
            } else if (!_isExcludedFromMaxTransaction[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "ERC20: Max wallet exceeded"
                );
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !_swapping &&
            !_automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            _swapping = true;

            _swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                _tokensForLiquidity +=
                    (fees * _sellLiquidityFee) /
                    sellTotalFees;
                _tokensForMarketing +=
                    (fees * _sellMarketingFee) /
                    sellTotalFees;
                _tokensForBurn +=
                    (fees * _sellBurnFee) /
                    sellTotalFees;
            }
            // on buy
            else if (_automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees;
                _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees;
                _tokensForBurn +=
                    (fees * _buyBurnFee) /
                    buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = _previousFee;
    }

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    //------------------------




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

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





    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity +
            _tokensForMarketing +
            _tokensForBurn;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 10) {
            contractBalance = swapTokensAtAmount * 10;
        }

        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForBurn = ethBalance.mul(_tokensForBurn).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForBurn;

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForBurn = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _tokensForLiquidity
            );
        }

        (success, ) = address(burnWallet).call{value: ethForBurn}(
            ""
        );

        (success, ) = address(marketingWallet).call{
            value: address(this).balance
        }("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"BlackListed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"burnWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"SetPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"bulkSetBlackListed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlackListed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnWallet","type":"address"}],"name":"setBurnWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTransaction","type":"uint256"},{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWalletAndMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006657600080fd5b506040518060400160405280600781526020017f545950484f4f4e000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f54595048000000000000000000000000000000000000000000000000000000008152508160039081620000e4919062000ec4565b508060049081620000f6919062000ec4565b505050620001196200010d6200060360201b60201c565b6200060b60201b60201c565b60006b033b2e3c9fd0803ce8000000905073c06293640036e19a4bdee0ca1dc6b2c7d5735e75600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507344b37643dc0eac2f47b94d1a92703bffaa4ede94600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c06293640036e19a4bdee0ca1dc6b2c7d5735e75600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002e130600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620006d160201b60201c565b6a0422ca8b0a00a425000000600b819055506a084595161401484a000000600c819055506969e10de76676d0800000600d81905550610960600f8190555060646010819055506000601181905550601154601054600f5462000344919062000fda565b62000350919062000fda565b600e81905550610f3c6013819055506064601481905550600060158190555060155460145460135462000384919062000fda565b62000390919062000fda565b601281905550601254601981905550620003c1620003b3620008a260201b60201c565b6001620008cc60201b60201c565b620003d4306001620008cc60201b60201c565b620003e961dead6001620008cc60201b60201c565b6200041e600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008cc60201b60201c565b62000453600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008cc60201b60201c565b62000488600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008cc60201b60201c565b620004aa6200049c620008a260201b60201c565b60016200098760201b60201c565b620004bd3060016200098760201b60201c565b620004d261dead60016200098760201b60201c565b62000507600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200098760201b60201c565b6200053c601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200098760201b60201c565b62000571600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200098760201b60201c565b620005a6600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200098760201b60201c565b620005db600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200098760201b60201c565b620005fc620005ef620008a260201b60201c565b8262000a4260201b60201c565b50620012a2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000743576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073a906200109c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007ac9062001134565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000895919062001167565b60405180910390a3505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008dc62000baf60201b60201c565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200097b9190620011a1565b60405180910390a25050565b6200099762000baf60201b60201c565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc928260405162000a369190620011a1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ab4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aab906200120e565b60405180910390fd5b62000ac86000838362000c4060201b60201c565b806002600082825462000adc919062000fda565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b8f919062001167565b60405180910390a362000bab6000838362000c4560201b60201c565b5050565b62000bbf6200060360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000be5620008a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000c3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c359062001280565b60405180910390fd5b565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ccc57607f821691505b60208210810362000ce25762000ce162000c84565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d4c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d0d565b62000d58868362000d0d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000da562000d9f62000d998462000d70565b62000d7a565b62000d70565b9050919050565b6000819050919050565b62000dc18362000d84565b62000dd962000dd08262000dac565b84845462000d1a565b825550505050565b600090565b62000df062000de1565b62000dfd81848462000db6565b505050565b5b8181101562000e255762000e1960008262000de6565b60018101905062000e03565b5050565b601f82111562000e745762000e3e8162000ce8565b62000e498462000cfd565b8101602085101562000e59578190505b62000e7162000e688562000cfd565b83018262000e02565b50505b505050565b600082821c905092915050565b600062000e996000198460080262000e79565b1980831691505092915050565b600062000eb4838362000e86565b9150826002028217905092915050565b62000ecf8262000c4a565b67ffffffffffffffff81111562000eeb5762000eea62000c55565b5b62000ef7825462000cb3565b62000f0482828562000e29565b600060209050601f83116001811462000f3c576000841562000f27578287015190505b62000f33858262000ea6565b86555062000fa3565b601f19841662000f4c8662000ce8565b60005b8281101562000f765784890151825560018201915060208501945060208101905062000f4f565b8683101562000f96578489015162000f92601f89168262000e86565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fe78262000d70565b915062000ff48362000d70565b92508282019050808211156200100f576200100e62000fab565b5b92915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200108460248362001015565b9150620010918262001026565b604082019050919050565b60006020820190508181036000830152620010b78162001075565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200111c60228362001015565b91506200112982620010be565b604082019050919050565b600060208201905081810360008301526200114f816200110d565b9050919050565b620011618162000d70565b82525050565b60006020820190506200117e600083018462001156565b92915050565b60008115159050919050565b6200119b8162001184565b82525050565b6000602082019050620011b8600083018462001190565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011f6601f8362001015565b91506200120382620011be565b602082019050919050565b600060208201905081810360008301526200122981620011e7565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200126860208362001015565b9150620012758262001230565b602082019050919050565b600060208201905081810360008301526200129b8162001259565b9050919050565b61523080620012b26000396000f3fe6080604052600436106102cd5760003560e01c8063715018a611610175578063c0d78655116100dc578063d85ba06311610095578063e2f456051161006f578063e2f4560514610ae9578063f17889cd14610b14578063f2fde38b14610b3d578063f8b45b0514610b66576102d4565b8063d85ba06314610a58578063dd62ed3e14610a83578063e01af92c14610ac0576102d4565b8063c0d786551461095e578063c24a7a8c14610987578063c3f70b52146109b0578063cb963728146109db578063d469801614610a04578063d7d1d10e14610a2f576102d4565b806395d89b411161012e57806395d89b411461083c578063a457c2d714610867578063a9059cbb146108a4578063afa4f3b2146108e1578063bbc0c7421461090a578063c024666814610935576102d4565b8063715018a6146107665780637571336a1461077d57806375f0a874146107a65780637fa787ba146107d157806388d61fbc146107e85780638da5cb5b14610811576102d4565b806323b872dd1161023457806349bd5a5e116101ed5780635d098b38116101c75780635d098b38146106aa5780636a486a8e146106d35780636ddd1713146106fe57806370a0823114610729576102d4565b806349bd5a5e146106195780634fbee193146106445780635cd8c07214610681576102d4565b806323b872dd146104f757806327c8f83514610534578063296f0a0c1461055f578063313ce5671461058857806339509351146105b357806342966c68146105f0576102d4565b8063155ca7c111610286578063155ca7c1146103d55780631694505e146103fe57806318160ddd1461042957806318d9ceae146104545780631c4ba3ed146104915780631cdd3be3146104ba576102d4565b806301339c21146102d957806306228749146102f057806306fdde031461031b578063095ea7b3146103465780630d075d9c146103835780630f683e90146103ac576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b91565b005b3480156102fc57600080fd5b50610305610c21565b6040516103129190613ca8565b60405180910390f35b34801561032757600080fd5b50610330610c47565b60405161033d9190613d53565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613de1565b610cd9565b60405161037a9190613e3c565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613e57565b610cfc565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613e57565b610d9c565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613f3b565b610e45565b005b34801561040a57600080fd5b50610413610f67565b6040516104209190613ffa565b60405180910390f35b34801561043557600080fd5b5061043e610f8d565b60405161044b9190614024565b60405180910390f35b34801561046057600080fd5b5061047b6004803603810190610476919061403f565b610f97565b6040516104889190613e3c565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b3919061403f565b610fed565b005b3480156104c657600080fd5b506104e160048036038101906104dc919061403f565b61114c565b6040516104ee9190613e3c565b60405180910390f35b34801561050357600080fd5b5061051e6004803603810190610519919061406c565b61116c565b60405161052b9190613e3c565b60405180910390f35b34801561054057600080fd5b5061054961119b565b6040516105569190613ca8565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061403f565b6111a1565b005b34801561059457600080fd5b5061059d611300565b6040516105aa91906140db565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190613de1565b611309565b6040516105e79190613e3c565b60405180910390f35b3480156105fc57600080fd5b50610617600480360381019061061291906140f6565b611340565b005b34801561062557600080fd5b5061062e61134d565b60405161063b9190613ca8565b60405180910390f35b34801561065057600080fd5b5061066b6004803603810190610666919061403f565b611373565b6040516106789190613e3c565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190614123565b6113c9565b005b3480156106b657600080fd5b506106d160048036038101906106cc919061403f565b61147a565b005b3480156106df57600080fd5b506106e86115d9565b6040516106f59190614024565b60405180910390f35b34801561070a57600080fd5b506107136115df565b6040516107209190613e3c565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b919061403f565b6115f2565b60405161075d9190614024565b60405180910390f35b34801561077257600080fd5b5061077b61163a565b005b34801561078957600080fd5b506107a4600480360381019061079f9190614123565b61164e565b005b3480156107b257600080fd5b506107bb6116ff565b6040516107c89190613ca8565b60405180910390f35b3480156107dd57600080fd5b506107e6611725565b005b3480156107f457600080fd5b5061080f600480360381019061080a919061403f565b61177c565b005b34801561081d57600080fd5b50610826611809565b6040516108339190613ca8565b60405180910390f35b34801561084857600080fd5b50610851611833565b60405161085e9190613d53565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190613de1565b6118c5565b60405161089b9190613e3c565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190613de1565b61193c565b6040516108d89190613e3c565b60405180910390f35b3480156108ed57600080fd5b50610908600480360381019061090391906140f6565b61195f565b005b34801561091657600080fd5b5061091f611971565b60405161092c9190613e3c565b60405180910390f35b34801561094157600080fd5b5061095c60048036038101906109579190614123565b611984565b005b34801561096a57600080fd5b506109856004803603810190610980919061403f565b611a35565b005b34801561099357600080fd5b506109ae60048036038101906109a99190614163565b611b3c565b005b3480156109bc57600080fd5b506109c5611b56565b6040516109d29190614024565b60405180910390f35b3480156109e757600080fd5b50610a0260048036038101906109fd919061403f565b611b5c565b005b348015610a1057600080fd5b50610a19611dc9565b604051610a269190613ca8565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613f3b565b611def565b005b348015610a6457600080fd5b50610a6d611f11565b604051610a7a9190614024565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa591906141a3565b611f17565b604051610ab79190614024565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae291906141e3565b611f9e565b005b348015610af557600080fd5b50610afe611fc3565b604051610b0b9190614024565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b369190613f3b565b611fc9565b005b348015610b4957600080fd5b50610b646004803603810190610b5f919061403f565b6120eb565b005b348015610b7257600080fd5b50610b7b61216e565b604051610b889190614024565b60405180910390f35b610b99612174565b600a60149054906101000a900460ff1615610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be09061425c565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff021916908315150217905550565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610c56906142ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610c82906142ab565b8015610ccf5780601f10610ca457610100808354040283529160200191610ccf565b820191906000526020600020905b815481529060010190602001808311610cb257829003601f168201915b5050505050905090565b600080610ce46121f2565b9050610cf18185856121fa565b600191505092915050565b610d04612174565b611388818385610d14919061430b565b610d1e919061430b565b1115610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d56906143b1565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f54610d87919061430b565b610d91919061430b565b600e81905550505050565b610da4612174565b611388818385610db4919061430b565b610dbe919061430b565b1115610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df6906143b1565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354610e27919061430b565b610e31919061430b565b601281905550601254601981905550505050565b610e4d612174565b60005b83839050811015610f615781601a6000868685818110610e7357610e726143d1565b5b9050602002016020810190610e88919061403f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610eec57610eeb6143d1565b5b9050602002016020810190610f01919061403f565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610f469190613e3c565b60405180910390a28080610f5990614400565b915050610e50565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff5612174565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614494565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa8815068543339c6d09bdcbe1c75c2659b5b32cd2b31ecbdcfc9dcc590e45eef60405160405180910390a35050565b601d6020528060005260406000206000915054906101000a900460ff1681565b6000806111776121f2565b90506111848582856123c3565b61118f85858561244f565b60019150509392505050565b61dead81565b6111a9612174565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90614494565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a35050565b60006012905090565b6000806113146121f2565b90506113358185856113268589611f17565b611330919061430b565b6121fa565b600191505092915050565b61134a3382613047565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113d1612174565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb05df283fc0d63b1908f977b7732784e2203a0d2ccd1280cf16706ff62c351628260405161146e9190613e3c565b60405180910390a25050565b611482612174565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890614494565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b60125481565b600a60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611642612174565b61164c6000613214565b565b611656612174565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516116f39190613e3c565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61172d612174565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611778573d6000803e3d6000fd5b5050565b611784612174565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117d08160016132da565b6117db81600161164e565b61180630827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6121fa565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611842906142ab565b80601f016020809104026020016040519081016040528092919081815260200182805461186e906142ab565b80156118bb5780601f10611890576101008083540402835291602001916118bb565b820191906000526020600020905b81548152906001019060200180831161189e57829003601f168201915b5050505050905090565b6000806118d06121f2565b905060006118de8286611f17565b905083811015611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614526565b60405180910390fd5b61193082868684036121fa565b60019250505092915050565b6000806119476121f2565b905061195481858561244f565b600191505092915050565b611967612174565b80600d8190555050565b600a60149054906101000a900460ff1681565b61198c612174565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a299190613e3c565b60405180910390a25050565b611a3d612174565b80601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b2e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6121fa565b611b3981600161164e565b50565b611b44612174565b81600b8190555080600c819055505050565b600b5481565b611b64612174565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c0a573373ffffffffffffffffffffffffffffffffffffffff1647604051611bbd90614577565b60006040518083038185875af1925050503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b505080915050611dc5565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c459190613ca8565b602060405180830381865afa158015611c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8691906145a1565b11611cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbd9061461a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d019190613ca8565b602060405180830381865afa158015611d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4291906145a1565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611d7f92919061463a565b6020604051808303816000875af1158015611d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc29190614678565b50505b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611df7612174565b60005b83839050811015611f0b5781601b6000868685818110611e1d57611e1c6143d1565b5b9050602002016020810190611e32919061403f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110611e9657611e956143d1565b5b9050602002016020810190611eab919061403f565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9283604051611ef09190613e3c565b60405180910390a28080611f0390614400565b915050611dfa565b50505050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fa6612174565b80600a60156101000a81548160ff02191690831515021790555050565b600d5481565b611fd1612174565b60005b838390508110156120e55781601d6000868685818110611ff757611ff66143d1565b5b905060200201602081019061200c919061403f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508383828181106120705761206f6143d1565b5b9050602002016020810190612085919061403f565b73ffffffffffffffffffffffffffffffffffffffff167fb05df283fc0d63b1908f977b7732784e2203a0d2ccd1280cf16706ff62c35162836040516120ca9190613e3c565b60405180910390a280806120dd90614400565b915050611fd4565b50505050565b6120f3612174565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215990614717565b60405180910390fd5b61216b81613214565b50565b600c5481565b61217c6121f2565b73ffffffffffffffffffffffffffffffffffffffff1661219a611809565b73ffffffffffffffffffffffffffffffffffffffff16146121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614783565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226090614815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf906148a7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123b69190614024565b60405180910390a3505050565b60006123cf8484611f17565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612449578181101561243b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243290614913565b60405180910390fd5b61244884848484036121fa565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b5906149a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361252d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252490614a37565b60405180910390fd5b6000601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506001151582151503612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614aa3565b60405180910390fd5b600115158115150361265d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265490614aa3565b60405180910390fd5b60008303612678576126718585600061337b565b5050613042565b612680611809565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156126ee57506126be611809565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156127275750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612761575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561277a5750600a60169054906101000a900460ff16155b15612b5d57600a60149054906101000a900460ff1661287457601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128345750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286a90614b0f565b60405180910390fd5b5b601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129175750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129be57600b54831115612961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295890614ba1565b60405180910390fd5b600c5461296d856115f2565b84612978919061430b565b11156129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b090614c0d565b60405180910390fd5b612b5c565b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a615750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ab057600b54831115612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa290614c9f565b60405180910390fd5b612b5b565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b5a57600c54612b0d856115f2565b84612b18919061430b565b1115612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090614c0d565b60405180910390fd5b5b5b5b5b6000612b68306115f2565b90506000600d548210159050808015612b8d5750600a60159054906101000a900460ff165b8015612ba65750600a60169054906101000a900460ff16155b8015612bfc5750601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c525750601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ca85750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cec576001600a60166101000a81548160ff021916908315150217905550612cd06135f1565b6000600a60166101000a81548160ff0219169083151502179055505b6000600a60169054906101000a900460ff16159050601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612da25750601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dac57600090505b6000811561302757601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e0f57506000601254115b15612edd57612e3d612710612e2f6012548a6138d890919063ffffffff16565b6138ee90919063ffffffff16565b905060125460155482612e509190614cbf565b612e5a9190614d30565b60186000828254612e6b919061430b565b9250508190555060125460135482612e839190614cbf565b612e8d9190614d30565b60166000828254612e9e919061430b565b9250508190555060125460145482612eb69190614cbf565b612ec09190614d30565b60176000828254612ed1919061430b565b92505081905550613003565b601c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f3857506000600e54115b1561300257612f66612710612f58600e548a6138d890919063ffffffff16565b6138ee90919063ffffffff16565b9050600e5460115482612f799190614cbf565b612f839190614d30565b60186000828254612f94919061430b565b92505081905550600e54600f5482612fac9190614cbf565b612fb69190614d30565b60166000828254612fc7919061430b565b92505081905550600e5460105482612fdf9190614cbf565b612fe99190614d30565b60176000828254612ffa919061430b565b925050819055505b5b60008111156130185761301789308361337b565b5b80876130249190614d61565b96505b61303289898961337b565b6019546012819055505050505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad90614e07565b60405180910390fd5b6130c282600083613904565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90614e99565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131fb9190614024565b60405180910390a361320f83600084613909565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e1906149a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345090614a37565b60405180910390fd5b613464838383613904565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e190614f2b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135d89190614024565b60405180910390a36135eb848484613909565b50505050565b60006135fc306115f2565b90506000601754601654601854613613919061430b565b61361d919061430b565b905060008083148061362f5750600082145b1561363c575050506138d6565b600a600d5461364b9190614cbf565b83111561366457600a600d546136619190614cbf565b92505b6000600283601854866136779190614cbf565b6136819190614d30565b61368b9190614d30565b905060006136a2828661390e90919063ffffffff16565b905060004790506136b282613924565b60006136c7824761390e90919063ffffffff16565b905060006136f2876136e4601654856138d890919063ffffffff16565b6138ee90919063ffffffff16565b9050600061371d8861370f601754866138d890919063ffffffff16565b6138ee90919063ffffffff16565b9050600081838561372e9190614d61565b6137389190614d61565b90506000601881905550600060168190555060006017819055506000871180156137625750600081115b156137af576137718782613b67565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516137a693929190614f4b565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516137f590614577565b60006040518083038185875af1925050503d8060008114613832576040519150601f19603f3d011682016040523d82523d6000602084013e613837565b606091505b505080985050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161388390614577565b60006040518083038185875af1925050503d80600081146138c0576040519150601f19603f3d011682016040523d82523d6000602084013e6138c5565b606091505b505080985050505050505050505050505b565b600081836138e69190614cbf565b905092915050565b600081836138fc9190614d30565b905092915050565b505050565b505050565b6000818361391c9190614d61565b905092915050565b6000600267ffffffffffffffff81111561394157613940614f82565b5b60405190808252806020026020018201604052801561396f5781602001602082028036833780820191505090505b5090503081600081518110613987576139866143d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a529190614fc6565b81600181518110613a6657613a656143d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613acd30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121fa565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b319594939291906150ec565b600060405180830381600087803b158015613b4b57600080fd5b505af1158015613b5f573d6000803e3d6000fd5b505050505050565b613b9430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121fa565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613c1d96959493929190615146565b60606040518083038185885af1158015613c3b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c6091906151a7565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c9282613c67565b9050919050565b613ca281613c87565b82525050565b6000602082019050613cbd6000830184613c99565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cfd578082015181840152602081019050613ce2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d2582613cc3565b613d2f8185613cce565b9350613d3f818560208601613cdf565b613d4881613d09565b840191505092915050565b60006020820190508181036000830152613d6d8184613d1a565b905092915050565b600080fd5b600080fd5b613d8881613c87565b8114613d9357600080fd5b50565b600081359050613da581613d7f565b92915050565b6000819050919050565b613dbe81613dab565b8114613dc957600080fd5b50565b600081359050613ddb81613db5565b92915050565b60008060408385031215613df857613df7613d75565b5b6000613e0685828601613d96565b9250506020613e1785828601613dcc565b9150509250929050565b60008115159050919050565b613e3681613e21565b82525050565b6000602082019050613e516000830184613e2d565b92915050565b600080600060608486031215613e7057613e6f613d75565b5b6000613e7e86828701613dcc565b9350506020613e8f86828701613dcc565b9250506040613ea086828701613dcc565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613ecf57613ece613eaa565b5b8235905067ffffffffffffffff811115613eec57613eeb613eaf565b5b602083019150836020820283011115613f0857613f07613eb4565b5b9250929050565b613f1881613e21565b8114613f2357600080fd5b50565b600081359050613f3581613f0f565b92915050565b600080600060408486031215613f5457613f53613d75565b5b600084013567ffffffffffffffff811115613f7257613f71613d7a565b5b613f7e86828701613eb9565b93509350506020613f9186828701613f26565b9150509250925092565b6000819050919050565b6000613fc0613fbb613fb684613c67565b613f9b565b613c67565b9050919050565b6000613fd282613fa5565b9050919050565b6000613fe482613fc7565b9050919050565b613ff481613fd9565b82525050565b600060208201905061400f6000830184613feb565b92915050565b61401e81613dab565b82525050565b60006020820190506140396000830184614015565b92915050565b60006020828403121561405557614054613d75565b5b600061406384828501613d96565b91505092915050565b60008060006060848603121561408557614084613d75565b5b600061409386828701613d96565b93505060206140a486828701613d96565b92505060406140b586828701613dcc565b9150509250925092565b600060ff82169050919050565b6140d5816140bf565b82525050565b60006020820190506140f060008301846140cc565b92915050565b60006020828403121561410c5761410b613d75565b5b600061411a84828501613dcc565b91505092915050565b6000806040838503121561413a57614139613d75565b5b600061414885828601613d96565b925050602061415985828601613f26565b9150509250929050565b6000806040838503121561417a57614179613d75565b5b600061418885828601613dcc565b925050602061419985828601613dcc565b9150509250929050565b600080604083850312156141ba576141b9613d75565b5b60006141c885828601613d96565b92505060206141d985828601613d96565b9150509250929050565b6000602082840312156141f9576141f8613d75565b5b600061420784828501613f26565b91505092915050565b7f54726164696e6720616c7265616479206163746976652e000000000000000000600082015250565b6000614246601783613cce565b915061425182614210565b602082019050919050565b6000602082019050818103600083015261427581614239565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142c357607f821691505b6020821081036142d6576142d561427c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431682613dab565b915061432183613dab565b9250828201905080821115614339576143386142dc565b5b92915050565b7f45524332303a204d757374206b656570206665657320617420353025206f722060008201527f6c65737300000000000000000000000000000000000000000000000000000000602082015250565b600061439b602483613cce565b91506143a68261433f565b604082019050919050565b600060208201905081810360008301526143ca8161438e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061440b82613dab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443d5761443c6142dc565b5b600182019050919050565b7f45524332303a2041646472657373203000000000000000000000000000000000600082015250565b600061447e601083613cce565b915061448982614448565b602082019050919050565b600060208201905081810360008301526144ad81614471565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614510602583613cce565b915061451b826144b4565b604082019050919050565b6000602082019050818103600083015261453f81614503565b9050919050565b600081905092915050565b50565b6000614561600083614546565b915061456c82614551565b600082019050919050565b600061458282614554565b9150819050919050565b60008151905061459b81613db5565b92915050565b6000602082840312156145b7576145b6613d75565b5b60006145c58482850161458c565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000614604600983613cce565b915061460f826145ce565b602082019050919050565b60006020820190508181036000830152614633816145f7565b9050919050565b600060408201905061464f6000830185613c99565b61465c6020830184614015565b9392505050565b60008151905061467281613f0f565b92915050565b60006020828403121561468e5761468d613d75565b5b600061469c84828501614663565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614701602683613cce565b915061470c826146a5565b604082019050919050565b60006020820190508181036000830152614730816146f4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061476d602083613cce565b915061477882614737565b602082019050919050565b6000602082019050818103600083015261479c81614760565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147ff602483613cce565b915061480a826147a3565b604082019050919050565b6000602082019050818103600083015261482e816147f2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614891602283613cce565b915061489c82614835565b604082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006148fd601d83613cce565b9150614908826148c7565b602082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061498f602583613cce565b915061499a82614933565b604082019050919050565b600060208201905081810360008301526149be81614982565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a21602383613cce565b9150614a2c826149c5565b604082019050919050565b60006020820190508181036000830152614a5081614a14565b9050919050565b7f45435232303a20426c61636b4c69737465642041646472657373000000000000600082015250565b6000614a8d601a83613cce565b9150614a9882614a57565b602082019050919050565b60006020820190508181036000830152614abc81614a80565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e000000600082015250565b6000614af9601d83613cce565b9150614b0482614ac3565b602082019050919050565b60006020820190508181036000830152614b2881614aec565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b6000614b8b603683613cce565b9150614b9682614b2f565b604082019050919050565b60006020820190508181036000830152614bba81614b7e565b9050919050565b7f45524332303a204d61782077616c6c6574206578636565646564000000000000600082015250565b6000614bf7601a83613cce565b9150614c0282614bc1565b602082019050919050565b60006020820190508181036000830152614c2681614bea565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560008201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b6000614c89603783613cce565b9150614c9482614c2d565b604082019050919050565b60006020820190508181036000830152614cb881614c7c565b9050919050565b6000614cca82613dab565b9150614cd583613dab565b9250828202614ce381613dab565b91508282048414831517614cfa57614cf96142dc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d3b82613dab565b9150614d4683613dab565b925082614d5657614d55614d01565b5b828204905092915050565b6000614d6c82613dab565b9150614d7783613dab565b9250828203905081811115614d8f57614d8e6142dc565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614df1602183613cce565b9150614dfc82614d95565b604082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e83602283613cce565b9150614e8e82614e27565b604082019050919050565b60006020820190508181036000830152614eb281614e76565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f15602683613cce565b9150614f2082614eb9565b604082019050919050565b60006020820190508181036000830152614f4481614f08565b9050919050565b6000606082019050614f606000830186614015565b614f6d6020830185614015565b614f7a6040830184614015565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614fc081613d7f565b92915050565b600060208284031215614fdc57614fdb613d75565b5b6000614fea84828501614fb1565b91505092915050565b6000819050919050565b600061501861501361500e84614ff3565b613f9b565b613dab565b9050919050565b61502881614ffd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506381613c87565b82525050565b6000615075838361505a565b60208301905092915050565b6000602082019050919050565b60006150998261502e565b6150a38185615039565b93506150ae8361504a565b8060005b838110156150df5781516150c68882615069565b97506150d183615081565b9250506001810190506150b2565b5085935050505092915050565b600060a0820190506151016000830188614015565b61510e602083018761501f565b8181036040830152615120818661508e565b905061512f6060830185613c99565b61513c6080830184614015565b9695505050505050565b600060c08201905061515b6000830189613c99565b6151686020830188614015565b615175604083018761501f565b615182606083018661501f565b61518f6080830185613c99565b61519c60a0830184614015565b979650505050505050565b6000806000606084860312156151c0576151bf613d75565b5b60006151ce8682870161458c565b93505060206151df8682870161458c565b92505060406151f08682870161458c565b915050925092509256fea2646970667358221220ceb6ae1960ef6e44afb2917abc1a95b2da13bcbb8843f577d54dba0d83f74b4964736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102cd5760003560e01c8063715018a611610175578063c0d78655116100dc578063d85ba06311610095578063e2f456051161006f578063e2f4560514610ae9578063f17889cd14610b14578063f2fde38b14610b3d578063f8b45b0514610b66576102d4565b8063d85ba06314610a58578063dd62ed3e14610a83578063e01af92c14610ac0576102d4565b8063c0d786551461095e578063c24a7a8c14610987578063c3f70b52146109b0578063cb963728146109db578063d469801614610a04578063d7d1d10e14610a2f576102d4565b806395d89b411161012e57806395d89b411461083c578063a457c2d714610867578063a9059cbb146108a4578063afa4f3b2146108e1578063bbc0c7421461090a578063c024666814610935576102d4565b8063715018a6146107665780637571336a1461077d57806375f0a874146107a65780637fa787ba146107d157806388d61fbc146107e85780638da5cb5b14610811576102d4565b806323b872dd1161023457806349bd5a5e116101ed5780635d098b38116101c75780635d098b38146106aa5780636a486a8e146106d35780636ddd1713146106fe57806370a0823114610729576102d4565b806349bd5a5e146106195780634fbee193146106445780635cd8c07214610681576102d4565b806323b872dd146104f757806327c8f83514610534578063296f0a0c1461055f578063313ce5671461058857806339509351146105b357806342966c68146105f0576102d4565b8063155ca7c111610286578063155ca7c1146103d55780631694505e146103fe57806318160ddd1461042957806318d9ceae146104545780631c4ba3ed146104915780631cdd3be3146104ba576102d4565b806301339c21146102d957806306228749146102f057806306fdde031461031b578063095ea7b3146103465780630d075d9c146103835780630f683e90146103ac576102d4565b366102d457005b600080fd5b3480156102e557600080fd5b506102ee610b91565b005b3480156102fc57600080fd5b50610305610c21565b6040516103129190613ca8565b60405180910390f35b34801561032757600080fd5b50610330610c47565b60405161033d9190613d53565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190613de1565b610cd9565b60405161037a9190613e3c565b60405180910390f35b34801561038f57600080fd5b506103aa60048036038101906103a59190613e57565b610cfc565b005b3480156103b857600080fd5b506103d360048036038101906103ce9190613e57565b610d9c565b005b3480156103e157600080fd5b506103fc60048036038101906103f79190613f3b565b610e45565b005b34801561040a57600080fd5b50610413610f67565b6040516104209190613ffa565b60405180910390f35b34801561043557600080fd5b5061043e610f8d565b60405161044b9190614024565b60405180910390f35b34801561046057600080fd5b5061047b6004803603810190610476919061403f565b610f97565b6040516104889190613e3c565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b3919061403f565b610fed565b005b3480156104c657600080fd5b506104e160048036038101906104dc919061403f565b61114c565b6040516104ee9190613e3c565b60405180910390f35b34801561050357600080fd5b5061051e6004803603810190610519919061406c565b61116c565b60405161052b9190613e3c565b60405180910390f35b34801561054057600080fd5b5061054961119b565b6040516105569190613ca8565b60405180910390f35b34801561056b57600080fd5b506105866004803603810190610581919061403f565b6111a1565b005b34801561059457600080fd5b5061059d611300565b6040516105aa91906140db565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190613de1565b611309565b6040516105e79190613e3c565b60405180910390f35b3480156105fc57600080fd5b50610617600480360381019061061291906140f6565b611340565b005b34801561062557600080fd5b5061062e61134d565b60405161063b9190613ca8565b60405180910390f35b34801561065057600080fd5b5061066b6004803603810190610666919061403f565b611373565b6040516106789190613e3c565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190614123565b6113c9565b005b3480156106b657600080fd5b506106d160048036038101906106cc919061403f565b61147a565b005b3480156106df57600080fd5b506106e86115d9565b6040516106f59190614024565b60405180910390f35b34801561070a57600080fd5b506107136115df565b6040516107209190613e3c565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b919061403f565b6115f2565b60405161075d9190614024565b60405180910390f35b34801561077257600080fd5b5061077b61163a565b005b34801561078957600080fd5b506107a4600480360381019061079f9190614123565b61164e565b005b3480156107b257600080fd5b506107bb6116ff565b6040516107c89190613ca8565b60405180910390f35b3480156107dd57600080fd5b506107e6611725565b005b3480156107f457600080fd5b5061080f600480360381019061080a919061403f565b61177c565b005b34801561081d57600080fd5b50610826611809565b6040516108339190613ca8565b60405180910390f35b34801561084857600080fd5b50610851611833565b60405161085e9190613d53565b60405180910390f35b34801561087357600080fd5b5061088e60048036038101906108899190613de1565b6118c5565b60405161089b9190613e3c565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c69190613de1565b61193c565b6040516108d89190613e3c565b60405180910390f35b3480156108ed57600080fd5b50610908600480360381019061090391906140f6565b61195f565b005b34801561091657600080fd5b5061091f611971565b60405161092c9190613e3c565b60405180910390f35b34801561094157600080fd5b5061095c60048036038101906109579190614123565b611984565b005b34801561096a57600080fd5b506109856004803603810190610980919061403f565b611a35565b005b34801561099357600080fd5b506109ae60048036038101906109a99190614163565b611b3c565b005b3480156109bc57600080fd5b506109c5611b56565b6040516109d29190614024565b60405180910390f35b3480156109e757600080fd5b50610a0260048036038101906109fd919061403f565b611b5c565b005b348015610a1057600080fd5b50610a19611dc9565b604051610a269190613ca8565b60405180910390f35b348015610a3b57600080fd5b50610a566004803603810190610a519190613f3b565b611def565b005b348015610a6457600080fd5b50610a6d611f11565b604051610a7a9190614024565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa591906141a3565b611f17565b604051610ab79190614024565b60405180910390f35b348015610acc57600080fd5b50610ae76004803603810190610ae291906141e3565b611f9e565b005b348015610af557600080fd5b50610afe611fc3565b604051610b0b9190614024565b60405180910390f35b348015610b2057600080fd5b50610b3b6004803603810190610b369190613f3b565b611fc9565b005b348015610b4957600080fd5b50610b646004803603810190610b5f919061403f565b6120eb565b005b348015610b7257600080fd5b50610b7b61216e565b604051610b889190614024565b60405180910390f35b610b99612174565b600a60149054906101000a900460ff1615610be9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be09061425c565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff021916908315150217905550565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610c56906142ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610c82906142ab565b8015610ccf5780601f10610ca457610100808354040283529160200191610ccf565b820191906000526020600020905b815481529060010190602001808311610cb257829003601f168201915b5050505050905090565b600080610ce46121f2565b9050610cf18185856121fa565b600191505092915050565b610d04612174565b611388818385610d14919061430b565b610d1e919061430b565b1115610d5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d56906143b1565b60405180910390fd5b82600f819055508160108190555080601181905550601154601054600f54610d87919061430b565b610d91919061430b565b600e81905550505050565b610da4612174565b611388818385610db4919061430b565b610dbe919061430b565b1115610dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df6906143b1565b60405180910390fd5b826013819055508160148190555080601581905550601554601454601354610e27919061430b565b610e31919061430b565b601281905550601254601981905550505050565b610e4d612174565b60005b83839050811015610f615781601a6000868685818110610e7357610e726143d1565b5b9050602002016020810190610e88919061403f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610eec57610eeb6143d1565b5b9050602002016020810190610f01919061403f565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610f469190613e3c565b60405180910390a28080610f5990614400565b915050610e50565b50505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ff5612174565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105b90614494565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa8815068543339c6d09bdcbe1c75c2659b5b32cd2b31ecbdcfc9dcc590e45eef60405160405180910390a35050565b601d6020528060005260406000206000915054906101000a900460ff1681565b6000806111776121f2565b90506111848582856123c3565b61118f85858561244f565b60019150509392505050565b61dead81565b6111a9612174565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f90614494565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f3e0ea4f8339b6050ff814971a9814aa39176c149fcf185975c219f33db2342db60405160405180910390a35050565b60006012905090565b6000806113146121f2565b90506113358185856113268589611f17565b611330919061430b565b6121fa565b600191505092915050565b61134a3382613047565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6113d1612174565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167fb05df283fc0d63b1908f977b7732784e2203a0d2ccd1280cf16706ff62c351628260405161146e9190613e3c565b60405180910390a25050565b611482612174565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e890614494565b60405180910390fd5b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a35050565b60125481565b600a60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611642612174565b61164c6000613214565b565b611656612174565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc92826040516116f39190613e3c565b60405180910390a25050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61172d612174565b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611778573d6000803e3d6000fd5b5050565b611784612174565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506117d08160016132da565b6117db81600161164e565b61180630827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6121fa565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611842906142ab565b80601f016020809104026020016040519081016040528092919081815260200182805461186e906142ab565b80156118bb5780601f10611890576101008083540402835291602001916118bb565b820191906000526020600020905b81548152906001019060200180831161189e57829003601f168201915b5050505050905090565b6000806118d06121f2565b905060006118de8286611f17565b905083811015611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90614526565b60405180910390fd5b61193082868684036121fa565b60019250505092915050565b6000806119476121f2565b905061195481858561244f565b600191505092915050565b611967612174565b80600d8190555050565b600a60149054906101000a900460ff1681565b61198c612174565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a299190613e3c565b60405180910390a25050565b611a3d612174565b80601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611b2e30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6121fa565b611b3981600161164e565b50565b611b44612174565b81600b8190555080600c819055505050565b600b5481565b611b64612174565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c0a573373ffffffffffffffffffffffffffffffffffffffff1647604051611bbd90614577565b60006040518083038185875af1925050503d8060008114611bfa576040519150601f19603f3d011682016040523d82523d6000602084013e611bff565b606091505b505080915050611dc5565b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c459190613ca8565b602060405180830381865afa158015611c62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8691906145a1565b11611cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbd9061461a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611d019190613ca8565b602060405180830381865afa158015611d1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d4291906145a1565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611d7f92919061463a565b6020604051808303816000875af1158015611d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc29190614678565b50505b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611df7612174565b60005b83839050811015611f0b5781601b6000868685818110611e1d57611e1c6143d1565b5b9050602002016020810190611e32919061403f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110611e9657611e956143d1565b5b9050602002016020810190611eab919061403f565b73ffffffffffffffffffffffffffffffffffffffff167f4b89c347592b1d537e066cb4ed98d87696ae35164745d7e370e4add16941dc9283604051611ef09190613e3c565b60405180910390a28080611f0390614400565b915050611dfa565b50505050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fa6612174565b80600a60156101000a81548160ff02191690831515021790555050565b600d5481565b611fd1612174565b60005b838390508110156120e55781601d6000868685818110611ff757611ff66143d1565b5b905060200201602081019061200c919061403f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508383828181106120705761206f6143d1565b5b9050602002016020810190612085919061403f565b73ffffffffffffffffffffffffffffffffffffffff167fb05df283fc0d63b1908f977b7732784e2203a0d2ccd1280cf16706ff62c35162836040516120ca9190613e3c565b60405180910390a280806120dd90614400565b915050611fd4565b50505050565b6120f3612174565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215990614717565b60405180910390fd5b61216b81613214565b50565b600c5481565b61217c6121f2565b73ffffffffffffffffffffffffffffffffffffffff1661219a611809565b73ffffffffffffffffffffffffffffffffffffffff16146121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614783565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226090614815565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf906148a7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123b69190614024565b60405180910390a3505050565b60006123cf8484611f17565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612449578181101561243b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243290614913565b60405180910390fd5b61244884848484036121fa565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b5906149a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361252d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252490614a37565b60405180910390fd5b6000601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506000601d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690506001151582151503612616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260d90614aa3565b60405180910390fd5b600115158115150361265d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265490614aa3565b60405180910390fd5b60008303612678576126718585600061337b565b5050613042565b612680611809565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156126ee57506126be611809565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156127275750600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b8015612761575061dead73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b801561277a5750600a60169054906101000a900460ff16155b15612b5d57600a60149054906101000a900460ff1661287457601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128345750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286a90614b0f565b60405180910390fd5b5b601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129175750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129be57600b54831115612961576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295890614ba1565b60405180910390fd5b600c5461296d856115f2565b84612978919061430b565b11156129b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b090614c0d565b60405180910390fd5b612b5c565b601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a615750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ab057600b54831115612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa290614c9f565b60405180910390fd5b612b5b565b601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612b5a57600c54612b0d856115f2565b84612b18919061430b565b1115612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090614c0d565b60405180910390fd5b5b5b5b5b6000612b68306115f2565b90506000600d548210159050808015612b8d5750600a60159054906101000a900460ff165b8015612ba65750600a60169054906101000a900460ff16155b8015612bfc5750601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612c525750601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ca85750601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cec576001600a60166101000a81548160ff021916908315150217905550612cd06135f1565b6000600a60166101000a81548160ff0219169083151502179055505b6000600a60169054906101000a900460ff16159050601a60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612da25750601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612dac57600090505b6000811561302757601c60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e0f57506000601254115b15612edd57612e3d612710612e2f6012548a6138d890919063ffffffff16565b6138ee90919063ffffffff16565b905060125460155482612e509190614cbf565b612e5a9190614d30565b60186000828254612e6b919061430b565b9250508190555060125460135482612e839190614cbf565b612e8d9190614d30565b60166000828254612e9e919061430b565b9250508190555060125460145482612eb69190614cbf565b612ec09190614d30565b60176000828254612ed1919061430b565b92505081905550613003565b601c60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f3857506000600e54115b1561300257612f66612710612f58600e548a6138d890919063ffffffff16565b6138ee90919063ffffffff16565b9050600e5460115482612f799190614cbf565b612f839190614d30565b60186000828254612f94919061430b565b92505081905550600e54600f5482612fac9190614cbf565b612fb69190614d30565b60166000828254612fc7919061430b565b92505081905550600e5460105482612fdf9190614cbf565b612fe99190614d30565b60176000828254612ffa919061430b565b925050819055505b5b60008111156130185761301789308361337b565b5b80876130249190614d61565b96505b61303289898961337b565b6019546012819055505050505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036130b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ad90614e07565b60405180910390fd5b6130c282600083613904565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90614e99565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516131fb9190614024565b60405180910390a361320f83600084613909565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133e1906149a5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345090614a37565b60405180910390fd5b613464838383613904565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e190614f2b565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135d89190614024565b60405180910390a36135eb848484613909565b50505050565b60006135fc306115f2565b90506000601754601654601854613613919061430b565b61361d919061430b565b905060008083148061362f5750600082145b1561363c575050506138d6565b600a600d5461364b9190614cbf565b83111561366457600a600d546136619190614cbf565b92505b6000600283601854866136779190614cbf565b6136819190614d30565b61368b9190614d30565b905060006136a2828661390e90919063ffffffff16565b905060004790506136b282613924565b60006136c7824761390e90919063ffffffff16565b905060006136f2876136e4601654856138d890919063ffffffff16565b6138ee90919063ffffffff16565b9050600061371d8861370f601754866138d890919063ffffffff16565b6138ee90919063ffffffff16565b9050600081838561372e9190614d61565b6137389190614d61565b90506000601881905550600060168190555060006017819055506000871180156137625750600081115b156137af576137718782613b67565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516137a693929190614f4b565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516137f590614577565b60006040518083038185875af1925050503d8060008114613832576040519150601f19603f3d011682016040523d82523d6000602084013e613837565b606091505b505080985050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161388390614577565b60006040518083038185875af1925050503d80600081146138c0576040519150601f19603f3d011682016040523d82523d6000602084013e6138c5565b606091505b505080985050505050505050505050505b565b600081836138e69190614cbf565b905092915050565b600081836138fc9190614d30565b905092915050565b505050565b505050565b6000818361391c9190614d61565b905092915050565b6000600267ffffffffffffffff81111561394157613940614f82565b5b60405190808252806020026020018201604052801561396f5781602001602082028036833780820191505090505b5090503081600081518110613987576139866143d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a529190614fc6565b81600181518110613a6657613a656143d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613acd30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121fa565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b319594939291906150ec565b600060405180830381600087803b158015613b4b57600080fd5b505af1158015613b5f573d6000803e3d6000fd5b505050505050565b613b9430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846121fa565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613c1d96959493929190615146565b60606040518083038185885af1158015613c3b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c6091906151a7565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c9282613c67565b9050919050565b613ca281613c87565b82525050565b6000602082019050613cbd6000830184613c99565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cfd578082015181840152602081019050613ce2565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d2582613cc3565b613d2f8185613cce565b9350613d3f818560208601613cdf565b613d4881613d09565b840191505092915050565b60006020820190508181036000830152613d6d8184613d1a565b905092915050565b600080fd5b600080fd5b613d8881613c87565b8114613d9357600080fd5b50565b600081359050613da581613d7f565b92915050565b6000819050919050565b613dbe81613dab565b8114613dc957600080fd5b50565b600081359050613ddb81613db5565b92915050565b60008060408385031215613df857613df7613d75565b5b6000613e0685828601613d96565b9250506020613e1785828601613dcc565b9150509250929050565b60008115159050919050565b613e3681613e21565b82525050565b6000602082019050613e516000830184613e2d565b92915050565b600080600060608486031215613e7057613e6f613d75565b5b6000613e7e86828701613dcc565b9350506020613e8f86828701613dcc565b9250506040613ea086828701613dcc565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f840112613ecf57613ece613eaa565b5b8235905067ffffffffffffffff811115613eec57613eeb613eaf565b5b602083019150836020820283011115613f0857613f07613eb4565b5b9250929050565b613f1881613e21565b8114613f2357600080fd5b50565b600081359050613f3581613f0f565b92915050565b600080600060408486031215613f5457613f53613d75565b5b600084013567ffffffffffffffff811115613f7257613f71613d7a565b5b613f7e86828701613eb9565b93509350506020613f9186828701613f26565b9150509250925092565b6000819050919050565b6000613fc0613fbb613fb684613c67565b613f9b565b613c67565b9050919050565b6000613fd282613fa5565b9050919050565b6000613fe482613fc7565b9050919050565b613ff481613fd9565b82525050565b600060208201905061400f6000830184613feb565b92915050565b61401e81613dab565b82525050565b60006020820190506140396000830184614015565b92915050565b60006020828403121561405557614054613d75565b5b600061406384828501613d96565b91505092915050565b60008060006060848603121561408557614084613d75565b5b600061409386828701613d96565b93505060206140a486828701613d96565b92505060406140b586828701613dcc565b9150509250925092565b600060ff82169050919050565b6140d5816140bf565b82525050565b60006020820190506140f060008301846140cc565b92915050565b60006020828403121561410c5761410b613d75565b5b600061411a84828501613dcc565b91505092915050565b6000806040838503121561413a57614139613d75565b5b600061414885828601613d96565b925050602061415985828601613f26565b9150509250929050565b6000806040838503121561417a57614179613d75565b5b600061418885828601613dcc565b925050602061419985828601613dcc565b9150509250929050565b600080604083850312156141ba576141b9613d75565b5b60006141c885828601613d96565b92505060206141d985828601613d96565b9150509250929050565b6000602082840312156141f9576141f8613d75565b5b600061420784828501613f26565b91505092915050565b7f54726164696e6720616c7265616479206163746976652e000000000000000000600082015250565b6000614246601783613cce565b915061425182614210565b602082019050919050565b6000602082019050818103600083015261427581614239565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142c357607f821691505b6020821081036142d6576142d561427c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431682613dab565b915061432183613dab565b9250828201905080821115614339576143386142dc565b5b92915050565b7f45524332303a204d757374206b656570206665657320617420353025206f722060008201527f6c65737300000000000000000000000000000000000000000000000000000000602082015250565b600061439b602483613cce565b91506143a68261433f565b604082019050919050565b600060208201905081810360008301526143ca8161438e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061440b82613dab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361443d5761443c6142dc565b5b600182019050919050565b7f45524332303a2041646472657373203000000000000000000000000000000000600082015250565b600061447e601083613cce565b915061448982614448565b602082019050919050565b600060208201905081810360008301526144ad81614471565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614510602583613cce565b915061451b826144b4565b604082019050919050565b6000602082019050818103600083015261453f81614503565b9050919050565b600081905092915050565b50565b6000614561600083614546565b915061456c82614551565b600082019050919050565b600061458282614554565b9150819050919050565b60008151905061459b81613db5565b92915050565b6000602082840312156145b7576145b6613d75565b5b60006145c58482850161458c565b91505092915050565b7f4e6f20746f6b656e730000000000000000000000000000000000000000000000600082015250565b6000614604600983613cce565b915061460f826145ce565b602082019050919050565b60006020820190508181036000830152614633816145f7565b9050919050565b600060408201905061464f6000830185613c99565b61465c6020830184614015565b9392505050565b60008151905061467281613f0f565b92915050565b60006020828403121561468e5761468d613d75565b5b600061469c84828501614663565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614701602683613cce565b915061470c826146a5565b604082019050919050565b60006020820190508181036000830152614730816146f4565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061476d602083613cce565b915061477882614737565b602082019050919050565b6000602082019050818103600083015261479c81614760565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006147ff602483613cce565b915061480a826147a3565b604082019050919050565b6000602082019050818103600083015261482e816147f2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614891602283613cce565b915061489c82614835565b604082019050919050565b600060208201905081810360008301526148c081614884565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b60006148fd601d83613cce565b9150614908826148c7565b602082019050919050565b6000602082019050818103600083015261492c816148f0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061498f602583613cce565b915061499a82614933565b604082019050919050565b600060208201905081810360008301526149be81614982565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614a21602383613cce565b9150614a2c826149c5565b604082019050919050565b60006020820190508181036000830152614a5081614a14565b9050919050565b7f45435232303a20426c61636b4c69737465642041646472657373000000000000600082015250565b6000614a8d601a83613cce565b9150614a9882614a57565b602082019050919050565b60006020820190508181036000830152614abc81614a80565b9050919050565b7f45524332303a2054726164696e67206973206e6f74206163746976652e000000600082015250565b6000614af9601d83613cce565b9150614b0482614ac3565b602082019050919050565b60006020820190508181036000830152614b2881614aec565b9050919050565b7f45524332303a20427579207472616e7366657220616d6f756e7420657863656560008201527f647320746865206d61785472616e73616374696f6e2e00000000000000000000602082015250565b6000614b8b603683613cce565b9150614b9682614b2f565b604082019050919050565b60006020820190508181036000830152614bba81614b7e565b9050919050565b7f45524332303a204d61782077616c6c6574206578636565646564000000000000600082015250565b6000614bf7601a83613cce565b9150614c0282614bc1565b602082019050919050565b60006020820190508181036000830152614c2681614bea565b9050919050565b7f45524332303a2053656c6c207472616e7366657220616d6f756e74206578636560008201527f65647320746865206d61785472616e73616374696f6e2e000000000000000000602082015250565b6000614c89603783613cce565b9150614c9482614c2d565b604082019050919050565b60006020820190508181036000830152614cb881614c7c565b9050919050565b6000614cca82613dab565b9150614cd583613dab565b9250828202614ce381613dab565b91508282048414831517614cfa57614cf96142dc565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614d3b82613dab565b9150614d4683613dab565b925082614d5657614d55614d01565b5b828204905092915050565b6000614d6c82613dab565b9150614d7783613dab565b9250828203905081811115614d8f57614d8e6142dc565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614df1602183613cce565b9150614dfc82614d95565b604082019050919050565b60006020820190508181036000830152614e2081614de4565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e83602283613cce565b9150614e8e82614e27565b604082019050919050565b60006020820190508181036000830152614eb281614e76565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614f15602683613cce565b9150614f2082614eb9565b604082019050919050565b60006020820190508181036000830152614f4481614f08565b9050919050565b6000606082019050614f606000830186614015565b614f6d6020830185614015565b614f7a6040830184614015565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614fc081613d7f565b92915050565b600060208284031215614fdc57614fdb613d75565b5b6000614fea84828501614fb1565b91505092915050565b6000819050919050565b600061501861501361500e84614ff3565b613f9b565b613dab565b9050919050565b61502881614ffd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61506381613c87565b82525050565b6000615075838361505a565b60208301905092915050565b6000602082019050919050565b60006150998261502e565b6150a38185615039565b93506150ae8361504a565b8060005b838110156150df5781516150c68882615069565b97506150d183615081565b9250506001810190506150b2565b5085935050505092915050565b600060a0820190506151016000830188614015565b61510e602083018761501f565b8181036040830152615120818661508e565b905061512f6060830185613c99565b61513c6080830184614015565b9695505050505050565b600060c08201905061515b6000830189613c99565b6151686020830188614015565b615175604083018761501f565b615182606083018661501f565b61518f6080830185613c99565b61519c60a0830184614015565b979650505050505050565b6000806000606084860312156151c0576151bf613d75565b5b60006151ce8682870161458c565b93505060206151df8682870161458c565b92505060406151f08682870161458c565b915050925092509256fea2646970667358221220ceb6ae1960ef6e44afb2917abc1a95b2da13bcbb8843f577d54dba0d83f74b4964736f6c63430008110033

Deployed Bytecode Sourcemap

21422:16852:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26208:168;;;;;;;;;;;;;:::i;:::-;;21626:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6415:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7966:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26830:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27320:568;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29535:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21506:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6906:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30968:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28210:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22617:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8218:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21695:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28484:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6748:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8523:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25530:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21554:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31154:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29841:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27896:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22107:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21789:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7077:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2741:103;;;;;;;;;;;;;:::i;:::-;;28798:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21589:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30807:153;;;;;;;;;;;;;:::i;:::-;;25621:283;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2100:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6634:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8803:505;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7460:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26483:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21757:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29354:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25914:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26603:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21850:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30331:468;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21658:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29026:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21959:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7757:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26384:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21917:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30035:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2999:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21886:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26208:168;1986:13;:11;:13::i;:::-;26263::::1;;;;;;;;;;;26262:14;26254:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;26331:4;26315:13;;:20;;;;;;;;;;;;;;;;;;26360:4;26346:11;;:18;;;;;;;;;;;;;;;;;;26208:168::o:0;21626:25::-;;;;;;;;;;;;;:::o;6415:100::-;6469:13;6502:5;6495:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6415:100;:::o;7966:242::-;8085:4;8107:13;8123:12;:10;:12::i;:::-;8107:28;;8146:32;8155:5;8162:7;8171:6;8146:8;:32::i;:::-;8196:4;8189:11;;;7966:242;;;;:::o;26830:482::-;1986:13;:11;:13::i;:::-;27042:4:::1;27025:13;27014:8;26998:13;:24;;;;:::i;:::-;:40;;;;:::i;:::-;:48;;26976:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;27140:13;27121:16;:32;;;;27178:8;27164:11;:22;;;;27216:13;27197:16;:32;;;;27288:16;;27274:11;;27255:16;;:30;;;;:::i;:::-;:49;;;;:::i;:::-;27240:12;:64;;;;26830:482:::0;;;:::o;27320:568::-;1986:13;:11;:13::i;:::-;27533:4:::1;27516:13;27505:8;27489:13;:24;;;;:::i;:::-;:40;;;;:::i;:::-;:48;;27467:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;27632:13;27612:17;:33;;;;27671:8;27656:12;:23;;;;27710:13;27690:17;:33;;;;27824:17;;27796:12;;27763:17;;:45;;;;:::i;:::-;:78;;;;:::i;:::-;27734:13;:107;;;;27867:13;;27852:12;:28;;;;27320:568:::0;;;:::o;29535:296::-;1986:13;:11;:13::i;:::-;29661:9:::1;29656:168;29680:8;;:15;;29676:1;:19;29656:168;;;29752:5;29717:19;:32;29737:8;;29746:1;29737:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29717:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;29793:8;;29802:1;29793:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29777:35;;;29806:5;29777:35;;;;;;:::i;:::-;;;;;;;;29697:3;;;;;:::i;:::-;;;;29656:168;;;;29535:296:::0;;;:::o;21506:41::-;;;;;;;;;;;;;:::o;6906:108::-;6967:7;6994:12;;6987:19;;6906:108;:::o;30968:178::-;31071:4;31100:29;:38;31130:7;31100:38;;;;;;;;;;;;;;;;;;;;;;;;;31093:45;;30968:178;;;:::o;28210:266::-;1986:13;:11;:13::i;:::-;28313:1:::1;28290:25;;:11;:25;;::::0;28282:54:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28347:17;28367:10;;;;;;;;;;;28347:30;;28401:11;28388:10;;:24;;;;;;;;;;;;;;;;;;28458:9;28428:40;;28446:10;;;;;;;;;;;28428:40;;;;;;;;;;;;28271:205;28210:266:::0;:::o;22617:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;8218:295::-;8349:4;8366:15;8384:12;:10;:12::i;:::-;8366:30;;8407:38;8423:4;8429:7;8438:6;8407:15;:38::i;:::-;8456:27;8466:4;8472:2;8476:6;8456:9;:27::i;:::-;8501:4;8494:11;;;8218:295;;;;;:::o;21695:53::-;21741:6;21695:53;:::o;28484:306::-;1986:13;:11;:13::i;:::-;28602:1:::1;28574:30;;:16;:30;;::::0;28566:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28636:17;28656:15;;;;;;;;;;;28636:35;;28700:16;28682:15;;:34;;;;;;;;;;;;;;;;;;28772:9;28732:50;;28755:15;;;;;;;;;;;28732:50;;;;;;;;;;;;28555:235;28484:306:::0;:::o;6748:93::-;6806:5;6831:2;6824:9;;6748:93;:::o;8523:270::-;8638:4;8660:13;8676:12;:10;:12::i;:::-;8660:28;;8699:64;8708:5;8715:7;8752:10;8724:25;8734:5;8741:7;8724:9;:25::i;:::-;:38;;;;:::i;:::-;8699:8;:64::i;:::-;8781:4;8774:11;;;8523:270;;;;:::o;25530:81::-;25578:25;25584:10;25596:6;25578:5;:25::i;:::-;25530:81;:::o;21554:28::-;;;;;;;;;;;;;:::o;31154:126::-;31220:4;31244:19;:28;31264:7;31244:28;;;;;;;;;;;;;;;;;;;;;;;;;31237:35;;31154:126;;;:::o;29841:186::-;1986:13;:11;:13::i;:::-;29971:5:::1;29945:14;:23;29960:7;29945:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;30004:7;29992:27;;;30013:5;29992:27;;;;;;:::i;:::-;;;;;;;;29841:186:::0;;:::o;27896:306::-;1986:13;:11;:13::i;:::-;28014:1:::1;27986:30;;:16;:30;;::::0;27978:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28048:17;28068:15;;;;;;;;;;;28048:35;;28112:16;28094:15;;:34;;;;;;;;;;;;;;;;;;28184:9;28144:50;;28167:15;;;;;;;;;;;28144:50;;;;;;;;;;;;27967:235;27896:306:::0;:::o;22107:28::-;;;;:::o;21789:23::-;;;;;;;;;;;;;:::o;7077:177::-;7196:7;7228:9;:18;7238:7;7228:18;;;;;;;;;;;;;;;;7221:25;;7077:177;;;:::o;2741:103::-;1986:13;:11;:13::i;:::-;2806:30:::1;2833:1;2806:18;:30::i;:::-;2741:103::o:0;28798:218::-;1986:13;:11;:13::i;:::-;28954:5:::1;28913:29;:38;28943:7;28913:38;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28993:7;28975:33;;;29002:5;28975:33;;;;;;:::i;:::-;;;;;;;;28798:218:::0;;:::o;21589:30::-;;;;;;;;;;;;;:::o;30807:153::-;1986:13;:11;:13::i;:::-;30865:15:::1;30883:21;30865:39;;30923:10;30915:28;;:37;30944:7;30915:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30854:106;30807:153::o:0;25621:283::-;1986:13;:11;:13::i;:::-;25697:5:::1;25681:13;;:21;;;;;;;;;;;;;;;;;;25713:50;25750:5;25758:4;25713:28;:50::i;:::-;25774:47;25808:5;25816:4;25774:25;:47::i;:::-;25832:58;25849:4;25864:5;25872:17;25832:8;:58::i;:::-;25621:283:::0;:::o;2100:87::-;2146:7;2173:6;;;;;;;;;;;2166:13;;2100:87;:::o;6634:104::-;6690:13;6723:7;6716:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6634:104;:::o;8803:505::-;8923:4;8945:13;8961:12;:10;:12::i;:::-;8945:28;;8984:24;9011:25;9021:5;9028:7;9011:9;:25::i;:::-;8984:52;;9089:15;9069:16;:35;;9047:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;9205:60;9214:5;9221:7;9249:15;9230:16;:34;9205:8;:60::i;:::-;9296:4;9289:11;;;;8803:505;;;;:::o;7460:234::-;7575:4;7597:13;7613:12;:10;:12::i;:::-;7597:28;;7636;7646:5;7653:2;7657:6;7636:9;:28::i;:::-;7682:4;7675:11;;;7460:234;;;;:::o;26483:112::-;1986:13;:11;:13::i;:::-;26581:6:::1;26560:18;:27;;;;26483:112:::0;:::o;21757:25::-;;;;;;;;;;;;;:::o;29354:173::-;1986:13;:11;:13::i;:::-;29467:5:::1;29436:19;:28;29456:7;29436:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;29504:7;29488:31;;;29513:5;29488:31;;;;;;:::i;:::-;;;;;;;;29354:173:::0;;:::o;25914:286::-;1986:13;:11;:13::i;:::-;25989:6:::1;25977:9;;:18;;;;;;;;;;;;;;;;;;26044:9;;;;;;;;;;;26007:15;;:47;;;;;;;;;;;;;;;;;;26065:68;26082:4;26097:15;;;;;;;;;;;26115:17;26065:8;:68::i;:::-;26144:48;26178:6;26187:4;26144:25;:48::i;:::-;25914:286:::0;:::o;26603:219::-;1986:13;:11;:13::i;:::-;26766:15:::1;26749:14;:32;;;;26804:10;26792:9;:22;;;;26603:219:::0;;:::o;21850:29::-;;;;:::o;30331:468::-;1986:13;:11;:13::i;:::-;30401:12:::1;30443:1:::0;30428:17:::1;;:3;:17;;::::0;30424:368:::1;;30482:10;30474:24;;30524:21;30474:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30460:104;;;;;30424:368;;;30642:1;30610:3;30603:21;;;30633:4;30603:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;30595:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30672:14;30696:3;30689:21;;;30719:4;30689:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30672:53;;30747:3;30740:20;;;30761:10;30773:6;30740:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30580:212;30424:368;30390:409;30331:468:::0;:::o;21658:30::-;;;;;;;;;;;;;:::o;29026:320::-;1986:13;:11;:13::i;:::-;29164:9:::1;29159:180;29183:8;;:15;;29179:1;:19;29159:180;;;29265:5;29220:29;:42;29250:8;;29259:1;29250:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29220:42;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;29308:8;;29317:1;29308:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29290:37;;;29321:5;29290:37;;;;;;:::i;:::-;;;;;;;;29200:3;;;;;:::i;:::-;;;;29159:180;;;;29026:320:::0;;;:::o;21959:27::-;;;;:::o;7757:201::-;7891:7;7923:11;:18;7935:5;7923:18;;;;;;;;;;;;;;;:27;7942:7;7923:27;;;;;;;;;;;;;;;;7916:34;;7757:201;;;;:::o;26384:91::-;1986:13;:11;:13::i;:::-;26462:5:::1;26448:11;;:19;;;;;;;;;;;;;;;;;;26384:91:::0;:::o;21917:33::-;;;;:::o;30035:288::-;1986:13;:11;:13::i;:::-;30162:9:::1;30157:159;30181:8;;:15;;30177:1;:19;30157:159;;;30248:5;30218:14;:27;30233:8;;30242:1;30233:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30218:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;30285:8;;30294:1;30285:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30273:31;;;30298:5;30273:31;;;;;;:::i;:::-;;;;;;;;30198:3;;;;;:::i;:::-;;;;30157:159;;;;30035:288:::0;;;:::o;2999:238::-;1986:13;:11;:13::i;:::-;3122:1:::1;3102:22;;:8;:22;;::::0;3080:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3201:28;3220:8;3201:18;:28::i;:::-;2999:238:::0;:::o;21886:24::-;;;;:::o;2265:132::-;2340:12;:10;:12::i;:::-;2329:23;;:7;:5;:7::i;:::-;:23;;;2321:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2265:132::o;1289:98::-;1342:7;1369:10;1362:17;;1289:98;:::o;11876:380::-;12029:1;12012:19;;:5;:19;;;12004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12110:1;12091:21;;:7;:21;;;12083:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12194:6;12164:11;:18;12176:5;12164:18;;;;;;;;;;;;;;;:27;12183:7;12164:27;;;;;;;;;;;;;;;:36;;;;12232:7;12216:32;;12225:5;12216:32;;;12241:6;12216:32;;;;;;:::i;:::-;;;;;;;;11876:380;;;:::o;12547:502::-;12682:24;12709:25;12719:5;12726:7;12709:9;:25::i;:::-;12682:52;;12769:17;12749:16;:37;12745:297;;12849:6;12829:16;:26;;12803:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;12964:51;12973:5;12980:7;13008:6;12989:16;:25;12964:8;:51::i;:::-;12745:297;12671:378;12547:502;;;:::o;31490:4021::-;31638:1;31622:18;;:4;:18;;;31614:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31715:1;31701:16;;:2;:16;;;31693:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31770:14;31787;:20;31802:4;31787:20;;;;;;;;;;;;;;;;;;;;;;;;;31770:37;;31818:12;31833:14;:18;31848:2;31833:18;;;;;;;;;;;;;;;;;;;;;;;;;31818:33;;31885:4;31872:17;;:9;:17;;;31864:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31950:4;31939:15;;:7;:15;;;31931:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;32012:1;32002:6;:11;31998:93;;32030:28;32046:4;32052:2;32056:1;32030:15;:28::i;:::-;32073:7;;;;31998:93;32129:7;:5;:7::i;:::-;32121:15;;:4;:15;;;;:45;;;;;32159:7;:5;:7::i;:::-;32153:13;;:2;:13;;;;32121:45;:78;;;;;32197:1;32183:16;;:2;:16;;;;32121:78;:112;;;;;21741:6;32216:17;;:2;:17;;;;32121:112;:139;;;;;32251:9;;;;;;;;;;;32250:10;32121:139;32103:1485;;;32292:13;;;;;;;;;;;32287:211;;32356:19;:25;32376:4;32356:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32385:19;:23;32405:2;32385:23;;;;;;;;;;;;;;;;;;;;;;;;;32356:52;32326:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;32287:211;32560:26;:32;32587:4;32560:32;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;32614:29;:33;32644:2;32614:33;;;;;;;;;;;;;;;;;;;;;;;;;32613:34;32560:87;32538:1039;;;32722:14;;32712:6;:24;;32682:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;32909:9;;32892:13;32902:2;32892:9;:13::i;:::-;32883:6;:22;;;;:::i;:::-;:35;;32853:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;32538:1039;;;33070:26;:30;33097:2;33070:30;;;;;;;;;;;;;;;;;;;;;;;;;:87;;;;;33122:29;:35;33152:4;33122:35;;;;;;;;;;;;;;;;;;;;;;;;;33121:36;33070:87;33048:529;;;33232:14;;33222:6;:24;;33192:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;33048:529;;;33372:29;:33;33402:2;33372:33;;;;;;;;;;;;;;;;;;;;;;;;;33367:210;;33482:9;;33465:13;33475:2;33465:9;:13::i;:::-;33456:6;:22;;;;:::i;:::-;:35;;33426:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;33367:210;33048:529;32538:1039;32103:1485;33600:28;33631:24;33649:4;33631:9;:24::i;:::-;33600:55;;33668:12;33707:18;;33683:20;:42;;33668:57;;33756:7;:35;;;;;33780:11;;;;;;;;;;;33756:35;:62;;;;;33809:9;;;;;;;;;;;33808:10;33756:62;:112;;;;;33836:26;:32;33863:4;33836:32;;;;;;;;;;;;;;;;;;;;;;;;;33835:33;33756:112;:155;;;;;33886:19;:25;33906:4;33886:25;;;;;;;;;;;;;;;;;;;;;;;;;33885:26;33756:155;:196;;;;;33929:19;:23;33949:2;33929:23;;;;;;;;;;;;;;;;;;;;;;;;;33928:24;33756:196;33738:331;;;33991:4;33979:9;;:16;;;;;;;;;;;;;;;;;;34012:11;:9;:11::i;:::-;34052:5;34040:9;;:17;;;;;;;;;;;;;;;;;;33738:331;34081:12;34097:9;;;;;;;;;;;34096:10;34081:25;;34123:19;:25;34143:4;34123:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;34152:19;:23;34172:2;34152:23;;;;;;;;;;;;;;;;;;;;;;;;;34123:52;34119:100;;;34202:5;34192:15;;34119:100;34231:12;34264:7;34260:1159;;;34316:26;:30;34343:2;34316:30;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;34366:1;34350:13;;:17;34316:51;34312:958;;;34395:36;34425:5;34395:25;34406:13;;34395:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;34388:43;;34544:13;;34502:17;;34495:4;:24;;;;:::i;:::-;34494:63;;;;:::i;:::-;34450:19;;:107;;;;;;;:::i;:::-;;;;;;;;34670:13;;34628:17;;34621:4;:24;;;;:::i;:::-;34620:63;;;;:::i;:::-;34576:19;;:107;;;;;;;:::i;:::-;;;;;;;;34786:13;;34749:12;;34742:4;:19;;;;:::i;:::-;34741:58;;;;:::i;:::-;34702:14;;:97;;;;;;;:::i;:::-;;;;;;;;34312:958;;;34861:26;:32;34888:4;34861:32;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;34912:1;34897:12;;:16;34861:52;34857:413;;;34941:35;34970:5;34941:24;34952:12;;34941:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;34934:42;;35046:12;;35026:16;;35019:4;:23;;;;:::i;:::-;35018:40;;;;:::i;:::-;34995:19;;:63;;;;;;;:::i;:::-;;;;;;;;35128:12;;35108:16;;35101:4;:23;;;;:::i;:::-;35100:40;;;;:::i;:::-;35077:19;;:63;;;;;;;:::i;:::-;;;;;;;;35242:12;;35206:11;;35199:4;:18;;;;:::i;:::-;35198:56;;;;:::i;:::-;35159:14;;:95;;;;;;;:::i;:::-;;;;;;;;34857:413;34312:958;35297:1;35290:4;:8;35286:91;;;35319:42;35335:4;35349;35356;35319:15;:42::i;:::-;35286:91;35403:4;35393:14;;;;;:::i;:::-;;;34260:1159;35431:33;35447:4;35453:2;35457:6;35431:15;:33::i;:::-;35491:12;;35475:13;:28;;;;31603:3908;;;;;;31490:4021;;;;:::o;10763:675::-;10866:1;10847:21;;:7;:21;;;10839:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;10919:49;10940:7;10957:1;10961:6;10919:20;:49::i;:::-;10981:22;11006:9;:18;11016:7;11006:18;;;;;;;;;;;;;;;;10981:43;;11061:6;11043:14;:24;;11035:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11180:6;11163:14;:23;11142:9;:18;11152:7;11142:18;;;;;;;;;;;;;;;:44;;;;11297:6;11281:12;;:22;;;;;;;;;;;11358:1;11332:37;;11341:7;11332:37;;;11362:6;11332:37;;;;;;:::i;:::-;;;;;;;;11382:48;11402:7;11419:1;11423:6;11382:19;:48::i;:::-;10828:610;10763:675;;:::o;3397:191::-;3471:16;3490:6;;;;;;;;;;;3471:25;;3516:8;3507:6;;:17;;;;;;;;;;;;;;;;;;3571:8;3540:40;;3561:8;3540:40;;;;;;;;;;;;3460:128;3397:191;:::o;31292:190::-;31411:5;31376:26;:32;31403:4;31376:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;31468:5;31434:40;;31462:4;31434:40;;;;;;;;;;;;31292:190;;:::o;9318:877::-;9465:1;9449:18;;:4;:18;;;9441:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9542:1;9528:16;;:2;:16;;;9520:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9597:38;9618:4;9624:2;9628:6;9597:20;:38::i;:::-;9648:19;9670:9;:15;9680:4;9670:15;;;;;;;;;;;;;;;;9648:37;;9733:6;9718:11;:21;;9696:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;9873:6;9859:11;:20;9841:9;:15;9851:4;9841:15;;;;;;;;;;;;;;;:38;;;;10076:6;10059:9;:13;10069:2;10059:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;10126:2;10111:26;;10120:4;10111:26;;;10130:6;10111:26;;;;;;:::i;:::-;;;;;;;;10150:37;10170:4;10176:2;10180:6;10150:19;:37::i;:::-;9430:765;9318:877;;;:::o;36467:1804::-;36508:23;36534:24;36552:4;36534:9;:24::i;:::-;36508:50;;36569:25;36667:14;;36632:19;;36597;;:54;;;;:::i;:::-;:84;;;;:::i;:::-;36569:112;;36692:12;36740:1;36721:15;:20;:46;;;;36766:1;36745:17;:22;36721:46;36717:85;;;36784:7;;;;;36717:85;36857:2;36836:18;;:23;;;;:::i;:::-;36818:15;:41;36814:115;;;36915:2;36894:18;;:23;;;;:::i;:::-;36876:41;;36814:115;36941:23;37055:1;37022:17;36986:19;;36968:15;:37;;;;:::i;:::-;36967:72;;;;:::i;:::-;:89;;;;:::i;:::-;36941:115;;37067:26;37096:36;37116:15;37096;:19;;:36;;;;:::i;:::-;37067:65;;37145:25;37173:21;37145:49;;37207:37;37225:18;37207:17;:37::i;:::-;37257:18;37278:44;37304:17;37278:21;:25;;:44;;;;:::i;:::-;37257:65;;37335:23;37361:82;37415:17;37361:35;37376:19;;37361:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;37335:108;;37456:18;37477:77;37526:17;37477:30;37492:14;;37477:10;:14;;:30;;;;:::i;:::-;:34;;:77;;;;:::i;:::-;37456:98;;37567:23;37650:10;37619:15;37593:10;:41;;;;:::i;:::-;:67;;;;:::i;:::-;37567:93;;37695:1;37673:19;:23;;;;37729:1;37707:19;:23;;;;37758:1;37741:14;:18;;;;37794:1;37776:15;:19;:42;;;;;37817:1;37799:15;:19;37776:42;37772:280;;;37835:47;37849:15;37866;37835:13;:47::i;:::-;37902:138;37935:18;37972:15;38006:19;;37902:138;;;;;;;;:::i;:::-;;;;;;;;37772:280;38086:10;;;;;;;;;;;38078:24;;38110:10;38078:71;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38064:85;;;;;38184:15;;;;;;;;;;;38176:29;;38227:21;38176:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38162:101;;;;;36497:1774;;;;;;;;;;36467:1804;:::o;17163:98::-;17221:7;17252:1;17248;:5;;;;:::i;:::-;17241:12;;17163:98;;;;:::o;17562:::-;17620:7;17651:1;17647;:5;;;;:::i;:::-;17640:12;;17562:98;;;;:::o;13649:125::-;;;;:::o;13782:124::-;;;;:::o;16806:98::-;16864:7;16895:1;16891;:5;;;;:::i;:::-;16884:12;;16806:98;;;;:::o;35519:512::-;35596:21;35634:1;35620:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35596:40;;35665:4;35647;35652:1;35647:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;35691:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35681:4;35686:1;35681:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;35726:62;35743:4;35758:15;;;;;;;;;;;35776:11;35726:8;:62::i;:::-;35827:15;;;;;;;;;;;:66;;;35908:11;35934:1;35950:4;35977;35997:15;35827:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35576:455;35519:512;:::o;36079:372::-;36162:62;36179:4;36194:15;;;;;;;;;;;36212:11;36162:8;:62::i;:::-;36237:15;;;;;;;;;;;:31;;;36276:9;36309:4;36329:11;36355:1;36371;36387:15;;;;;;;;;;;36417;36237:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;36079:372;;:::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;2139:117;2248:1;2245;2238: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:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:117::-;4532:1;4529;4522:12;4546:117;4655:1;4652;4645:12;4669:117;4778:1;4775;4768:12;4809:568;4882:8;4892:6;4942:3;4935:4;4927:6;4923:17;4919:27;4909:122;;4950:79;;:::i;:::-;4909:122;5063:6;5050:20;5040:30;;5093:18;5085:6;5082:30;5079:117;;;5115:79;;:::i;:::-;5079:117;5229:4;5221:6;5217:17;5205:29;;5283:3;5275:4;5267:6;5263:17;5253:8;5249:32;5246:41;5243:128;;;5290:79;;:::i;:::-;5243:128;4809:568;;;;;:::o;5383:116::-;5453:21;5468:5;5453:21;:::i;:::-;5446:5;5443:32;5433:60;;5489:1;5486;5479:12;5433:60;5383:116;:::o;5505:133::-;5548:5;5586:6;5573:20;5564:29;;5602:30;5626:5;5602:30;:::i;:::-;5505:133;;;;:::o;5644:698::-;5736:6;5744;5752;5801:2;5789:9;5780:7;5776:23;5772:32;5769:119;;;5807:79;;:::i;:::-;5769:119;5955:1;5944:9;5940:17;5927:31;5985:18;5977:6;5974:30;5971:117;;;6007:79;;:::i;:::-;5971:117;6120:80;6192:7;6183:6;6172:9;6168:22;6120:80;:::i;:::-;6102:98;;;;5898:312;6249:2;6275:50;6317:7;6308:6;6297:9;6293:22;6275:50;:::i;:::-;6265:60;;6220:115;5644:698;;;;;:::o;6348:60::-;6376:3;6397:5;6390:12;;6348:60;;;:::o;6414:142::-;6464:9;6497:53;6515:34;6524:24;6542:5;6524:24;:::i;:::-;6515:34;:::i;:::-;6497:53;:::i;:::-;6484:66;;6414:142;;;:::o;6562:126::-;6612:9;6645:37;6676:5;6645:37;:::i;:::-;6632:50;;6562:126;;;:::o;6694:153::-;6771:9;6804:37;6835:5;6804:37;:::i;:::-;6791:50;;6694:153;;;:::o;6853:185::-;6967:64;7025:5;6967:64;:::i;:::-;6962:3;6955:77;6853:185;;:::o;7044:276::-;7164:4;7202:2;7191:9;7187:18;7179:26;;7215:98;7310:1;7299:9;7295:17;7286:6;7215:98;:::i;:::-;7044:276;;;;:::o;7326:118::-;7413:24;7431:5;7413:24;:::i;:::-;7408:3;7401:37;7326:118;;:::o;7450:222::-;7543:4;7581:2;7570:9;7566:18;7558:26;;7594:71;7662:1;7651:9;7647:17;7638:6;7594:71;:::i;:::-;7450:222;;;;:::o;7678:329::-;7737:6;7786:2;7774:9;7765:7;7761:23;7757:32;7754:119;;;7792:79;;:::i;:::-;7754:119;7912:1;7937:53;7982:7;7973:6;7962:9;7958:22;7937:53;:::i;:::-;7927:63;;7883:117;7678:329;;;;:::o;8013:619::-;8090:6;8098;8106;8155:2;8143:9;8134:7;8130:23;8126:32;8123:119;;;8161:79;;:::i;:::-;8123:119;8281:1;8306:53;8351:7;8342:6;8331:9;8327:22;8306:53;:::i;:::-;8296:63;;8252:117;8408:2;8434:53;8479:7;8470:6;8459:9;8455:22;8434:53;:::i;:::-;8424:63;;8379:118;8536:2;8562:53;8607:7;8598:6;8587:9;8583:22;8562:53;:::i;:::-;8552:63;;8507:118;8013:619;;;;;:::o;8638:86::-;8673:7;8713:4;8706:5;8702:16;8691:27;;8638:86;;;:::o;8730:112::-;8813:22;8829:5;8813:22;:::i;:::-;8808:3;8801:35;8730:112;;:::o;8848:214::-;8937:4;8975:2;8964:9;8960:18;8952:26;;8988:67;9052:1;9041:9;9037:17;9028:6;8988:67;:::i;:::-;8848:214;;;;:::o;9068:329::-;9127:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:119;;;9182:79;;:::i;:::-;9144:119;9302:1;9327:53;9372:7;9363:6;9352:9;9348:22;9327:53;:::i;:::-;9317:63;;9273:117;9068:329;;;;:::o;9403:468::-;9468:6;9476;9525:2;9513:9;9504:7;9500:23;9496:32;9493:119;;;9531:79;;:::i;:::-;9493:119;9651:1;9676:53;9721:7;9712:6;9701:9;9697:22;9676:53;:::i;:::-;9666:63;;9622:117;9778:2;9804:50;9846:7;9837:6;9826:9;9822:22;9804:50;:::i;:::-;9794:60;;9749:115;9403:468;;;;;:::o;9877:474::-;9945:6;9953;10002:2;9990:9;9981:7;9977:23;9973:32;9970:119;;;10008:79;;:::i;:::-;9970:119;10128:1;10153:53;10198:7;10189:6;10178:9;10174:22;10153:53;:::i;:::-;10143:63;;10099:117;10255:2;10281:53;10326:7;10317:6;10306:9;10302:22;10281:53;:::i;:::-;10271:63;;10226:118;9877:474;;;;;:::o;10357:::-;10425:6;10433;10482:2;10470:9;10461:7;10457:23;10453:32;10450:119;;;10488:79;;:::i;:::-;10450:119;10608:1;10633:53;10678:7;10669:6;10658:9;10654:22;10633:53;:::i;:::-;10623:63;;10579:117;10735:2;10761:53;10806:7;10797:6;10786:9;10782:22;10761:53;:::i;:::-;10751:63;;10706:118;10357:474;;;;;:::o;10837:323::-;10893:6;10942:2;10930:9;10921:7;10917:23;10913:32;10910:119;;;10948:79;;:::i;:::-;10910:119;11068:1;11093:50;11135:7;11126:6;11115:9;11111:22;11093:50;:::i;:::-;11083:60;;11039:114;10837:323;;;;:::o;11166:173::-;11306:25;11302:1;11294:6;11290:14;11283:49;11166:173;:::o;11345:366::-;11487:3;11508:67;11572:2;11567:3;11508:67;:::i;:::-;11501:74;;11584:93;11673:3;11584:93;:::i;:::-;11702:2;11697:3;11693:12;11686:19;;11345:366;;;:::o;11717:419::-;11883:4;11921:2;11910:9;11906:18;11898:26;;11970:9;11964:4;11960:20;11956:1;11945:9;11941:17;11934:47;11998:131;12124:4;11998:131;:::i;:::-;11990:139;;11717:419;;;:::o;12142:180::-;12190:77;12187:1;12180:88;12287:4;12284:1;12277:15;12311:4;12308:1;12301:15;12328:320;12372:6;12409:1;12403:4;12399:12;12389:22;;12456:1;12450:4;12446:12;12477:18;12467:81;;12533:4;12525:6;12521:17;12511:27;;12467:81;12595:2;12587:6;12584:14;12564:18;12561:38;12558:84;;12614:18;;:::i;:::-;12558:84;12379:269;12328:320;;;:::o;12654:180::-;12702:77;12699:1;12692:88;12799:4;12796:1;12789:15;12823:4;12820:1;12813:15;12840:191;12880:3;12899:20;12917:1;12899:20;:::i;:::-;12894:25;;12933:20;12951:1;12933:20;:::i;:::-;12928:25;;12976:1;12973;12969:9;12962:16;;12997:3;12994:1;12991:10;12988:36;;;13004:18;;:::i;:::-;12988:36;12840:191;;;;:::o;13037:223::-;13177:34;13173:1;13165:6;13161:14;13154:58;13246:6;13241:2;13233:6;13229:15;13222:31;13037:223;:::o;13266:366::-;13408:3;13429:67;13493:2;13488:3;13429:67;:::i;:::-;13422:74;;13505:93;13594:3;13505:93;:::i;:::-;13623:2;13618:3;13614:12;13607:19;;13266:366;;;:::o;13638:419::-;13804:4;13842:2;13831:9;13827:18;13819:26;;13891:9;13885:4;13881:20;13877:1;13866:9;13862:17;13855:47;13919:131;14045:4;13919:131;:::i;:::-;13911:139;;13638:419;;;:::o;14063:180::-;14111:77;14108:1;14101:88;14208:4;14205:1;14198:15;14232:4;14229:1;14222:15;14249:233;14288:3;14311:24;14329:5;14311:24;:::i;:::-;14302:33;;14357:66;14350:5;14347:77;14344:103;;14427:18;;:::i;:::-;14344:103;14474:1;14467:5;14463:13;14456:20;;14249:233;;;:::o;14488:166::-;14628:18;14624:1;14616:6;14612:14;14605:42;14488:166;:::o;14660:366::-;14802:3;14823:67;14887:2;14882:3;14823:67;:::i;:::-;14816:74;;14899:93;14988:3;14899:93;:::i;:::-;15017:2;15012:3;15008:12;15001:19;;14660:366;;;:::o;15032:419::-;15198:4;15236:2;15225:9;15221:18;15213:26;;15285:9;15279:4;15275:20;15271:1;15260:9;15256:17;15249:47;15313:131;15439:4;15313:131;:::i;:::-;15305:139;;15032:419;;;:::o;15457:224::-;15597:34;15593:1;15585:6;15581:14;15574:58;15666:7;15661:2;15653:6;15649:15;15642:32;15457:224;:::o;15687:366::-;15829:3;15850:67;15914:2;15909:3;15850:67;:::i;:::-;15843:74;;15926:93;16015:3;15926:93;:::i;:::-;16044:2;16039:3;16035:12;16028:19;;15687:366;;;:::o;16059:419::-;16225:4;16263:2;16252:9;16248:18;16240:26;;16312:9;16306:4;16302:20;16298:1;16287:9;16283:17;16276:47;16340:131;16466:4;16340:131;:::i;:::-;16332:139;;16059:419;;;:::o;16484:147::-;16585:11;16622:3;16607:18;;16484:147;;;;:::o;16637:114::-;;:::o;16757:398::-;16916:3;16937:83;17018:1;17013:3;16937:83;:::i;:::-;16930:90;;17029:93;17118:3;17029:93;:::i;:::-;17147:1;17142:3;17138:11;17131:18;;16757:398;;;:::o;17161:379::-;17345:3;17367:147;17510:3;17367:147;:::i;:::-;17360:154;;17531:3;17524:10;;17161:379;;;:::o;17546:143::-;17603:5;17634:6;17628:13;17619:22;;17650:33;17677:5;17650:33;:::i;:::-;17546:143;;;;:::o;17695:351::-;17765:6;17814:2;17802:9;17793:7;17789:23;17785:32;17782:119;;;17820:79;;:::i;:::-;17782:119;17940:1;17965:64;18021:7;18012:6;18001:9;17997:22;17965:64;:::i;:::-;17955:74;;17911:128;17695:351;;;;:::o;18052:159::-;18192:11;18188:1;18180:6;18176:14;18169:35;18052:159;:::o;18217:365::-;18359:3;18380:66;18444:1;18439:3;18380:66;:::i;:::-;18373:73;;18455:93;18544:3;18455:93;:::i;:::-;18573:2;18568:3;18564:12;18557:19;;18217:365;;;:::o;18588:419::-;18754:4;18792:2;18781:9;18777:18;18769:26;;18841:9;18835:4;18831:20;18827:1;18816:9;18812:17;18805:47;18869:131;18995:4;18869:131;:::i;:::-;18861:139;;18588:419;;;:::o;19013:332::-;19134:4;19172:2;19161:9;19157:18;19149:26;;19185:71;19253:1;19242:9;19238:17;19229:6;19185:71;:::i;:::-;19266:72;19334:2;19323:9;19319:18;19310:6;19266:72;:::i;:::-;19013:332;;;;;:::o;19351:137::-;19405:5;19436:6;19430:13;19421:22;;19452:30;19476:5;19452:30;:::i;:::-;19351:137;;;;:::o;19494:345::-;19561:6;19610:2;19598:9;19589:7;19585:23;19581:32;19578:119;;;19616:79;;:::i;:::-;19578:119;19736:1;19761:61;19814:7;19805:6;19794:9;19790:22;19761:61;:::i;:::-;19751:71;;19707:125;19494:345;;;;:::o;19845:225::-;19985:34;19981:1;19973:6;19969:14;19962:58;20054:8;20049:2;20041:6;20037:15;20030:33;19845:225;:::o;20076:366::-;20218:3;20239:67;20303:2;20298:3;20239:67;:::i;:::-;20232:74;;20315:93;20404:3;20315:93;:::i;:::-;20433:2;20428:3;20424:12;20417:19;;20076:366;;;:::o;20448:419::-;20614:4;20652:2;20641:9;20637:18;20629:26;;20701:9;20695:4;20691:20;20687:1;20676:9;20672:17;20665:47;20729:131;20855:4;20729:131;:::i;:::-;20721:139;;20448:419;;;:::o;20873:182::-;21013:34;21009:1;21001:6;20997:14;20990:58;20873:182;:::o;21061:366::-;21203:3;21224:67;21288:2;21283:3;21224:67;:::i;:::-;21217:74;;21300:93;21389:3;21300:93;:::i;:::-;21418:2;21413:3;21409:12;21402:19;;21061:366;;;:::o;21433:419::-;21599:4;21637:2;21626:9;21622:18;21614:26;;21686:9;21680:4;21676:20;21672:1;21661:9;21657:17;21650:47;21714:131;21840:4;21714:131;:::i;:::-;21706:139;;21433:419;;;:::o;21858:223::-;21998:34;21994:1;21986:6;21982:14;21975:58;22067:6;22062:2;22054:6;22050:15;22043:31;21858:223;:::o;22087:366::-;22229:3;22250:67;22314:2;22309:3;22250:67;:::i;:::-;22243:74;;22326:93;22415:3;22326:93;:::i;:::-;22444:2;22439:3;22435:12;22428:19;;22087:366;;;:::o;22459:419::-;22625:4;22663:2;22652:9;22648:18;22640:26;;22712:9;22706:4;22702:20;22698:1;22687:9;22683:17;22676:47;22740:131;22866:4;22740:131;:::i;:::-;22732:139;;22459:419;;;:::o;22884:221::-;23024:34;23020:1;23012:6;23008:14;23001:58;23093:4;23088:2;23080:6;23076:15;23069:29;22884:221;:::o;23111:366::-;23253:3;23274:67;23338:2;23333:3;23274:67;:::i;:::-;23267:74;;23350:93;23439:3;23350:93;:::i;:::-;23468:2;23463:3;23459:12;23452:19;;23111:366;;;:::o;23483:419::-;23649:4;23687:2;23676:9;23672:18;23664:26;;23736:9;23730:4;23726:20;23722:1;23711:9;23707:17;23700:47;23764:131;23890:4;23764:131;:::i;:::-;23756:139;;23483:419;;;:::o;23908:179::-;24048:31;24044:1;24036:6;24032:14;24025:55;23908:179;:::o;24093:366::-;24235:3;24256:67;24320:2;24315:3;24256:67;:::i;:::-;24249:74;;24332:93;24421:3;24332:93;:::i;:::-;24450:2;24445:3;24441:12;24434:19;;24093:366;;;:::o;24465:419::-;24631:4;24669:2;24658:9;24654:18;24646:26;;24718:9;24712:4;24708:20;24704:1;24693:9;24689:17;24682:47;24746:131;24872:4;24746:131;:::i;:::-;24738:139;;24465:419;;;:::o;24890:224::-;25030:34;25026:1;25018:6;25014:14;25007:58;25099:7;25094:2;25086:6;25082:15;25075:32;24890:224;:::o;25120:366::-;25262:3;25283:67;25347:2;25342:3;25283:67;:::i;:::-;25276:74;;25359:93;25448:3;25359:93;:::i;:::-;25477:2;25472:3;25468:12;25461:19;;25120:366;;;:::o;25492:419::-;25658:4;25696:2;25685:9;25681:18;25673:26;;25745:9;25739:4;25735:20;25731:1;25720:9;25716:17;25709:47;25773:131;25899:4;25773:131;:::i;:::-;25765:139;;25492:419;;;:::o;25917:222::-;26057:34;26053:1;26045:6;26041:14;26034:58;26126:5;26121:2;26113:6;26109:15;26102:30;25917:222;:::o;26145:366::-;26287:3;26308:67;26372:2;26367:3;26308:67;:::i;:::-;26301:74;;26384:93;26473:3;26384:93;:::i;:::-;26502:2;26497:3;26493:12;26486:19;;26145:366;;;:::o;26517:419::-;26683:4;26721:2;26710:9;26706:18;26698:26;;26770:9;26764:4;26760:20;26756:1;26745:9;26741:17;26734:47;26798:131;26924:4;26798:131;:::i;:::-;26790:139;;26517:419;;;:::o;26942:176::-;27082:28;27078:1;27070:6;27066:14;27059:52;26942:176;:::o;27124:366::-;27266:3;27287:67;27351:2;27346:3;27287:67;:::i;:::-;27280:74;;27363:93;27452:3;27363:93;:::i;:::-;27481:2;27476:3;27472:12;27465:19;;27124:366;;;:::o;27496:419::-;27662:4;27700:2;27689:9;27685:18;27677:26;;27749:9;27743:4;27739:20;27735:1;27724:9;27720:17;27713:47;27777:131;27903:4;27777:131;:::i;:::-;27769:139;;27496:419;;;:::o;27921:179::-;28061:31;28057:1;28049:6;28045:14;28038:55;27921:179;:::o;28106:366::-;28248:3;28269:67;28333:2;28328:3;28269:67;:::i;:::-;28262:74;;28345:93;28434:3;28345:93;:::i;:::-;28463:2;28458:3;28454:12;28447:19;;28106:366;;;:::o;28478:419::-;28644:4;28682:2;28671:9;28667:18;28659:26;;28731:9;28725:4;28721:20;28717:1;28706:9;28702:17;28695:47;28759:131;28885:4;28759:131;:::i;:::-;28751:139;;28478:419;;;:::o;28903:241::-;29043:34;29039:1;29031:6;29027:14;29020:58;29112:24;29107:2;29099:6;29095:15;29088:49;28903:241;:::o;29150:366::-;29292:3;29313:67;29377:2;29372:3;29313:67;:::i;:::-;29306:74;;29389:93;29478:3;29389:93;:::i;:::-;29507:2;29502:3;29498:12;29491:19;;29150:366;;;:::o;29522:419::-;29688:4;29726:2;29715:9;29711:18;29703:26;;29775:9;29769:4;29765:20;29761:1;29750:9;29746:17;29739:47;29803:131;29929:4;29803:131;:::i;:::-;29795:139;;29522:419;;;:::o;29947:176::-;30087:28;30083:1;30075:6;30071:14;30064:52;29947:176;:::o;30129:366::-;30271:3;30292:67;30356:2;30351:3;30292:67;:::i;:::-;30285:74;;30368:93;30457:3;30368:93;:::i;:::-;30486:2;30481:3;30477:12;30470:19;;30129:366;;;:::o;30501:419::-;30667:4;30705:2;30694:9;30690:18;30682:26;;30754:9;30748:4;30744:20;30740:1;30729:9;30725:17;30718:47;30782:131;30908:4;30782:131;:::i;:::-;30774:139;;30501:419;;;:::o;30926:242::-;31066:34;31062:1;31054:6;31050:14;31043:58;31135:25;31130:2;31122:6;31118:15;31111:50;30926:242;:::o;31174:366::-;31316:3;31337:67;31401:2;31396:3;31337:67;:::i;:::-;31330:74;;31413:93;31502:3;31413:93;:::i;:::-;31531:2;31526:3;31522:12;31515:19;;31174:366;;;:::o;31546:419::-;31712:4;31750:2;31739:9;31735:18;31727:26;;31799:9;31793:4;31789:20;31785:1;31774:9;31770:17;31763:47;31827:131;31953:4;31827:131;:::i;:::-;31819:139;;31546:419;;;:::o;31971:410::-;32011:7;32034:20;32052:1;32034:20;:::i;:::-;32029:25;;32068:20;32086:1;32068:20;:::i;:::-;32063:25;;32123:1;32120;32116:9;32145:30;32163:11;32145:30;:::i;:::-;32134:41;;32324:1;32315:7;32311:15;32308:1;32305:22;32285:1;32278:9;32258:83;32235:139;;32354:18;;:::i;:::-;32235:139;32019:362;31971:410;;;;:::o;32387:180::-;32435:77;32432:1;32425:88;32532:4;32529:1;32522:15;32556:4;32553:1;32546:15;32573:185;32613:1;32630:20;32648:1;32630:20;:::i;:::-;32625:25;;32664:20;32682:1;32664:20;:::i;:::-;32659:25;;32703:1;32693:35;;32708:18;;:::i;:::-;32693:35;32750:1;32747;32743:9;32738:14;;32573:185;;;;:::o;32764:194::-;32804:4;32824:20;32842:1;32824:20;:::i;:::-;32819:25;;32858:20;32876:1;32858:20;:::i;:::-;32853:25;;32902:1;32899;32895:9;32887:17;;32926:1;32920:4;32917:11;32914:37;;;32931:18;;:::i;:::-;32914:37;32764:194;;;;:::o;32964:220::-;33104:34;33100:1;33092:6;33088:14;33081:58;33173:3;33168:2;33160:6;33156:15;33149:28;32964:220;:::o;33190:366::-;33332:3;33353:67;33417:2;33412:3;33353:67;:::i;:::-;33346:74;;33429:93;33518:3;33429:93;:::i;:::-;33547:2;33542:3;33538:12;33531:19;;33190:366;;;:::o;33562:419::-;33728:4;33766:2;33755:9;33751:18;33743:26;;33815:9;33809:4;33805:20;33801:1;33790:9;33786:17;33779:47;33843:131;33969:4;33843:131;:::i;:::-;33835:139;;33562:419;;;:::o;33987:221::-;34127:34;34123:1;34115:6;34111:14;34104:58;34196:4;34191:2;34183:6;34179:15;34172:29;33987:221;:::o;34214:366::-;34356:3;34377:67;34441:2;34436:3;34377:67;:::i;:::-;34370:74;;34453:93;34542:3;34453:93;:::i;:::-;34571:2;34566:3;34562:12;34555:19;;34214:366;;;:::o;34586:419::-;34752:4;34790:2;34779:9;34775:18;34767:26;;34839:9;34833:4;34829:20;34825:1;34814:9;34810:17;34803:47;34867:131;34993:4;34867:131;:::i;:::-;34859:139;;34586:419;;;:::o;35011:225::-;35151:34;35147:1;35139:6;35135:14;35128:58;35220:8;35215:2;35207:6;35203:15;35196:33;35011:225;:::o;35242:366::-;35384:3;35405:67;35469:2;35464:3;35405:67;:::i;:::-;35398:74;;35481:93;35570:3;35481:93;:::i;:::-;35599:2;35594:3;35590:12;35583:19;;35242:366;;;:::o;35614:419::-;35780:4;35818:2;35807:9;35803:18;35795:26;;35867:9;35861:4;35857:20;35853:1;35842:9;35838:17;35831:47;35895:131;36021:4;35895:131;:::i;:::-;35887:139;;35614:419;;;:::o;36039:442::-;36188:4;36226:2;36215:9;36211:18;36203:26;;36239:71;36307:1;36296:9;36292:17;36283:6;36239:71;:::i;:::-;36320:72;36388:2;36377:9;36373:18;36364:6;36320:72;:::i;:::-;36402;36470:2;36459:9;36455:18;36446:6;36402:72;:::i;:::-;36039:442;;;;;;:::o;36487:180::-;36535:77;36532:1;36525:88;36632:4;36629:1;36622:15;36656:4;36653:1;36646:15;36673:143;36730:5;36761:6;36755:13;36746:22;;36777:33;36804:5;36777:33;:::i;:::-;36673:143;;;;:::o;36822:351::-;36892:6;36941:2;36929:9;36920:7;36916:23;36912:32;36909:119;;;36947:79;;:::i;:::-;36909:119;37067:1;37092:64;37148:7;37139:6;37128:9;37124:22;37092:64;:::i;:::-;37082:74;;37038:128;36822:351;;;;:::o;37179:85::-;37224:7;37253:5;37242:16;;37179:85;;;:::o;37270:158::-;37328:9;37361:61;37379:42;37388:32;37414:5;37388:32;:::i;:::-;37379:42;:::i;:::-;37361:61;:::i;:::-;37348:74;;37270:158;;;:::o;37434:147::-;37529:45;37568:5;37529:45;:::i;:::-;37524:3;37517:58;37434:147;;:::o;37587:114::-;37654:6;37688:5;37682:12;37672:22;;37587:114;;;:::o;37707:184::-;37806:11;37840:6;37835:3;37828:19;37880:4;37875:3;37871:14;37856:29;;37707:184;;;;:::o;37897:132::-;37964:4;37987:3;37979:11;;38017:4;38012:3;38008:14;38000:22;;37897:132;;;:::o;38035:108::-;38112:24;38130:5;38112:24;:::i;:::-;38107:3;38100:37;38035:108;;:::o;38149:179::-;38218:10;38239:46;38281:3;38273:6;38239:46;:::i;:::-;38317:4;38312:3;38308:14;38294:28;;38149:179;;;;:::o;38334:113::-;38404:4;38436;38431:3;38427:14;38419:22;;38334:113;;;:::o;38483:732::-;38602:3;38631:54;38679:5;38631:54;:::i;:::-;38701:86;38780:6;38775:3;38701:86;:::i;:::-;38694:93;;38811:56;38861:5;38811:56;:::i;:::-;38890:7;38921:1;38906:284;38931:6;38928:1;38925:13;38906:284;;;39007:6;39001:13;39034:63;39093:3;39078:13;39034:63;:::i;:::-;39027:70;;39120:60;39173:6;39120:60;:::i;:::-;39110:70;;38966:224;38953:1;38950;38946:9;38941:14;;38906:284;;;38910:14;39206:3;39199:10;;38607:608;;;38483:732;;;;:::o;39221:831::-;39484:4;39522:3;39511:9;39507:19;39499:27;;39536:71;39604:1;39593:9;39589:17;39580:6;39536:71;:::i;:::-;39617:80;39693:2;39682:9;39678:18;39669:6;39617:80;:::i;:::-;39744:9;39738:4;39734:20;39729:2;39718:9;39714:18;39707:48;39772:108;39875:4;39866:6;39772:108;:::i;:::-;39764:116;;39890:72;39958:2;39947:9;39943:18;39934:6;39890:72;:::i;:::-;39972:73;40040:3;40029:9;40025:19;40016:6;39972:73;:::i;:::-;39221:831;;;;;;;;:::o;40058:807::-;40307:4;40345:3;40334:9;40330:19;40322:27;;40359:71;40427:1;40416:9;40412:17;40403:6;40359:71;:::i;:::-;40440:72;40508:2;40497:9;40493:18;40484:6;40440:72;:::i;:::-;40522:80;40598:2;40587:9;40583:18;40574:6;40522:80;:::i;:::-;40612;40688:2;40677:9;40673:18;40664:6;40612:80;:::i;:::-;40702:73;40770:3;40759:9;40755:19;40746:6;40702:73;:::i;:::-;40785;40853:3;40842:9;40838:19;40829:6;40785:73;:::i;:::-;40058:807;;;;;;;;;:::o;40871:663::-;40959:6;40967;40975;41024:2;41012:9;41003:7;40999:23;40995:32;40992:119;;;41030:79;;:::i;:::-;40992:119;41150:1;41175:64;41231:7;41222:6;41211:9;41207:22;41175:64;:::i;:::-;41165:74;;41121:128;41288:2;41314:64;41370:7;41361:6;41350:9;41346:22;41314:64;:::i;:::-;41304:74;;41259:129;41427:2;41453:64;41509:7;41500:6;41489:9;41485:22;41453:64;:::i;:::-;41443:74;;41398:129;40871:663;;;;;:::o

Swarm Source

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