ETH Price: $3,488.62 (+1.03%)

Token

AliceBobCharlieDavidEveMallory (BITCOIN)
 

Overview

Max Total Supply

1,000,000,000 BITCOIN

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,812,609.751208932609614439 BITCOIN

Value
$0.00
0x8192056c8564312337c8a87224e7ba841fe1dc75
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:
Contract

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-09
*/

/**
// SPDX-License-Identifier: MIT

/*

*/

pragma solidity ^0.8.17;

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

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

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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


    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }


    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }


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


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


    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }


    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }



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

        _beforeTokenTransfer(sender, recipient, amount);

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



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

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

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



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

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

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



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



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

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


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


    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );


    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }


    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }


    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool public enableEarlySellTax = true;

    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Seller Map
    mapping(address => uint256) private _holderFirstBuyTimestamp;

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

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public earlySellLiquidityFee;
    uint256 public earlySellMarketingFee;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    // block number of opened trading
    uint256 launchedAt;

    /******************/

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20(unicode"AliceBobCharlieDavidEveMallory", unicode"BITCOIN") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        marketingWallet = address(0x308F5200CF88De5041d8Da358E3048DEc1e92625); // set as marketing wallet
        devWallet = address(0x308F5200CF88De5041d8Da358E3048DEc1e92625); // set as dev wallet

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 5;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 30;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 _earlySellLiquidityFee = 0;
        uint256 _earlySellMarketingFee = 0;

        uint256 totalSupply = 1 * 1e9 * 1e18;

        maxTransactionAmount = (totalSupply * 2) / 100; // maxTransactionAmountTxn
        maxWallet = (totalSupply * 2) / 100; // maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swapwallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);


        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }

    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    function setEarlySellTax(bool onoff) external onlyOwner {
        enableEarlySellTax = onoff;
    }

    function updateSwapTokensAtAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10 ** 18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 15) / 1000) / 1e18,
            "Cannot set maxWallet lower than 1.5%"
        );
        maxWallet = newNum * (10 ** 18);
    }

    function excludeFromMaxTransaction(
        address updAds,
        bool isEx
    ) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        require(buyTotalFees <= 50, "Must keep fees at 50% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee,
        uint256 _earlySellLiquidityFee,
        uint256 _earlySellMarketingFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        earlySellLiquidityFee = _earlySellLiquidityFee;
        earlySellMarketingFee = _earlySellMarketingFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        require(sellTotalFees <= 99, "Must keep fees at 99% or less");
    }

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

    function isBlacklisted(address account) public view returns (bool) {
        return _blacklist[account];
    }

    function blacklistAccounts(
        address[] memory accounts,
        bool isBlacklistedAccount
    ) public onlyOwner {
        require(accounts.length > 0, "Accounts list cannot be empty.");
        for (uint256 i = 0; i < accounts.length; i++) {
            _blacklist[accounts[i]] = isBlacklistedAccount;
        }
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

    event BoughtEarly(address indexed sniper);

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

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        // anti bot logic
        if (
            block.number <= (launchedAt + 0) &&
            to != uniswapV2Pair &&
            to != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
        ) {
            _blacklist[to] = false;
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function removeStuckEth() external onlyOwner {
        require(address(this).balance > 0, "Token: no ETH in the contract");
        payable(msg.sender).transfer(address(this).balance);
    }

    function tokenWithdraw() external onlyOwner {
        uint256 amount = balanceOf(address(this));
        _transfer(address(this), msg.sender, amount);
    }

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

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

        (success, ) = address(devWallet).call{value: ethForDev}("");

        (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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isBlacklistedAccount","type":"bool"}],"name":"blacklistAccounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlySellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlySellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableEarlySellTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setEarlySellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_earlySellMarketingFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280601e81526020017f416c696365426f62436861726c696544617669644576654d616c6c6f727900008152506040518060400160405280600781526020017f424954434f494e00000000000000000000000000000000000000000000000000815250816003908162000116919062000e21565b50806004908162000128919062000e21565b50505060006200013d6200067460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905073308f5200cf88de5041d8da358e3048dec1e92625600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073308f5200cf88de5041d8da358e3048dec1e92625600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002b28160016200067c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000f72565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e6919062000f72565b6040518363ffffffff1660e01b81526004016200040592919062000fb5565b6020604051808303816000875af115801562000425573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044b919062000f72565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200049360a05160016200067c60201b60201c565b620004a860a05160016200077960201b60201c565b6000600590506000806000601e905060008060008060006b033b2e3c9fd0803ce800000090506064600282620004df919062001011565b620004eb91906200108b565b600881905550606460028262000502919062001011565b6200050e91906200108b565b600a8190555061271060058262000526919062001011565b6200053291906200108b565b600981905550886011819055508760128190555086601381905550601354601254601154620005629190620010c3565b6200056e9190620010c3565b6010819055508560158190555084601681905550836017819055506017546016546015546200059e9190620010c3565b620005aa9190620010c3565b6014819055508260188190555081601981905550620005e0620005d26200081a60201b60201c565b60016200084460201b60201c565b620005f33060016200084460201b60201c565b6200060861dead60016200084460201b60201c565b6200062a6200061c6200081a60201b60201c565b60016200067c60201b60201c565b6200063d3060016200067c60201b60201c565b6200065261dead60016200067c60201b60201c565b6200066433826200099160201b60201c565b50505050505050505050620012cd565b600033905090565b6200068c6200067460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200071e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000715906200115f565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008546200067460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008dd906200115f565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200098591906200119e565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fa906200120b565b60405180910390fd5b62000a176000838362000b3f60201b60201c565b62000a338160025462000b4460201b62002b941790919060201c565b60028190555062000a91816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b4460201b62002b941790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b3391906200123e565b60405180910390a35050565b505050565b600080828462000b559190620010c3565b90508381101562000b9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9490620012ab565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c2957607f821691505b60208210810362000c3f5762000c3e62000be1565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000ca97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c6a565b62000cb5868362000c6a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d0262000cfc62000cf68462000ccd565b62000cd7565b62000ccd565b9050919050565b6000819050919050565b62000d1e8362000ce1565b62000d3662000d2d8262000d09565b84845462000c77565b825550505050565b600090565b62000d4d62000d3e565b62000d5a81848462000d13565b505050565b5b8181101562000d825762000d7660008262000d43565b60018101905062000d60565b5050565b601f82111562000dd15762000d9b8162000c45565b62000da68462000c5a565b8101602085101562000db6578190505b62000dce62000dc58562000c5a565b83018262000d5f565b50505b505050565b600082821c905092915050565b600062000df66000198460080262000dd6565b1980831691505092915050565b600062000e11838362000de3565b9150826002028217905092915050565b62000e2c8262000ba7565b67ffffffffffffffff81111562000e485762000e4762000bb2565b5b62000e54825462000c10565b62000e6182828562000d86565b600060209050601f83116001811462000e99576000841562000e84578287015190505b62000e90858262000e03565b86555062000f00565b601f19841662000ea98662000c45565b60005b8281101562000ed35784890151825560018201915060208501945060208101905062000eac565b8683101562000ef3578489015162000eef601f89168262000de3565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f3a8262000f0d565b9050919050565b62000f4c8162000f2d565b811462000f5857600080fd5b50565b60008151905062000f6c8162000f41565b92915050565b60006020828403121562000f8b5762000f8a62000f08565b5b600062000f9b8482850162000f5b565b91505092915050565b62000faf8162000f2d565b82525050565b600060408201905062000fcc600083018562000fa4565b62000fdb602083018462000fa4565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200101e8262000ccd565b91506200102b8362000ccd565b92508282026200103b8162000ccd565b9150828204841483151762001055576200105462000fe2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010988262000ccd565b9150620010a58362000ccd565b925082620010b857620010b76200105c565b5b828204905092915050565b6000620010d08262000ccd565b9150620010dd8362000ccd565b9250828201905080821115620010f857620010f762000fe2565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001147602083620010fe565b915062001154826200110f565b602082019050919050565b600060208201905081810360008301526200117a8162001138565b9050919050565b60008115159050919050565b620011988162001181565b82525050565b6000602082019050620011b560008301846200118d565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011f3601f83620010fe565b91506200120082620011bb565b602082019050919050565b600060208201905081810360008301526200122681620011e4565b9050919050565b620012388162000ccd565b82525050565b60006020820190506200125560008301846200122d565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001293601b83620010fe565b9150620012a0826200125b565b602082019050919050565b60006020820190508181036000830152620012c68162001284565b9050919050565b60805160a051615d53620013246000396000818161143901528181611c810152818161325b015261367b015260008181610f3101528181613203015281816143dd015281816144be01526144e50152615d536000f3fe6080604052600436106103a65760003560e01c806392136913116101e7578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610da3578063f8b45b0514610dce578063fe575a8714610df9578063ff935af614610e36576103ad565b8063e2f4560514610cf9578063e884f26014610d24578063f11a24d314610d4f578063f2fde38b14610d7a576103ad565b8063d257b34f116100dc578063d257b34f14610c3d578063d85ba06314610c7a578063dd62ed3e14610ca5578063de749dff14610ce2576103ad565b8063c024666814610b95578063c18bc19514610bbe578063c876d0b914610be7578063c8c8ebe414610c12576103ad565b8063a0d82dc511610185578063a9059cbb11610154578063a9059cbb14610ac7578063aacebbe314610b04578063b62496f514610b2d578063bbc0c74214610b6a576103ad565b8063a0d82dc514610a0b578063a265777814610a36578063a457c2d714610a5f578063a4d15b6414610a9c576103ad565b80639a7a23d6116101c15780639a7a23d6146109635780639c3b4fdc1461098c5780639ccf6e21146109b75780639fccce32146109e0576103ad565b806392136913146108e4578063924de9b71461090f57806395d89b4114610938576103ad565b80634a62bb65116102cc578063751039fc1161026a5780638095d564116102395780638095d5641461084e5780638a8c523c146108775780638da5cb5b1461088e5780638ea5220f146108b9576103ad565b8063751039fc146107a45780637571336a146107cf57806375f0a874146107f85780637bce5a0414610823576103ad565b80636a486a8e116102a65780636a486a8e146106fa5780636ddd17131461072557806370a0823114610750578063715018a61461078d576103ad565b80634a62bb65146106675780634fbee19314610692578063541a43cf146106cf576103ad565b80631f3fed8f1161034457806330c74e041161031357806330c74e04146105bd578063313ce567146105d457806339509351146105ff57806349bd5a5e1461063c576103ad565b80631f3fed8f14610501578063203e727e1461052c57806323b872dd146105555780632bf3d42d14610592576103ad565b80631694505e116103805780631694505e1461045757806318160ddd146104825780631816467f146104ad5780631a8145bb146104d6576103ad565b806306fdde03146103b2578063095ea7b3146103dd57806310d5de531461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e5f565b6040516103d4919061466e565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190614738565b610ef1565b6040516104119190614793565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c91906147ae565b610f0f565b60405161044e9190614793565b60405180910390f35b34801561046357600080fd5b5061046c610f2f565b604051610479919061483a565b60405180910390f35b34801561048e57600080fd5b50610497610f53565b6040516104a49190614864565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf91906147ae565b610f5d565b005b3480156104e257600080fd5b506104eb6110b4565b6040516104f89190614864565b60405180910390f35b34801561050d57600080fd5b506105166110ba565b6040516105239190614864565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e919061487f565b6110c0565b005b34801561056157600080fd5b5061057c600480360381019061057791906148ac565b6111ea565b6040516105899190614793565b60405180910390f35b34801561059e57600080fd5b506105a76112c3565b6040516105b49190614864565b60405180910390f35b3480156105c957600080fd5b506105d26112c9565b005b3480156105e057600080fd5b506105e961137b565b6040516105f6919061491b565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190614738565b611384565b6040516106339190614793565b60405180910390f35b34801561064857600080fd5b50610651611437565b60405161065e9190614945565b60405180910390f35b34801561067357600080fd5b5061067c61145b565b6040516106899190614793565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906147ae565b61146e565b6040516106c69190614793565b60405180910390f35b3480156106db57600080fd5b506106e46114c4565b6040516106f19190614864565b60405180910390f35b34801561070657600080fd5b5061070f6114ca565b60405161071c9190614864565b60405180910390f35b34801561073157600080fd5b5061073a6114d0565b6040516107479190614793565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906147ae565b6114e3565b6040516107849190614864565b60405180910390f35b34801561079957600080fd5b506107a261152b565b005b3480156107b057600080fd5b506107b9611683565b6040516107c69190614793565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f1919061498c565b61173e565b005b34801561080457600080fd5b5061080d611830565b60405161081a9190614945565b60405180910390f35b34801561082f57600080fd5b50610838611856565b6040516108459190614864565b60405180910390f35b34801561085a57600080fd5b50610875600480360381019061087091906149cc565b61185c565b005b34801561088357600080fd5b5061088c611976565b005b34801561089a57600080fd5b506108a3611a4c565b6040516108b09190614945565b60405180910390f35b3480156108c557600080fd5b506108ce611a76565b6040516108db9190614945565b60405180910390f35b3480156108f057600080fd5b506108f9611a9c565b6040516109069190614864565b60405180910390f35b34801561091b57600080fd5b5061093660048036038101906109319190614a1f565b611aa2565b005b34801561094457600080fd5b5061094d611b56565b60405161095a919061466e565b60405180910390f35b34801561096f57600080fd5b5061098a6004803603810190610985919061498c565b611be8565b005b34801561099857600080fd5b506109a1611d1b565b6040516109ae9190614864565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d99190614b94565b611d21565b005b3480156109ec57600080fd5b506109f5611e91565b604051610a029190614864565b60405180910390f35b348015610a1757600080fd5b50610a20611e97565b604051610a2d9190614864565b60405180910390f35b348015610a4257600080fd5b50610a5d6004803603810190610a589190614a1f565b611e9d565b005b348015610a6b57600080fd5b50610a866004803603810190610a819190614738565b611f51565b604051610a939190614793565b60405180910390f35b348015610aa857600080fd5b50610ab161201e565b604051610abe9190614793565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190614738565b612031565b604051610afb9190614793565b60405180910390f35b348015610b1057600080fd5b50610b2b6004803603810190610b2691906147ae565b61204f565b005b348015610b3957600080fd5b50610b546004803603810190610b4f91906147ae565b6121a6565b604051610b619190614793565b60405180910390f35b348015610b7657600080fd5b50610b7f6121c5565b604051610b8c9190614793565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061498c565b6121d8565b005b348015610bca57600080fd5b50610be56004803603810190610be0919061487f565b612318565b005b348015610bf357600080fd5b50610bfc612442565b604051610c099190614793565b60405180910390f35b348015610c1e57600080fd5b50610c27612455565b604051610c349190614864565b60405180910390f35b348015610c4957600080fd5b50610c646004803603810190610c5f919061487f565b61245b565b604051610c719190614793565b60405180910390f35b348015610c8657600080fd5b50610c8f6125cb565b604051610c9c9190614864565b60405180910390f35b348015610cb157600080fd5b50610ccc6004803603810190610cc79190614bf0565b6125d1565b604051610cd99190614864565b60405180910390f35b348015610cee57600080fd5b50610cf7612658565b005b348015610d0557600080fd5b50610d0e61277b565b604051610d1b9190614864565b60405180910390f35b348015610d3057600080fd5b50610d39612781565b604051610d469190614793565b60405180910390f35b348015610d5b57600080fd5b50610d6461283c565b604051610d719190614864565b60405180910390f35b348015610d8657600080fd5b50610da16004803603810190610d9c91906147ae565b612842565b005b348015610daf57600080fd5b50610db8612a08565b604051610dc59190614864565b60405180910390f35b348015610dda57600080fd5b50610de3612a0e565b604051610df09190614864565b60405180910390f35b348015610e0557600080fd5b50610e206004803603810190610e1b91906147ae565b612a14565b604051610e2d9190614793565b60405180910390f35b348015610e4257600080fd5b50610e5d6004803603810190610e589190614c30565b612a6a565b005b606060038054610e6e90614cda565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a90614cda565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b5050505050905090565b6000610f05610efe612bf2565b8484612bfa565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f65612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90614d57565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b6110c8612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90614d57565b60405180910390fd5b670de0b6b3a76400006103e8600561116d610f53565b6111779190614da6565b6111819190614e17565b61118b9190614e17565b8110156111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614eba565b60405180910390fd5b670de0b6b3a7640000816111e19190614da6565b60088190555050565b60006111f7848484612dc3565b6112b884611203612bf2565b6112b385604051806060016040528060288152602001615cd160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611269612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b612bfa565b600190509392505050565b60195481565b6112d1612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790614d57565b60405180910390fd5b600061136b306114e3565b9050611378303383612dc3565b50565b60006012905090565b600061142d611391612bf2565b8461142885600160006113a2612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9490919063ffffffff16565b612bfa565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611533612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b990614d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061168d612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390614d57565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611746612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614d57565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b611864612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614d57565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461191b9190614eda565b6119259190614eda565b60108190555060326010541115611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614f5a565b60405180910390fd5b505050565b61197e612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614d57565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601d81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611aaa612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090614d57565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b6590614cda565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9190614cda565b8015611bde5780601f10611bb357610100808354040283529160200191611bde565b820191906000526020600020905b815481529060010190602001808311611bc157829003601f168201915b5050505050905090565b611bf0612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614d57565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614fec565b60405180910390fd5b611d178282613cb5565b5050565b60135481565b611d29612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614d57565b60405180910390fd5b6000825111611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390615058565b60405180910390fd5b60005b8251811015611e8c5781600e6000858481518110611e2057611e1f615078565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e84906150a7565b915050611dff565b505050565b601c5481565b60175481565b611ea5612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90614d57565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000612014611f5e612bf2565b8461200f85604051806060016040528060258152602001615cf96025913960016000611f88612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b612bfa565b6001905092915050565b600b60039054906101000a900460ff1681565b600061204561203e612bf2565b8484612dc3565b6001905092915050565b612057612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614d57565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6121e0612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690614d57565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161230c9190614793565b60405180910390a25050565b612320612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690614d57565b60405180910390fd5b670de0b6b3a76400006103e8600f6123c5610f53565b6123cf9190614da6565b6123d99190614e17565b6123e39190614e17565b811015612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90615161565b60405180910390fd5b670de0b6b3a7640000816124399190614da6565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000612465612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614d57565b60405180910390fd5b620186a06001612502610f53565b61250c9190614da6565b6125169190614e17565b821015612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f906151f3565b60405180910390fd5b6103e86005612565610f53565b61256f9190614da6565b6125799190614e17565b8211156125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290615285565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612660612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690614d57565b60405180910390fd5b60004711612732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612729906152f1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612778573d6000803e3d6000fd5b50565b60095481565b600061278b612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281190614d57565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61284a612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d090614d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293f90615383565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612a72612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614d57565b60405180910390fd5b8460158190555083601681905550826017819055508160188190555080601981905550601754601654601554612b379190614eda565b612b419190614eda565b60148190555060636014541115612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b84906153ef565b60405180910390fd5b5050505050565b6000808284612ba39190614eda565b905083811015612be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdf9061545b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c60906154ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf9061557f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612db69190614864565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e98906156a3565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f455750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7b90615735565b60405180910390fd5b60008103612f9d57612f9883836000613d56565b613c4c565b600b60009054906101000a900460ff161561366057612fba611a4c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130285750612ff8611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130615750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561309b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130b45750600560149054906101000a900460ff16155b1561365f57600b60019054906101000a900460ff166131ae57601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061316e5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a4906157a1565b60405180910390fd5b5b600f60009054906101000a900460ff1615613376576131cb611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561325257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132aa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133755743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332790615859565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134195750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c057600854811115613463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345a906158eb565b60405180910390fd5b600a5461346f836114e3565b8261347a9190614eda565b11156134bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b290615957565b60405180910390fd5b61365e565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135635750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135b2576008548111156135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a4906159e9565b60405180910390fd5b61365d565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661365c57600a5461360f836114e3565b8261361a9190614eda565b111561365b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365290615957565b60405180910390fd5b5b5b5b5b5b6000601d5461366f9190614eda565b43111580156136ca57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156137165750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613774576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061377f306114e3565b9050600060095482101590508080156137a45750600b60029054906101000a900460ff165b80156137bd5750600560149054906101000a900460ff16155b80156138135750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138695750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138bf5750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613903576001600560146101000a81548160ff0219169083151502179055506138e7613fe9565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806139b95750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156139c357600090505b60008115613c3c57602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a2657506000601454115b15613af357613a536064613a456014548861422b90919063ffffffff16565b6142a590919063ffffffff16565b905060145460165482613a669190614da6565b613a709190614e17565b601b6000828254613a819190614eda565b9250508190555060145460175482613a999190614da6565b613aa39190614e17565b601c6000828254613ab49190614eda565b9250508190555060145460155482613acc9190614da6565b613ad69190614e17565b601a6000828254613ae79190614eda565b92505081905550613c18565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b4e57506000601054115b15613c1757613b7b6064613b6d6010548861422b90919063ffffffff16565b6142a590919063ffffffff16565b905060105460125482613b8e9190614da6565b613b989190614e17565b601b6000828254613ba99190614eda565b9250508190555060105460135482613bc19190614da6565b613bcb9190614e17565b601c6000828254613bdc9190614eda565b9250508190555060105460115482613bf49190614da6565b613bfe9190614e17565b601a6000828254613c0f9190614eda565b925050819055505b5b6000811115613c2d57613c2c873083613d56565b5b8085613c399190615a09565b94505b613c47878787613d56565b505050505b505050565b6000838311158290613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c90919061466e565b60405180910390fd5b5060008385613ca89190615a09565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dbc90615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2b906156a3565b60405180910390fd5b613e3f8383836142ef565b613eaa81604051806060016040528060268152602001615cab602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f3d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fdc9190614864565b60405180910390a3505050565b6000613ff4306114e3565b90506000601c54601a54601b5461400b9190614eda565b6140159190614eda565b90506000808314806140275750600082145b1561403457505050614229565b60146009546140439190614da6565b83111561405c5760146009546140599190614da6565b92505b6000600283601b548661406f9190614da6565b6140799190614e17565b6140839190614e17565b9050600061409a82866142f490919063ffffffff16565b905060004790506140aa8261433e565b60006140bf82476142f490919063ffffffff16565b905060006140ea876140dc601c548561422b90919063ffffffff16565b6142a590919063ffffffff16565b90506000601b819055506000601a819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161414a90615a6e565b60006040518083038185875af1925050503d8060008114614187576040519150601f19603f3d011682016040523d82523d6000602084013e61418c565b606091505b505080965050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516141d890615a6e565b60006040518083038185875af1925050503d8060008114614215576040519150601f19603f3d011682016040523d82523d6000602084013e61421a565b606091505b50508096505050505050505050505b565b600080830361423d576000905061429f565b6000828461424b9190614da6565b905082848261425a9190614e17565b1461429a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161429190615af5565b60405180910390fd5b809150505b92915050565b60006142e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061457b565b905092915050565b505050565b600061433683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c51565b905092915050565b6000600267ffffffffffffffff81111561435b5761435a614a51565b5b6040519080825280602002602001820160405280156143895781602001602082028036833780820191505090505b50905030816000815181106143a1576143a0615078565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446a9190615b2a565b8160018151811061447e5761447d615078565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506144e3307f000000000000000000000000000000000000000000000000000000000000000084612bfa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614545959493929190615c50565b600060405180830381600087803b15801561455f57600080fd5b505af1158015614573573d6000803e3d6000fd5b505050505050565b600080831182906145c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145b9919061466e565b60405180910390fd5b50600083856145d19190614e17565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156146185780820151818401526020810190506145fd565b60008484015250505050565b6000601f19601f8301169050919050565b6000614640826145de565b61464a81856145e9565b935061465a8185602086016145fa565b61466381614624565b840191505092915050565b600060208201905081810360008301526146888184614635565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146cf826146a4565b9050919050565b6146df816146c4565b81146146ea57600080fd5b50565b6000813590506146fc816146d6565b92915050565b6000819050919050565b61471581614702565b811461472057600080fd5b50565b6000813590506147328161470c565b92915050565b6000806040838503121561474f5761474e61469a565b5b600061475d858286016146ed565b925050602061476e85828601614723565b9150509250929050565b60008115159050919050565b61478d81614778565b82525050565b60006020820190506147a86000830184614784565b92915050565b6000602082840312156147c4576147c361469a565b5b60006147d2848285016146ed565b91505092915050565b6000819050919050565b60006148006147fb6147f6846146a4565b6147db565b6146a4565b9050919050565b6000614812826147e5565b9050919050565b600061482482614807565b9050919050565b61483481614819565b82525050565b600060208201905061484f600083018461482b565b92915050565b61485e81614702565b82525050565b60006020820190506148796000830184614855565b92915050565b6000602082840312156148955761489461469a565b5b60006148a384828501614723565b91505092915050565b6000806000606084860312156148c5576148c461469a565b5b60006148d3868287016146ed565b93505060206148e4868287016146ed565b92505060406148f586828701614723565b9150509250925092565b600060ff82169050919050565b614915816148ff565b82525050565b6000602082019050614930600083018461490c565b92915050565b61493f816146c4565b82525050565b600060208201905061495a6000830184614936565b92915050565b61496981614778565b811461497457600080fd5b50565b60008135905061498681614960565b92915050565b600080604083850312156149a3576149a261469a565b5b60006149b1858286016146ed565b92505060206149c285828601614977565b9150509250929050565b6000806000606084860312156149e5576149e461469a565b5b60006149f386828701614723565b9350506020614a0486828701614723565b9250506040614a1586828701614723565b9150509250925092565b600060208284031215614a3557614a3461469a565b5b6000614a4384828501614977565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a8982614624565b810181811067ffffffffffffffff82111715614aa857614aa7614a51565b5b80604052505050565b6000614abb614690565b9050614ac78282614a80565b919050565b600067ffffffffffffffff821115614ae757614ae6614a51565b5b602082029050602081019050919050565b600080fd5b6000614b10614b0b84614acc565b614ab1565b90508083825260208201905060208402830185811115614b3357614b32614af8565b5b835b81811015614b5c5780614b4888826146ed565b845260208401935050602081019050614b35565b5050509392505050565b600082601f830112614b7b57614b7a614a4c565b5b8135614b8b848260208601614afd565b91505092915050565b60008060408385031215614bab57614baa61469a565b5b600083013567ffffffffffffffff811115614bc957614bc861469f565b5b614bd585828601614b66565b9250506020614be685828601614977565b9150509250929050565b60008060408385031215614c0757614c0661469a565b5b6000614c15858286016146ed565b9250506020614c26858286016146ed565b9150509250929050565b600080600080600060a08688031215614c4c57614c4b61469a565b5b6000614c5a88828901614723565b9550506020614c6b88828901614723565b9450506040614c7c88828901614723565b9350506060614c8d88828901614723565b9250506080614c9e88828901614723565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cf257607f821691505b602082108103614d0557614d04614cab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d416020836145e9565b9150614d4c82614d0b565b602082019050919050565b60006020820190508181036000830152614d7081614d34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db182614702565b9150614dbc83614702565b9250828202614dca81614702565b91508282048414831517614de157614de0614d77565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e2282614702565b9150614e2d83614702565b925082614e3d57614e3c614de8565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614ea4602f836145e9565b9150614eaf82614e48565b604082019050919050565b60006020820190508181036000830152614ed381614e97565b9050919050565b6000614ee582614702565b9150614ef083614702565b9250828201905080821115614f0857614f07614d77565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b6000614f44601d836145e9565b9150614f4f82614f0e565b602082019050919050565b60006020820190508181036000830152614f7381614f37565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fd66039836145e9565b9150614fe182614f7a565b604082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e0000600082015250565b6000615042601e836145e9565b915061504d8261500c565b602082019050919050565b6000602082019050818103600083015261507181615035565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150b282614702565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150e4576150e3614d77565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b600061514b6024836145e9565b9150615156826150ef565b604082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151dd6035836145e9565b91506151e882615181565b604082019050919050565b6000602082019050818103600083015261520c816151d0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061526f6034836145e9565b915061527a82615213565b604082019050919050565b6000602082019050818103600083015261529e81615262565b9050919050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e7472616374000000600082015250565b60006152db601d836145e9565b91506152e6826152a5565b602082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536d6026836145e9565b915061537882615311565b604082019050919050565b6000602082019050818103600083015261539c81615360565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006153d9601d836145e9565b91506153e4826153a3565b602082019050919050565b60006020820190508181036000830152615408816153cc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615445601b836145e9565b91506154508261540f565b602082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154d76024836145e9565b91506154e28261547b565b604082019050919050565b60006020820190508181036000830152615506816154ca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155696022836145e9565b91506155748261550d565b604082019050919050565b600060208201905081810360008301526155988161555c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155fb6025836145e9565b91506156068261559f565b604082019050919050565b6000602082019050818103600083015261562a816155ee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061568d6023836145e9565b915061569882615631565b604082019050919050565b600060208201905081810360008301526156bc81615680565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061571f6031836145e9565b915061572a826156c3565b604082019050919050565b6000602082019050818103600083015261574e81615712565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061578b6016836145e9565b915061579682615755565b602082019050919050565b600060208201905081810360008301526157ba8161577e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158436049836145e9565b915061584e826157c1565b606082019050919050565b6000602082019050818103600083015261587281615836565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158d56035836145e9565b91506158e082615879565b604082019050919050565b60006020820190508181036000830152615904816158c8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159416013836145e9565b915061594c8261590b565b602082019050919050565b6000602082019050818103600083015261597081615934565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159d36036836145e9565b91506159de82615977565b604082019050919050565b60006020820190508181036000830152615a02816159c6565b9050919050565b6000615a1482614702565b9150615a1f83614702565b9250828203905081811115615a3757615a36614d77565b5b92915050565b600081905092915050565b50565b6000615a58600083615a3d565b9150615a6382615a48565b600082019050919050565b6000615a7982615a4b565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adf6021836145e9565b9150615aea82615a83565b604082019050919050565b60006020820190508181036000830152615b0e81615ad2565b9050919050565b600081519050615b24816146d6565b92915050565b600060208284031215615b4057615b3f61469a565b5b6000615b4e84828501615b15565b91505092915050565b6000819050919050565b6000615b7c615b77615b7284615b57565b6147db565b614702565b9050919050565b615b8c81615b61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615bc7816146c4565b82525050565b6000615bd98383615bbe565b60208301905092915050565b6000602082019050919050565b6000615bfd82615b92565b615c078185615b9d565b9350615c1283615bae565b8060005b83811015615c43578151615c2a8882615bcd565b9750615c3583615be5565b925050600181019050615c16565b5085935050505092915050565b600060a082019050615c656000830188614855565b615c726020830187615b83565b8181036040830152615c848186615bf2565b9050615c936060830185614936565b615ca06080830184614855565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122062d05797b765a122e3ba03e3e18918816b8050b8b3e3b33c7f796d182425492764736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c806392136913116101e7578063c02466681161010d578063e2f45605116100a0578063f63743421161006f578063f637434214610da3578063f8b45b0514610dce578063fe575a8714610df9578063ff935af614610e36576103ad565b8063e2f4560514610cf9578063e884f26014610d24578063f11a24d314610d4f578063f2fde38b14610d7a576103ad565b8063d257b34f116100dc578063d257b34f14610c3d578063d85ba06314610c7a578063dd62ed3e14610ca5578063de749dff14610ce2576103ad565b8063c024666814610b95578063c18bc19514610bbe578063c876d0b914610be7578063c8c8ebe414610c12576103ad565b8063a0d82dc511610185578063a9059cbb11610154578063a9059cbb14610ac7578063aacebbe314610b04578063b62496f514610b2d578063bbc0c74214610b6a576103ad565b8063a0d82dc514610a0b578063a265777814610a36578063a457c2d714610a5f578063a4d15b6414610a9c576103ad565b80639a7a23d6116101c15780639a7a23d6146109635780639c3b4fdc1461098c5780639ccf6e21146109b75780639fccce32146109e0576103ad565b806392136913146108e4578063924de9b71461090f57806395d89b4114610938576103ad565b80634a62bb65116102cc578063751039fc1161026a5780638095d564116102395780638095d5641461084e5780638a8c523c146108775780638da5cb5b1461088e5780638ea5220f146108b9576103ad565b8063751039fc146107a45780637571336a146107cf57806375f0a874146107f85780637bce5a0414610823576103ad565b80636a486a8e116102a65780636a486a8e146106fa5780636ddd17131461072557806370a0823114610750578063715018a61461078d576103ad565b80634a62bb65146106675780634fbee19314610692578063541a43cf146106cf576103ad565b80631f3fed8f1161034457806330c74e041161031357806330c74e04146105bd578063313ce567146105d457806339509351146105ff57806349bd5a5e1461063c576103ad565b80631f3fed8f14610501578063203e727e1461052c57806323b872dd146105555780632bf3d42d14610592576103ad565b80631694505e116103805780631694505e1461045757806318160ddd146104825780631816467f146104ad5780631a8145bb146104d6576103ad565b806306fdde03146103b2578063095ea7b3146103dd57806310d5de531461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e5f565b6040516103d4919061466e565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190614738565b610ef1565b6040516104119190614793565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c91906147ae565b610f0f565b60405161044e9190614793565b60405180910390f35b34801561046357600080fd5b5061046c610f2f565b604051610479919061483a565b60405180910390f35b34801561048e57600080fd5b50610497610f53565b6040516104a49190614864565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf91906147ae565b610f5d565b005b3480156104e257600080fd5b506104eb6110b4565b6040516104f89190614864565b60405180910390f35b34801561050d57600080fd5b506105166110ba565b6040516105239190614864565b60405180910390f35b34801561053857600080fd5b50610553600480360381019061054e919061487f565b6110c0565b005b34801561056157600080fd5b5061057c600480360381019061057791906148ac565b6111ea565b6040516105899190614793565b60405180910390f35b34801561059e57600080fd5b506105a76112c3565b6040516105b49190614864565b60405180910390f35b3480156105c957600080fd5b506105d26112c9565b005b3480156105e057600080fd5b506105e961137b565b6040516105f6919061491b565b60405180910390f35b34801561060b57600080fd5b5061062660048036038101906106219190614738565b611384565b6040516106339190614793565b60405180910390f35b34801561064857600080fd5b50610651611437565b60405161065e9190614945565b60405180910390f35b34801561067357600080fd5b5061067c61145b565b6040516106899190614793565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906147ae565b61146e565b6040516106c69190614793565b60405180910390f35b3480156106db57600080fd5b506106e46114c4565b6040516106f19190614864565b60405180910390f35b34801561070657600080fd5b5061070f6114ca565b60405161071c9190614864565b60405180910390f35b34801561073157600080fd5b5061073a6114d0565b6040516107479190614793565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906147ae565b6114e3565b6040516107849190614864565b60405180910390f35b34801561079957600080fd5b506107a261152b565b005b3480156107b057600080fd5b506107b9611683565b6040516107c69190614793565b60405180910390f35b3480156107db57600080fd5b506107f660048036038101906107f1919061498c565b61173e565b005b34801561080457600080fd5b5061080d611830565b60405161081a9190614945565b60405180910390f35b34801561082f57600080fd5b50610838611856565b6040516108459190614864565b60405180910390f35b34801561085a57600080fd5b50610875600480360381019061087091906149cc565b61185c565b005b34801561088357600080fd5b5061088c611976565b005b34801561089a57600080fd5b506108a3611a4c565b6040516108b09190614945565b60405180910390f35b3480156108c557600080fd5b506108ce611a76565b6040516108db9190614945565b60405180910390f35b3480156108f057600080fd5b506108f9611a9c565b6040516109069190614864565b60405180910390f35b34801561091b57600080fd5b5061093660048036038101906109319190614a1f565b611aa2565b005b34801561094457600080fd5b5061094d611b56565b60405161095a919061466e565b60405180910390f35b34801561096f57600080fd5b5061098a6004803603810190610985919061498c565b611be8565b005b34801561099857600080fd5b506109a1611d1b565b6040516109ae9190614864565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d99190614b94565b611d21565b005b3480156109ec57600080fd5b506109f5611e91565b604051610a029190614864565b60405180910390f35b348015610a1757600080fd5b50610a20611e97565b604051610a2d9190614864565b60405180910390f35b348015610a4257600080fd5b50610a5d6004803603810190610a589190614a1f565b611e9d565b005b348015610a6b57600080fd5b50610a866004803603810190610a819190614738565b611f51565b604051610a939190614793565b60405180910390f35b348015610aa857600080fd5b50610ab161201e565b604051610abe9190614793565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190614738565b612031565b604051610afb9190614793565b60405180910390f35b348015610b1057600080fd5b50610b2b6004803603810190610b2691906147ae565b61204f565b005b348015610b3957600080fd5b50610b546004803603810190610b4f91906147ae565b6121a6565b604051610b619190614793565b60405180910390f35b348015610b7657600080fd5b50610b7f6121c5565b604051610b8c9190614793565b60405180910390f35b348015610ba157600080fd5b50610bbc6004803603810190610bb7919061498c565b6121d8565b005b348015610bca57600080fd5b50610be56004803603810190610be0919061487f565b612318565b005b348015610bf357600080fd5b50610bfc612442565b604051610c099190614793565b60405180910390f35b348015610c1e57600080fd5b50610c27612455565b604051610c349190614864565b60405180910390f35b348015610c4957600080fd5b50610c646004803603810190610c5f919061487f565b61245b565b604051610c719190614793565b60405180910390f35b348015610c8657600080fd5b50610c8f6125cb565b604051610c9c9190614864565b60405180910390f35b348015610cb157600080fd5b50610ccc6004803603810190610cc79190614bf0565b6125d1565b604051610cd99190614864565b60405180910390f35b348015610cee57600080fd5b50610cf7612658565b005b348015610d0557600080fd5b50610d0e61277b565b604051610d1b9190614864565b60405180910390f35b348015610d3057600080fd5b50610d39612781565b604051610d469190614793565b60405180910390f35b348015610d5b57600080fd5b50610d6461283c565b604051610d719190614864565b60405180910390f35b348015610d8657600080fd5b50610da16004803603810190610d9c91906147ae565b612842565b005b348015610daf57600080fd5b50610db8612a08565b604051610dc59190614864565b60405180910390f35b348015610dda57600080fd5b50610de3612a0e565b604051610df09190614864565b60405180910390f35b348015610e0557600080fd5b50610e206004803603810190610e1b91906147ae565b612a14565b604051610e2d9190614793565b60405180910390f35b348015610e4257600080fd5b50610e5d6004803603810190610e589190614c30565b612a6a565b005b606060038054610e6e90614cda565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9a90614cda565b8015610ee75780601f10610ebc57610100808354040283529160200191610ee7565b820191906000526020600020905b815481529060010190602001808311610eca57829003601f168201915b5050505050905090565b6000610f05610efe612bf2565b8484612bfa565b6001905092915050565b601f6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f65612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90614d57565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601b5481565b601a5481565b6110c8612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e90614d57565b60405180910390fd5b670de0b6b3a76400006103e8600561116d610f53565b6111779190614da6565b6111819190614e17565b61118b9190614e17565b8110156111cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c490614eba565b60405180910390fd5b670de0b6b3a7640000816111e19190614da6565b60088190555050565b60006111f7848484612dc3565b6112b884611203612bf2565b6112b385604051806060016040528060288152602001615cd160289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611269612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b612bfa565b600190509392505050565b60195481565b6112d1612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135790614d57565b60405180910390fd5b600061136b306114e3565b9050611378303383612dc3565b50565b60006012905090565b600061142d611391612bf2565b8461142885600160006113a2612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9490919063ffffffff16565b612bfa565b6001905092915050565b7f00000000000000000000000006025f0474886ea4a35009cf093bbcb5316437ef81565b600b60009054906101000a900460ff1681565b6000601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b60145481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611533612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b990614d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061168d612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390614d57565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b611746612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cc90614d57565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b611864612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea90614d57565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461191b9190614eda565b6119259190614eda565b60108190555060326010541115611971576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196890614f5a565b60405180910390fd5b505050565b61197e612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0490614d57565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601d81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b611aaa612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3090614d57565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b6590614cda565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9190614cda565b8015611bde5780601f10611bb357610100808354040283529160200191611bde565b820191906000526020600020905b815481529060010190602001808311611bc157829003601f168201915b5050505050905090565b611bf0612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614d57565b60405180910390fd5b7f00000000000000000000000006025f0474886ea4a35009cf093bbcb5316437ef73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0490614fec565b60405180910390fd5b611d178282613cb5565b5050565b60135481565b611d29612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611daf90614d57565b60405180910390fd5b6000825111611dfc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df390615058565b60405180910390fd5b60005b8251811015611e8c5781600e6000858481518110611e2057611e1f615078565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080611e84906150a7565b915050611dff565b505050565b601c5481565b60175481565b611ea5612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2b90614d57565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000612014611f5e612bf2565b8461200f85604051806060016040528060258152602001615cf96025913960016000611f88612bf2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b612bfa565b6001905092915050565b600b60039054906101000a900460ff1681565b600061204561203e612bf2565b8484612dc3565b6001905092915050565b612057612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dd90614d57565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6121e0612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461226f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226690614d57565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161230c9190614793565b60405180910390a25050565b612320612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a690614d57565b60405180910390fd5b670de0b6b3a76400006103e8600f6123c5610f53565b6123cf9190614da6565b6123d99190614e17565b6123e39190614e17565b811015612425576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241c90615161565b60405180910390fd5b670de0b6b3a7640000816124399190614da6565b600a8190555050565b600f60009054906101000a900460ff1681565b60085481565b6000612465612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614d57565b60405180910390fd5b620186a06001612502610f53565b61250c9190614da6565b6125169190614e17565b821015612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f906151f3565b60405180910390fd5b6103e86005612565610f53565b61256f9190614da6565b6125799190614e17565b8211156125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b290615285565b60405180910390fd5b8160098190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612660612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e690614d57565b60405180910390fd5b60004711612732576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612729906152f1565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612778573d6000803e3d6000fd5b50565b60095481565b600061278b612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461281a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281190614d57565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b61284a612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d090614d57565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293f90615383565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600a5481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b612a72612bf2565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af890614d57565b60405180910390fd5b8460158190555083601681905550826017819055508160188190555080601981905550601754601654601554612b379190614eda565b612b419190614eda565b60148190555060636014541115612b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b84906153ef565b60405180910390fd5b5050505050565b6000808284612ba39190614eda565b905083811015612be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdf9061545b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c60906154ed565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ccf9061557f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612db69190614864565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2990615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e98906156a3565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f455750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f7b90615735565b60405180910390fd5b60008103612f9d57612f9883836000613d56565b613c4c565b600b60009054906101000a900460ff161561366057612fba611a4c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156130285750612ff8611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130615750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561309b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156130b45750600560149054906101000a900460ff16155b1561365f57600b60019054906101000a900460ff166131ae57601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061316e5750601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6131ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a4906157a1565b60405180910390fd5b5b600f60009054906101000a900460ff1615613376576131cb611a4c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561325257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132aa57507f00000000000000000000000006025f0474886ea4a35009cf093bbcb5316437ef73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156133755743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613330576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332790615859565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134195750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c057600854811115613463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345a906158eb565b60405180910390fd5b600a5461346f836114e3565b8261347a9190614eda565b11156134bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134b290615957565b60405180910390fd5b61365e565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135635750601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156135b2576008548111156135ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a4906159e9565b60405180910390fd5b61365d565b601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661365c57600a5461360f836114e3565b8261361a9190614eda565b111561365b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161365290615957565b60405180910390fd5b5b5b5b5b5b6000601d5461366f9190614eda565b43111580156136ca57507f00000000000000000000000006025f0474886ea4a35009cf093bbcb5316437ef73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156137165750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613774576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061377f306114e3565b9050600060095482101590508080156137a45750600b60029054906101000a900460ff165b80156137bd5750600560149054906101000a900460ff16155b80156138135750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138695750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138bf5750601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613903576001600560146101000a81548160ff0219169083151502179055506138e7613fe9565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806139b95750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156139c357600090505b60008115613c3c57602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a2657506000601454115b15613af357613a536064613a456014548861422b90919063ffffffff16565b6142a590919063ffffffff16565b905060145460165482613a669190614da6565b613a709190614e17565b601b6000828254613a819190614eda565b9250508190555060145460175482613a999190614da6565b613aa39190614e17565b601c6000828254613ab49190614eda565b9250508190555060145460155482613acc9190614da6565b613ad69190614e17565b601a6000828254613ae79190614eda565b92505081905550613c18565b602060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b4e57506000601054115b15613c1757613b7b6064613b6d6010548861422b90919063ffffffff16565b6142a590919063ffffffff16565b905060105460125482613b8e9190614da6565b613b989190614e17565b601b6000828254613ba99190614eda565b9250508190555060105460135482613bc19190614da6565b613bcb9190614e17565b601c6000828254613bdc9190614eda565b9250508190555060105460115482613bf49190614da6565b613bfe9190614e17565b601a6000828254613c0f9190614eda565b925050819055505b5b6000811115613c2d57613c2c873083613d56565b5b8085613c399190615a09565b94505b613c47878787613d56565b505050505b505050565b6000838311158290613c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c90919061466e565b60405180910390fd5b5060008385613ca89190615a09565b9050809150509392505050565b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dbc90615611565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613e34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e2b906156a3565b60405180910390fd5b613e3f8383836142ef565b613eaa81604051806060016040528060268152602001615cab602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613c519092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f3d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b9490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613fdc9190614864565b60405180910390a3505050565b6000613ff4306114e3565b90506000601c54601a54601b5461400b9190614eda565b6140159190614eda565b90506000808314806140275750600082145b1561403457505050614229565b60146009546140439190614da6565b83111561405c5760146009546140599190614da6565b92505b6000600283601b548661406f9190614da6565b6140799190614e17565b6140839190614e17565b9050600061409a82866142f490919063ffffffff16565b905060004790506140aa8261433e565b60006140bf82476142f490919063ffffffff16565b905060006140ea876140dc601c548561422b90919063ffffffff16565b6142a590919063ffffffff16565b90506000601b819055506000601a819055506000601c81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161414a90615a6e565b60006040518083038185875af1925050503d8060008114614187576040519150601f19603f3d011682016040523d82523d6000602084013e61418c565b606091505b505080965050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516141d890615a6e565b60006040518083038185875af1925050503d8060008114614215576040519150601f19603f3d011682016040523d82523d6000602084013e61421a565b606091505b50508096505050505050505050505b565b600080830361423d576000905061429f565b6000828461424b9190614da6565b905082848261425a9190614e17565b1461429a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161429190615af5565b60405180910390fd5b809150505b92915050565b60006142e783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061457b565b905092915050565b505050565b600061433683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613c51565b905092915050565b6000600267ffffffffffffffff81111561435b5761435a614a51565b5b6040519080825280602002602001820160405280156143895781602001602082028036833780820191505090505b50905030816000815181106143a1576143a0615078565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446a9190615b2a565b8160018151811061447e5761447d615078565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506144e3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612bfa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614545959493929190615c50565b600060405180830381600087803b15801561455f57600080fd5b505af1158015614573573d6000803e3d6000fd5b505050505050565b600080831182906145c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016145b9919061466e565b60405180910390fd5b50600083856145d19190614e17565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156146185780820151818401526020810190506145fd565b60008484015250505050565b6000601f19601f8301169050919050565b6000614640826145de565b61464a81856145e9565b935061465a8185602086016145fa565b61466381614624565b840191505092915050565b600060208201905081810360008301526146888184614635565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006146cf826146a4565b9050919050565b6146df816146c4565b81146146ea57600080fd5b50565b6000813590506146fc816146d6565b92915050565b6000819050919050565b61471581614702565b811461472057600080fd5b50565b6000813590506147328161470c565b92915050565b6000806040838503121561474f5761474e61469a565b5b600061475d858286016146ed565b925050602061476e85828601614723565b9150509250929050565b60008115159050919050565b61478d81614778565b82525050565b60006020820190506147a86000830184614784565b92915050565b6000602082840312156147c4576147c361469a565b5b60006147d2848285016146ed565b91505092915050565b6000819050919050565b60006148006147fb6147f6846146a4565b6147db565b6146a4565b9050919050565b6000614812826147e5565b9050919050565b600061482482614807565b9050919050565b61483481614819565b82525050565b600060208201905061484f600083018461482b565b92915050565b61485e81614702565b82525050565b60006020820190506148796000830184614855565b92915050565b6000602082840312156148955761489461469a565b5b60006148a384828501614723565b91505092915050565b6000806000606084860312156148c5576148c461469a565b5b60006148d3868287016146ed565b93505060206148e4868287016146ed565b92505060406148f586828701614723565b9150509250925092565b600060ff82169050919050565b614915816148ff565b82525050565b6000602082019050614930600083018461490c565b92915050565b61493f816146c4565b82525050565b600060208201905061495a6000830184614936565b92915050565b61496981614778565b811461497457600080fd5b50565b60008135905061498681614960565b92915050565b600080604083850312156149a3576149a261469a565b5b60006149b1858286016146ed565b92505060206149c285828601614977565b9150509250929050565b6000806000606084860312156149e5576149e461469a565b5b60006149f386828701614723565b9350506020614a0486828701614723565b9250506040614a1586828701614723565b9150509250925092565b600060208284031215614a3557614a3461469a565b5b6000614a4384828501614977565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614a8982614624565b810181811067ffffffffffffffff82111715614aa857614aa7614a51565b5b80604052505050565b6000614abb614690565b9050614ac78282614a80565b919050565b600067ffffffffffffffff821115614ae757614ae6614a51565b5b602082029050602081019050919050565b600080fd5b6000614b10614b0b84614acc565b614ab1565b90508083825260208201905060208402830185811115614b3357614b32614af8565b5b835b81811015614b5c5780614b4888826146ed565b845260208401935050602081019050614b35565b5050509392505050565b600082601f830112614b7b57614b7a614a4c565b5b8135614b8b848260208601614afd565b91505092915050565b60008060408385031215614bab57614baa61469a565b5b600083013567ffffffffffffffff811115614bc957614bc861469f565b5b614bd585828601614b66565b9250506020614be685828601614977565b9150509250929050565b60008060408385031215614c0757614c0661469a565b5b6000614c15858286016146ed565b9250506020614c26858286016146ed565b9150509250929050565b600080600080600060a08688031215614c4c57614c4b61469a565b5b6000614c5a88828901614723565b9550506020614c6b88828901614723565b9450506040614c7c88828901614723565b9350506060614c8d88828901614723565b9250506080614c9e88828901614723565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614cf257607f821691505b602082108103614d0557614d04614cab565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614d416020836145e9565b9150614d4c82614d0b565b602082019050919050565b60006020820190508181036000830152614d7081614d34565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614db182614702565b9150614dbc83614702565b9250828202614dca81614702565b91508282048414831517614de157614de0614d77565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614e2282614702565b9150614e2d83614702565b925082614e3d57614e3c614de8565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614ea4602f836145e9565b9150614eaf82614e48565b604082019050919050565b60006020820190508181036000830152614ed381614e97565b9050919050565b6000614ee582614702565b9150614ef083614702565b9250828201905080821115614f0857614f07614d77565b5b92915050565b7f4d757374206b656570206665657320617420353025206f72206c657373000000600082015250565b6000614f44601d836145e9565b9150614f4f82614f0e565b602082019050919050565b60006020820190508181036000830152614f7381614f37565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614fd66039836145e9565b9150614fe182614f7a565b604082019050919050565b6000602082019050818103600083015261500581614fc9565b9050919050565b7f4163636f756e7473206c6973742063616e6e6f7420626520656d7074792e0000600082015250565b6000615042601e836145e9565b915061504d8261500c565b602082019050919050565b6000602082019050818103600083015261507181615035565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006150b282614702565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150e4576150e3614d77565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e352500000000000000000000000000000000000000000000000000000000602082015250565b600061514b6024836145e9565b9150615156826150ef565b604082019050919050565b6000602082019050818103600083015261517a8161513e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006151dd6035836145e9565b91506151e882615181565b604082019050919050565b6000602082019050818103600083015261520c816151d0565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061526f6034836145e9565b915061527a82615213565b604082019050919050565b6000602082019050818103600083015261529e81615262565b9050919050565b7f546f6b656e3a206e6f2045544820696e2074686520636f6e7472616374000000600082015250565b60006152db601d836145e9565b91506152e6826152a5565b602082019050919050565b6000602082019050818103600083015261530a816152ce565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061536d6026836145e9565b915061537882615311565b604082019050919050565b6000602082019050818103600083015261539c81615360565b9050919050565b7f4d757374206b656570206665657320617420393925206f72206c657373000000600082015250565b60006153d9601d836145e9565b91506153e4826153a3565b602082019050919050565b60006020820190508181036000830152615408816153cc565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615445601b836145e9565b91506154508261540f565b602082019050919050565b6000602082019050818103600083015261547481615438565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006154d76024836145e9565b91506154e28261547b565b604082019050919050565b60006020820190508181036000830152615506816154ca565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006155696022836145e9565b91506155748261550d565b604082019050919050565b600060208201905081810360008301526155988161555c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006155fb6025836145e9565b91506156068261559f565b604082019050919050565b6000602082019050818103600083015261562a816155ee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061568d6023836145e9565b915061569882615631565b604082019050919050565b600060208201905081810360008301526156bc81615680565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061571f6031836145e9565b915061572a826156c3565b604082019050919050565b6000602082019050818103600083015261574e81615712565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061578b6016836145e9565b915061579682615755565b602082019050919050565b600060208201905081810360008301526157ba8161577e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006158436049836145e9565b915061584e826157c1565b606082019050919050565b6000602082019050818103600083015261587281615836565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006158d56035836145e9565b91506158e082615879565b604082019050919050565b60006020820190508181036000830152615904816158c8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006159416013836145e9565b915061594c8261590b565b602082019050919050565b6000602082019050818103600083015261597081615934565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006159d36036836145e9565b91506159de82615977565b604082019050919050565b60006020820190508181036000830152615a02816159c6565b9050919050565b6000615a1482614702565b9150615a1f83614702565b9250828203905081811115615a3757615a36614d77565b5b92915050565b600081905092915050565b50565b6000615a58600083615a3d565b9150615a6382615a48565b600082019050919050565b6000615a7982615a4b565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615adf6021836145e9565b9150615aea82615a83565b604082019050919050565b60006020820190508181036000830152615b0e81615ad2565b9050919050565b600081519050615b24816146d6565b92915050565b600060208284031215615b4057615b3f61469a565b5b6000615b4e84828501615b15565b91505092915050565b6000819050919050565b6000615b7c615b77615b7284615b57565b6147db565b614702565b9050919050565b615b8c81615b61565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615bc7816146c4565b82525050565b6000615bd98383615bbe565b60208301905092915050565b6000602082019050919050565b6000615bfd82615b92565b615c078185615b9d565b9350615c1283615bae565b8060005b83811015615c43578151615c2a8882615bcd565b9750615c3583615be5565b925050600181019050615c16565b5085935050505092915050565b600060a082019050615c656000830188614855565b615c726020830187615b83565b8181036040830152615c848186615bf2565b9050615c936060830185614936565b615ca06080830184614855565b969550505050505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122062d05797b765a122e3ba03e3e18918816b8050b8b3e3b33c7f796d182425492764736f6c63430008110033

Deployed Bytecode Sourcemap

23078:16308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7942:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9782:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24660:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23156:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9062:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32097:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24385:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24345;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28840:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9986:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24302:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37485:159;;;;;;;;;;;;;:::i;:::-;;8904:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10450:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23214:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23476:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32262:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24259:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24114:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23556:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9233:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15401:148;;;;;;;;;;;;;:::i;:::-;;27970:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29392:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23291:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24007;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29677:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27814:148;;;;;;;;;;;;;:::i;:::-;;15183:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23328:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24149:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29569:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8161:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31355:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24081:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31014:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24425:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24225:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28242:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10753:393;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23594:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9386:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31865:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24732:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23516:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30704:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29125:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23925:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23361:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28351:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23973:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9596:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37284:193;;;;;;;;;;;;;:::i;:::-;;23403:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28099:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24044:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15559:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24187:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23443:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30894:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30088:608;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7942:100;7996:13;8029:5;8022:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7942:100;:::o;9782:194::-;9890:4;9907:39;9916:12;:10;:12::i;:::-;9930:7;9939:6;9907:8;:39::i;:::-;9964:4;9957:11;;9782:194;;;;:::o;24660:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23156:51::-;;;:::o;9062:108::-;9123:7;9150:12;;9143:19;;9062:108;:::o;32097:157::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32204:9:::1;;;;;;;;;;;32176:38;;32193:9;32176:38;;;;;;;;;;;;32237:9;32225;;:21;;;;;;;;;;;;;;;;;;32097:157:::0;:::o;24385:33::-;;;;:::o;24345:::-;;;;:::o;28840:277::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28977:4:::1;28969;28964:1;28948:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28947:26;;;;:::i;:::-;28946:35;;;;:::i;:::-;28936:6;:45;;28914:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;29100:8;29090:6;:19;;;;:::i;:::-;29067:20;:42;;;;28840:277:::0;:::o;9986:454::-;10126:4;10143:36;10153:6;10161:9;10172:6;10143:9;:36::i;:::-;10190:220;10213:6;10234:12;:10;:12::i;:::-;10261:138;10317:6;10261:138;;;;;;;;;;;;;;;;;:11;:19;10273:6;10261:19;;;;;;;;;;;;;;;:33;10281:12;:10;:12::i;:::-;10261:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;10190:8;:220::i;:::-;10428:4;10421:11;;9986:454;;;;;:::o;24302:36::-;;;;:::o;37485:159::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37540:14:::1;37557:24;37575:4;37557:9;:24::i;:::-;37540:41;;37592:44;37610:4;37617:10;37629:6;37592:9;:44::i;:::-;37529:115;37485:159::o:0;8904:93::-;8962:5;8987:2;8980:9;;8904:93;:::o;10450:293::-;10563:4;10580:133;10603:12;:10;:12::i;:::-;10630:7;10652:50;10691:10;10652:11;:25;10664:12;:10;:12::i;:::-;10652:25;;;;;;;;;;;;;;;:34;10678:7;10652:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;10580:8;:133::i;:::-;10731:4;10724:11;;10450:293;;;;:::o;23214:38::-;;;:::o;23476:33::-;;;;;;;;;;;;;:::o;32262:126::-;32328:4;32352:19;:28;32372:7;32352:28;;;;;;;;;;;;;;;;;;;;;;;;;32345:35;;32262:126;;;:::o;24259:36::-;;;;:::o;24114:28::-;;;;:::o;23556:31::-;;;;;;;;;;;;;:::o;9233:143::-;9323:7;9350:9;:18;9360:7;9350:18;;;;;;;;;;;;;;;;9343:25;;9233:143;;;:::o;15401:148::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15508:1:::1;15471:40;;15492:6;;;;;;;;;;;15471:40;;;;;;;;;;;;15539:1;15522:6;;:19;;;;;;;;;;;;;;;;;;15401:148::o:0;27970:121::-;28022:4;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28056:5:::1;28039:14;;:22;;;;;;;;;;;;;;;;;;28079:4;28072:11;;27970:121:::0;:::o;29392:169::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29549:4:::1;29507:31;:39;29539:6;29507:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29392:169:::0;;:::o;23291:30::-;;;;;;;;;;;;;:::o;24007:::-;;;;:::o;29677:403::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29845:13:::1;29827:15;:31;;;;29887:13;29869:15;:31;;;;29923:7;29911:9;:19;;;;29992:9;;29974:15;;29956;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;29941:12;:60;;;;30036:2;30020:12;;:18;;30012:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29677:403:::0;;;:::o;27814:148::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27885:4:::1;27869:13;;:20;;;;;;;;;;;;;;;;;;27914:4;27900:11;;:18;;;;;;;;;;;;;;;;;;27942:12;27929:10;:25;;;;27814:148::o:0;15183:79::-;15221:7;15248:6;;;;;;;;;;;15241:13;;15183:79;:::o;23328:24::-;;;;;;;;;;;;;:::o;24149:31::-;;;;:::o;29569:100::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29654:7:::1;29640:11;;:21;;;;;;;;;;;;;;;;;;29569:100:::0;:::o;8161:104::-;8217:13;8250:7;8243:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8161:104;:::o;31355:306::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31501:13:::1;31493:21;;:4;:21;;::::0;31471:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31612:41;31641:4;31647:5;31612:28;:41::i;:::-;31355:306:::0;;:::o;24081:24::-;;;;:::o;31014:333::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31174:1:::1;31156:8;:15;:19;31148:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31226:9;31221:119;31245:8;:15;31241:1;:19;31221:119;;;31308:20;31282:10;:23;31293:8;31302:1;31293:11;;;;;;;;:::i;:::-;;;;;;;;31282:23;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31262:3;;;;;:::i;:::-;;;;31221:119;;;;31014:333:::0;;:::o;24425:27::-;;;;:::o;24225:25::-;;;;:::o;28242:101::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28330:5:::1;28309:18;;:26;;;;;;;;;;;;;;;;;;28242:101:::0;:::o;10753:393::-;10871:4;10888:228;10911:12;:10;:12::i;:::-;10938:7;10960:145;11017:15;10960:145;;;;;;;;;;;;;;;;;:11;:25;10972:12;:10;:12::i;:::-;10960:25;;;;;;;;;;;;;;;:34;10986:7;10960:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;10888:8;:228::i;:::-;11134:4;11127:11;;10753:393;;;;:::o;23594:37::-;;;;;;;;;;;;;:::o;9386:200::-;9497:4;9514:42;9524:12;:10;:12::i;:::-;9538:9;9549:6;9514:9;:42::i;:::-;9574:4;9567:11;;9386:200;;;;:::o;31865:224::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32018:15:::1;;;;;;;;;;;31975:59;;31998:18;31975:59;;;;;;;;;;;;32063:18;32045:15;;:36;;;;;;;;;;;;;;;;;;31865:224:::0;:::o;24732:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;23516:33::-;;;;;;;;;;;;;:::o;30704:182::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30820:8:::1;30789:19;:28;30809:7;30789:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30860:7;30844:34;;;30869:8;30844:34;;;;;;:::i;:::-;;;;;;;;30704:182:::0;;:::o;29125:259::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29266:4:::1;29258;29252:2;29236:13;:11;:13::i;:::-;:18;;;;:::i;:::-;29235:27;;;;:::i;:::-;29234:36;;;;:::i;:::-;29224:6;:46;;29202:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;29367:8;29357:6;:19;;;;:::i;:::-;29345:9;:31;;;;29125:259:::0;:::o;23925:39::-;;;;;;;;;;;;;:::o;23361:35::-;;;;:::o;28351:481::-;28448:4;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28522:6:::1;28517:1;28501:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28500:28;;;;:::i;:::-;28487:9;:41;;28465:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;28677:4;28672:1;28656:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28655:26;;;;:::i;:::-;28642:9;:39;;28620:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;28793:9;28772:18;:30;;;;28820:4;28813:11;;28351:481:::0;;;:::o;23973:27::-;;;;:::o;9596:176::-;9710:7;9737:11;:18;9749:5;9737:18;;;;;;;;;;;;;;;:27;9756:7;9737:27;;;;;;;;;;;;;;;;9730:34;;9596:176;;;;:::o;37284:193::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37372:1:::1;37348:21;:25;37340:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37426:10;37418:28;;:51;37447:21;37418:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37284:193::o:0;23403:33::-;;;;:::o;28099:135::-;28159:4;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28199:5:::1;28176:20;;:28;;;;;;;;;;;;;;;;;;28222:4;28215:11;;28099:135:::0;:::o;24044:30::-;;;;:::o;15559:281::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;15682:1:::1;15662:22;;:8;:22;;::::0;15640:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15795:8;15766:38;;15787:6;;;;;;;;;;;15766:38;;;;;;;;;;;;15824:8;15815:6;;:17;;;;;;;;;;;;;;;;;;15559:281:::0;:::o;24187:31::-;;;;:::o;23443:24::-;;;;:::o;30894:112::-;30955:4;30979:10;:19;30990:7;30979:19;;;;;;;;;;;;;;;;;;;;;;;;;30972:26;;30894:112;;;:::o;30088:608::-;15322:12;:10;:12::i;:::-;15312:22;;:6;;;;;;;;;;;:22;;;15304:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30340:13:::1;30321:16;:32;;;;30383:13;30364:16;:32;;;;30420:7;30407:10;:20;;;;30462:22;30438:21;:46;;;;30519:22;30495:21;:46;;;;30606:10;;30587:16;;30568;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;30552:13;:64;;;;30652:2;30635:13;;:19;;30627:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30088:608:::0;;;;;:::o;13189:181::-;13247:7;13267:9;13283:1;13279;:5;;;;:::i;:::-;13267:17;;13308:1;13303;:6;;13295:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;13361:1;13354:8;;;13189:181;;;;:::o;113:98::-;166:7;193:10;186:17;;113:98;:::o;12637:380::-;12790:1;12773:19;;:5;:19;;;12765:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12871:1;12852:21;;:7;:21;;;12844:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12955:6;12925:11;:18;12937:5;12925:18;;;;;;;;;;;;;;;:27;12944:7;12925:27;;;;;;;;;;;;;;;:36;;;;12993:7;12977:32;;12986:5;12977:32;;;13002:6;12977:32;;;;;;:::i;:::-;;;;;;;;12637:380;;;:::o;32446:4830::-;32594:1;32578:18;;:4;:18;;;32570:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32671:1;32657:16;;:2;:16;;;32649:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32747:10;:14;32758:2;32747:14;;;;;;;;;;;;;;;;;;;;;;;;;32746:15;:36;;;;;32766:10;:16;32777:4;32766:16;;;;;;;;;;;;;;;;;;;;;;;;;32765:17;32746:36;32724:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;32884:1;32874:6;:11;32870:93;;32902:28;32918:4;32924:2;32928:1;32902:15;:28::i;:::-;32945:7;;32870:93;32979:14;;;;;;;;;;;32975:2355;;;33040:7;:5;:7::i;:::-;33032:15;;:4;:15;;;;:49;;;;;33074:7;:5;:7::i;:::-;33068:13;;:2;:13;;;;33032:49;:86;;;;;33116:1;33102:16;;:2;:16;;;;33032:86;:128;;;;;33153:6;33139:21;;:2;:21;;;;33032:128;:158;;;;;33182:8;;;;;;;;;;;33181:9;33032:158;33010:2309;;;33230:13;;;;;;;;;;;33225:223;;33302:19;:25;33322:4;33302:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33331:19;:23;33351:2;33331:23;;;;;;;;;;;;;;;;;;;;;;;;;33302:52;33268:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33225:223;33472:20;;;;;;;;;;;33468:641;;;33553:7;:5;:7::i;:::-;33547:13;;:2;:13;;;;:72;;;;;33603:15;33589:30;;:2;:30;;;;33547:72;:129;;;;;33662:13;33648:28;;:2;:28;;;;33547:129;33517:573;;;33840:12;33765:28;:39;33794:9;33765:39;;;;;;;;;;;;;;;;:87;33727:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;34054:12;34012:28;:39;34041:9;34012:39;;;;;;;;;;;;;;;:54;;;;33517:573;33468:641;34183:25;:31;34209:4;34183:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34240:31;:35;34272:2;34240:35;;;;;;;;;;;;;;;;;;;;;;;;;34239:36;34183:92;34157:1147;;;34362:20;;34352:6;:30;;34318:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34570:9;;34553:13;34563:2;34553:9;:13::i;:::-;34544:6;:22;;;;:::i;:::-;:35;;34510:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34157:1147;;;34748:25;:29;34774:2;34748:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34803:31;:37;34835:4;34803:37;;;;;;;;;;;;;;;;;;;;;;;;;34802:38;34748:92;34722:582;;;34927:20;;34917:6;:30;;34883:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;34722:582;;;35084:31;:35;35116:2;35084:35;;;;;;;;;;;;;;;;;;;;;;;;;35079:225;;35204:9;;35187:13;35197:2;35187:9;:13::i;:::-;35178:6;:22;;;;:::i;:::-;:35;;35144:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;35079:225;34722:582;34157:1147;33010:2309;32975:2355;35417:1;35404:10;;:14;;;;:::i;:::-;35387:12;:32;;:68;;;;;35442:13;35436:19;;:2;:19;;;;35387:68;:142;;;;;35486:42;35472:57;;:2;:57;;;;35387:142;35369:221;;;35573:5;35556:10;:14;35567:2;35556:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;35369:221;35602:28;35633:24;35651:4;35633:9;:24::i;:::-;35602:55;;35670:12;35709:18;;35685:20;:42;;35670:57;;35758:7;:35;;;;;35782:11;;;;;;;;;;;35758:35;:61;;;;;35811:8;;;;;;;;;;;35810:9;35758:61;:110;;;;;35837:25;:31;35863:4;35837:31;;;;;;;;;;;;;;;;;;;;;;;;;35836:32;35758:110;:153;;;;;35886:19;:25;35906:4;35886:25;;;;;;;;;;;;;;;;;;;;;;;;;35885:26;35758:153;:194;;;;;35929:19;:23;35949:2;35929:23;;;;;;;;;;;;;;;;;;;;;;;;;35928:24;35758:194;35740:326;;;35990:4;35979:8;;:15;;;;;;;;;;;;;;;;;;36011:10;:8;:10::i;:::-;36049:5;36038:8;;:16;;;;;;;;;;;;;;;;;;35740:326;36078:12;36094:8;;;;;;;;;;;36093:9;36078:24;;36119:19;:25;36139:4;36119:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36148:19;:23;36168:2;36148:23;;;;;;;;;;;;;;;;;;;;;;;;;36119:52;36115:100;;;36198:5;36188:15;;36115:100;36227:12;36258:7;36254:969;;;36310:25;:29;36336:2;36310:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;36359:1;36343:13;;:17;36310:50;36306:768;;;36388:34;36418:3;36388:25;36399:13;;36388:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;36381:41;;36491:13;;36471:16;;36464:4;:23;;;;:::i;:::-;36463:41;;;;:::i;:::-;36441:18;;:63;;;;;;;:::i;:::-;;;;;;;;36561:13;;36547:10;;36540:4;:17;;;;:::i;:::-;36539:35;;;;:::i;:::-;36523:12;;:51;;;;;;;:::i;:::-;;;;;;;;36643:13;;36623:16;;36616:4;:23;;;;:::i;:::-;36615:41;;;;:::i;:::-;36593:18;;:63;;;;;;;:::i;:::-;;;;;;;;36306:768;;;36718:25;:31;36744:4;36718:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36768:1;36753:12;;:16;36718:51;36714:360;;;36797:33;36826:3;36797:24;36808:12;;36797:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36790:40;;36898:12;;36879:15;;36872:4;:22;;;;:::i;:::-;36871:39;;;;:::i;:::-;36849:18;;:61;;;;;;;:::i;:::-;;;;;;;;36966:12;;36953:9;;36946:4;:16;;;;:::i;:::-;36945:33;;;;:::i;:::-;36929:12;;:49;;;;;;;:::i;:::-;;;;;;;;37046:12;;37027:15;;37020:4;:22;;;;:::i;:::-;37019:39;;;;:::i;:::-;36997:18;;:61;;;;;;;:::i;:::-;;;;;;;;36714:360;36306:768;37101:1;37094:4;:8;37090:91;;;37123:42;37139:4;37153;37160;37123:15;:42::i;:::-;37090:91;37207:4;37197:14;;;;;:::i;:::-;;;36254:969;37235:33;37251:4;37257:2;37261:6;37235:15;:33::i;:::-;32559:4717;;;;32446:4830;;;;:::o;13528:226::-;13648:7;13681:1;13676;:6;;13684:12;13668:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13708:9;13724:1;13720;:5;;;;:::i;:::-;13708:17;;13745:1;13738:8;;;13528:226;;;;;:::o;31669:188::-;31786:5;31752:25;:31;31778:4;31752:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31843:5;31809:40;;31837:4;31809:40;;;;;;;;;;;;31669:188;;:::o;11158:610::-;11316:1;11298:20;;:6;:20;;;11290:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11400:1;11379:23;;:9;:23;;;11371:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11455:47;11476:6;11484:9;11495:6;11455:20;:47::i;:::-;11535:108;11571:6;11535:108;;;;;;;;;;;;;;;;;:9;:17;11545:6;11535:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;11515:9;:17;11525:6;11515:17;;;;;;;;;;;;;;;:128;;;;11677:32;11702:6;11677:9;:20;11687:9;11677:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11654:9;:20;11664:9;11654:20;;;;;;;;;;;;;;;:55;;;;11742:9;11725:35;;11734:6;11725:35;;;11753:6;11725:35;;;;;;:::i;:::-;;;;;;;;11158:610;;;:::o;38163:1220::-;38202:23;38228:24;38246:4;38228:9;:24::i;:::-;38202:50;;38263:25;38359:12;;38325:18;;38291;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;38263:108;;38382:12;38430:1;38411:15;:20;:46;;;;38456:1;38435:17;:22;38411:46;38407:85;;;38474:7;;;;;38407:85;38547:2;38526:18;;:23;;;;:::i;:::-;38508:15;:41;38504:115;;;38605:2;38584:18;;:23;;;;:::i;:::-;38566:41;;38504:115;38631:23;38744:1;38711:17;38676:18;;38658:15;:36;;;;:::i;:::-;38657:71;;;;:::i;:::-;:88;;;;:::i;:::-;38631:114;;38756:26;38785:36;38805:15;38785;:19;;:36;;;;:::i;:::-;38756:65;;38834:25;38862:21;38834:49;;38896:36;38913:18;38896:16;:36::i;:::-;38945:18;38966:44;38992:17;38966:21;:25;;:44;;;;:::i;:::-;38945:65;;39023:17;39043:51;39076:17;39043:28;39058:12;;39043:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;39023:71;;39128:1;39107:18;:22;;;;39161:1;39140:18;:22;;;;39188:1;39173:12;:16;;;;39224:9;;;;;;;;;;;39216:23;;39247:9;39216:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39202:59;;;;;39296:15;;;;;;;;;;;39288:29;;39339:21;39288:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39274:101;;;;;38191:1192;;;;;;;;38163:1220;:::o;13764:252::-;13822:7;13853:1;13848;:6;13844:47;;13878:1;13871:8;;;;13844:47;13903:9;13919:1;13915;:5;;;;:::i;:::-;13903:17;;13948:1;13943;13939;:5;;;;:::i;:::-;:10;13931:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14007:1;14000:8;;;13764:252;;;;;:::o;14026:132::-;14084:7;14111:39;14115:1;14118;14111:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14104:46;;14026:132;;;;:::o;13029:125::-;;;;:::o;13382:136::-;13440:7;13467:43;13471:1;13474;13467:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;13460:50;;13382:136;;;;:::o;37652:503::-;37718:21;37756:1;37742:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37718:40;;37787:4;37769;37774:1;37769:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;37813:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37803:4;37808:1;37803:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;37848:62;37865:4;37880:15;37898:11;37848:8;:62::i;:::-;37923:15;:66;;;38004:11;38030:1;38074:4;38101;38121:15;37923:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37707:448;37652:503;:::o;14168:312::-;14288:7;14320:1;14316;:5;14323:12;14308:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;14347:9;14363:1;14359;:5;;;;:::i;:::-;14347:17;;14471:1;14464:8;;;14168:312;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:118::-;6588:24;6606:5;6588:24;:::i;:::-;6583:3;6576:37;6501:118;;:::o;6625:222::-;6718:4;6756:2;6745:9;6741:18;6733:26;;6769:71;6837:1;6826:9;6822:17;6813:6;6769:71;:::i;:::-;6625:222;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:117::-;8651:1;8648;8641:12;8665:180;8713:77;8710:1;8703:88;8810:4;8807:1;8800:15;8834:4;8831:1;8824:15;8851:281;8934:27;8956:4;8934:27;:::i;:::-;8926:6;8922:40;9064:6;9052:10;9049:22;9028:18;9016:10;9013:34;9010:62;9007:88;;;9075:18;;:::i;:::-;9007:88;9115:10;9111:2;9104:22;8894:238;8851:281;;:::o;9138:129::-;9172:6;9199:20;;:::i;:::-;9189:30;;9228:33;9256:4;9248:6;9228:33;:::i;:::-;9138:129;;;:::o;9273:311::-;9350:4;9440:18;9432:6;9429:30;9426:56;;;9462:18;;:::i;:::-;9426:56;9512:4;9504:6;9500:17;9492:25;;9572:4;9566;9562:15;9554:23;;9273:311;;;:::o;9590:117::-;9699:1;9696;9689:12;9730:710;9826:5;9851:81;9867:64;9924:6;9867:64;:::i;:::-;9851:81;:::i;:::-;9842:90;;9952:5;9981:6;9974:5;9967:21;10015:4;10008:5;10004:16;9997:23;;10068:4;10060:6;10056:17;10048:6;10044:30;10097:3;10089:6;10086:15;10083:122;;;10116:79;;:::i;:::-;10083:122;10231:6;10214:220;10248:6;10243:3;10240:15;10214:220;;;10323:3;10352:37;10385:3;10373:10;10352:37;:::i;:::-;10347:3;10340:50;10419:4;10414:3;10410:14;10403:21;;10290:144;10274:4;10269:3;10265:14;10258:21;;10214:220;;;10218:21;9832:608;;9730:710;;;;;:::o;10463:370::-;10534:5;10583:3;10576:4;10568:6;10564:17;10560:27;10550:122;;10591:79;;:::i;:::-;10550:122;10708:6;10695:20;10733:94;10823:3;10815:6;10808:4;10800:6;10796:17;10733:94;:::i;:::-;10724:103;;10540:293;10463:370;;;;:::o;10839:678::-;10929:6;10937;10986:2;10974:9;10965:7;10961:23;10957:32;10954:119;;;10992:79;;:::i;:::-;10954:119;11140:1;11129:9;11125:17;11112:31;11170:18;11162:6;11159:30;11156:117;;;11192:79;;:::i;:::-;11156:117;11297:78;11367:7;11358:6;11347:9;11343:22;11297:78;:::i;:::-;11287:88;;11083:302;11424:2;11450:50;11492:7;11483:6;11472:9;11468:22;11450:50;:::i;:::-;11440:60;;11395:115;10839:678;;;;;:::o;11523:474::-;11591:6;11599;11648:2;11636:9;11627:7;11623:23;11619:32;11616:119;;;11654:79;;:::i;:::-;11616:119;11774:1;11799:53;11844:7;11835:6;11824:9;11820:22;11799:53;:::i;:::-;11789:63;;11745:117;11901:2;11927:53;11972:7;11963:6;11952:9;11948:22;11927:53;:::i;:::-;11917:63;;11872:118;11523:474;;;;;:::o;12003:911::-;12098:6;12106;12114;12122;12130;12179:3;12167:9;12158:7;12154:23;12150:33;12147:120;;;12186:79;;:::i;:::-;12147:120;12306:1;12331:53;12376:7;12367:6;12356:9;12352:22;12331:53;:::i;:::-;12321:63;;12277:117;12433:2;12459:53;12504:7;12495:6;12484:9;12480:22;12459:53;:::i;:::-;12449:63;;12404:118;12561:2;12587:53;12632:7;12623:6;12612:9;12608:22;12587:53;:::i;:::-;12577:63;;12532:118;12689:2;12715:53;12760:7;12751:6;12740:9;12736:22;12715:53;:::i;:::-;12705:63;;12660:118;12817:3;12844:53;12889:7;12880:6;12869:9;12865:22;12844:53;:::i;:::-;12834:63;;12788:119;12003:911;;;;;;;;:::o;12920:180::-;12968:77;12965:1;12958:88;13065:4;13062:1;13055:15;13089:4;13086:1;13079:15;13106:320;13150:6;13187:1;13181:4;13177:12;13167:22;;13234:1;13228:4;13224:12;13255:18;13245:81;;13311:4;13303:6;13299:17;13289:27;;13245:81;13373:2;13365:6;13362:14;13342:18;13339:38;13336:84;;13392:18;;:::i;:::-;13336:84;13157:269;13106:320;;;:::o;13432:182::-;13572:34;13568:1;13560:6;13556:14;13549:58;13432:182;:::o;13620:366::-;13762:3;13783:67;13847:2;13842:3;13783:67;:::i;:::-;13776:74;;13859:93;13948:3;13859:93;:::i;:::-;13977:2;13972:3;13968:12;13961:19;;13620:366;;;:::o;13992:419::-;14158:4;14196:2;14185:9;14181:18;14173:26;;14245:9;14239:4;14235:20;14231:1;14220:9;14216:17;14209:47;14273:131;14399:4;14273:131;:::i;:::-;14265:139;;13992:419;;;:::o;14417:180::-;14465:77;14462:1;14455:88;14562:4;14559:1;14552:15;14586:4;14583:1;14576:15;14603:410;14643:7;14666:20;14684:1;14666:20;:::i;:::-;14661:25;;14700:20;14718:1;14700:20;:::i;:::-;14695:25;;14755:1;14752;14748:9;14777:30;14795:11;14777:30;:::i;:::-;14766:41;;14956:1;14947:7;14943:15;14940:1;14937:22;14917:1;14910:9;14890:83;14867:139;;14986:18;;:::i;:::-;14867:139;14651:362;14603:410;;;;:::o;15019:180::-;15067:77;15064:1;15057:88;15164:4;15161:1;15154:15;15188:4;15185:1;15178:15;15205:185;15245:1;15262:20;15280:1;15262:20;:::i;:::-;15257:25;;15296:20;15314:1;15296:20;:::i;:::-;15291:25;;15335:1;15325:35;;15340:18;;:::i;:::-;15325:35;15382:1;15379;15375:9;15370:14;;15205:185;;;;:::o;15396:234::-;15536:34;15532:1;15524:6;15520:14;15513:58;15605:17;15600:2;15592:6;15588:15;15581:42;15396:234;:::o;15636:366::-;15778:3;15799:67;15863:2;15858:3;15799:67;:::i;:::-;15792:74;;15875:93;15964:3;15875:93;:::i;:::-;15993:2;15988:3;15984:12;15977:19;;15636:366;;;:::o;16008:419::-;16174:4;16212:2;16201:9;16197:18;16189:26;;16261:9;16255:4;16251:20;16247:1;16236:9;16232:17;16225:47;16289:131;16415:4;16289:131;:::i;:::-;16281:139;;16008:419;;;:::o;16433:191::-;16473:3;16492:20;16510:1;16492:20;:::i;:::-;16487:25;;16526:20;16544:1;16526:20;:::i;:::-;16521:25;;16569:1;16566;16562:9;16555:16;;16590:3;16587:1;16584:10;16581:36;;;16597:18;;:::i;:::-;16581:36;16433:191;;;;:::o;16630:179::-;16770:31;16766:1;16758:6;16754:14;16747:55;16630:179;:::o;16815:366::-;16957:3;16978:67;17042:2;17037:3;16978:67;:::i;:::-;16971:74;;17054:93;17143:3;17054:93;:::i;:::-;17172:2;17167:3;17163:12;17156:19;;16815:366;;;:::o;17187:419::-;17353:4;17391:2;17380:9;17376:18;17368:26;;17440:9;17434:4;17430:20;17426:1;17415:9;17411:17;17404:47;17468:131;17594:4;17468:131;:::i;:::-;17460:139;;17187:419;;;:::o;17612:244::-;17752:34;17748:1;17740:6;17736:14;17729:58;17821:27;17816:2;17808:6;17804:15;17797:52;17612:244;:::o;17862:366::-;18004:3;18025:67;18089:2;18084:3;18025:67;:::i;:::-;18018:74;;18101:93;18190:3;18101:93;:::i;:::-;18219:2;18214:3;18210:12;18203:19;;17862:366;;;:::o;18234:419::-;18400:4;18438:2;18427:9;18423:18;18415:26;;18487:9;18481:4;18477:20;18473:1;18462:9;18458:17;18451:47;18515:131;18641:4;18515:131;:::i;:::-;18507:139;;18234:419;;;:::o;18659:180::-;18799:32;18795:1;18787:6;18783:14;18776:56;18659:180;:::o;18845:366::-;18987:3;19008:67;19072:2;19067:3;19008:67;:::i;:::-;19001:74;;19084:93;19173:3;19084:93;:::i;:::-;19202:2;19197:3;19193:12;19186:19;;18845:366;;;:::o;19217:419::-;19383:4;19421:2;19410:9;19406:18;19398:26;;19470:9;19464:4;19460:20;19456:1;19445:9;19441:17;19434:47;19498:131;19624:4;19498:131;:::i;:::-;19490:139;;19217:419;;;:::o;19642:180::-;19690:77;19687:1;19680:88;19787:4;19784:1;19777:15;19811:4;19808:1;19801:15;19828:233;19867:3;19890:24;19908:5;19890:24;:::i;:::-;19881:33;;19936:66;19929:5;19926:77;19923:103;;20006:18;;:::i;:::-;19923:103;20053:1;20046:5;20042:13;20035:20;;19828:233;;;:::o;20067:223::-;20207:34;20203:1;20195:6;20191:14;20184:58;20276:6;20271:2;20263:6;20259:15;20252:31;20067:223;:::o;20296:366::-;20438:3;20459:67;20523:2;20518:3;20459:67;:::i;:::-;20452:74;;20535:93;20624:3;20535:93;:::i;:::-;20653:2;20648:3;20644:12;20637:19;;20296:366;;;:::o;20668:419::-;20834:4;20872:2;20861:9;20857:18;20849:26;;20921:9;20915:4;20911:20;20907:1;20896:9;20892:17;20885:47;20949:131;21075:4;20949:131;:::i;:::-;20941:139;;20668:419;;;:::o;21093:240::-;21233:34;21229:1;21221:6;21217:14;21210:58;21302:23;21297:2;21289:6;21285:15;21278:48;21093:240;:::o;21339:366::-;21481:3;21502:67;21566:2;21561:3;21502:67;:::i;:::-;21495:74;;21578:93;21667:3;21578:93;:::i;:::-;21696:2;21691:3;21687:12;21680:19;;21339:366;;;:::o;21711:419::-;21877:4;21915:2;21904:9;21900:18;21892:26;;21964:9;21958:4;21954:20;21950:1;21939:9;21935:17;21928:47;21992:131;22118:4;21992:131;:::i;:::-;21984:139;;21711:419;;;:::o;22136:239::-;22276:34;22272:1;22264:6;22260:14;22253:58;22345:22;22340:2;22332:6;22328:15;22321:47;22136:239;:::o;22381:366::-;22523:3;22544:67;22608:2;22603:3;22544:67;:::i;:::-;22537:74;;22620:93;22709:3;22620:93;:::i;:::-;22738:2;22733:3;22729:12;22722:19;;22381:366;;;:::o;22753:419::-;22919:4;22957:2;22946:9;22942:18;22934:26;;23006:9;23000:4;22996:20;22992:1;22981:9;22977:17;22970:47;23034:131;23160:4;23034:131;:::i;:::-;23026:139;;22753:419;;;:::o;23178:179::-;23318:31;23314:1;23306:6;23302:14;23295:55;23178:179;:::o;23363:366::-;23505:3;23526:67;23590:2;23585:3;23526:67;:::i;:::-;23519:74;;23602:93;23691:3;23602:93;:::i;:::-;23720:2;23715:3;23711:12;23704:19;;23363:366;;;:::o;23735:419::-;23901:4;23939:2;23928:9;23924:18;23916:26;;23988:9;23982:4;23978:20;23974:1;23963:9;23959:17;23952:47;24016:131;24142:4;24016:131;:::i;:::-;24008:139;;23735:419;;;:::o;24160:225::-;24300:34;24296:1;24288:6;24284:14;24277:58;24369:8;24364:2;24356:6;24352:15;24345:33;24160:225;:::o;24391:366::-;24533:3;24554:67;24618:2;24613:3;24554:67;:::i;:::-;24547:74;;24630:93;24719:3;24630:93;:::i;:::-;24748:2;24743:3;24739:12;24732:19;;24391:366;;;:::o;24763:419::-;24929:4;24967:2;24956:9;24952:18;24944:26;;25016:9;25010:4;25006:20;25002:1;24991:9;24987:17;24980:47;25044:131;25170:4;25044:131;:::i;:::-;25036:139;;24763:419;;;:::o;25188:179::-;25328:31;25324:1;25316:6;25312:14;25305:55;25188:179;:::o;25373:366::-;25515:3;25536:67;25600:2;25595:3;25536:67;:::i;:::-;25529:74;;25612:93;25701:3;25612:93;:::i;:::-;25730:2;25725:3;25721:12;25714:19;;25373:366;;;:::o;25745:419::-;25911:4;25949:2;25938:9;25934:18;25926:26;;25998:9;25992:4;25988:20;25984:1;25973:9;25969:17;25962:47;26026:131;26152:4;26026:131;:::i;:::-;26018:139;;25745:419;;;:::o;26170:177::-;26310:29;26306:1;26298:6;26294:14;26287:53;26170:177;:::o;26353:366::-;26495:3;26516:67;26580:2;26575:3;26516:67;:::i;:::-;26509:74;;26592:93;26681:3;26592:93;:::i;:::-;26710:2;26705:3;26701:12;26694:19;;26353:366;;;:::o;26725:419::-;26891:4;26929:2;26918:9;26914:18;26906:26;;26978:9;26972:4;26968:20;26964:1;26953:9;26949:17;26942:47;27006:131;27132:4;27006:131;:::i;:::-;26998:139;;26725:419;;;:::o;27150:223::-;27290:34;27286:1;27278:6;27274:14;27267:58;27359:6;27354:2;27346:6;27342:15;27335:31;27150:223;:::o;27379:366::-;27521:3;27542:67;27606:2;27601:3;27542:67;:::i;:::-;27535:74;;27618:93;27707:3;27618:93;:::i;:::-;27736:2;27731:3;27727:12;27720:19;;27379:366;;;:::o;27751:419::-;27917:4;27955:2;27944:9;27940:18;27932:26;;28004:9;27998:4;27994:20;27990:1;27979:9;27975:17;27968:47;28032:131;28158:4;28032:131;:::i;:::-;28024:139;;27751:419;;;:::o;28176:221::-;28316:34;28312:1;28304:6;28300:14;28293:58;28385:4;28380:2;28372:6;28368:15;28361:29;28176:221;:::o;28403:366::-;28545:3;28566:67;28630:2;28625:3;28566:67;:::i;:::-;28559:74;;28642:93;28731:3;28642:93;:::i;:::-;28760:2;28755:3;28751:12;28744:19;;28403:366;;;:::o;28775:419::-;28941:4;28979:2;28968:9;28964:18;28956:26;;29028:9;29022:4;29018:20;29014:1;29003:9;28999:17;28992:47;29056:131;29182:4;29056:131;:::i;:::-;29048:139;;28775:419;;;:::o;29200:224::-;29340:34;29336:1;29328:6;29324:14;29317:58;29409:7;29404:2;29396:6;29392:15;29385:32;29200:224;:::o;29430:366::-;29572:3;29593:67;29657:2;29652:3;29593:67;:::i;:::-;29586:74;;29669:93;29758:3;29669:93;:::i;:::-;29787:2;29782:3;29778:12;29771:19;;29430:366;;;:::o;29802:419::-;29968:4;30006:2;29995:9;29991:18;29983:26;;30055:9;30049:4;30045:20;30041:1;30030:9;30026:17;30019:47;30083:131;30209:4;30083:131;:::i;:::-;30075:139;;29802:419;;;:::o;30227:222::-;30367:34;30363:1;30355:6;30351:14;30344:58;30436:5;30431:2;30423:6;30419:15;30412:30;30227:222;:::o;30455:366::-;30597:3;30618:67;30682:2;30677:3;30618:67;:::i;:::-;30611:74;;30694:93;30783:3;30694:93;:::i;:::-;30812:2;30807:3;30803:12;30796:19;;30455:366;;;:::o;30827:419::-;30993:4;31031:2;31020:9;31016:18;31008:26;;31080:9;31074:4;31070:20;31066:1;31055:9;31051:17;31044:47;31108:131;31234:4;31108:131;:::i;:::-;31100:139;;30827:419;;;:::o;31252:236::-;31392:34;31388:1;31380:6;31376:14;31369:58;31461:19;31456:2;31448:6;31444:15;31437:44;31252:236;:::o;31494:366::-;31636:3;31657:67;31721:2;31716:3;31657:67;:::i;:::-;31650:74;;31733:93;31822:3;31733:93;:::i;:::-;31851:2;31846:3;31842:12;31835:19;;31494:366;;;:::o;31866:419::-;32032:4;32070:2;32059:9;32055:18;32047:26;;32119:9;32113:4;32109:20;32105:1;32094:9;32090:17;32083:47;32147:131;32273:4;32147:131;:::i;:::-;32139:139;;31866:419;;;:::o;32291:172::-;32431:24;32427:1;32419:6;32415:14;32408:48;32291:172;:::o;32469:366::-;32611:3;32632:67;32696:2;32691:3;32632:67;:::i;:::-;32625:74;;32708:93;32797:3;32708:93;:::i;:::-;32826:2;32821:3;32817:12;32810:19;;32469:366;;;:::o;32841:419::-;33007:4;33045:2;33034:9;33030:18;33022:26;;33094:9;33088:4;33084:20;33080:1;33069:9;33065:17;33058:47;33122:131;33248:4;33122:131;:::i;:::-;33114:139;;32841:419;;;:::o;33266:297::-;33406:34;33402:1;33394:6;33390:14;33383:58;33475:34;33470:2;33462:6;33458:15;33451:59;33544:11;33539:2;33531:6;33527:15;33520:36;33266:297;:::o;33569:366::-;33711:3;33732:67;33796:2;33791:3;33732:67;:::i;:::-;33725:74;;33808:93;33897:3;33808:93;:::i;:::-;33926:2;33921:3;33917:12;33910:19;;33569:366;;;:::o;33941:419::-;34107:4;34145:2;34134:9;34130:18;34122:26;;34194:9;34188:4;34184:20;34180:1;34169:9;34165:17;34158:47;34222:131;34348:4;34222:131;:::i;:::-;34214:139;;33941:419;;;:::o;34366:240::-;34506:34;34502:1;34494:6;34490:14;34483:58;34575:23;34570:2;34562:6;34558:15;34551:48;34366:240;:::o;34612:366::-;34754:3;34775:67;34839:2;34834:3;34775:67;:::i;:::-;34768:74;;34851:93;34940:3;34851:93;:::i;:::-;34969:2;34964:3;34960:12;34953:19;;34612:366;;;:::o;34984:419::-;35150:4;35188:2;35177:9;35173:18;35165:26;;35237:9;35231:4;35227:20;35223:1;35212:9;35208:17;35201:47;35265:131;35391:4;35265:131;:::i;:::-;35257:139;;34984:419;;;:::o;35409:169::-;35549:21;35545:1;35537:6;35533:14;35526:45;35409:169;:::o;35584:366::-;35726:3;35747:67;35811:2;35806:3;35747:67;:::i;:::-;35740:74;;35823:93;35912:3;35823:93;:::i;:::-;35941:2;35936:3;35932:12;35925:19;;35584:366;;;:::o;35956:419::-;36122:4;36160:2;36149:9;36145:18;36137:26;;36209:9;36203:4;36199:20;36195:1;36184:9;36180:17;36173:47;36237:131;36363:4;36237:131;:::i;:::-;36229:139;;35956:419;;;:::o;36381:241::-;36521:34;36517:1;36509:6;36505:14;36498:58;36590:24;36585:2;36577:6;36573:15;36566:49;36381:241;:::o;36628:366::-;36770:3;36791:67;36855:2;36850:3;36791:67;:::i;:::-;36784:74;;36867:93;36956:3;36867:93;:::i;:::-;36985:2;36980:3;36976:12;36969:19;;36628:366;;;:::o;37000:419::-;37166:4;37204:2;37193:9;37189:18;37181:26;;37253:9;37247:4;37243:20;37239:1;37228:9;37224:17;37217:47;37281:131;37407:4;37281:131;:::i;:::-;37273:139;;37000:419;;;:::o;37425:194::-;37465:4;37485:20;37503:1;37485:20;:::i;:::-;37480:25;;37519:20;37537:1;37519:20;:::i;:::-;37514:25;;37563:1;37560;37556:9;37548:17;;37587:1;37581:4;37578:11;37575:37;;;37592:18;;:::i;:::-;37575:37;37425:194;;;;:::o;37625:147::-;37726:11;37763:3;37748:18;;37625:147;;;;:::o;37778:114::-;;:::o;37898:398::-;38057:3;38078:83;38159:1;38154:3;38078:83;:::i;:::-;38071:90;;38170:93;38259:3;38170:93;:::i;:::-;38288:1;38283:3;38279:11;38272:18;;37898:398;;;:::o;38302:379::-;38486:3;38508:147;38651:3;38508:147;:::i;:::-;38501:154;;38672:3;38665:10;;38302:379;;;:::o;38687:220::-;38827:34;38823:1;38815:6;38811:14;38804:58;38896:3;38891:2;38883:6;38879:15;38872:28;38687:220;:::o;38913:366::-;39055:3;39076:67;39140:2;39135:3;39076:67;:::i;:::-;39069:74;;39152:93;39241:3;39152:93;:::i;:::-;39270:2;39265:3;39261:12;39254:19;;38913:366;;;:::o;39285:419::-;39451:4;39489:2;39478:9;39474:18;39466:26;;39538:9;39532:4;39528:20;39524:1;39513:9;39509:17;39502:47;39566:131;39692:4;39566:131;:::i;:::-;39558:139;;39285:419;;;:::o;39710:143::-;39767:5;39798:6;39792:13;39783:22;;39814:33;39841:5;39814:33;:::i;:::-;39710:143;;;;:::o;39859:351::-;39929:6;39978:2;39966:9;39957:7;39953:23;39949:32;39946:119;;;39984:79;;:::i;:::-;39946:119;40104:1;40129:64;40185:7;40176:6;40165:9;40161:22;40129:64;:::i;:::-;40119:74;;40075:128;39859:351;;;;:::o;40216:85::-;40261:7;40290:5;40279:16;;40216:85;;;:::o;40307:158::-;40365:9;40398:61;40416:42;40425:32;40451:5;40425:32;:::i;:::-;40416:42;:::i;:::-;40398:61;:::i;:::-;40385:74;;40307:158;;;:::o;40471:147::-;40566:45;40605:5;40566:45;:::i;:::-;40561:3;40554:58;40471:147;;:::o;40624:114::-;40691:6;40725:5;40719:12;40709:22;;40624:114;;;:::o;40744:184::-;40843:11;40877:6;40872:3;40865:19;40917:4;40912:3;40908:14;40893:29;;40744:184;;;;:::o;40934:132::-;41001:4;41024:3;41016:11;;41054:4;41049:3;41045:14;41037:22;;40934:132;;;:::o;41072:108::-;41149:24;41167:5;41149:24;:::i;:::-;41144:3;41137:37;41072:108;;:::o;41186:179::-;41255:10;41276:46;41318:3;41310:6;41276:46;:::i;:::-;41354:4;41349:3;41345:14;41331:28;;41186:179;;;;:::o;41371:113::-;41441:4;41473;41468:3;41464:14;41456:22;;41371:113;;;:::o;41520:732::-;41639:3;41668:54;41716:5;41668:54;:::i;:::-;41738:86;41817:6;41812:3;41738:86;:::i;:::-;41731:93;;41848:56;41898:5;41848:56;:::i;:::-;41927:7;41958:1;41943:284;41968:6;41965:1;41962:13;41943:284;;;42044:6;42038:13;42071:63;42130:3;42115:13;42071:63;:::i;:::-;42064:70;;42157:60;42210:6;42157:60;:::i;:::-;42147:70;;42003:224;41990:1;41987;41983:9;41978:14;;41943:284;;;41947:14;42243:3;42236:10;;41644:608;;;41520:732;;;;:::o;42258:831::-;42521:4;42559:3;42548:9;42544:19;42536:27;;42573:71;42641:1;42630:9;42626:17;42617:6;42573:71;:::i;:::-;42654:80;42730:2;42719:9;42715:18;42706:6;42654:80;:::i;:::-;42781:9;42775:4;42771:20;42766:2;42755:9;42751:18;42744:48;42809:108;42912:4;42903:6;42809:108;:::i;:::-;42801:116;;42927:72;42995:2;42984:9;42980:18;42971:6;42927:72;:::i;:::-;43009:73;43077:3;43066:9;43062:19;43053:6;43009:73;:::i;:::-;42258:831;;;;;;;;:::o

Swarm Source

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