ETH Price: $2,454.39 (+1.70%)
 

Overview

Max Total Supply

234,000,000,000 FAM

Holders

72

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.240262886091762439 FAM

Value
$0.00
0x830695ec5b44bec31f56ec8816332307b5845b90
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:
TheMostBeautifulFamily

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-13
*/

/**
        THE MOST BEAUTIFUL FAMILY 
        $FAM is here to stay and make Families huge again.
        Family is where happiness begins and love never ends.

        Website : https://themostbeautiful.family
        Telegram group : https://t.me/thebeautifulfamily
        X (twitter) : https://twitter.com/TMBfamilyeth
 */

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


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

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

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

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

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

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

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

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

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

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

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

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

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

}

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

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, 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);
    }

    
}
 
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

   
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

  
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    
}
 
contract Ownable is Context {
    address private _owner;
 
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

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

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract TheMostBeautifulFamily is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address private marketingWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;


    // Blacklist Map
    mapping(address => bool) private _blacklist;


    struct Fees {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;


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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
 
  
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("The Family", "FAM") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 234 * 1e9 * 1e18;

        maxBuyAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 3 / 100; // 3% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet

        _fees.buyMarketingFee = 1;
        _fees.buyLiquidityFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee;

        _fees.sellMarketingFee = 1;
        _fees.sellLiquidityFee = 0;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee;


        marketingWallet = address(0x0a1ed2712e3B9050ed6b048aD1037cAFc0B3e055); // set as marketing wallet

        // exclude from paying fees or having max transaction amount




        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
    }



    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "Cannot set maxTransactionAmounts lower than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "Cannot set maxTransactionAmounts lower than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateFees(uint256 _marketingFeeBuy, uint256 _liquidityFeeBuy,uint256 _marketingFeeSell, uint256 _liquidityFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee;
        require(_fees.buyTotalFees <= 9, "Must keep fees at 9% or less");   
        require(_fees.sellTotalFees <= 9, "Must keep fees at 9% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from marketPair");
        marketPair[pair] = value;
    }


    function setMarketingWallet(address _marketingWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
    }

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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        
        require(!_blacklist[recipient] && !_blacklist[sender], "You have been blacklisted from transfering tokens");
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }

        }
 
        
 
        uint256 contractTokenBalance = balanceOf(address(this));
 
        bool canSwap = contractTokenBalance >= thresholdSwapAmount;

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

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

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

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

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

        _approve(address(this), address(router), tAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

    function addLiquidity(uint256 tAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(router), tAmount);

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing ;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForLiquidity = newBalance - ethForMarketing;


        tokensForLiquidity = 0;
        tokensForMarketing = 0;


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

        (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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","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":[],"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":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506040518060c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501555050348015620000ba57600080fd5b506040518060400160405280600a81526020017f5468652046616d696c79000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f46414d000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013f92919062000d8a565b5080600490805190602001906200015892919062000d8a565b50505060006200016d6200095960201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029d57600080fd5b505afa158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d8919062000ea4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033d57600080fd5b505afa15801562000352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000378919062000ea4565b6040518363ffffffff1660e01b81526004016200039792919062000ee7565b602060405180830381600087803b158015620003b257600080fd5b505af1158015620003c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ed919062000ea4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016016600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000620004ea6200096160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000620005a96200096160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000620006686200096160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007f96080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200098b60201b60201c565b5060006c02f418436a149537ac1000000090506064816200081b919062000f7c565b60078190555060648162000830919062000f7c565b600881905550606460038262000847919062000fb4565b62000853919062000f7c565b6009819055506127106001826200086b919062000fb4565b62000877919062000f7c565b600a819055506001600d600101819055506000600d60020181905550600d60020154600d60010154620008ab919062001015565b600d600001819055506001600d600401819055506000600d60050181905550600d60050154600d60040154620008e2919062001015565b600d60030181905550730a1ed2712e3b9050ed6b048ad1037cafc0b3e055600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620009523382620009b960201b60201c565b506200132a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000620009af620009a16200095960201b60201c565b848462000b5460201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2390620010d3565b60405180910390fd5b62000a488160025462000d2760201b62001e031790919060201c565b60028190555062000aa6816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d2760201b62001e031790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b48919062001106565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000bc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bbe9062001199565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c3a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c319062001231565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000d1a919062001106565b60405180910390a3505050565b600080828462000d38919062001015565b90508381101562000d80576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d7790620012a3565b60405180910390fd5b8091505092915050565b82805462000d9890620012f4565b90600052602060002090601f01602090048101928262000dbc576000855562000e08565b82601f1062000dd757805160ff191683800117855562000e08565b8280016001018555821562000e08579182015b8281111562000e0757825182559160200191906001019062000dea565b5b50905062000e17919062000e1b565b5090565b5b8082111562000e3657600081600090555060010162000e1c565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e6c8262000e3f565b9050919050565b62000e7e8162000e5f565b811462000e8a57600080fd5b50565b60008151905062000e9e8162000e73565b92915050565b60006020828403121562000ebd5762000ebc62000e3a565b5b600062000ecd8482850162000e8d565b91505092915050565b62000ee18162000e5f565b82525050565b600060408201905062000efe600083018562000ed6565b62000f0d602083018462000ed6565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f898262000f14565b915062000f968362000f14565b92508262000fa95762000fa862000f1e565b5b828204905092915050565b600062000fc18262000f14565b915062000fce8362000f14565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200100a576200100962000f4d565b5b828202905092915050565b6000620010228262000f14565b91506200102f8362000f14565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001067576200106662000f4d565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010bb601f8362001072565b9150620010c88262001083565b602082019050919050565b60006020820190508181036000830152620010ee81620010ac565b9050919050565b620011008162000f14565b82525050565b60006020820190506200111d6000830184620010f5565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200118160248362001072565b91506200118e8262001123565b604082019050919050565b60006020820190508181036000830152620011b48162001172565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200121960228362001072565b91506200122682620011bb565b604082019050919050565b600060208201905081810360008301526200124c816200120a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200128b601b8362001072565b9150620012988262001253565b602082019050919050565b60006020820190508181036000830152620012be816200127c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200130d57607f821691505b60208210811415620013245762001323620012c5565b5b50919050565b60805160a0516148576200137a60003960008181610dce01526116a3015260008181611de101528181613165015281816132550152818161327c01528181613318015261333f01526148576000f3fe6080604052600436106102135760003560e01c80637571336a11610118578063c16dd4a4116100a0578063dd62ed3e1161006f578063dd62ed3e146107d5578063e16830a814610812578063f2fde38b1461083b578063f5b3c3bf14610864578063f887ea40146108a15761021a565b8063c16dd4a41461072a578063c18bc19514610753578063c6616ba11461077c578063d212a69a146107a55761021a565b8063a457c2d7116100e7578063a457c2d714610645578063a9059cbb14610682578063b8863115146106bf578063b9e418e7146106ea578063c0246668146107015761021a565b80637571336a146105895780638da5cb5b146105b257806395d89b41146105dd57806396880b17146106085761021a565b8063313ce5671161019b578063555467a11161016a578063555467a1146104a45780635d098b38146104e15780636ddd17131461050a57806370a0823114610535578063715018a6146105725761021a565b8063313ce567146103d457806339509351146103ff57806349bd5a5e1461043c5780634fbee193146104675761021a565b806318160ddd116101e257806318160ddd146102ed5780631a8145bb146103185780631c6e8a75146103435780631f3fed8f1461036c57806323b872dd146103975761021a565b806306fdde031461021f578063095ea7b31461024a57806310d5de531461028757806311a582c3146102c45761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108cc565b60405161024191906134f7565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c91906135b2565b61095e565b60405161027e919061360d565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613628565b61097c565b6040516102bb919061360d565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613655565b61099c565b005b3480156102f957600080fd5b50610302610b6d565b60405161030f91906136a4565b60405180910390f35b34801561032457600080fd5b5061032d610b77565b60405161033a91906136a4565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906136eb565b610b7d565b005b34801561037857600080fd5b50610381610c31565b60405161038e91906136a4565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613718565b610c37565b6040516103cb919061360d565b60405180910390f35b3480156103e057600080fd5b506103e9610d10565b6040516103f69190613787565b60405180910390f35b34801561040b57600080fd5b50610426600480360381019061042191906135b2565b610d19565b604051610433919061360d565b60405180910390f35b34801561044857600080fd5b50610451610dcc565b60405161045e91906137b1565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613628565b610df0565b60405161049b919061360d565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906137cc565b610e46565b6040516104d8919061360d565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613628565b610eef565b005b34801561051657600080fd5b5061051f610fca565b60405161052c919061360d565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190613628565b610fdd565b60405161056991906136a4565b60405180910390f35b34801561057e57600080fd5b50610587611025565b005b34801561059557600080fd5b506105b060048036038101906105ab91906137f9565b61117d565b005b3480156105be57600080fd5b506105c761126f565b6040516105d491906137b1565b60405180910390f35b3480156105e957600080fd5b506105f2611299565b6040516105ff91906134f7565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613628565b61132b565b60405161063c919061360d565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906135b2565b61134b565b604051610679919061360d565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906135b2565b611418565b6040516106b6919061360d565b60405180910390f35b3480156106cb57600080fd5b506106d4611436565b6040516106e1919061360d565b60405180910390f35b3480156106f657600080fd5b506106ff611449565b005b34801561070d57600080fd5b50610728600480360381019061072391906137f9565b611518565b005b34801561073657600080fd5b50610751600480360381019061074c91906137f9565b61160a565b005b34801561075f57600080fd5b5061077a600480360381019061077591906137cc565b61178b565b005b34801561078857600080fd5b506107a3600480360381019061079e9190613839565b6118c0565b005b3480156107b157600080fd5b506107ba611a55565b6040516107cc969594939291906138a0565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613901565b611a7f565b60405161080991906136a4565b60405180910390f35b34801561081e57600080fd5b50610839600480360381019061083491906137f9565b611b06565b005b34801561084757600080fd5b50610862600480360381019061085d9190613628565b611bf8565b005b34801561087057600080fd5b5061088b60048036038101906108869190613628565b611dbf565b604051610898919061360d565b60405180910390f35b3480156108ad57600080fd5b506108b6611ddf565b6040516108c391906139a0565b60405180910390f35b6060600380546108db906139ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610907906139ea565b80156109545780601f1061092957610100808354040283529160200191610954565b820191906000526020600020905b81548152906001019060200180831161093757829003601f168201915b5050505050905090565b600061097261096b611e61565b8484611e69565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b6109a4611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a90613a68565b60405180910390fd5b6064610a3d610b6d565b610a479190613ae6565b6103e883610a53610b6d565b610a5d9190613b17565b610a679190613ae6565b1015610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613be3565b60405180910390fd5b6064610ab2610b6d565b610abc9190613ae6565b6103e882610ac8610b6d565b610ad29190613b17565b610adc9190613ae6565b1015610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613be3565b60405180910390fd5b6103e882610b29610b6d565b610b339190613b17565b610b3d9190613ae6565b6007819055506103e881610b4f610b6d565b610b599190613b17565b610b639190613ae6565b6008819055505050565b6000600254905090565b60145481565b610b85611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90613a68565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60135481565b6000610c44848484612034565b610d0584610c50611e61565b610d00856040518060600160405280602881526020016147fa60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb6611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b611e69565b600190509392505050565b60006012905090565b6000610dc2610d26611e61565b84610dbd8560016000610d37611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0390919063ffffffff16565b611e69565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e50611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690613a68565b60405180910390fd5b81600a8190555060019050919050565b610ef7611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613a68565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102d611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390613a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611185611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90613a68565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112a8906139ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112d4906139ea565b80156113215780601f106112f657610100808354040283529160200191611321565b820191906000526020600020905b81548152906001019060200180831161130457829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b600061140e611358611e61565b84611409856040518060600160405280602581526020016147af6025913960016000611382611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b611e69565b6001905092915050565b600061142c611425611e61565b8484612034565b6001905092915050565b600b60029054906101000a900460ff1681565b611451611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613a68565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b611520611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613a68565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611612611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890613a68565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613c75565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611793611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990613a68565b60405180910390fd5b606461182c610b6d565b6118369190613ae6565b6103e882611842610b6d565b61184c9190613b17565b6118569190613ae6565b1015611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e90613d07565b60405180910390fd5b6103e8816118a3610b6d565b6118ad9190613b17565b6118b79190613ae6565b60098190555050565b6118c8611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90613a68565b60405180910390fd5b83600d6001018190555082600d60020181905550600d60020154600d600101546119819190613d27565b600d6000018190555081600d6004018190555080600d60050181905550600d60050154600d600401546119b49190613d27565b600d600301819055506009600d600001541115611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613dc9565b60405180910390fd5b6009600d600301541115611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613dc9565b60405180910390fd5b50505050565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0e611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490613a68565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c00611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690613e5b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611e129190613d27565b905083811015611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613ec7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613feb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202791906136a4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061410f565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121b85750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee906141a1565b60405180910390fd5b60008114156122115761220c83836000612b24565b612abb565b61221961126f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612287575061225761126f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a05750600b60029054906101000a900460ff16155b1561262657600b60009054906101000a900460ff1661239a57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061235a5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123909061420d565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561243d5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561248c57600754811115612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e9061429f565b60405180910390fd5b61257b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561252f5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561257a57600854811115612579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257090614331565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612625576009546125d883610fdd565b826125e39190613d27565b1115612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b9061439d565b60405180910390fd5b5b5b600061263130610fdd565b90506000600a5482101590508080156126565750600b60019054906101000a900460ff165b801561266f5750600b60029054906101000a900460ff16155b80156126c45750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561271a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127705750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b4576001600b60026101000a81548160ff021916908315150217905550612798612dae565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061286a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561287457600090505b60008115612aab57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128da57506000600d60030154115b156129835761290a60646128fc600d6003015488612fb790919063ffffffff16565b61303290919063ffffffff16565b9050600d60030154600d60050154826129239190613b17565b61292d9190613ae6565b6014600082825461293e9190613d27565b92505081905550600d60030154600d600401548261295c9190613b17565b6129669190613ae6565b601360008282546129779190613d27565b92505081905550612a87565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129e157506000600d60000154115b15612a8657612a116064612a03600d6000015488612fb790919063ffffffff16565b61303290919063ffffffff16565b9050600d60000154600d6002015482612a2a9190613b17565b612a349190613ae6565b60146000828254612a459190613d27565b92505081905550600d60000154600d6001015482612a639190613b17565b612a6d9190613ae6565b60136000828254612a7e9190613d27565b925050819055505b5b6000811115612a9c57612a9b873083612b24565b5b8085612aa891906143bd565b94505b612ab6878787612b24565b505050505b505050565b6000838311158290612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff91906134f7565b60405180910390fd5b5060008385612b1791906143bd565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfb9061410f565b60405180910390fd5b612c6f816040518060600160405280602681526020016147d4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d02816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612da191906136a4565b60405180910390a3505050565b6000612db930610fdd565b90506000601354601454612dcd9190613d27565b9050600080831480612ddf5750600082145b15612dec57505050612fb5565b6014600a54612dfb9190613b17565b831115612e14576014600a54612e119190613b17565b92505b600060028360145486612e279190613b17565b612e319190613ae6565b612e3b9190613ae6565b90506000612e52828661307c90919063ffffffff16565b90506000479050612e62826130c6565b6000612e77824761307c90919063ffffffff16565b90506000612ea287612e9460135485612fb790919063ffffffff16565b61303290919063ffffffff16565b905060008183612eb291906143bd565b905060006014819055506000601381905550600086118015612ed45750600081115b15612f1d57612ee38682613312565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868582604051612f149291906143f1565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f639061444b565b60006040518083038185875af1925050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b5050809750505050505050505050505b565b600080831415612fca576000905061302c565b60008284612fd89190613b17565b9050828482612fe79190613ae6565b14613027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301e906144d2565b60405180910390fd5b809150505b92915050565b600061307483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133fb565b905092915050565b60006130be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ac0565b905092915050565b6000600267ffffffffffffffff8111156130e3576130e26144f2565b5b6040519080825280602002602001820160405280156131115781602001602082028036833780820191505090505b509050308160008151811061312957613128614521565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c957600080fd5b505afa1580156131dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132019190614565565b8160018151811061321557613214614521565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061327a307f000000000000000000000000000000000000000000000000000000000000000084611e69565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132dc95949392919061468b565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505050565b61333d307f000000000000000000000000000000000000000000000000000000000000000084611e69565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016133a2969594939291906146e5565b6060604051808303818588803b1580156133bb57600080fd5b505af11580156133cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133f4919061475b565b5050505050565b60008083118290613442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343991906134f7565b60405180910390fd5b50600083856134519190613ae6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561349857808201518184015260208101905061347d565b838111156134a7576000848401525b50505050565b6000601f19601f8301169050919050565b60006134c98261345e565b6134d38185613469565b93506134e381856020860161347a565b6134ec816134ad565b840191505092915050565b6000602082019050818103600083015261351181846134be565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135498261351e565b9050919050565b6135598161353e565b811461356457600080fd5b50565b60008135905061357681613550565b92915050565b6000819050919050565b61358f8161357c565b811461359a57600080fd5b50565b6000813590506135ac81613586565b92915050565b600080604083850312156135c9576135c8613519565b5b60006135d785828601613567565b92505060206135e88582860161359d565b9150509250929050565b60008115159050919050565b613607816135f2565b82525050565b600060208201905061362260008301846135fe565b92915050565b60006020828403121561363e5761363d613519565b5b600061364c84828501613567565b91505092915050565b6000806040838503121561366c5761366b613519565b5b600061367a8582860161359d565b925050602061368b8582860161359d565b9150509250929050565b61369e8161357c565b82525050565b60006020820190506136b96000830184613695565b92915050565b6136c8816135f2565b81146136d357600080fd5b50565b6000813590506136e5816136bf565b92915050565b60006020828403121561370157613700613519565b5b600061370f848285016136d6565b91505092915050565b60008060006060848603121561373157613730613519565b5b600061373f86828701613567565b935050602061375086828701613567565b92505060406137618682870161359d565b9150509250925092565b600060ff82169050919050565b6137818161376b565b82525050565b600060208201905061379c6000830184613778565b92915050565b6137ab8161353e565b82525050565b60006020820190506137c660008301846137a2565b92915050565b6000602082840312156137e2576137e1613519565b5b60006137f08482850161359d565b91505092915050565b600080604083850312156138105761380f613519565b5b600061381e85828601613567565b925050602061382f858286016136d6565b9150509250929050565b6000806000806080858703121561385357613852613519565b5b60006138618782880161359d565b94505060206138728782880161359d565b93505060406138838782880161359d565b92505060606138948782880161359d565b91505092959194509250565b600060c0820190506138b56000830189613695565b6138c26020830188613695565b6138cf6040830187613695565b6138dc6060830186613695565b6138e96080830185613695565b6138f660a0830184613695565b979650505050505050565b6000806040838503121561391857613917613519565b5b600061392685828601613567565b925050602061393785828601613567565b9150509250929050565b6000819050919050565b600061396661396161395c8461351e565b613941565b61351e565b9050919050565b60006139788261394b565b9050919050565b600061398a8261396d565b9050919050565b61399a8161397f565b82525050565b60006020820190506139b56000830184613991565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a0257607f821691505b60208210811415613a1657613a156139bb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a52602083613469565b9150613a5d82613a1c565b602082019050919050565b60006020820190508181036000830152613a8181613a45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613af18261357c565b9150613afc8361357c565b925082613b0c57613b0b613a88565b5b828204905092915050565b6000613b228261357c565b9150613b2d8361357c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6657613b65613ab7565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e203125000000000000000000000000000000000000602082015250565b6000613bcd602e83613469565b9150613bd882613b71565b604082019050919050565b60006020820190508181036000830152613bfc81613bc0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613c5f602a83613469565b9150613c6a82613c03565b604082019050919050565b60006020820190508181036000830152613c8e81613c52565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf1602283613469565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b6000613d328261357c565b9150613d3d8361357c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7257613d71613ab7565b5b828201905092915050565b7f4d757374206b6565702066656573206174203925206f72206c65737300000000600082015250565b6000613db3601c83613469565b9150613dbe82613d7d565b602082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e45602683613469565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613eb1601b83613469565b9150613ebc82613e7b565b602082019050919050565b60006020820190508181036000830152613ee081613ea4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f43602483613469565b9150613f4e82613ee7565b604082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd5602283613469565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614067602583613469565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140f9602383613469565b91506141048261409d565b604082019050919050565b60006020820190508181036000830152614128816140ec565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061418b603183613469565b91506141968261412f565b604082019050919050565b600060208201905081810360008301526141ba8161417e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141f7601683613469565b9150614202826141c1565b602082019050919050565b60006020820190508181036000830152614226816141ea565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614289603583613469565b91506142948261422d565b604082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061431b603683613469565b9150614326826142bf565b604082019050919050565b6000602082019050818103600083015261434a8161430e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614387601383613469565b915061439282614351565b602082019050919050565b600060208201905081810360008301526143b68161437a565b9050919050565b60006143c88261357c565b91506143d38361357c565b9250828210156143e6576143e5613ab7565b5b828203905092915050565b60006040820190506144066000830185613695565b6144136020830184613695565b9392505050565b600081905092915050565b50565b600061443560008361441a565b915061444082614425565b600082019050919050565b600061445682614428565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144bc602183613469565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061455f81613550565b92915050565b60006020828403121561457b5761457a613519565b5b600061458984828501614550565b91505092915050565b6000819050919050565b60006145b76145b26145ad84614592565b613941565b61357c565b9050919050565b6145c78161459c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146028161353e565b82525050565b600061461483836145f9565b60208301905092915050565b6000602082019050919050565b6000614638826145cd565b61464281856145d8565b935061464d836145e9565b8060005b8381101561467e5781516146658882614608565b975061467083614620565b925050600181019050614651565b5085935050505092915050565b600060a0820190506146a06000830188613695565b6146ad60208301876145be565b81810360408301526146bf818661462d565b90506146ce60608301856137a2565b6146db6080830184613695565b9695505050505050565b600060c0820190506146fa60008301896137a2565b6147076020830188613695565b61471460408301876145be565b61472160608301866145be565b61472e60808301856137a2565b61473b60a0830184613695565b979650505050505050565b60008151905061475581613586565b92915050565b60008060006060848603121561477457614773613519565b5b600061478286828701614746565b935050602061479386828701614746565b92505060406147a486828701614746565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212207d1cd9363bc692cd1b8ce5e4dca316e2872e4d90147d40318e41557cbfc7c93e64736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80637571336a11610118578063c16dd4a4116100a0578063dd62ed3e1161006f578063dd62ed3e146107d5578063e16830a814610812578063f2fde38b1461083b578063f5b3c3bf14610864578063f887ea40146108a15761021a565b8063c16dd4a41461072a578063c18bc19514610753578063c6616ba11461077c578063d212a69a146107a55761021a565b8063a457c2d7116100e7578063a457c2d714610645578063a9059cbb14610682578063b8863115146106bf578063b9e418e7146106ea578063c0246668146107015761021a565b80637571336a146105895780638da5cb5b146105b257806395d89b41146105dd57806396880b17146106085761021a565b8063313ce5671161019b578063555467a11161016a578063555467a1146104a45780635d098b38146104e15780636ddd17131461050a57806370a0823114610535578063715018a6146105725761021a565b8063313ce567146103d457806339509351146103ff57806349bd5a5e1461043c5780634fbee193146104675761021a565b806318160ddd116101e257806318160ddd146102ed5780631a8145bb146103185780631c6e8a75146103435780631f3fed8f1461036c57806323b872dd146103975761021a565b806306fdde031461021f578063095ea7b31461024a57806310d5de531461028757806311a582c3146102c45761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108cc565b60405161024191906134f7565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c91906135b2565b61095e565b60405161027e919061360d565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613628565b61097c565b6040516102bb919061360d565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613655565b61099c565b005b3480156102f957600080fd5b50610302610b6d565b60405161030f91906136a4565b60405180910390f35b34801561032457600080fd5b5061032d610b77565b60405161033a91906136a4565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906136eb565b610b7d565b005b34801561037857600080fd5b50610381610c31565b60405161038e91906136a4565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613718565b610c37565b6040516103cb919061360d565b60405180910390f35b3480156103e057600080fd5b506103e9610d10565b6040516103f69190613787565b60405180910390f35b34801561040b57600080fd5b50610426600480360381019061042191906135b2565b610d19565b604051610433919061360d565b60405180910390f35b34801561044857600080fd5b50610451610dcc565b60405161045e91906137b1565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613628565b610df0565b60405161049b919061360d565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906137cc565b610e46565b6040516104d8919061360d565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613628565b610eef565b005b34801561051657600080fd5b5061051f610fca565b60405161052c919061360d565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190613628565b610fdd565b60405161056991906136a4565b60405180910390f35b34801561057e57600080fd5b50610587611025565b005b34801561059557600080fd5b506105b060048036038101906105ab91906137f9565b61117d565b005b3480156105be57600080fd5b506105c761126f565b6040516105d491906137b1565b60405180910390f35b3480156105e957600080fd5b506105f2611299565b6040516105ff91906134f7565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613628565b61132b565b60405161063c919061360d565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906135b2565b61134b565b604051610679919061360d565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906135b2565b611418565b6040516106b6919061360d565b60405180910390f35b3480156106cb57600080fd5b506106d4611436565b6040516106e1919061360d565b60405180910390f35b3480156106f657600080fd5b506106ff611449565b005b34801561070d57600080fd5b50610728600480360381019061072391906137f9565b611518565b005b34801561073657600080fd5b50610751600480360381019061074c91906137f9565b61160a565b005b34801561075f57600080fd5b5061077a600480360381019061077591906137cc565b61178b565b005b34801561078857600080fd5b506107a3600480360381019061079e9190613839565b6118c0565b005b3480156107b157600080fd5b506107ba611a55565b6040516107cc969594939291906138a0565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613901565b611a7f565b60405161080991906136a4565b60405180910390f35b34801561081e57600080fd5b50610839600480360381019061083491906137f9565b611b06565b005b34801561084757600080fd5b50610862600480360381019061085d9190613628565b611bf8565b005b34801561087057600080fd5b5061088b60048036038101906108869190613628565b611dbf565b604051610898919061360d565b60405180910390f35b3480156108ad57600080fd5b506108b6611ddf565b6040516108c391906139a0565b60405180910390f35b6060600380546108db906139ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610907906139ea565b80156109545780601f1061092957610100808354040283529160200191610954565b820191906000526020600020905b81548152906001019060200180831161093757829003601f168201915b5050505050905090565b600061097261096b611e61565b8484611e69565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b6109a4611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a90613a68565b60405180910390fd5b6064610a3d610b6d565b610a479190613ae6565b6103e883610a53610b6d565b610a5d9190613b17565b610a679190613ae6565b1015610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613be3565b60405180910390fd5b6064610ab2610b6d565b610abc9190613ae6565b6103e882610ac8610b6d565b610ad29190613b17565b610adc9190613ae6565b1015610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613be3565b60405180910390fd5b6103e882610b29610b6d565b610b339190613b17565b610b3d9190613ae6565b6007819055506103e881610b4f610b6d565b610b599190613b17565b610b639190613ae6565b6008819055505050565b6000600254905090565b60145481565b610b85611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90613a68565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60135481565b6000610c44848484612034565b610d0584610c50611e61565b610d00856040518060600160405280602881526020016147fa60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb6611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b611e69565b600190509392505050565b60006012905090565b6000610dc2610d26611e61565b84610dbd8560016000610d37611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0390919063ffffffff16565b611e69565b6001905092915050565b7f00000000000000000000000084a6a19f80f4201f570d62bf65e86a0359e6449d81565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e50611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690613a68565b60405180910390fd5b81600a8190555060019050919050565b610ef7611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613a68565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102d611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390613a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611185611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90613a68565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112a8906139ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112d4906139ea565b80156113215780601f106112f657610100808354040283529160200191611321565b820191906000526020600020905b81548152906001019060200180831161130457829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b600061140e611358611e61565b84611409856040518060600160405280602581526020016147af6025913960016000611382611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b611e69565b6001905092915050565b600061142c611425611e61565b8484612034565b6001905092915050565b600b60029054906101000a900460ff1681565b611451611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613a68565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b611520611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613a68565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611612611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890613a68565b60405180910390fd5b7f00000000000000000000000084a6a19f80f4201f570d62bf65e86a0359e6449d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613c75565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611793611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990613a68565b60405180910390fd5b606461182c610b6d565b6118369190613ae6565b6103e882611842610b6d565b61184c9190613b17565b6118569190613ae6565b1015611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e90613d07565b60405180910390fd5b6103e8816118a3610b6d565b6118ad9190613b17565b6118b79190613ae6565b60098190555050565b6118c8611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90613a68565b60405180910390fd5b83600d6001018190555082600d60020181905550600d60020154600d600101546119819190613d27565b600d6000018190555081600d6004018190555080600d60050181905550600d60050154600d600401546119b49190613d27565b600d600301819055506009600d600001541115611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613dc9565b60405180910390fd5b6009600d600301541115611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613dc9565b60405180910390fd5b50505050565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0e611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490613a68565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c00611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690613e5b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611e129190613d27565b905083811015611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613ec7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613feb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202791906136a4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061410f565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121b85750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee906141a1565b60405180910390fd5b60008114156122115761220c83836000612b24565b612abb565b61221961126f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612287575061225761126f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a05750600b60029054906101000a900460ff16155b1561262657600b60009054906101000a900460ff1661239a57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061235a5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123909061420d565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561243d5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561248c57600754811115612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e9061429f565b60405180910390fd5b61257b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561252f5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561257a57600854811115612579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257090614331565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612625576009546125d883610fdd565b826125e39190613d27565b1115612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b9061439d565b60405180910390fd5b5b5b600061263130610fdd565b90506000600a5482101590508080156126565750600b60019054906101000a900460ff165b801561266f5750600b60029054906101000a900460ff16155b80156126c45750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561271a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127705750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b4576001600b60026101000a81548160ff021916908315150217905550612798612dae565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061286a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561287457600090505b60008115612aab57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128da57506000600d60030154115b156129835761290a60646128fc600d6003015488612fb790919063ffffffff16565b61303290919063ffffffff16565b9050600d60030154600d60050154826129239190613b17565b61292d9190613ae6565b6014600082825461293e9190613d27565b92505081905550600d60030154600d600401548261295c9190613b17565b6129669190613ae6565b601360008282546129779190613d27565b92505081905550612a87565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129e157506000600d60000154115b15612a8657612a116064612a03600d6000015488612fb790919063ffffffff16565b61303290919063ffffffff16565b9050600d60000154600d6002015482612a2a9190613b17565b612a349190613ae6565b60146000828254612a459190613d27565b92505081905550600d60000154600d6001015482612a639190613b17565b612a6d9190613ae6565b60136000828254612a7e9190613d27565b925050819055505b5b6000811115612a9c57612a9b873083612b24565b5b8085612aa891906143bd565b94505b612ab6878787612b24565b505050505b505050565b6000838311158290612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff91906134f7565b60405180910390fd5b5060008385612b1791906143bd565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfb9061410f565b60405180910390fd5b612c6f816040518060600160405280602681526020016147d4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d02816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612da191906136a4565b60405180910390a3505050565b6000612db930610fdd565b90506000601354601454612dcd9190613d27565b9050600080831480612ddf5750600082145b15612dec57505050612fb5565b6014600a54612dfb9190613b17565b831115612e14576014600a54612e119190613b17565b92505b600060028360145486612e279190613b17565b612e319190613ae6565b612e3b9190613ae6565b90506000612e52828661307c90919063ffffffff16565b90506000479050612e62826130c6565b6000612e77824761307c90919063ffffffff16565b90506000612ea287612e9460135485612fb790919063ffffffff16565b61303290919063ffffffff16565b905060008183612eb291906143bd565b905060006014819055506000601381905550600086118015612ed45750600081115b15612f1d57612ee38682613312565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868582604051612f149291906143f1565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f639061444b565b60006040518083038185875af1925050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b5050809750505050505050505050505b565b600080831415612fca576000905061302c565b60008284612fd89190613b17565b9050828482612fe79190613ae6565b14613027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301e906144d2565b60405180910390fd5b809150505b92915050565b600061307483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133fb565b905092915050565b60006130be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ac0565b905092915050565b6000600267ffffffffffffffff8111156130e3576130e26144f2565b5b6040519080825280602002602001820160405280156131115781602001602082028036833780820191505090505b509050308160008151811061312957613128614521565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c957600080fd5b505afa1580156131dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132019190614565565b8160018151811061321557613214614521565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061327a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e69565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132dc95949392919061468b565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505050565b61333d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e69565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016133a2969594939291906146e5565b6060604051808303818588803b1580156133bb57600080fd5b505af11580156133cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133f4919061475b565b5050505050565b60008083118290613442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343991906134f7565b60405180910390fd5b50600083856134519190613ae6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561349857808201518184015260208101905061347d565b838111156134a7576000848401525b50505050565b6000601f19601f8301169050919050565b60006134c98261345e565b6134d38185613469565b93506134e381856020860161347a565b6134ec816134ad565b840191505092915050565b6000602082019050818103600083015261351181846134be565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135498261351e565b9050919050565b6135598161353e565b811461356457600080fd5b50565b60008135905061357681613550565b92915050565b6000819050919050565b61358f8161357c565b811461359a57600080fd5b50565b6000813590506135ac81613586565b92915050565b600080604083850312156135c9576135c8613519565b5b60006135d785828601613567565b92505060206135e88582860161359d565b9150509250929050565b60008115159050919050565b613607816135f2565b82525050565b600060208201905061362260008301846135fe565b92915050565b60006020828403121561363e5761363d613519565b5b600061364c84828501613567565b91505092915050565b6000806040838503121561366c5761366b613519565b5b600061367a8582860161359d565b925050602061368b8582860161359d565b9150509250929050565b61369e8161357c565b82525050565b60006020820190506136b96000830184613695565b92915050565b6136c8816135f2565b81146136d357600080fd5b50565b6000813590506136e5816136bf565b92915050565b60006020828403121561370157613700613519565b5b600061370f848285016136d6565b91505092915050565b60008060006060848603121561373157613730613519565b5b600061373f86828701613567565b935050602061375086828701613567565b92505060406137618682870161359d565b9150509250925092565b600060ff82169050919050565b6137818161376b565b82525050565b600060208201905061379c6000830184613778565b92915050565b6137ab8161353e565b82525050565b60006020820190506137c660008301846137a2565b92915050565b6000602082840312156137e2576137e1613519565b5b60006137f08482850161359d565b91505092915050565b600080604083850312156138105761380f613519565b5b600061381e85828601613567565b925050602061382f858286016136d6565b9150509250929050565b6000806000806080858703121561385357613852613519565b5b60006138618782880161359d565b94505060206138728782880161359d565b93505060406138838782880161359d565b92505060606138948782880161359d565b91505092959194509250565b600060c0820190506138b56000830189613695565b6138c26020830188613695565b6138cf6040830187613695565b6138dc6060830186613695565b6138e96080830185613695565b6138f660a0830184613695565b979650505050505050565b6000806040838503121561391857613917613519565b5b600061392685828601613567565b925050602061393785828601613567565b9150509250929050565b6000819050919050565b600061396661396161395c8461351e565b613941565b61351e565b9050919050565b60006139788261394b565b9050919050565b600061398a8261396d565b9050919050565b61399a8161397f565b82525050565b60006020820190506139b56000830184613991565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a0257607f821691505b60208210811415613a1657613a156139bb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a52602083613469565b9150613a5d82613a1c565b602082019050919050565b60006020820190508181036000830152613a8181613a45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613af18261357c565b9150613afc8361357c565b925082613b0c57613b0b613a88565b5b828204905092915050565b6000613b228261357c565b9150613b2d8361357c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6657613b65613ab7565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e203125000000000000000000000000000000000000602082015250565b6000613bcd602e83613469565b9150613bd882613b71565b604082019050919050565b60006020820190508181036000830152613bfc81613bc0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613c5f602a83613469565b9150613c6a82613c03565b604082019050919050565b60006020820190508181036000830152613c8e81613c52565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf1602283613469565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b6000613d328261357c565b9150613d3d8361357c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7257613d71613ab7565b5b828201905092915050565b7f4d757374206b6565702066656573206174203925206f72206c65737300000000600082015250565b6000613db3601c83613469565b9150613dbe82613d7d565b602082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e45602683613469565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613eb1601b83613469565b9150613ebc82613e7b565b602082019050919050565b60006020820190508181036000830152613ee081613ea4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f43602483613469565b9150613f4e82613ee7565b604082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd5602283613469565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614067602583613469565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140f9602383613469565b91506141048261409d565b604082019050919050565b60006020820190508181036000830152614128816140ec565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061418b603183613469565b91506141968261412f565b604082019050919050565b600060208201905081810360008301526141ba8161417e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141f7601683613469565b9150614202826141c1565b602082019050919050565b60006020820190508181036000830152614226816141ea565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614289603583613469565b91506142948261422d565b604082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061431b603683613469565b9150614326826142bf565b604082019050919050565b6000602082019050818103600083015261434a8161430e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614387601383613469565b915061439282614351565b602082019050919050565b600060208201905081810360008301526143b68161437a565b9050919050565b60006143c88261357c565b91506143d38361357c565b9250828210156143e6576143e5613ab7565b5b828203905092915050565b60006040820190506144066000830185613695565b6144136020830184613695565b9392505050565b600081905092915050565b50565b600061443560008361441a565b915061444082614425565b600082019050919050565b600061445682614428565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144bc602183613469565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061455f81613550565b92915050565b60006020828403121561457b5761457a613519565b5b600061458984828501614550565b91505092915050565b6000819050919050565b60006145b76145b26145ad84614592565b613941565b61357c565b9050919050565b6145c78161459c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146028161353e565b82525050565b600061461483836145f9565b60208301905092915050565b6000602082019050919050565b6000614638826145cd565b61464281856145d8565b935061464d836145e9565b8060005b8381101561467e5781516146658882614608565b975061467083614620565b925050600181019050614651565b5085935050505092915050565b600060a0820190506146a06000830188613695565b6146ad60208301876145be565b81810360408301526146bf818661462d565b90506146ce60608301856137a2565b6146db6080830184613695565b9695505050505050565b600060c0820190506146fa60008301896137a2565b6147076020830188613695565b61471460408301876145be565b61472160608301866145be565b61472e60808301856137a2565b61473b60a0830184613695565b979650505050505050565b60008151905061475581613586565b92915050565b60008060006060848603121561477457614773613519565b5b600061478286828701614746565b935050602061479386828701614746565b92505060406147a486828701614746565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212207d1cd9363bc692cd1b8ce5e4dca316e2872e4d90147d40318e41557cbfc7c93e64736f6c63430008090033

Deployed Bytecode Sourcemap

21333:12192:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4583:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6743:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22617:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25443:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5700:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22461:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26299:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22421:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7393:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5543:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8156:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21474:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27882:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25275:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27749:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21814:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5870:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14005:148;;;;;;;;;;;;;:::i;:::-;;27389:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13364:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4801:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22687:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8876:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6209:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21852:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25095:106;;;;;;;;;;;;;:::i;:::-;;27099:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27543:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25932:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26408:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22194:206;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;6446:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27237:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14308:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22903:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21425;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4583:99;4636:13;4669:5;4662:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4583:99;:::o;6743:168::-;6825:4;6842:39;6851:12;:10;:12::i;:::-;6865:7;6874:6;6842:8;:39::i;:::-;6899:4;6892:11;;6743:168;;;;:::o;22617:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25443:479::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25605:3:::1;25589:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25579:4;25566:9;25550:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25549:34;;;;:::i;:::-;25548:61;;25540:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;25737:3;25721:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25711:4;25697:10;25681:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25680:35;;;;:::i;:::-;25679:62;;25671:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;25848:4;25835:9;25819:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25818:34;;;;:::i;:::-;25803:12;:49;;;;25910:4;25896:10;25880:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25879:35;;;;:::i;:::-;25863:13;:51;;;;25443:479:::0;;:::o;5700:107::-;5760:7;5787:12;;5780:19;;5700:107;:::o;22461:33::-;;;;:::o;26299:101::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26385:7:::1;26371:11;;:21;;;;;;;;;;;;;;;;;;26299:101:::0;:::o;22421:33::-;;;;:::o;7393:354::-;7532:4;7549:36;7559:6;7567:9;7578:6;7549:9;:36::i;:::-;7596:121;7605:6;7613:12;:10;:12::i;:::-;7627:89;7665:6;7627:89;;;;;;;;;;;;;;;;;:11;:19;7639:6;7627:19;;;;;;;;;;;;;;;:33;7647:12;:10;:12::i;:::-;7627:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7596:8;:121::i;:::-;7735:4;7728:11;;7393:354;;;;;:::o;5543:92::-;5600:5;5625:2;5618:9;;5543:92;:::o;8156:217::-;8243:4;8260:83;8269:12;:10;:12::i;:::-;8283:7;8292:50;8331:10;8292:11;:25;8304:12;:10;:12::i;:::-;8292:25;;;;;;;;;;;;;;;:34;8318:7;8292:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8260:8;:83::i;:::-;8361:4;8354:11;;8156:217;;;;:::o;21474:38::-;;;:::o;27882:125::-;27947:4;27971:19;:28;27991:7;27971:28;;;;;;;;;;;;;;;;;;;;;;;;;27964:35;;27882:125;;;:::o;25275:158::-;25356:4;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25394:9:::1;25372:19;:31;;;;25421:4;25414:11;;25275:158:::0;;;:::o;27749:125::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27850:16:::1;27832:15;;:34;;;;;;;;;;;;;;;;;;27749:125:::0;:::o;21814:31::-;;;;;;;;;;;;;:::o;5870:126::-;5943:7;5970:9;:18;5980:7;5970:18;;;;;;;;;;;;;;;;5963:25;;5870:126;;;:::o;14005:148::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14112:1:::1;14075:40;;14096:6;;;;;;;;;;;14075:40;;;;;;;;;;;;14143:1;14126:6;;:19;;;;;;;;;;;;;;;;;;14005:148::o:0;27389:144::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27521:4:::1;27479:31;:39;27511:6;27479:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27389:144:::0;;:::o;13364:78::-;13401:7;13428:6;;;;;;;;;;;13421:13;;13364:78;:::o;4801:103::-;4856:13;4889:7;4882:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4801:103;:::o;22687:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;8876:268::-;8968:4;8985:129;8994:12;:10;:12::i;:::-;9008:7;9017:96;9056:15;9017:96;;;;;;;;;;;;;;;;;:11;:25;9029:12;:10;:12::i;:::-;9017:25;;;;;;;;;;;;;;;:34;9043:7;9017:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8985:8;:129::i;:::-;9132:4;9125:11;;8876:268;;;;:::o;6209:174::-;6294:4;6311:42;6321:12;:10;:12::i;:::-;6335:9;6346:6;6311:9;:42::i;:::-;6371:4;6364:11;;6209:174;;;;:::o;21852:22::-;;;;;;;;;;;;;:::o;25095:106::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25160:4:::1;25148:9;;:16;;;;;;;;;;;;;;;;;;25189:4;25175:11;;:18;;;;;;;;;;;;;;;;;;25095:106::o:0;27099:132::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27215:8:::1;27184:19;:28;27204:7;27184:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27099:132:::0;;:::o;27543:196::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27636:13:::1;27628:21;;:4;:21;;;;27620:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27726:5;27707:10;:16;27718:4;27707:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;27543:196:::0;;:::o;25932:271::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26085:3:::1;26069:13;:11;:13::i;:::-;:19;;;;:::i;:::-;26059:4;26042:13;26026;:11;:13::i;:::-;:29;;;;:::i;:::-;26025:38;;;;:::i;:::-;26024:65;;26016:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;26191:4;26174:13;26158;:11;:13::i;:::-;:29;;;;:::i;:::-;26157:38;;;;:::i;:::-;26139:15;:56;;;;25932:271:::0;:::o;26408:679::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26586:16:::1;26562:5;:21;;:40;;;;26637:16;26613:5;:21;;:40;;;;26709:5;:21;;;26685:5;:21;;;:45;;;;:::i;:::-;26664:5;:18;;:66;;;;26768:17;26743:5;:22;;:42;;;;26821:17;26796:5;:22;;:42;;;;26896:5;:22;;;26871:5;:22;;;:47;;;;:::i;:::-;26849:5;:19;;:69;;;;26959:1;26937:5;:18;;;:23;;26929:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27038:1;27015:5;:19;;;:24;;27007:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26408:679:::0;;;;:::o;22194:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6446:150::-;6534:7;6561:11;:18;6573:5;6561:18;;;;;;;;;;;;;;;:27;6580:7;6561:27;;;;;;;;;;;;;;;;6554:34;;6446:150;;;;:::o;27237:146::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27367:8:::1;27329:26;:35;27356:7;27329:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27237:146:::0;;:::o;14308:244::-;13585:12;:10;:12::i;:::-;13575:22;;:6;;;;;;;;;;;:22;;;13567:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14417:1:::1;14397:22;;:8;:22;;;;14389:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14507:8;14478:38;;14499:6;;;;;;;;;;;14478:38;;;;;;;;;;;;14536:8;14527:6;;:17;;;;;;;;;;;;;;;;;;14308:244:::0;:::o;22903:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;21425:::-;;;:::o;11629:180::-;11686:7;11706:9;11722:1;11718;:5;;;;:::i;:::-;11706:17;;11747:1;11742;:6;;11734:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11800:1;11793:8;;;11629:180;;;;:::o;3653:97::-;3705:7;3732:10;3725:17;;3653:97;:::o;11202:382::-;11355:1;11338:19;;:5;:19;;;;11330:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11436:1;11417:21;;:7;:21;;;;11409:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11522:6;11492:11;:18;11504:5;11492:18;;;;;;;;;;;;;;;:27;11511:7;11492:27;;;;;;;;;;;;;;;:36;;;;11560:7;11544:32;;11553:5;11544:32;;;11569:6;11544:32;;;;;;:::i;:::-;;;;;;;;11202:382;;;:::o;28015:3242::-;28174:1;28156:20;;:6;:20;;;;28148:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28258:1;28237:23;;:9;:23;;;;28229:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28330:10;:21;28341:9;28330:21;;;;;;;;;;;;;;;;;;;;;;;;;28329:22;:45;;;;;28356:10;:18;28367:6;28356:18;;;;;;;;;;;;;;;;;;;;;;;;;28355:19;28329:45;28321:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;28463:1;28453:6;:11;28449:102;;;28481:37;28497:6;28505:9;28516:1;28481:15;:37::i;:::-;28533:7;;28449:102;28591:7;:5;:7::i;:::-;28581:17;;:6;:17;;;;:54;;;;;28628:7;:5;:7::i;:::-;28615:20;;:9;:20;;;;28581:54;:82;;;;;28653:10;;;;;;;;;;;28652:11;28581:82;28563:888;;;28697:9;;;;;;;;;;;28692:147;;28735:19;:27;28755:6;28735:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;28766:19;:30;28786:9;28766:30;;;;;;;;;;;;;;;;;;;;;;;;;28735:61;28727:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28692:147;28857:10;:18;28868:6;28857:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28880:31;:42;28912:9;28880:42;;;;;;;;;;;;;;;;;;;;;;;;;28879:43;28857:65;28853:410;;;28961:12;;28951:6;:22;;28943:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28853:410;;;29071:10;:21;29082:9;29071:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;29097:31;:39;29129:6;29097:39;;;;;;;;;;;;;;;;;;;;;;;;;29096:40;29071:65;29067:196;;;29175:13;;29165:6;:23;;29157:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;29067:196;28853:410;29284:26;:37;29311:9;29284:37;;;;;;;;;;;;;;;;;;;;;;;;;29279:159;;29383:15;;29359:20;29369:9;29359;:20::i;:::-;29350:6;:29;;;;:::i;:::-;:48;;29342:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29279:159;28563:888;29477:28;29508:24;29526:4;29508:9;:24::i;:::-;29477:55;;29546:12;29585:19;;29561:20;:43;;29546:58;;29635:7;:35;;;;;29659:11;;;;;;;;;;;29635:35;:63;;;;;29688:10;;;;;;;;;;;29687:11;29635:63;:101;;;;;29715:10;:21;29726:9;29715:21;;;;;;;;;;;;;;;;;;;;;;;;;29635:101;:146;;;;;29754:19;:27;29774:6;29754:27;;;;;;;;;;;;;;;;;;;;;;;;;29753:28;29635:146;:194;;;;;29799:19;:30;29819:9;29799:30;;;;;;;;;;;;;;;;;;;;;;;;;29798:31;29635:194;29617:326;;;29869:4;29856:10;;:17;;;;;;;;;;;;;;;;;;29888:10;:8;:10::i;:::-;29926:5;29913:10;;:18;;;;;;;;;;;;;;;;;;29617:326;29956:12;29972:10;;;;;;;;;;;29971:11;29956:26;;30084:19;:27;30104:6;30084:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;30115:19;:30;30135:9;30115:30;;;;;;;;;;;;;;;;;;;;;;;;;30084:61;30080:109;;;30172:5;30162:15;;30080:109;30202:12;30307:7;30303:892;;;30373:10;:21;30384:9;30373:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;30420:1;30398:5;:19;;;:23;30373:48;30369:673;;;30449:40;30485:3;30449:31;30460:5;:19;;;30449:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30442:47;;30562:5;:19;;;30537:5;:22;;;30530:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30508:18;;:73;;;;;;;:::i;:::-;;;;;;;;30654:5;:19;;;30629:5;:22;;;30622:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30600:18;;:73;;;;;;;:::i;:::-;;;;;;;;30369:673;;;30735:10;:18;30746:6;30735:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;30778:1;30757:5;:18;;;:22;30735:44;30731:311;;;30807:39;30842:3;30807:30;30818:5;:18;;;30807:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30800:46;;30918:5;:18;;;30894:5;:21;;;30887:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30865:18;;:71;;;;;;;:::i;:::-;;;;;;;;31008:5;:18;;;30984:5;:21;;;30977:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30955:18;;:71;;;;;;;:::i;:::-;;;;;;;;30731:311;30369:673;31069:1;31062:4;:8;31058:93;;;31091:44;31107:6;31123:4;31130;31091:15;:44::i;:::-;31058:93;31177:4;31167:14;;;;;:::i;:::-;;;30303:892;31207:42;31223:6;31231:9;31242:6;31207:15;:42::i;:::-;28137:3120;;;;28015:3242;;;;:::o;11970:191::-;12055:7;12088:1;12083;:6;;12091:12;12075:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12115:9;12131:1;12127;:5;;;;:::i;:::-;12115:17;;12152:1;12145:8;;;11970:191;;;;;:::o;9634:521::-;9792:1;9774:20;;:6;:20;;;;9766:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9876:1;9855:23;;:9;:23;;;;9847:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9959;9981:6;9959:71;;;;;;;;;;;;;;;;;:9;:17;9969:6;9959:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9939:9;:17;9949:6;9939:17;;;;;;;;;;;;;;;:91;;;;10064:32;10089:6;10064:9;:20;10074:9;10064:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;10041:9;:20;10051:9;10041:20;;;;;;;;;;;;;;;:55;;;;10129:9;10112:35;;10121:6;10112:35;;;10140:6;10112:35;;;;;;:::i;:::-;;;;;;;;9634:521;;;:::o;32185:1335::-;32224:28;32255:24;32273:4;32255:9;:24::i;:::-;32224:55;;32290:14;32328:18;;32307;;:39;;;;:::i;:::-;32290:56;;32358:12;32411:1;32387:20;:25;:40;;;;32426:1;32416:6;:11;32387:40;32383:57;;;32431:7;;;;;32383:57;32501:2;32479:19;;:24;;;;:::i;:::-;32456:20;:47;32452:127;;;32565:2;32543:19;;:24;;;;:::i;:::-;32520:47;;32452:127;32640:23;32719:1;32710:6;32689:18;;32666:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32640:80;;32731:26;32760:41;32785:15;32760:20;:24;;:41;;;;:::i;:::-;32731:70;;32815:25;32843:21;32815:49;;32877:36;32894:18;32877:16;:36::i;:::-;32928:18;32949:44;32975:17;32949:21;:25;;:44;;;;:::i;:::-;32928:65;;33007:23;33033:46;33072:6;33033:34;33048:18;;33033:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;33007:72;;33090:23;33129:15;33116:10;:28;;;;:::i;:::-;33090:54;;33180:1;33159:18;:22;;;;33213:1;33192:18;:22;;;;33251:1;33233:15;:19;:42;;;;;33274:1;33256:15;:19;33233:42;33229:192;;;33292:46;33305:15;33322;33292:12;:46::i;:::-;33358:51;33373:18;33393:15;33358:51;;;;;;;:::i;:::-;;;;;;;;33229:192;33454:15;;;;;;;;;;;33446:29;;33484:21;33446:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33433:79;;;;;32213:1307;;;;;;;;;32185:1335;:::o;12169:256::-;12226:7;12261:1;12256;:6;12252:47;;;12286:1;12279:8;;;;12252:47;12312:9;12328:1;12324;:5;;;;:::i;:::-;12312:17;;12357:1;12352;12348;:5;;;;:::i;:::-;:10;12340:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12416:1;12409:8;;;12169:256;;;;;:::o;12436:131::-;12493:7;12520:39;12524:1;12527;12520:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12513:46;;12436:131;;;;:::o;11822:135::-;11879:7;11906:43;11910:1;11913;11906:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11899:50;;11822:135;;;;:::o;31265:554::-;31389:21;31427:1;31413:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31389:40;;31458:4;31440;31445:1;31440:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31484:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31474:4;31479:1;31474:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31510:49;31527:4;31542:6;31551:7;31510:8;:49::i;:::-;31598:6;:57;;;31670:7;31692:1;31736:4;31763;31783:15;31598:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31316:503;31265:554;:::o;31827:350::-;31971:49;31988:4;32003:6;32012:7;31971:8;:49::i;:::-;32063:6;:22;;;32094:9;32115:4;32122:7;32131:1;32134;32146:4;32153:15;32063:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31827:350;;:::o;12579:277::-;12664:7;12696:1;12692;:5;12699:12;12684:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12723:9;12739:1;12735;:5;;;;:::i;:::-;12723:17;;12847:1;12840:8;;;12579:277;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:116::-;4731:21;4746:5;4731:21;:::i;:::-;4724:5;4721:32;4711:60;;4767:1;4764;4757:12;4711:60;4661:116;:::o;4783:133::-;4826:5;4864:6;4851:20;4842:29;;4880:30;4904:5;4880:30;:::i;:::-;4783:133;;;;:::o;4922:323::-;4978:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:119;;;5033:79;;:::i;:::-;4995:119;5153:1;5178:50;5220:7;5211:6;5200:9;5196:22;5178:50;:::i;:::-;5168:60;;5124:114;4922:323;;;;:::o;5251:619::-;5328:6;5336;5344;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5490:117;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5251:619;;;;;:::o;5876:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:118::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6306:118;;:::o;6430:222::-;6523:4;6561:2;6550:9;6546:18;6538:26;;6574:71;6642:1;6631:9;6627:17;6618:6;6574:71;:::i;:::-;6430:222;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:468::-;7058:6;7066;7115:2;7103:9;7094:7;7090:23;7086:32;7083:119;;;7121:79;;:::i;:::-;7083:119;7241:1;7266:53;7311:7;7302:6;7291:9;7287:22;7266:53;:::i;:::-;7256:63;;7212:117;7368:2;7394:50;7436:7;7427:6;7416:9;7412:22;7394:50;:::i;:::-;7384:60;;7339:115;6993:468;;;;;:::o;7467:765::-;7553:6;7561;7569;7577;7626:3;7614:9;7605:7;7601:23;7597:33;7594:120;;;7633:79;;:::i;:::-;7594:120;7753:1;7778:53;7823:7;7814:6;7803:9;7799:22;7778:53;:::i;:::-;7768:63;;7724:117;7880:2;7906:53;7951:7;7942:6;7931:9;7927:22;7906:53;:::i;:::-;7896:63;;7851:118;8008:2;8034:53;8079:7;8070:6;8059:9;8055:22;8034:53;:::i;:::-;8024:63;;7979:118;8136:2;8162:53;8207:7;8198:6;8187:9;8183:22;8162:53;:::i;:::-;8152:63;;8107:118;7467:765;;;;;;;:::o;8238:775::-;8471:4;8509:3;8498:9;8494:19;8486:27;;8523:71;8591:1;8580:9;8576:17;8567:6;8523:71;:::i;:::-;8604:72;8672:2;8661:9;8657:18;8648:6;8604:72;:::i;:::-;8686;8754:2;8743:9;8739:18;8730:6;8686:72;:::i;:::-;8768;8836:2;8825:9;8821:18;8812:6;8768:72;:::i;:::-;8850:73;8918:3;8907:9;8903:19;8894:6;8850:73;:::i;:::-;8933;9001:3;8990:9;8986:19;8977:6;8933:73;:::i;:::-;8238:775;;;;;;;;;:::o;9019:474::-;9087:6;9095;9144:2;9132:9;9123:7;9119:23;9115:32;9112:119;;;9150:79;;:::i;:::-;9112:119;9270:1;9295:53;9340:7;9331:6;9320:9;9316:22;9295:53;:::i;:::-;9285:63;;9241:117;9397:2;9423:53;9468:7;9459:6;9448:9;9444:22;9423:53;:::i;:::-;9413:63;;9368:118;9019:474;;;;;:::o;9499:60::-;9527:3;9548:5;9541:12;;9499:60;;;:::o;9565:142::-;9615:9;9648:53;9666:34;9675:24;9693:5;9675:24;:::i;:::-;9666:34;:::i;:::-;9648:53;:::i;:::-;9635:66;;9565:142;;;:::o;9713:126::-;9763:9;9796:37;9827:5;9796:37;:::i;:::-;9783:50;;9713:126;;;:::o;9845:153::-;9922:9;9955:37;9986:5;9955:37;:::i;:::-;9942:50;;9845:153;;;:::o;10004:185::-;10118:64;10176:5;10118:64;:::i;:::-;10113:3;10106:77;10004:185;;:::o;10195:276::-;10315:4;10353:2;10342:9;10338:18;10330:26;;10366:98;10461:1;10450:9;10446:17;10437:6;10366:98;:::i;:::-;10195:276;;;;:::o;10477:180::-;10525:77;10522:1;10515:88;10622:4;10619:1;10612:15;10646:4;10643:1;10636:15;10663:320;10707:6;10744:1;10738:4;10734:12;10724:22;;10791:1;10785:4;10781:12;10812:18;10802:81;;10868:4;10860:6;10856:17;10846:27;;10802:81;10930:2;10922:6;10919:14;10899:18;10896:38;10893:84;;;10949:18;;:::i;:::-;10893:84;10714:269;10663:320;;;:::o;10989:182::-;11129:34;11125:1;11117:6;11113:14;11106:58;10989:182;:::o;11177:366::-;11319:3;11340:67;11404:2;11399:3;11340:67;:::i;:::-;11333:74;;11416:93;11505:3;11416:93;:::i;:::-;11534:2;11529:3;11525:12;11518:19;;11177:366;;;:::o;11549:419::-;11715:4;11753:2;11742:9;11738:18;11730:26;;11802:9;11796:4;11792:20;11788:1;11777:9;11773:17;11766:47;11830:131;11956:4;11830:131;:::i;:::-;11822:139;;11549:419;;;:::o;11974:180::-;12022:77;12019:1;12012:88;12119:4;12116:1;12109:15;12143:4;12140:1;12133:15;12160:180;12208:77;12205:1;12198:88;12305:4;12302:1;12295:15;12329:4;12326:1;12319:15;12346:185;12386:1;12403:20;12421:1;12403:20;:::i;:::-;12398:25;;12437:20;12455:1;12437:20;:::i;:::-;12432:25;;12476:1;12466:35;;12481:18;;:::i;:::-;12466:35;12523:1;12520;12516:9;12511:14;;12346:185;;;;:::o;12537:348::-;12577:7;12600:20;12618:1;12600:20;:::i;:::-;12595:25;;12634:20;12652:1;12634:20;:::i;:::-;12629:25;;12822:1;12754:66;12750:74;12747:1;12744:81;12739:1;12732:9;12725:17;12721:105;12718:131;;;12829:18;;:::i;:::-;12718:131;12877:1;12874;12870:9;12859:20;;12537:348;;;;:::o;12891:233::-;13031:34;13027:1;13019:6;13015:14;13008:58;13100:16;13095:2;13087:6;13083:15;13076:41;12891:233;:::o;13130:366::-;13272:3;13293:67;13357:2;13352:3;13293:67;:::i;:::-;13286:74;;13369:93;13458:3;13369:93;:::i;:::-;13487:2;13482:3;13478:12;13471:19;;13130:366;;;:::o;13502:419::-;13668:4;13706:2;13695:9;13691:18;13683:26;;13755:9;13749:4;13745:20;13741:1;13730:9;13726:17;13719:47;13783:131;13909:4;13783:131;:::i;:::-;13775:139;;13502:419;;;:::o;13927:229::-;14067:34;14063:1;14055:6;14051:14;14044:58;14136:12;14131:2;14123:6;14119:15;14112:37;13927:229;:::o;14162:366::-;14304:3;14325:67;14389:2;14384:3;14325:67;:::i;:::-;14318:74;;14401:93;14490:3;14401:93;:::i;:::-;14519:2;14514:3;14510:12;14503:19;;14162:366;;;:::o;14534:419::-;14700:4;14738:2;14727:9;14723:18;14715:26;;14787:9;14781:4;14777:20;14773:1;14762:9;14758:17;14751:47;14815:131;14941:4;14815:131;:::i;:::-;14807:139;;14534:419;;;:::o;14959:221::-;15099:34;15095:1;15087:6;15083:14;15076:58;15168:4;15163:2;15155:6;15151:15;15144:29;14959:221;:::o;15186:366::-;15328:3;15349:67;15413:2;15408:3;15349:67;:::i;:::-;15342:74;;15425:93;15514:3;15425:93;:::i;:::-;15543:2;15538:3;15534:12;15527:19;;15186:366;;;:::o;15558:419::-;15724:4;15762:2;15751:9;15747:18;15739:26;;15811:9;15805:4;15801:20;15797:1;15786:9;15782:17;15775:47;15839:131;15965:4;15839:131;:::i;:::-;15831:139;;15558:419;;;:::o;15983:305::-;16023:3;16042:20;16060:1;16042:20;:::i;:::-;16037:25;;16076:20;16094:1;16076:20;:::i;:::-;16071:25;;16230:1;16162:66;16158:74;16155:1;16152:81;16149:107;;;16236:18;;:::i;:::-;16149:107;16280:1;16277;16273:9;16266:16;;15983:305;;;;:::o;16294:178::-;16434:30;16430:1;16422:6;16418:14;16411:54;16294:178;:::o;16478:366::-;16620:3;16641:67;16705:2;16700:3;16641:67;:::i;:::-;16634:74;;16717:93;16806:3;16717:93;:::i;:::-;16835:2;16830:3;16826:12;16819:19;;16478:366;;;:::o;16850:419::-;17016:4;17054:2;17043:9;17039:18;17031:26;;17103:9;17097:4;17093:20;17089:1;17078:9;17074:17;17067:47;17131:131;17257:4;17131:131;:::i;:::-;17123:139;;16850:419;;;:::o;17275:225::-;17415:34;17411:1;17403:6;17399:14;17392:58;17484:8;17479:2;17471:6;17467:15;17460:33;17275:225;:::o;17506:366::-;17648:3;17669:67;17733:2;17728:3;17669:67;:::i;:::-;17662:74;;17745:93;17834:3;17745:93;:::i;:::-;17863:2;17858:3;17854:12;17847:19;;17506:366;;;:::o;17878:419::-;18044:4;18082:2;18071:9;18067:18;18059:26;;18131:9;18125:4;18121:20;18117:1;18106:9;18102:17;18095:47;18159:131;18285:4;18159:131;:::i;:::-;18151:139;;17878:419;;;:::o;18303:177::-;18443:29;18439:1;18431:6;18427:14;18420:53;18303:177;:::o;18486:366::-;18628:3;18649:67;18713:2;18708:3;18649:67;:::i;:::-;18642:74;;18725:93;18814:3;18725:93;:::i;:::-;18843:2;18838:3;18834:12;18827:19;;18486:366;;;:::o;18858:419::-;19024:4;19062:2;19051:9;19047:18;19039:26;;19111:9;19105:4;19101:20;19097:1;19086:9;19082:17;19075:47;19139:131;19265:4;19139:131;:::i;:::-;19131:139;;18858:419;;;:::o;19283:223::-;19423:34;19419:1;19411:6;19407:14;19400:58;19492:6;19487:2;19479:6;19475:15;19468:31;19283:223;:::o;19512:366::-;19654:3;19675:67;19739:2;19734:3;19675:67;:::i;:::-;19668:74;;19751:93;19840:3;19751:93;:::i;:::-;19869:2;19864:3;19860:12;19853:19;;19512:366;;;:::o;19884:419::-;20050:4;20088:2;20077:9;20073:18;20065:26;;20137:9;20131:4;20127:20;20123:1;20112:9;20108:17;20101:47;20165:131;20291:4;20165:131;:::i;:::-;20157:139;;19884:419;;;:::o;20309:221::-;20449:34;20445:1;20437:6;20433:14;20426:58;20518:4;20513:2;20505:6;20501:15;20494:29;20309:221;:::o;20536:366::-;20678:3;20699:67;20763:2;20758:3;20699:67;:::i;:::-;20692:74;;20775:93;20864:3;20775:93;:::i;:::-;20893:2;20888:3;20884:12;20877:19;;20536:366;;;:::o;20908:419::-;21074:4;21112:2;21101:9;21097:18;21089:26;;21161:9;21155:4;21151:20;21147:1;21136:9;21132:17;21125:47;21189:131;21315:4;21189:131;:::i;:::-;21181:139;;20908:419;;;:::o;21333:224::-;21473:34;21469:1;21461:6;21457:14;21450:58;21542:7;21537:2;21529:6;21525:15;21518:32;21333:224;:::o;21563:366::-;21705:3;21726:67;21790:2;21785:3;21726:67;:::i;:::-;21719:74;;21802:93;21891:3;21802:93;:::i;:::-;21920:2;21915:3;21911:12;21904:19;;21563:366;;;:::o;21935:419::-;22101:4;22139:2;22128:9;22124:18;22116:26;;22188:9;22182:4;22178:20;22174:1;22163:9;22159:17;22152:47;22216:131;22342:4;22216:131;:::i;:::-;22208:139;;21935:419;;;:::o;22360:222::-;22500:34;22496:1;22488:6;22484:14;22477:58;22569:5;22564:2;22556:6;22552:15;22545:30;22360:222;:::o;22588:366::-;22730:3;22751:67;22815:2;22810:3;22751:67;:::i;:::-;22744:74;;22827:93;22916:3;22827:93;:::i;:::-;22945:2;22940:3;22936:12;22929:19;;22588:366;;;:::o;22960:419::-;23126:4;23164:2;23153:9;23149:18;23141:26;;23213:9;23207:4;23203:20;23199:1;23188:9;23184:17;23177:47;23241:131;23367:4;23241:131;:::i;:::-;23233:139;;22960:419;;;:::o;23385:236::-;23525:34;23521:1;23513:6;23509:14;23502:58;23594:19;23589:2;23581:6;23577:15;23570:44;23385:236;:::o;23627:366::-;23769:3;23790:67;23854:2;23849:3;23790:67;:::i;:::-;23783:74;;23866:93;23955:3;23866:93;:::i;:::-;23984:2;23979:3;23975:12;23968:19;;23627:366;;;:::o;23999:419::-;24165:4;24203:2;24192:9;24188:18;24180:26;;24252:9;24246:4;24242:20;24238:1;24227:9;24223:17;24216:47;24280:131;24406:4;24280:131;:::i;:::-;24272:139;;23999:419;;;:::o;24424:172::-;24564:24;24560:1;24552:6;24548:14;24541:48;24424:172;:::o;24602:366::-;24744:3;24765:67;24829:2;24824:3;24765:67;:::i;:::-;24758:74;;24841:93;24930:3;24841:93;:::i;:::-;24959:2;24954:3;24950:12;24943:19;;24602:366;;;:::o;24974:419::-;25140:4;25178:2;25167:9;25163:18;25155:26;;25227:9;25221:4;25217:20;25213:1;25202:9;25198:17;25191:47;25255:131;25381:4;25255:131;:::i;:::-;25247:139;;24974:419;;;:::o;25399:240::-;25539:34;25535:1;25527:6;25523:14;25516:58;25608:23;25603:2;25595:6;25591:15;25584:48;25399:240;:::o;25645:366::-;25787:3;25808:67;25872:2;25867:3;25808:67;:::i;:::-;25801:74;;25884:93;25973:3;25884:93;:::i;:::-;26002:2;25997:3;25993:12;25986:19;;25645:366;;;:::o;26017:419::-;26183:4;26221:2;26210:9;26206:18;26198:26;;26270:9;26264:4;26260:20;26256:1;26245:9;26241:17;26234:47;26298:131;26424:4;26298:131;:::i;:::-;26290:139;;26017:419;;;:::o;26442:241::-;26582:34;26578:1;26570:6;26566:14;26559:58;26651:24;26646:2;26638:6;26634:15;26627:49;26442:241;:::o;26689:366::-;26831:3;26852:67;26916:2;26911:3;26852:67;:::i;:::-;26845:74;;26928:93;27017:3;26928:93;:::i;:::-;27046:2;27041:3;27037:12;27030:19;;26689:366;;;:::o;27061:419::-;27227:4;27265:2;27254:9;27250:18;27242:26;;27314:9;27308:4;27304:20;27300:1;27289:9;27285:17;27278:47;27342:131;27468:4;27342:131;:::i;:::-;27334:139;;27061:419;;;:::o;27486:169::-;27626:21;27622:1;27614:6;27610:14;27603:45;27486:169;:::o;27661:366::-;27803:3;27824:67;27888:2;27883:3;27824:67;:::i;:::-;27817:74;;27900:93;27989:3;27900:93;:::i;:::-;28018:2;28013:3;28009:12;28002:19;;27661:366;;;:::o;28033:419::-;28199:4;28237:2;28226:9;28222:18;28214:26;;28286:9;28280:4;28276:20;28272:1;28261:9;28257:17;28250:47;28314:131;28440:4;28314:131;:::i;:::-;28306:139;;28033:419;;;:::o;28458:191::-;28498:4;28518:20;28536:1;28518:20;:::i;:::-;28513:25;;28552:20;28570:1;28552:20;:::i;:::-;28547:25;;28591:1;28588;28585:8;28582:34;;;28596:18;;:::i;:::-;28582:34;28641:1;28638;28634:9;28626:17;;28458:191;;;;:::o;28655:332::-;28776:4;28814:2;28803:9;28799:18;28791:26;;28827:71;28895:1;28884:9;28880:17;28871:6;28827:71;:::i;:::-;28908:72;28976:2;28965:9;28961:18;28952:6;28908:72;:::i;:::-;28655:332;;;;;:::o;28993:147::-;29094:11;29131:3;29116:18;;28993:147;;;;:::o;29146:114::-;;:::o;29266:398::-;29425:3;29446:83;29527:1;29522:3;29446:83;:::i;:::-;29439:90;;29538:93;29627:3;29538:93;:::i;:::-;29656:1;29651:3;29647:11;29640:18;;29266:398;;;:::o;29670:379::-;29854:3;29876:147;30019:3;29876:147;:::i;:::-;29869:154;;30040:3;30033:10;;29670:379;;;:::o;30055:220::-;30195:34;30191:1;30183:6;30179:14;30172:58;30264:3;30259:2;30251:6;30247:15;30240:28;30055:220;:::o;30281:366::-;30423:3;30444:67;30508:2;30503:3;30444:67;:::i;:::-;30437:74;;30520:93;30609:3;30520:93;:::i;:::-;30638:2;30633:3;30629:12;30622:19;;30281:366;;;:::o;30653:419::-;30819:4;30857:2;30846:9;30842:18;30834:26;;30906:9;30900:4;30896:20;30892:1;30881:9;30877:17;30870:47;30934:131;31060:4;30934:131;:::i;:::-;30926:139;;30653:419;;;:::o;31078:180::-;31126:77;31123:1;31116:88;31223:4;31220:1;31213:15;31247:4;31244:1;31237:15;31264:180;31312:77;31309:1;31302:88;31409:4;31406:1;31399:15;31433:4;31430:1;31423:15;31450:143;31507:5;31538:6;31532:13;31523:22;;31554:33;31581:5;31554:33;:::i;:::-;31450:143;;;;:::o;31599:351::-;31669:6;31718:2;31706:9;31697:7;31693:23;31689:32;31686:119;;;31724:79;;:::i;:::-;31686:119;31844:1;31869:64;31925:7;31916:6;31905:9;31901:22;31869:64;:::i;:::-;31859:74;;31815:128;31599:351;;;;:::o;31956:85::-;32001:7;32030:5;32019:16;;31956:85;;;:::o;32047:158::-;32105:9;32138:61;32156:42;32165:32;32191:5;32165:32;:::i;:::-;32156:42;:::i;:::-;32138:61;:::i;:::-;32125:74;;32047:158;;;:::o;32211:147::-;32306:45;32345:5;32306:45;:::i;:::-;32301:3;32294:58;32211:147;;:::o;32364:114::-;32431:6;32465:5;32459:12;32449:22;;32364:114;;;:::o;32484:184::-;32583:11;32617:6;32612:3;32605:19;32657:4;32652:3;32648:14;32633:29;;32484:184;;;;:::o;32674:132::-;32741:4;32764:3;32756:11;;32794:4;32789:3;32785:14;32777:22;;32674:132;;;:::o;32812:108::-;32889:24;32907:5;32889:24;:::i;:::-;32884:3;32877:37;32812:108;;:::o;32926:179::-;32995:10;33016:46;33058:3;33050:6;33016:46;:::i;:::-;33094:4;33089:3;33085:14;33071:28;;32926:179;;;;:::o;33111:113::-;33181:4;33213;33208:3;33204:14;33196:22;;33111:113;;;:::o;33260:732::-;33379:3;33408:54;33456:5;33408:54;:::i;:::-;33478:86;33557:6;33552:3;33478:86;:::i;:::-;33471:93;;33588:56;33638:5;33588:56;:::i;:::-;33667:7;33698:1;33683:284;33708:6;33705:1;33702:13;33683:284;;;33784:6;33778:13;33811:63;33870:3;33855:13;33811:63;:::i;:::-;33804:70;;33897:60;33950:6;33897:60;:::i;:::-;33887:70;;33743:224;33730:1;33727;33723:9;33718:14;;33683:284;;;33687:14;33983:3;33976:10;;33384:608;;;33260:732;;;;:::o;33998:831::-;34261:4;34299:3;34288:9;34284:19;34276:27;;34313:71;34381:1;34370:9;34366:17;34357:6;34313:71;:::i;:::-;34394:80;34470:2;34459:9;34455:18;34446:6;34394:80;:::i;:::-;34521:9;34515:4;34511:20;34506:2;34495:9;34491:18;34484:48;34549:108;34652:4;34643:6;34549:108;:::i;:::-;34541:116;;34667:72;34735:2;34724:9;34720:18;34711:6;34667:72;:::i;:::-;34749:73;34817:3;34806:9;34802:19;34793:6;34749:73;:::i;:::-;33998:831;;;;;;;;:::o;34835:807::-;35084:4;35122:3;35111:9;35107:19;35099:27;;35136:71;35204:1;35193:9;35189:17;35180:6;35136:71;:::i;:::-;35217:72;35285:2;35274:9;35270:18;35261:6;35217:72;:::i;:::-;35299:80;35375:2;35364:9;35360:18;35351:6;35299:80;:::i;:::-;35389;35465:2;35454:9;35450:18;35441:6;35389:80;:::i;:::-;35479:73;35547:3;35536:9;35532:19;35523:6;35479:73;:::i;:::-;35562;35630:3;35619:9;35615:19;35606:6;35562:73;:::i;:::-;34835:807;;;;;;;;;:::o;35648:143::-;35705:5;35736:6;35730:13;35721:22;;35752:33;35779:5;35752:33;:::i;:::-;35648:143;;;;:::o;35797:663::-;35885:6;35893;35901;35950:2;35938:9;35929:7;35925:23;35921:32;35918:119;;;35956:79;;:::i;:::-;35918:119;36076:1;36101:64;36157:7;36148:6;36137:9;36133:22;36101:64;:::i;:::-;36091:74;;36047:128;36214:2;36240:64;36296:7;36287:6;36276:9;36272:22;36240:64;:::i;:::-;36230:74;;36185:129;36353:2;36379:64;36435:7;36426:6;36415:9;36411:22;36379:64;:::i;:::-;36369:74;;36324:129;35797:663;;;;;:::o

Swarm Source

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