ETH Price: $3,322.80 (-4.18%)
Gas: 7.87 Gwei

Token

TASUKU (TASUKU)
 

Overview

Max Total Supply

999,999,999,999 TASUKU

Holders

117

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.297 TASUKU

Value
$0.00
0x792271350317e2e5bb168f3755173c7a10706f3d
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:
TASUKU

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-12
*/

//  Tasuku TG : https://t.me/Tasuku_portal

//  Website: https://tasuku.tech/

//  Twitter: Twitter.com/TAsukucoin1

//  Medium: https://link.medium.com/hpDUH8dH3tb

//  Max wallet will be 1%  9 999 999 999
//  max transaction of 0.33%   3 299 999 999

//  Total supply: 999 999 999 999

//  Buy tax : 1%

//  Sell tax. : 2%


// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;

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

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

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(address recipient, uint256 amount) external returns (bool);

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

    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;

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

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

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

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    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) {
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                'ERC20: transfer amount exceeds allowance'
            )
        );
        _transfer(sender, recipient, amount);

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

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

        _beforeTokenTransfer(sender, recipient, amount);

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

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

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

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

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

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

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

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

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

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IAntisnipe {
    function assureCanTransfer(
        address sender,
        address from,
        address to,
        uint256 amount
    ) external;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool private swapping;

    address private marketingWallet;
    address private buybackWallet;

    uint256 private maxTransactionAmount;
    uint256 private swapTokensAtAmount;
    uint256 private maxWallet;

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

    // Anti-bot and anti-whale mappings and variables
    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 private buyTotalFees;
    uint256 private buyMarketingFee;
    uint256 private buyLiquidityFee;
    uint256 private buyBuybackFee;

    uint256 private sellTotalFees;
    uint256 private sellMarketingFee;
    uint256 private sellLiquidityFee;
    uint256 private sellBuybackFee;

    uint256 private tokensForMarketing;
    uint256 private tokensForLiquidity;
    uint256 private tokensForBuyback;

    // block number of opened trading
    uint256 launchedAt;

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

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

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

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    constructor() ERC20('TASUKU', 'TASUKU') {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 1; 
        uint256 _buyLiquidityFee = 0;   
        uint256 _buyBuybackFee = 0;  

        uint256 _sellMarketingFee = 1; 
        uint256 _sellLiquidityFee = 0; 
        uint256 _sellBuybackFee = 1; 

        uint256 totalSupply = 999999999999 * 10**9;

        maxTransactionAmount = (totalSupply * 33) / 10000; // 0.33% maxTransactionAmountTxn
        maxWallet = (totalSupply * 99) / 10000; // 0.99% maxWallet
        swapTokensAtAmount = (totalSupply * 15) / 10000; // 0.15% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyBuybackFee = _buyBuybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuybackFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellBuybackFee = _sellBuybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuybackFee;

        marketingWallet = address(owner()); // set as marketing wallet
        buybackWallet = address(owner()); // set as buyback wallet

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

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

    IAntisnipe public antisnipe;
    bool public antisnipeDisable;

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (from == address(0) || to == address(0)) return;
        if (!antisnipeDisable && address(antisnipe) != address(0))
            antisnipe.assureCanTransfer(msg.sender, from, to, amount);
    }

    function setAntisnipeDisable() external onlyOwner {
        require(!antisnipeDisable);
        antisnipeDisable = true;
    }

    function setAntisnipeAddress(address addr) external onlyOwner {
        antisnipe = IAntisnipe(addr);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.number;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            'Swap amount cannot be lower than 0.001% total supply.'
        );
        require(
            newAmount <= (totalSupply() * 99) / 1000,
            'Swap amount cannot be higher than 0.99% total supply.'
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000),
            'Cannot set maxTransactionAmount lower than 0.1%'
        );
        maxTransactionAmount = newNum;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 99) / 1000),
            'Cannot set maxWallet lower than 0.99%'
        );
        maxWallet = newNum;
    }

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

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

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _buybackFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyBuybackFee = _buybackFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyBuybackFee;
        require(buyTotalFees <= 2, 'Must keep fees at 2% or less');
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _buybackFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellBuybackFee = _buybackFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellBuybackFee;
        require(sellTotalFees <= 3, 'Must keep fees at 3% or less');
    }

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

    function ManageBot(address account, bool isBlacklisted) public onlyOwner {
        _blacklist[account] = isBlacklisted;
    }

    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 updateBuybackWallet(address newWallet) external onlyOwner {
        emit buybackWalletUpdated(newWallet, buybackWallet);
        buybackWallet = 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.'
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] < block.number,
                            '_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.'
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForBuyback += (fees * sellBuybackFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForBuyback += (fees * buyBuybackFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForBuyback = ethBalance.mul(tokensForBuyback).div(totalTokensToSwap);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForBuyback;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForBuyback = 0;

        (success, ) = address(buybackWallet).call{value: ethForBuyback}('');

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":[{"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":"buybackWalletUpdated","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":"account","type":"address"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"ManageBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"name":"antisnipe","outputs":[{"internalType":"contract IAntisnipe","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antisnipeDisable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setAntisnipeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAntisnipeDisable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"_buybackFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateBuybackWallet","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":"_buybackFee","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600681526020017f544153554b5500000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f544153554b55000000000000000000000000000000000000000000000000000081525081600390805190602001906200010292919062000d31565b5080600490805190602001906200011b92919062000d31565b5050506000620001306200067d60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001fb8160016200068560201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027657600080fd5b505afa1580156200028b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b1919062000e4b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200031457600080fd5b505afa15801562000329573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034f919062000e4b565b6040518363ffffffff1660e01b81526004016200036e92919062000e8e565b602060405180830381600087803b1580156200038957600080fd5b505af11580156200039e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c4919062000e4b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200040c60a05160016200068560201b60201c565b6200042160a05160016200078260201b60201c565b600060019050600080600060019050600080600190506000683635c9adc5a3053600905061271060218262000457919062000ef4565b62000463919062000f84565b6008819055506127106063826200047b919062000ef4565b62000487919062000f84565b600a81905550612710600f826200049f919062000ef4565b620004ab919062000f84565b600981905550866011819055508560128190555084601381905550601354601254601154620004db919062000fbc565b620004e7919062000fbc565b60108190555083601581905550826016819055508160178190555060175460165460155462000517919062000fbc565b62000523919062000fbc565b601481905550620005396200082360201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005896200082360201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005eb620005dd6200082360201b60201c565b60016200084d60201b60201c565b620005fe3060016200084d60201b60201c565b6200061361dead60016200084d60201b60201c565b62000635620006276200082360201b60201c565b60016200068560201b60201c565b620006483060016200068560201b60201c565b6200065d61dead60016200068560201b60201c565b6200066f33826200099a60201b60201c565b50505050505050506200129a565b600033905090565b620006956200067d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000727576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071e906200107a565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200085d6200067d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e6906200107a565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200098e9190620010b9565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a049062001126565b60405180910390fd5b62000a216000838362000b4960201b60201c565b62000a3d8160025462000cce60201b620023ef1790919060201c565b60028190555062000a9b816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000cce60201b620023ef1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b3d919062001159565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148062000bb15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b1562000bbd5762000cc9565b601f60149054906101000a900460ff1615801562000c2a5750600073ffffffffffffffffffffffffffffffffffffffff16601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b1562000cc857601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d37a8dd338585856040518563ffffffff1660e01b815260040162000c93949392919062001176565b600060405180830381600087803b15801562000cae57600080fd5b505af115801562000cc3573d6000803e3d6000fd5b505050505b5b505050565b600080828462000cdf919062000fbc565b90508381101562000d27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d1e9062001213565b60405180910390fd5b8091505092915050565b82805462000d3f9062001264565b90600052602060002090601f01602090048101928262000d63576000855562000daf565b82601f1062000d7e57805160ff191683800117855562000daf565b8280016001018555821562000daf579182015b8281111562000dae57825182559160200191906001019062000d91565b5b50905062000dbe919062000dc2565b5090565b5b8082111562000ddd57600081600090555060010162000dc3565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e138262000de6565b9050919050565b62000e258162000e06565b811462000e3157600080fd5b50565b60008151905062000e458162000e1a565b92915050565b60006020828403121562000e645762000e6362000de1565b5b600062000e748482850162000e34565b91505092915050565b62000e888162000e06565b82525050565b600060408201905062000ea5600083018562000e7d565b62000eb4602083018462000e7d565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f018262000ebb565b915062000f0e8362000ebb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f4a5762000f4962000ec5565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000f918262000ebb565b915062000f9e8362000ebb565b92508262000fb15762000fb062000f55565b5b828204905092915050565b600062000fc98262000ebb565b915062000fd68362000ebb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200100e576200100d62000ec5565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200106260208362001019565b91506200106f826200102a565b602082019050919050565b60006020820190508181036000830152620010958162001053565b9050919050565b60008115159050919050565b620010b3816200109c565b82525050565b6000602082019050620010d06000830184620010a8565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200110e601f8362001019565b91506200111b82620010d6565b602082019050919050565b600060208201905081810360008301526200114181620010ff565b9050919050565b620011538162000ebb565b82525050565b600060208201905062001170600083018462001148565b92915050565b60006080820190506200118d600083018762000e7d565b6200119c602083018662000e7d565b620011ab604083018562000e7d565b620011ba606083018462001148565b95945050505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000620011fb601b8362001019565b91506200120882620011c3565b602082019050919050565b600060208201905081810360008301526200122e81620011ec565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200127d57607f821691505b6020821081141562001294576200129362001235565b5b50919050565b60805160a051615792620012ff60003960008181610e63015281816118f501528181612b1f0152612f3f015260008181610b9c01528181612ac701528181613e5c01528181613f4c01528181613f730152818161400f015261403601526157926000f3fe60806040526004361061023f5760003560e01c806384a7bf831161012e578063b62496f5116100ab578063d257b34f1161006f578063d257b34f1461087a578063dd62ed3e146108b7578063e1e144de146108f4578063e884f2601461091f578063f2fde38b1461094a57610246565b8063b62496f514610797578063c0246668146107d4578063c17b5b8c146107fd578063c18bc19514610826578063c876d0b91461084f57610246565b806395d89b41116100f257806395d89b41146106a05780639a7a23d6146106cb578063a457c2d7146106f4578063a9059cbb14610731578063aacebbe31461076e57610246565b806384a7bf83146105e1578063882cfb3f1461060a5780638a8c523c146106355780638da5cb5b1461064c578063924de9b71461067757610246565b806349bd5a5e116101bc578063715018a611610180578063715018a61461053657806374fb20e11461054d578063751039fc146105645780637571336a1461058f5780638095d564146105b857610246565b806349bd5a5e1461043d5780634fbee19314610468578063611bf629146104a55780636ddd1713146104ce57806370a08231146104f957610246565b806318160ddd1161020357806318160ddd14610344578063203e727e1461036f57806323b872dd14610398578063313ce567146103d5578063395093511461040057610246565b806304dacd501461024b57806306fdde0314610274578063095ea7b31461029f57806310d5de53146102dc5780631694505e1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906141da565b610973565b005b34801561028057600080fd5b50610289610aca565b60405161029691906142a0565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906142f8565b610b5c565b6040516102d39190614353565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906141da565b610b7a565b6040516103109190614353565b60405180910390f35b34801561032557600080fd5b5061032e610b9a565b60405161033b91906143cd565b60405180910390f35b34801561035057600080fd5b50610359610bbe565b60405161036691906143f7565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190614412565b610bc8565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061443f565b610ccc565b6040516103cc9190614353565b60405180910390f35b3480156103e157600080fd5b506103ea610da5565b6040516103f791906144ae565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906142f8565b610dae565b6040516104349190614353565b60405180910390f35b34801561044957600080fd5b50610452610e61565b60405161045f91906144d8565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906141da565b610e85565b60405161049c9190614353565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c791906141da565b610edb565b005b3480156104da57600080fd5b506104e3610fb6565b6040516104f09190614353565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b91906141da565b610fc9565b60405161052d91906143f7565b60405180910390f35b34801561054257600080fd5b5061054b611011565b005b34801561055957600080fd5b50610562611169565b005b34801561057057600080fd5b50610579611237565b6040516105869190614353565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061451f565b6112f2565b005b3480156105c457600080fd5b506105df60048036038101906105da919061455f565b6113e4565b005b3480156105ed57600080fd5b506106086004803603810190610603919061451f565b6114fe565b005b34801561061657600080fd5b5061061f6115f0565b60405161062c91906145d3565b60405180910390f35b34801561064157600080fd5b5061064a611616565b005b34801561065857600080fd5b506106616116ec565b60405161066e91906144d8565b60405180910390f35b34801561068357600080fd5b5061069e600480360381019061069991906145ee565b611716565b005b3480156106ac57600080fd5b506106b56117ca565b6040516106c291906142a0565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed919061451f565b61185c565b005b34801561070057600080fd5b5061071b600480360381019061071691906142f8565b611990565b6040516107289190614353565b60405180910390f35b34801561073d57600080fd5b50610758600480360381019061075391906142f8565b611a5d565b6040516107659190614353565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906141da565b611a7b565b005b3480156107a357600080fd5b506107be60048036038101906107b991906141da565b611bd2565b6040516107cb9190614353565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061451f565b611bf2565b005b34801561080957600080fd5b50610824600480360381019061081f919061455f565b611d32565b005b34801561083257600080fd5b5061084d60048036038101906108489190614412565b611e4c565b005b34801561085b57600080fd5b50610864611f50565b6040516108719190614353565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c9190614412565b611f63565b6040516108ae9190614353565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d9919061461b565b6120d3565b6040516108eb91906143f7565b60405180910390f35b34801561090057600080fd5b5061090961215a565b6040516109169190614353565b60405180910390f35b34801561092b57600080fd5b5061093461216d565b6040516109419190614353565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906141da565b612228565b005b61097b61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906146a7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2a4d8391610d71471dbbe59ddff7a3d253d2ec399b14d78219a7c881351fd8bf60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ad9906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b05906146f6565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b6000610b70610b6961244d565b8484612455565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610bd061244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906146a7565b60405180910390fd5b6103e86001610c6c610bbe565b610c769190614757565b610c8091906147e0565b811015610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990614883565b60405180910390fd5b8060088190555050565b6000610d8f84610cda61244d565b610d8a8560405180606001604052806028815260200161571060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d4061244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b612455565b610d9a848484612684565b600190509392505050565b60006009905090565b6000610e57610dbb61244d565b84610e528560016000610dcc61244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123ef90919063ffffffff16565b612455565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ee361244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906146a7565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61101961244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906146a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61117161244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f7906146a7565b60405180910390fd5b601f60149054906101000a900460ff161561121a57600080fd5b6001601f60146101000a81548160ff021916908315150217905550565b600061124161244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c7906146a7565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112fa61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906146a7565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113ec61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611472906146a7565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546114a391906148a3565b6114ad91906148a3565b601081905550600260105411156114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090614945565b60405180910390fd5b505050565b61150661244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906146a7565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61161e61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a4906146a7565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171e61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906146a7565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546117d9906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611805906146f6565b80156118525780601f1061182757610100808354040283529160200191611852565b820191906000526020600020905b81548152906001019060200180831161183557829003601f168201915b5050505050905090565b61186461244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea906146a7565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611979906149d7565b60405180910390fd5b61198c8282613515565b5050565b6000611a5361199d61244d565b84611a4e8560405180606001604052806025815260200161573860259139600160006119c761244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b612455565b6001905092915050565b6000611a71611a6a61244d565b8484612684565b6001905092915050565b611a8361244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906146a7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b611bfa61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906146a7565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d269190614353565b60405180910390a25050565b611d3a61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906146a7565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611df191906148a3565b611dfb91906148a3565b60148190555060036014541115611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90614a43565b60405180910390fd5b505050565b611e5461244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906146a7565b60405180910390fd5b6103e86063611ef0610bbe565b611efa9190614757565b611f0491906147e0565b811015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90614ad5565b60405180910390fd5b80600a8190555050565b600f60009054906101000a900460ff1681565b6000611f6d61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff3906146a7565b60405180910390fd5b620186a0600161200a610bbe565b6120149190614757565b61201e91906147e0565b821015612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790614b67565b60405180910390fd5b6103e8606361206d610bbe565b6120779190614757565b61208191906147e0565b8211156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba90614bf9565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601f60149054906101000a900460ff1681565b600061217761244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906146a7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b61223061244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b6906146a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690614c8b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846123fe91906148a3565b905083811015612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614cf7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614d89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614e1b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261391906143f7565b60405180910390a3505050565b6000838311158290612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f91906142a0565b60405180910390fd5b50600083856126779190614e3b565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90614ee1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b90614f73565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128085750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e90615005565b60405180910390fd5b60008114156128615761285c838360006135b6565b613510565b600b60009054906101000a900460ff1615612f245761287e6116ec565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ec57506128bc6116ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129255750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600560149054906101000a900460ff16155b15612f2357600b60019054906101000a900460ff16612a7257601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a325750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6890615071565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3a57612a8f6116ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1657507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c395743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb90615129565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cdd5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8457600854811115612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e906151bb565b60405180910390fd5b600a54612d3383610fc9565b82612d3e91906148a3565b1115612d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7690615227565b60405180910390fd5b612f22565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e275750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7657600854811115612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e68906152b9565b60405180910390fd5b612f21565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2057600a54612ed383610fc9565b82612ede91906148a3565b1115612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1690615227565b60405180910390fd5b5b5b5b5b5b6001601b54612f3391906148a3565b4311158015612f8e57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fda5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613038576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061304330610fc9565b9050600060095482101590508080156130685750600b60029054906101000a900460ff165b80156130815750600560149054906101000a900460ff16155b80156130d75750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561312d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131835750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131c7576001600560146101000a81548160ff0219169083151502179055506131ab61384b565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061327d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328757600090505b6000811561350057601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132ea57506000601454115b156133b757613317606461330960145488613b3290919063ffffffff16565b613bad90919063ffffffff16565b90506014546016548261332a9190614757565b61333491906147e0565b6019600082825461334591906148a3565b925050819055506014546017548261335d9190614757565b61336791906147e0565b601a600082825461337891906148a3565b92505081905550601454601554826133909190614757565b61339a91906147e0565b601860008282546133ab91906148a3565b925050819055506134dc565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561341257506000601054115b156134db5761343f606461343160105488613b3290919063ffffffff16565b613bad90919063ffffffff16565b9050601054601254826134529190614757565b61345c91906147e0565b6019600082825461346d91906148a3565b92505081905550601054601354826134859190614757565b61348f91906147e0565b601a60008282546134a091906148a3565b92505081905550601054601154826134b89190614757565b6134c291906147e0565b601860008282546134d391906148a3565b925050819055505b5b60008111156134f1576134f08730836135b6565b5b80856134fd9190614e3b565b94505b61350b8787876135b6565b505050505b505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361d90614ee1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d90614f73565b60405180910390fd5b6136a1838383613bf7565b61370c816040518060600160405280602681526020016156ea602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123ef90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161383e91906143f7565b60405180910390a3505050565b600061385630610fc9565b90506000601a5460185460195461386d91906148a3565b61387791906148a3565b90506000808314806138895750600082145b1561389657505050613b30565b60146009546138a59190614757565b8311156138be5760146009546138bb9190614757565b92505b6000600283601954866138d19190614757565b6138db91906147e0565b6138e591906147e0565b905060006138fc8286613d7390919063ffffffff16565b9050600047905061390c82613dbd565b60006139218247613d7390919063ffffffff16565b9050600061394c8761393e60185485613b3290919063ffffffff16565b613bad90919063ffffffff16565b9050600061397788613969601a5486613b3290919063ffffffff16565b613bad90919063ffffffff16565b905060008183856139889190614e3b565b6139929190614e3b565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139f29061530a565b60006040518083038185875af1925050503d8060008114613a2f576040519150601f19603f3d011682016040523d82523d6000602084013e613a34565b606091505b505080985050600087118015613a4a5750600081115b15613a9757613a598782614009565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613a8e9392919061531f565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613add9061530a565b60006040518083038185875af1925050503d8060008114613b1a576040519150601f19603f3d011682016040523d82523d6000602084013e613b1f565b606091505b505080985050505050505050505050505b565b600080831415613b455760009050613ba7565b60008284613b539190614757565b9050828482613b6291906147e0565b14613ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b99906153c8565b60405180910390fd5b809150505b92915050565b6000613bef83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614114565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480613c5e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15613c6857613d6e565b601f60149054906101000a900460ff16158015613cd45750600073ffffffffffffffffffffffffffffffffffffffff16601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613d6d57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d37a8dd338585856040518563ffffffff1660e01b8152600401613d3a94939291906153e8565b600060405180830381600087803b158015613d5457600080fd5b505af1158015613d68573d6000803e3d6000fd5b505050505b5b505050565b6000613db583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612620565b905092915050565b6000600267ffffffffffffffff811115613dda57613dd961542d565b5b604051908082528060200260200182016040528015613e085781602001602082028036833780820191505090505b5090503081600081518110613e2057613e1f61545c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ec057600080fd5b505afa158015613ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef891906154a0565b81600181518110613f0c57613f0b61545c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f71307f000000000000000000000000000000000000000000000000000000000000000084612455565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fd39594939291906155c6565b600060405180830381600087803b158015613fed57600080fd5b505af1158015614001573d6000803e3d6000fd5b505050505050565b614034307f000000000000000000000000000000000000000000000000000000000000000084612455565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016140bb96959493929190615620565b6060604051808303818588803b1580156140d457600080fd5b505af11580156140e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061410d9190615696565b5050505050565b6000808311829061415b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161415291906142a0565b60405180910390fd5b506000838561416a91906147e0565b9050809150509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141a78261417c565b9050919050565b6141b78161419c565b81146141c257600080fd5b50565b6000813590506141d4816141ae565b92915050565b6000602082840312156141f0576141ef614177565b5b60006141fe848285016141c5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614241578082015181840152602081019050614226565b83811115614250576000848401525b50505050565b6000601f19601f8301169050919050565b600061427282614207565b61427c8185614212565b935061428c818560208601614223565b61429581614256565b840191505092915050565b600060208201905081810360008301526142ba8184614267565b905092915050565b6000819050919050565b6142d5816142c2565b81146142e057600080fd5b50565b6000813590506142f2816142cc565b92915050565b6000806040838503121561430f5761430e614177565b5b600061431d858286016141c5565b925050602061432e858286016142e3565b9150509250929050565b60008115159050919050565b61434d81614338565b82525050565b60006020820190506143686000830184614344565b92915050565b6000819050919050565b600061439361438e6143898461417c565b61436e565b61417c565b9050919050565b60006143a582614378565b9050919050565b60006143b78261439a565b9050919050565b6143c7816143ac565b82525050565b60006020820190506143e260008301846143be565b92915050565b6143f1816142c2565b82525050565b600060208201905061440c60008301846143e8565b92915050565b60006020828403121561442857614427614177565b5b6000614436848285016142e3565b91505092915050565b60008060006060848603121561445857614457614177565b5b6000614466868287016141c5565b9350506020614477868287016141c5565b9250506040614488868287016142e3565b9150509250925092565b600060ff82169050919050565b6144a881614492565b82525050565b60006020820190506144c3600083018461449f565b92915050565b6144d28161419c565b82525050565b60006020820190506144ed60008301846144c9565b92915050565b6144fc81614338565b811461450757600080fd5b50565b600081359050614519816144f3565b92915050565b6000806040838503121561453657614535614177565b5b6000614544858286016141c5565b92505060206145558582860161450a565b9150509250929050565b60008060006060848603121561457857614577614177565b5b6000614586868287016142e3565b9350506020614597868287016142e3565b92505060406145a8868287016142e3565b9150509250925092565b60006145bd8261439a565b9050919050565b6145cd816145b2565b82525050565b60006020820190506145e860008301846145c4565b92915050565b60006020828403121561460457614603614177565b5b60006146128482850161450a565b91505092915050565b6000806040838503121561463257614631614177565b5b6000614640858286016141c5565b9250506020614651858286016141c5565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614691602083614212565b915061469c8261465b565b602082019050919050565b600060208201905081810360008301526146c081614684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470e57607f821691505b60208210811415614722576147216146c7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614762826142c2565b915061476d836142c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147a6576147a5614728565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147eb826142c2565b91506147f6836142c2565b925082614806576148056147b1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061486d602f83614212565b915061487882614811565b604082019050919050565b6000602082019050818103600083015261489c81614860565b9050919050565b60006148ae826142c2565b91506148b9836142c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ee576148ed614728565b5b828201905092915050565b7f4d757374206b6565702066656573206174203225206f72206c65737300000000600082015250565b600061492f601c83614212565b915061493a826148f9565b602082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149c1603983614212565b91506149cc82614965565b604082019050919050565b600060208201905081810360008301526149f0816149b4565b9050919050565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b6000614a2d601c83614212565b9150614a38826149f7565b602082019050919050565b60006020820190508181036000830152614a5c81614a20565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e393925000000000000000000000000000000000000000000000000000000602082015250565b6000614abf602583614212565b9150614aca82614a63565b604082019050919050565b60006020820190508181036000830152614aee81614ab2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b51603583614212565b9150614b5c82614af5565b604082019050919050565b60006020820190508181036000830152614b8081614b44565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e39392520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614be3603583614212565b9150614bee82614b87565b604082019050919050565b60006020820190508181036000830152614c1281614bd6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c75602683614212565b9150614c8082614c19565b604082019050919050565b60006020820190508181036000830152614ca481614c68565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ce1601b83614212565b9150614cec82614cab565b602082019050919050565b60006020820190508181036000830152614d1081614cd4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d73602483614212565b9150614d7e82614d17565b604082019050919050565b60006020820190508181036000830152614da281614d66565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e05602283614212565b9150614e1082614da9565b604082019050919050565b60006020820190508181036000830152614e3481614df8565b9050919050565b6000614e46826142c2565b9150614e51836142c2565b925082821015614e6457614e63614728565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ecb602583614212565b9150614ed682614e6f565b604082019050919050565b60006020820190508181036000830152614efa81614ebe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f5d602383614212565b9150614f6882614f01565b604082019050919050565b60006020820190508181036000830152614f8c81614f50565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614fef603183614212565b9150614ffa82614f93565b604082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061505b601683614212565b915061506682615025565b602082019050919050565b6000602082019050818103600083015261508a8161504e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615113604983614212565b915061511e82615091565b606082019050919050565b6000602082019050818103600083015261514281615106565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006151a5603583614212565b91506151b082615149565b604082019050919050565b600060208201905081810360008301526151d481615198565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615211601383614212565b915061521c826151db565b602082019050919050565b6000602082019050818103600083015261524081615204565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006152a3603683614212565b91506152ae82615247565b604082019050919050565b600060208201905081810360008301526152d281615296565b9050919050565b600081905092915050565b50565b60006152f46000836152d9565b91506152ff826152e4565b600082019050919050565b6000615315826152e7565b9150819050919050565b600060608201905061533460008301866143e8565b61534160208301856143e8565b61534e60408301846143e8565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006153b2602183614212565b91506153bd82615356565b604082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b60006080820190506153fd60008301876144c9565b61540a60208301866144c9565b61541760408301856144c9565b61542460608301846143e8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061549a816141ae565b92915050565b6000602082840312156154b6576154b5614177565b5b60006154c48482850161548b565b91505092915050565b6000819050919050565b60006154f26154ed6154e8846154cd565b61436e565b6142c2565b9050919050565b615502816154d7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61553d8161419c565b82525050565b600061554f8383615534565b60208301905092915050565b6000602082019050919050565b600061557382615508565b61557d8185615513565b935061558883615524565b8060005b838110156155b95781516155a08882615543565b97506155ab8361555b565b92505060018101905061558c565b5085935050505092915050565b600060a0820190506155db60008301886143e8565b6155e860208301876154f9565b81810360408301526155fa8186615568565b905061560960608301856144c9565b61561660808301846143e8565b9695505050505050565b600060c08201905061563560008301896144c9565b61564260208301886143e8565b61564f60408301876154f9565b61565c60608301866154f9565b61566960808301856144c9565b61567660a08301846143e8565b979650505050505050565b600081519050615690816142cc565b92915050565b6000806000606084860312156156af576156ae614177565b5b60006156bd86828701615681565b93505060206156ce86828701615681565b92505060406156df86828701615681565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220914caabe5d10d8eee1436f46018ccc8e2c6ef38923c3f1353cbaa966455fb21064736f6c63430008090033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806384a7bf831161012e578063b62496f5116100ab578063d257b34f1161006f578063d257b34f1461087a578063dd62ed3e146108b7578063e1e144de146108f4578063e884f2601461091f578063f2fde38b1461094a57610246565b8063b62496f514610797578063c0246668146107d4578063c17b5b8c146107fd578063c18bc19514610826578063c876d0b91461084f57610246565b806395d89b41116100f257806395d89b41146106a05780639a7a23d6146106cb578063a457c2d7146106f4578063a9059cbb14610731578063aacebbe31461076e57610246565b806384a7bf83146105e1578063882cfb3f1461060a5780638a8c523c146106355780638da5cb5b1461064c578063924de9b71461067757610246565b806349bd5a5e116101bc578063715018a611610180578063715018a61461053657806374fb20e11461054d578063751039fc146105645780637571336a1461058f5780638095d564146105b857610246565b806349bd5a5e1461043d5780634fbee19314610468578063611bf629146104a55780636ddd1713146104ce57806370a08231146104f957610246565b806318160ddd1161020357806318160ddd14610344578063203e727e1461036f57806323b872dd14610398578063313ce567146103d5578063395093511461040057610246565b806304dacd501461024b57806306fdde0314610274578063095ea7b31461029f57806310d5de53146102dc5780631694505e1461031957610246565b3661024657005b600080fd5b34801561025757600080fd5b50610272600480360381019061026d91906141da565b610973565b005b34801561028057600080fd5b50610289610aca565b60405161029691906142a0565b60405180910390f35b3480156102ab57600080fd5b506102c660048036038101906102c191906142f8565b610b5c565b6040516102d39190614353565b60405180910390f35b3480156102e857600080fd5b5061030360048036038101906102fe91906141da565b610b7a565b6040516103109190614353565b60405180910390f35b34801561032557600080fd5b5061032e610b9a565b60405161033b91906143cd565b60405180910390f35b34801561035057600080fd5b50610359610bbe565b60405161036691906143f7565b60405180910390f35b34801561037b57600080fd5b5061039660048036038101906103919190614412565b610bc8565b005b3480156103a457600080fd5b506103bf60048036038101906103ba919061443f565b610ccc565b6040516103cc9190614353565b60405180910390f35b3480156103e157600080fd5b506103ea610da5565b6040516103f791906144ae565b60405180910390f35b34801561040c57600080fd5b50610427600480360381019061042291906142f8565b610dae565b6040516104349190614353565b60405180910390f35b34801561044957600080fd5b50610452610e61565b60405161045f91906144d8565b60405180910390f35b34801561047457600080fd5b5061048f600480360381019061048a91906141da565b610e85565b60405161049c9190614353565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c791906141da565b610edb565b005b3480156104da57600080fd5b506104e3610fb6565b6040516104f09190614353565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b91906141da565b610fc9565b60405161052d91906143f7565b60405180910390f35b34801561054257600080fd5b5061054b611011565b005b34801561055957600080fd5b50610562611169565b005b34801561057057600080fd5b50610579611237565b6040516105869190614353565b60405180910390f35b34801561059b57600080fd5b506105b660048036038101906105b1919061451f565b6112f2565b005b3480156105c457600080fd5b506105df60048036038101906105da919061455f565b6113e4565b005b3480156105ed57600080fd5b506106086004803603810190610603919061451f565b6114fe565b005b34801561061657600080fd5b5061061f6115f0565b60405161062c91906145d3565b60405180910390f35b34801561064157600080fd5b5061064a611616565b005b34801561065857600080fd5b506106616116ec565b60405161066e91906144d8565b60405180910390f35b34801561068357600080fd5b5061069e600480360381019061069991906145ee565b611716565b005b3480156106ac57600080fd5b506106b56117ca565b6040516106c291906142a0565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed919061451f565b61185c565b005b34801561070057600080fd5b5061071b600480360381019061071691906142f8565b611990565b6040516107289190614353565b60405180910390f35b34801561073d57600080fd5b50610758600480360381019061075391906142f8565b611a5d565b6040516107659190614353565b60405180910390f35b34801561077a57600080fd5b50610795600480360381019061079091906141da565b611a7b565b005b3480156107a357600080fd5b506107be60048036038101906107b991906141da565b611bd2565b6040516107cb9190614353565b60405180910390f35b3480156107e057600080fd5b506107fb60048036038101906107f6919061451f565b611bf2565b005b34801561080957600080fd5b50610824600480360381019061081f919061455f565b611d32565b005b34801561083257600080fd5b5061084d60048036038101906108489190614412565b611e4c565b005b34801561085b57600080fd5b50610864611f50565b6040516108719190614353565b60405180910390f35b34801561088657600080fd5b506108a1600480360381019061089c9190614412565b611f63565b6040516108ae9190614353565b60405180910390f35b3480156108c357600080fd5b506108de60048036038101906108d9919061461b565b6120d3565b6040516108eb91906143f7565b60405180910390f35b34801561090057600080fd5b5061090961215a565b6040516109169190614353565b60405180910390f35b34801561092b57600080fd5b5061093461216d565b6040516109419190614353565b60405180910390f35b34801561095657600080fd5b50610971600480360381019061096c91906141da565b612228565b005b61097b61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a01906146a7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2a4d8391610d71471dbbe59ddff7a3d253d2ec399b14d78219a7c881351fd8bf60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606060038054610ad9906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b05906146f6565b8015610b525780601f10610b2757610100808354040283529160200191610b52565b820191906000526020600020905b815481529060010190602001808311610b3557829003601f168201915b5050505050905090565b6000610b70610b6961244d565b8484612455565b6001905092915050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610bd061244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c56906146a7565b60405180910390fd5b6103e86001610c6c610bbe565b610c769190614757565b610c8091906147e0565b811015610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb990614883565b60405180910390fd5b8060088190555050565b6000610d8f84610cda61244d565b610d8a8560405180606001604052806028815260200161571060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d4061244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b612455565b610d9a848484612684565b600190509392505050565b60006009905090565b6000610e57610dbb61244d565b84610e528560016000610dcc61244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123ef90919063ffffffff16565b612455565b6001905092915050565b7f000000000000000000000000a513b789a934c24de25859c7d0a408954839d24281565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610ee361244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906146a7565b60405180910390fd5b80601f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61101961244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109f906146a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b61117161244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f7906146a7565b60405180910390fd5b601f60149054906101000a900460ff161561121a57600080fd5b6001601f60146101000a81548160ff021916908315150217905550565b600061124161244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c7906146a7565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112fa61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906146a7565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113ec61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611472906146a7565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546114a391906148a3565b6114ad91906148a3565b601081905550600260105411156114f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f090614945565b60405180910390fd5b505050565b61150661244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611595576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158c906146a7565b60405180910390fd5b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61161e61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a4906146a7565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601b81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61171e61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906146a7565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546117d9906146f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611805906146f6565b80156118525780601f1061182757610100808354040283529160200191611852565b820191906000526020600020905b81548152906001019060200180831161183557829003601f168201915b5050505050905090565b61186461244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ea906146a7565b60405180910390fd5b7f000000000000000000000000a513b789a934c24de25859c7d0a408954839d24273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611982576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611979906149d7565b60405180910390fd5b61198c8282613515565b5050565b6000611a5361199d61244d565b84611a4e8560405180606001604052806025815260200161573860259139600160006119c761244d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b612455565b6001905092915050565b6000611a71611a6a61244d565b8484612684565b6001905092915050565b611a8361244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b09906146a7565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b611bfa61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c80906146a7565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611d269190614353565b60405180910390a25050565b611d3a61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc0906146a7565b60405180910390fd5b826015819055508160168190555080601781905550601754601654601554611df191906148a3565b611dfb91906148a3565b60148190555060036014541115611e47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e90614a43565b60405180910390fd5b505050565b611e5461244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906146a7565b60405180910390fd5b6103e86063611ef0610bbe565b611efa9190614757565b611f0491906147e0565b811015611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90614ad5565b60405180910390fd5b80600a8190555050565b600f60009054906101000a900460ff1681565b6000611f6d61244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff3906146a7565b60405180910390fd5b620186a0600161200a610bbe565b6120149190614757565b61201e91906147e0565b821015612060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205790614b67565b60405180910390fd5b6103e8606361206d610bbe565b6120779190614757565b61208191906147e0565b8211156120c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ba90614bf9565b60405180910390fd5b8160098190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601f60149054906101000a900460ff1681565b600061217761244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121fd906146a7565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b61223061244d565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b6906146a7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561232f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232690614c8b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008082846123fe91906148a3565b905083811015612443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243a90614cf7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90614d89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252c90614e1b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161261391906143f7565b60405180910390a3505050565b6000838311158290612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f91906142a0565b60405180910390fd5b50600083856126779190614e3b565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126eb90614ee1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612764576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275b90614f73565b60405180910390fd5b600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128085750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612847576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283e90615005565b60405180910390fd5b60008114156128615761285c838360006135b6565b613510565b600b60009054906101000a900460ff1615612f245761287e6116ec565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128ec57506128bc6116ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129255750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561295f575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129785750600560149054906101000a900460ff16155b15612f2357600b60019054906101000a900460ff16612a7257601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612a325750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6890615071565b60405180910390fd5b5b600f60009054906101000a900460ff1615612c3a57612a8f6116ec565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b1657507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b6e57507f000000000000000000000000a513b789a934c24de25859c7d0a408954839d24273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c395743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb90615129565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cdd5750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d8457600854811115612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e906151bb565b60405180910390fd5b600a54612d3383610fc9565b82612d3e91906148a3565b1115612d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7690615227565b60405180910390fd5b612f22565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e275750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7657600854811115612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e68906152b9565b60405180910390fd5b612f21565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612f2057600a54612ed383610fc9565b82612ede91906148a3565b1115612f1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1690615227565b60405180910390fd5b5b5b5b5b5b6001601b54612f3391906148a3565b4311158015612f8e57507f000000000000000000000000a513b789a934c24de25859c7d0a408954839d24273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612fda5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613038576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600061304330610fc9565b9050600060095482101590508080156130685750600b60029054906101000a900460ff165b80156130815750600560149054906101000a900460ff16155b80156130d75750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561312d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131835750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131c7576001600560146101000a81548160ff0219169083151502179055506131ab61384b565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061327d5750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561328757600090505b6000811561350057601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132ea57506000601454115b156133b757613317606461330960145488613b3290919063ffffffff16565b613bad90919063ffffffff16565b90506014546016548261332a9190614757565b61333491906147e0565b6019600082825461334591906148a3565b925050819055506014546017548261335d9190614757565b61336791906147e0565b601a600082825461337891906148a3565b92505081905550601454601554826133909190614757565b61339a91906147e0565b601860008282546133ab91906148a3565b925050819055506134dc565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561341257506000601054115b156134db5761343f606461343160105488613b3290919063ffffffff16565b613bad90919063ffffffff16565b9050601054601254826134529190614757565b61345c91906147e0565b6019600082825461346d91906148a3565b92505081905550601054601354826134859190614757565b61348f91906147e0565b601a60008282546134a091906148a3565b92505081905550601054601154826134b89190614757565b6134c291906147e0565b601860008282546134d391906148a3565b925050819055505b5b60008111156134f1576134f08730836135b6565b5b80856134fd9190614e3b565b94505b61350b8787876135b6565b505050505b505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161361d90614ee1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161368d90614f73565b60405180910390fd5b6136a1838383613bf7565b61370c816040518060600160405280602681526020016156ea602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126209092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061379f816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123ef90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161383e91906143f7565b60405180910390a3505050565b600061385630610fc9565b90506000601a5460185460195461386d91906148a3565b61387791906148a3565b90506000808314806138895750600082145b1561389657505050613b30565b60146009546138a59190614757565b8311156138be5760146009546138bb9190614757565b92505b6000600283601954866138d19190614757565b6138db91906147e0565b6138e591906147e0565b905060006138fc8286613d7390919063ffffffff16565b9050600047905061390c82613dbd565b60006139218247613d7390919063ffffffff16565b9050600061394c8761393e60185485613b3290919063ffffffff16565b613bad90919063ffffffff16565b9050600061397788613969601a5486613b3290919063ffffffff16565b613bad90919063ffffffff16565b905060008183856139889190614e3b565b6139929190614e3b565b9050600060198190555060006018819055506000601a81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139f29061530a565b60006040518083038185875af1925050503d8060008114613a2f576040519150601f19603f3d011682016040523d82523d6000602084013e613a34565b606091505b505080985050600087118015613a4a5750600081115b15613a9757613a598782614009565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613a8e9392919061531f565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613add9061530a565b60006040518083038185875af1925050503d8060008114613b1a576040519150601f19603f3d011682016040523d82523d6000602084013e613b1f565b606091505b505080985050505050505050505050505b565b600080831415613b455760009050613ba7565b60008284613b539190614757565b9050828482613b6291906147e0565b14613ba2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b99906153c8565b60405180910390fd5b809150505b92915050565b6000613bef83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614114565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480613c5e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15613c6857613d6e565b601f60149054906101000a900460ff16158015613cd45750600073ffffffffffffffffffffffffffffffffffffffff16601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613d6d57601f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635d37a8dd338585856040518563ffffffff1660e01b8152600401613d3a94939291906153e8565b600060405180830381600087803b158015613d5457600080fd5b505af1158015613d68573d6000803e3d6000fd5b505050505b5b505050565b6000613db583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612620565b905092915050565b6000600267ffffffffffffffff811115613dda57613dd961542d565b5b604051908082528060200260200182016040528015613e085781602001602082028036833780820191505090505b5090503081600081518110613e2057613e1f61545c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ec057600080fd5b505afa158015613ed4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef891906154a0565b81600181518110613f0c57613f0b61545c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f71307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612455565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fd39594939291906155c6565b600060405180830381600087803b158015613fed57600080fd5b505af1158015614001573d6000803e3d6000fd5b505050505050565b614034307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612455565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016140bb96959493929190615620565b6060604051808303818588803b1580156140d457600080fd5b505af11580156140e8573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061410d9190615696565b5050505050565b6000808311829061415b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161415291906142a0565b60405180910390fd5b506000838561416a91906147e0565b9050809150509392505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141a78261417c565b9050919050565b6141b78161419c565b81146141c257600080fd5b50565b6000813590506141d4816141ae565b92915050565b6000602082840312156141f0576141ef614177565b5b60006141fe848285016141c5565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614241578082015181840152602081019050614226565b83811115614250576000848401525b50505050565b6000601f19601f8301169050919050565b600061427282614207565b61427c8185614212565b935061428c818560208601614223565b61429581614256565b840191505092915050565b600060208201905081810360008301526142ba8184614267565b905092915050565b6000819050919050565b6142d5816142c2565b81146142e057600080fd5b50565b6000813590506142f2816142cc565b92915050565b6000806040838503121561430f5761430e614177565b5b600061431d858286016141c5565b925050602061432e858286016142e3565b9150509250929050565b60008115159050919050565b61434d81614338565b82525050565b60006020820190506143686000830184614344565b92915050565b6000819050919050565b600061439361438e6143898461417c565b61436e565b61417c565b9050919050565b60006143a582614378565b9050919050565b60006143b78261439a565b9050919050565b6143c7816143ac565b82525050565b60006020820190506143e260008301846143be565b92915050565b6143f1816142c2565b82525050565b600060208201905061440c60008301846143e8565b92915050565b60006020828403121561442857614427614177565b5b6000614436848285016142e3565b91505092915050565b60008060006060848603121561445857614457614177565b5b6000614466868287016141c5565b9350506020614477868287016141c5565b9250506040614488868287016142e3565b9150509250925092565b600060ff82169050919050565b6144a881614492565b82525050565b60006020820190506144c3600083018461449f565b92915050565b6144d28161419c565b82525050565b60006020820190506144ed60008301846144c9565b92915050565b6144fc81614338565b811461450757600080fd5b50565b600081359050614519816144f3565b92915050565b6000806040838503121561453657614535614177565b5b6000614544858286016141c5565b92505060206145558582860161450a565b9150509250929050565b60008060006060848603121561457857614577614177565b5b6000614586868287016142e3565b9350506020614597868287016142e3565b92505060406145a8868287016142e3565b9150509250925092565b60006145bd8261439a565b9050919050565b6145cd816145b2565b82525050565b60006020820190506145e860008301846145c4565b92915050565b60006020828403121561460457614603614177565b5b60006146128482850161450a565b91505092915050565b6000806040838503121561463257614631614177565b5b6000614640858286016141c5565b9250506020614651858286016141c5565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614691602083614212565b915061469c8261465b565b602082019050919050565b600060208201905081810360008301526146c081614684565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061470e57607f821691505b60208210811415614722576147216146c7565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614762826142c2565b915061476d836142c2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147a6576147a5614728565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006147eb826142c2565b91506147f6836142c2565b925082614806576148056147b1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b600061486d602f83614212565b915061487882614811565b604082019050919050565b6000602082019050818103600083015261489c81614860565b9050919050565b60006148ae826142c2565b91506148b9836142c2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ee576148ed614728565b5b828201905092915050565b7f4d757374206b6565702066656573206174203225206f72206c65737300000000600082015250565b600061492f601c83614212565b915061493a826148f9565b602082019050919050565b6000602082019050818103600083015261495e81614922565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006149c1603983614212565b91506149cc82614965565b604082019050919050565b600060208201905081810360008301526149f0816149b4565b9050919050565b7f4d757374206b6565702066656573206174203325206f72206c65737300000000600082015250565b6000614a2d601c83614212565b9150614a38826149f7565b602082019050919050565b60006020820190508181036000830152614a5c81614a20565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e393925000000000000000000000000000000000000000000000000000000602082015250565b6000614abf602583614212565b9150614aca82614a63565b604082019050919050565b60006020820190508181036000830152614aee81614ab2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614b51603583614212565b9150614b5c82614af5565b604082019050919050565b60006020820190508181036000830152614b8081614b44565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e39392520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614be3603583614212565b9150614bee82614b87565b604082019050919050565b60006020820190508181036000830152614c1281614bd6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614c75602683614212565b9150614c8082614c19565b604082019050919050565b60006020820190508181036000830152614ca481614c68565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ce1601b83614212565b9150614cec82614cab565b602082019050919050565b60006020820190508181036000830152614d1081614cd4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614d73602483614212565b9150614d7e82614d17565b604082019050919050565b60006020820190508181036000830152614da281614d66565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614e05602283614212565b9150614e1082614da9565b604082019050919050565b60006020820190508181036000830152614e3481614df8565b9050919050565b6000614e46826142c2565b9150614e51836142c2565b925082821015614e6457614e63614728565b5b828203905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ecb602583614212565b9150614ed682614e6f565b604082019050919050565b60006020820190508181036000830152614efa81614ebe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614f5d602383614212565b9150614f6882614f01565b604082019050919050565b60006020820190508181036000830152614f8c81614f50565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000614fef603183614212565b9150614ffa82614f93565b604082019050919050565b6000602082019050818103600083015261501e81614fe2565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061505b601683614212565b915061506682615025565b602082019050919050565b6000602082019050818103600083015261508a8161504e565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615113604983614212565b915061511e82615091565b606082019050919050565b6000602082019050818103600083015261514281615106565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006151a5603583614212565b91506151b082615149565b604082019050919050565b600060208201905081810360008301526151d481615198565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615211601383614212565b915061521c826151db565b602082019050919050565b6000602082019050818103600083015261524081615204565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006152a3603683614212565b91506152ae82615247565b604082019050919050565b600060208201905081810360008301526152d281615296565b9050919050565b600081905092915050565b50565b60006152f46000836152d9565b91506152ff826152e4565b600082019050919050565b6000615315826152e7565b9150819050919050565b600060608201905061533460008301866143e8565b61534160208301856143e8565b61534e60408301846143e8565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006153b2602183614212565b91506153bd82615356565b604082019050919050565b600060208201905081810360008301526153e1816153a5565b9050919050565b60006080820190506153fd60008301876144c9565b61540a60208301866144c9565b61541760408301856144c9565b61542460608301846143e8565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061549a816141ae565b92915050565b6000602082840312156154b6576154b5614177565b5b60006154c48482850161548b565b91505092915050565b6000819050919050565b60006154f26154ed6154e8846154cd565b61436e565b6142c2565b9050919050565b615502816154d7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61553d8161419c565b82525050565b600061554f8383615534565b60208301905092915050565b6000602082019050919050565b600061557382615508565b61557d8185615513565b935061558883615524565b8060005b838110156155b95781516155a08882615543565b97506155ab8361555b565b92505060018101905061558c565b5085935050505092915050565b600060a0820190506155db60008301886143e8565b6155e860208301876154f9565b81810360408301526155fa8186615568565b905061560960608301856144c9565b61561660808301846143e8565b9695505050505050565b600060c08201905061563560008301896144c9565b61564260208301886143e8565b61564f60408301876154f9565b61565c60608301866154f9565b61566960808301856144c9565b61567660a08301846143e8565b979650505050505050565b600081519050615690816142cc565b92915050565b6000806000606084860312156156af576156ae614177565b5b60006156bd86828701615681565b93505060206156ce86828701615681565b92505060406156df86828701615681565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220914caabe5d10d8eee1436f46018ccc8e2c6ef38923c3f1353cbaa966455fb21064736f6c63430008090033

Deployed Bytecode Sourcemap

26387:17430:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35659:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6435:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7439:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27932:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26463:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6755:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32913:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7657:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6655:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8121:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26521:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35840:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31619:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26873:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6871:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18023:148;;;;;;;;;;;;;:::i;:::-;;31482:129;;;;;;;;;;;;;:::i;:::-;;32019:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33426:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33774:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34823:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31070:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31819:148;;;;;;;;;;;;;:::i;:::-;;17381:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33666:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6543:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34958:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8429:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7006:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35443:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28153:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34633:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34199:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33178:240;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27253:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32406:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7230:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31104:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32201:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18326:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35659:173;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35774:13:::1;;;;;;;;;;;35742:46;;35763:9;35742:46;;;;;;;;;;;;35815:9;35799:13;;:25;;;;;;;;;;;;;;;;;;35659:173:::0;:::o;6435:100::-;6489:13;6522:5;6515:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6435:100;:::o;7439:210::-;7558:4;7580:39;7589:12;:10;:12::i;:::-;7603:7;7612:6;7580:8;:39::i;:::-;7637:4;7630:11;;7439:210;;;;:::o;27932:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;26463:51::-;;;:::o;6755:108::-;6816:7;6843:12;;6836:19;;6755:108;:::o;32913:257::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33042:4:::1;33037:1;33021:13;:11;:13::i;:::-;:17;;;;:::i;:::-;33020:26;;;;:::i;:::-;33009:6;:38;;32987:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;33156:6;33133:20;:29;;;;32913:257:::0;:::o;7657:456::-;7797:4;7814:220;7837:6;7858:12;:10;:12::i;:::-;7885:138;7941:6;7885:138;;;;;;;;;;;;;;;;;:11;:19;7897:6;7885:19;;;;;;;;;;;;;;;:33;7905:12;:10;:12::i;:::-;7885:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;7814:8;:220::i;:::-;8045:36;8055:6;8063:9;8074:6;8045:9;:36::i;:::-;8101:4;8094:11;;7657:456;;;;;:::o;6655:92::-;6713:5;6738:1;6731:8;;6655:92;:::o;8121:300::-;8236:4;8258:133;8281:12;:10;:12::i;:::-;8308:7;8330:50;8369:10;8330:11;:25;8342:12;:10;:12::i;:::-;8330:25;;;;;;;;;;;;;;;:34;8356:7;8330:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8258:8;:133::i;:::-;8409:4;8402:11;;8121:300;;;;:::o;26521:38::-;;;:::o;35840:126::-;35906:4;35930:19;:28;35950:7;35930:28;;;;;;;;;;;;;;;;;;;;;;;;;35923:35;;35840:126;;;:::o;31619:109::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31715:4:::1;31692:9;;:28;;;;;;;;;;;;;;;;;;31619:109:::0;:::o;26873:31::-;;;;;;;;;;;;;:::o;6871:127::-;6945:7;6972:9;:18;6982:7;6972:18;;;;;;;;;;;;;;;;6965:25;;6871:127;;;:::o;18023:148::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18130:1:::1;18093:40;;18114:6;;;;;;;;;;;18093:40;;;;;;;;;;;;18161:1;18144:6;;:19;;;;;;;;;;;;;;;;;;18023:148::o:0;31482:129::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31552:16:::1;;;;;;;;;;;31551:17;31543:26;;;::::0;::::1;;31599:4;31580:16;;:23;;;;;;;;;;;;;;;;;;31482:129::o:0;32019:121::-;32071:4;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32105:5:::1;32088:14;;:22;;;;;;;;;;;;;;;;;;32128:4;32121:11;;32019:121:::0;:::o;33426:144::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33558:4:::1;33516:31;:39;33548:6;33516:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33426:144:::0;;:::o;33774:417::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33946:13:::1;33928:15;:31;;;;33988:13;33970:15;:31;;;;34028:11;34012:13;:27;;;;34101:13;;34083:15;;34065;;:33;;;;:::i;:::-;:49;;;;:::i;:::-;34050:12;:64;;;;34149:1;34133:12;;:17;;34125:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33774:417:::0;;;:::o;34823:127::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34929:13:::1;34907:10;:19;34918:7;34907:19;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;34823:127:::0;;:::o;31070:27::-;;;;;;;;;;;;;:::o;31819:148::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31890:4:::1;31874:13;;:20;;;;;;;;;;;;;;;;;;31919:4;31905:11;;:18;;;;;;;;;;;;;;;;;;31947:12;31934:10;:25;;;;31819:148::o:0;17381:79::-;17419:7;17446:6;;;;;;;;;;;17439:13;;17381:79;:::o;33666:100::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33751:7:::1;33737:11;;:21;;;;;;;;;;;;;;;;;;33666:100:::0;:::o;6543:104::-;6599:13;6632:7;6625:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6543:104;:::o;34958:281::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35079:13:::1;35071:21;;:4;:21;;;;35049:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;35190:41;35219:4;35225:5;35190:28;:41::i;:::-;34958:281:::0;;:::o;8429:400::-;8549:4;8571:228;8594:12;:10;:12::i;:::-;8621:7;8643:145;8700:15;8643:145;;;;;;;;;;;;;;;;;:11;:25;8655:12;:10;:12::i;:::-;8643:25;;;;;;;;;;;;;;;:34;8669:7;8643:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;8571:8;:228::i;:::-;8817:4;8810:11;;8429:400;;;;:::o;7006:216::-;7128:4;7150:42;7160:12;:10;:12::i;:::-;7174:9;7185:6;7150:9;:42::i;:::-;7210:4;7203:11;;7006:216;;;;:::o;35443:208::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35580:15:::1;;;;;;;;;;;35537:59;;35560:18;35537:59;;;;;;;;;;;;35625:18;35607:15;;:36;;;;;;;;;;;;;;;;;;35443:208:::0;:::o;28153:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;34633:182::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34749:8:::1;34718:19;:28;34738:7;34718:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34789:7;34773:34;;;34798:8;34773:34;;;;;;:::i;:::-;;;;;;;;34633:182:::0;;:::o;34199:426::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34373:13:::1;34354:16;:32;;;;34416:13;34397:16;:32;;;;34457:11;34440:14;:28;;;;34533:14;;34514:16;;34495;;:35;;;;:::i;:::-;:52;;;;:::i;:::-;34479:13;:68;;;;34583:1;34566:13;;:18;;34558:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;34199:426:::0;;;:::o;33178:240::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33311:4:::1;33305:2;33289:13;:11;:13::i;:::-;:18;;;;:::i;:::-;33288:27;;;;:::i;:::-;33277:6;:39;;33255:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;33404:6;33392:9;:18;;;;33178:240:::0;:::o;27253:39::-;;;;;;;;;;;;;:::o;32406:499::-;32514:4;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32593:6:::1;32588:1;32572:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32571:28;;;;:::i;:::-;32558:9;:41;;32536:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32749:4;32743:2;32727:13;:11;:13::i;:::-;:18;;;;:::i;:::-;32726:27;;;;:::i;:::-;32713:9;:40;;32691:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;32866:9;32845:18;:30;;;;32893:4;32886:11;;32406:499:::0;;;:::o;7230:201::-;7364:7;7396:11;:18;7408:5;7396:18;;;;;;;;;;;;;;;:27;7415:7;7396:27;;;;;;;;;;;;;;;;7389:34;;7230:201;;;;:::o;31104:28::-;;;;;;;;;;;;;:::o;32201:135::-;32261:4;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32301:5:::1;32278:20;;:28;;;;;;;;;;;;;;;;;;32324:4;32317:11;;32201:135:::0;:::o;18326:244::-;17603:12;:10;:12::i;:::-;17593:22;;:6;;;;;;;;;;;:22;;;17585:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18435:1:::1;18415:22;;:8;:22;;;;18407:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18525:8;18496:38;;18517:6;;;;;;;;;;;18496:38;;;;;;;;;;;;18554:8;18545:6;;:17;;;;;;;;;;;;;;;;;;18326:244:::0;:::o;12603:181::-;12661:7;12681:9;12697:1;12693;:5;;;;:::i;:::-;12681:17;;12722:1;12717;:6;;12709:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;12775:1;12768:8;;;12603:181;;;;:::o;446:98::-;499:7;526:10;519:17;;446:98;:::o;11820:380::-;11973:1;11956:19;;:5;:19;;;;11948:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12054:1;12035:21;;:7;:21;;;;12027:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12138:6;12108:11;:18;12120:5;12108:18;;;;;;;;;;;;;;;:27;12127:7;12108:27;;;;;;;;;;;;;;;:36;;;;12176:7;12160:32;;12169:5;12160:32;;;12185:6;12160:32;;;;;;:::i;:::-;;;;;;;;11820:380;;;:::o;13231:226::-;13351:7;13384:1;13379;:6;;13387:12;13371:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13411:9;13427:1;13423;:5;;;;:::i;:::-;13411:17;;13448:1;13441:8;;;13231:226;;;;;:::o;36024:4957::-;36172:1;36156:18;;:4;:18;;;;36148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36249:1;36235:16;;:2;:16;;;;36227:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36325:10;:14;36336:2;36325:14;;;;;;;;;;;;;;;;;;;;;;;;;36324:15;:36;;;;;36344:10;:16;36355:4;36344:16;;;;;;;;;;;;;;;;;;;;;;;;;36343:17;36324:36;36302:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;36462:1;36452:6;:11;36448:93;;;36480:28;36496:4;36502:2;36506:1;36480:15;:28::i;:::-;36523:7;;36448:93;36557:14;;;;;;;;;;;36553:2308;;;36618:7;:5;:7::i;:::-;36610:15;;:4;:15;;;;:49;;;;;36652:7;:5;:7::i;:::-;36646:13;;:2;:13;;;;36610:49;:86;;;;;36694:1;36680:16;;:2;:16;;;;36610:86;:128;;;;;36731:6;36717:21;;:2;:21;;;;36610:128;:158;;;;;36760:8;;;;;;;;;;;36759:9;36610:158;36588:2262;;;36808:13;;;;;;;;;;;36803:223;;36880:19;:25;36900:4;36880:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;36909:19;:23;36929:2;36909:23;;;;;;;;;;;;;;;;;;;;;;;;;36880:52;36846:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;36803:223;37182:20;;;;;;;;;;;37178:608;;;37263:7;:5;:7::i;:::-;37257:13;;:2;:13;;;;:72;;;;;37313:15;37299:30;;:2;:30;;;;37257:72;:129;;;;;37372:13;37358:28;;:2;:28;;;;37257:129;37227:540;;;37517:12;37475:28;:39;37504:9;37475:39;;;;;;;;;;;;;;;;:54;37437:225;;;;;;;;;;;;:::i;:::-;;;;;;;;;37731:12;37689:28;:39;37718:9;37689:39;;;;;;;;;;;;;;;:54;;;;37227:540;37178:608;37860:25;:31;37886:4;37860:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;37917:31;:35;37949:2;37917:35;;;;;;;;;;;;;;;;;;;;;;;;;37916:36;37860:92;37834:1001;;;38039:20;;38029:6;:30;;37995:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;38221:9;;38204:13;38214:2;38204:9;:13::i;:::-;38195:6;:22;;;;:::i;:::-;:35;;38187:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37834:1001;;;38352:25;:29;38378:2;38352:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;38407:31;:37;38439:4;38407:37;;;;;;;;;;;;;;;;;;;;;;;;;38406:38;38352:92;38326:509;;;38531:20;;38521:6;:30;;38487:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;38326:509;;;38688:31;:35;38720:2;38688:35;;;;;;;;;;;;;;;;;;;;;;;;;38683:152;;38782:9;;38765:13;38775:2;38765:9;:13::i;:::-;38756:6;:22;;;;:::i;:::-;:35;;38748:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38683:152;38326:509;37834:1001;36588:2262;36553:2308;38948:1;38935:10;;:14;;;;:::i;:::-;38918:12;:32;;:68;;;;;38973:13;38967:19;;:2;:19;;;;38918:68;:142;;;;;39017:42;39003:57;;:2;:57;;;;38918:142;38900:220;;;39104:4;39087:10;:14;39098:2;39087:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38900:220;39132:28;39163:24;39181:4;39163:9;:24::i;:::-;39132:55;;39200:12;39239:18;;39215:20;:42;;39200:57;;39288:7;:35;;;;;39312:11;;;;;;;;;;;39288:35;:61;;;;;39341:8;;;;;;;;;;;39340:9;39288:61;:110;;;;;39367:25;:31;39393:4;39367:31;;;;;;;;;;;;;;;;;;;;;;;;;39366:32;39288:110;:153;;;;;39416:19;:25;39436:4;39416:25;;;;;;;;;;;;;;;;;;;;;;;;;39415:26;39288:153;:194;;;;;39459:19;:23;39479:2;39459:23;;;;;;;;;;;;;;;;;;;;;;;;;39458:24;39288:194;39270:326;;;39520:4;39509:8;;:15;;;;;;;;;;;;;;;;;;39541:10;:8;:10::i;:::-;39579:5;39568:8;;:16;;;;;;;;;;;;;;;;;;39270:326;39608:12;39624:8;;;;;;;;;;;39623:9;39608:24;;39734:19;:25;39754:4;39734:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39763:19;:23;39783:2;39763:23;;;;;;;;;;;;;;;;;;;;;;;;;39734:52;39730:100;;;39813:5;39803:15;;39730:100;39842:12;39947:7;39943:985;;;39999:25;:29;40025:2;39999:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;40048:1;40032:13;;:17;39999:50;39995:784;;;40077:34;40107:3;40077:25;40088:13;;40077:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40070:41;;40180:13;;40160:16;;40153:4;:23;;;;:::i;:::-;40152:41;;;;:::i;:::-;40130:18;;:63;;;;;;;:::i;:::-;;;;;;;;40258:13;;40240:14;;40233:4;:21;;;;:::i;:::-;40232:39;;;;:::i;:::-;40212:16;;:59;;;;;;;:::i;:::-;;;;;;;;40340:13;;40320:16;;40313:4;:23;;;;:::i;:::-;40312:41;;;;:::i;:::-;40290:18;;:63;;;;;;;:::i;:::-;;;;;;;;39995:784;;;40415:25;:31;40441:4;40415:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40465:1;40450:12;;:16;40415:51;40411:368;;;40494:33;40523:3;40494:24;40505:12;;40494:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40487:40;;40595:12;;40576:15;;40569:4;:22;;;;:::i;:::-;40568:39;;;;:::i;:::-;40546:18;;:61;;;;;;;:::i;:::-;;;;;;;;40671:12;;40654:13;;40647:4;:20;;;;:::i;:::-;40646:37;;;;:::i;:::-;40626:16;;:57;;;;;;;:::i;:::-;;;;;;;;40751:12;;40732:15;;40725:4;:22;;;;:::i;:::-;40724:39;;;;:::i;:::-;40702:18;;:61;;;;;;;:::i;:::-;;;;;;;;40411:368;39995:784;40806:1;40799:4;:8;40795:91;;;40828:42;40844:4;40858;40865;40828:15;:42::i;:::-;40795:91;40912:4;40902:14;;;;;:::i;:::-;;;39943:985;40940:33;40956:4;40962:2;40966:6;40940:15;:33::i;:::-;36137:4844;;;;36024:4957;;;;:::o;35247:188::-;35364:5;35330:25;:31;35356:4;35330:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35421:5;35387:40;;35415:4;35387:40;;;;;;;;;;;;35247:188;;:::o;9319:610::-;9477:1;9459:20;;:6;:20;;;;9451:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9561:1;9540:23;;:9;:23;;;;9532:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9616:47;9637:6;9645:9;9656:6;9616:20;:47::i;:::-;9696:108;9732:6;9696:108;;;;;;;;;;;;;;;;;:9;:17;9706:6;9696:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;9676:9;:17;9686:6;9676:17;;;;;;;;;;;;;;;:128;;;;9838:32;9863:6;9838:9;:20;9848:9;9838:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9815:9;:20;9825:9;9815:20;;;;;;;;;;;;;;;:55;;;;9903:9;9886:35;;9895:6;9886:35;;;9914:6;9886:35;;;;;;:::i;:::-;;;;;;;;9319:610;;;:::o;42122:1692::-;42161:23;42187:24;42205:4;42187:9;:24::i;:::-;42161:50;;42222:25;42318:16;;42284:18;;42250;;:52;;;;:::i;:::-;:84;;;;:::i;:::-;42222:112;;42345:12;42393:1;42374:15;:20;:46;;;;42419:1;42398:17;:22;42374:46;42370:85;;;42437:7;;;;;42370:85;42510:2;42489:18;;:23;;;;:::i;:::-;42471:15;:41;42467:115;;;42568:2;42547:18;;:23;;;;:::i;:::-;42529:41;;42467:115;42643:23;42756:1;42723:17;42688:18;;42670:15;:36;;;;:::i;:::-;42669:71;;;;:::i;:::-;:88;;;;:::i;:::-;42643:114;;42768:26;42797:36;42817:15;42797;:19;;:36;;;;:::i;:::-;42768:65;;42846:25;42874:21;42846:49;;42908:36;42925:18;42908:16;:36::i;:::-;42957:18;42978:44;43004:17;42978:21;:25;;:44;;;;:::i;:::-;42957:65;;43035:23;43061:81;43114:17;43061:34;43076:18;;43061:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;43035:107;;43153:21;43177:55;43214:17;43177:32;43192:16;;43177:10;:14;;:32;;;;:::i;:::-;:36;;:55;;;;:::i;:::-;43153:79;;43243:23;43300:13;43282:15;43269:10;:28;;;;:::i;:::-;:44;;;;:::i;:::-;43243:70;;43347:1;43326:18;:22;;;;43380:1;43359:18;:22;;;;43411:1;43392:16;:20;;;;43447:13;;;;;;;;;;;43439:27;;43474:13;43439:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43425:67;;;;;43527:1;43509:15;:19;:42;;;;;43550:1;43532:15;:19;43509:42;43505:212;;;43568:46;43581:15;43598;43568:12;:46::i;:::-;43634:71;43649:18;43669:15;43686:18;;43634:71;;;;;;;;:::i;:::-;;;;;;;;43505:212;43751:15;;;;;;;;;;;43743:29;;43780:21;43743:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43729:77;;;;;42150:1664;;;;;;;;;;42122:1692;:::o;13716:471::-;13774:7;14024:1;14019;:6;14015:47;;;14049:1;14042:8;;;;14015:47;14074:9;14090:1;14086;:5;;;;:::i;:::-;14074:17;;14119:1;14114;14110;:5;;;;:::i;:::-;:10;14102:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;14178:1;14171:8;;;13716:471;;;;;:::o;14663:132::-;14721:7;14748:39;14752:1;14755;14748:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;14741:46;;14663:132;;;;:::o;31141:333::-;31296:1;31280:18;;:4;:18;;;:38;;;;31316:1;31302:16;;:2;:16;;;31280:38;31276:51;;;31320:7;;31276:51;31342:16;;;;;;;;;;;31341:17;:53;;;;;31392:1;31362:32;;31370:9;;;;;;;;;;;31362:32;;;;31341:53;31337:129;;;31409:9;;;;;;;;;;;:27;;;31437:10;31449:4;31455:2;31459:6;31409:57;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31337:129;31141:333;;;;:::o;12792:136::-;12850:7;12877:43;12881:1;12884;12877:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;12870:50;;12792:136;;;;:::o;40989:589::-;41115:21;41153:1;41139:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41115:40;;41184:4;41166;41171:1;41166:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41210:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41200:4;41205:1;41200:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41245:62;41262:4;41277:15;41295:11;41245:8;:62::i;:::-;41346:15;:66;;;41427:11;41453:1;41497:4;41524;41544:15;41346:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41044:534;40989:589;:::o;41586:528::-;41734:62;41751:4;41766:15;41784:11;41734:8;:62::i;:::-;41839:15;:31;;;41878:9;41911:4;41931:11;41957:1;42000;42051:13;;;;;;;;;;;42080:15;41839:267;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41586:528;;:::o;15291:312::-;15411:7;15443:1;15439;:5;15446:12;15431:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15470:9;15486:1;15482;:5;;;;:::i;:::-;15470:17;;15594:1;15587:8;;;15291:312;;;;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:99::-;1228:6;1262:5;1256:12;1246:22;;1176:99;;;:::o;1281:169::-;1365:11;1399:6;1394:3;1387:19;1439:4;1434:3;1430:14;1415:29;;1281:169;;;;:::o;1456:307::-;1524:1;1534:113;1548:6;1545:1;1542:13;1534:113;;;1633:1;1628:3;1624:11;1618:18;1614:1;1609:3;1605:11;1598:39;1570:2;1567:1;1563:10;1558:15;;1534:113;;;1665:6;1662:1;1659:13;1656:101;;;1745:1;1736:6;1731:3;1727:16;1720:27;1656:101;1505:258;1456:307;;;:::o;1769:102::-;1810:6;1861:2;1857:7;1852:2;1845:5;1841:14;1837:28;1827:38;;1769:102;;;:::o;1877:364::-;1965:3;1993:39;2026:5;1993:39;:::i;:::-;2048:71;2112:6;2107:3;2048:71;:::i;:::-;2041:78;;2128:52;2173:6;2168:3;2161:4;2154:5;2150:16;2128:52;:::i;:::-;2205:29;2227:6;2205:29;:::i;:::-;2200:3;2196:39;2189:46;;1969:272;1877:364;;;;:::o;2247:313::-;2360:4;2398:2;2387:9;2383:18;2375:26;;2447:9;2441:4;2437:20;2433:1;2422:9;2418:17;2411:47;2475:78;2548:4;2539:6;2475:78;:::i;:::-;2467:86;;2247:313;;;;:::o;2566:77::-;2603:7;2632:5;2621:16;;2566:77;;;:::o;2649:122::-;2722:24;2740:5;2722:24;:::i;:::-;2715:5;2712:35;2702:63;;2761:1;2758;2751:12;2702:63;2649:122;:::o;2777:139::-;2823:5;2861:6;2848:20;2839:29;;2877:33;2904:5;2877:33;:::i;:::-;2777:139;;;;:::o;2922:474::-;2990:6;2998;3047:2;3035:9;3026:7;3022:23;3018:32;3015:119;;;3053:79;;:::i;:::-;3015:119;3173:1;3198:53;3243:7;3234:6;3223:9;3219:22;3198:53;:::i;:::-;3188:63;;3144:117;3300:2;3326:53;3371:7;3362:6;3351:9;3347:22;3326:53;:::i;:::-;3316:63;;3271:118;2922:474;;;;;:::o;3402:90::-;3436:7;3479:5;3472:13;3465:21;3454:32;;3402:90;;;:::o;3498:109::-;3579:21;3594:5;3579:21;:::i;:::-;3574:3;3567:34;3498:109;;:::o;3613:210::-;3700:4;3738:2;3727:9;3723:18;3715:26;;3751:65;3813:1;3802:9;3798:17;3789:6;3751:65;:::i;:::-;3613:210;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:145::-;8330:9;8363:37;8394:5;8363:37;:::i;:::-;8350:50;;8261:145;;;:::o;8412:169::-;8518:56;8568:5;8518:56;:::i;:::-;8513:3;8506:69;8412:169;;:::o;8587:260::-;8699:4;8737:2;8726:9;8722:18;8714:26;;8750:90;8837:1;8826:9;8822:17;8813:6;8750:90;:::i;:::-;8587:260;;;;:::o;8853:323::-;8909:6;8958:2;8946:9;8937:7;8933:23;8929:32;8926:119;;;8964:79;;:::i;:::-;8926:119;9084:1;9109:50;9151:7;9142:6;9131:9;9127:22;9109:50;:::i;:::-;9099:60;;9055:114;8853:323;;;;:::o;9182:474::-;9250:6;9258;9307:2;9295:9;9286:7;9282:23;9278:32;9275:119;;;9313:79;;:::i;:::-;9275:119;9433:1;9458:53;9503:7;9494:6;9483:9;9479:22;9458:53;:::i;:::-;9448:63;;9404:117;9560:2;9586:53;9631:7;9622:6;9611:9;9607:22;9586:53;:::i;:::-;9576:63;;9531:118;9182:474;;;;;:::o;9662:182::-;9802:34;9798:1;9790:6;9786:14;9779:58;9662:182;:::o;9850:366::-;9992:3;10013:67;10077:2;10072:3;10013:67;:::i;:::-;10006:74;;10089:93;10178:3;10089:93;:::i;:::-;10207:2;10202:3;10198:12;10191:19;;9850:366;;;:::o;10222:419::-;10388:4;10426:2;10415:9;10411:18;10403:26;;10475:9;10469:4;10465:20;10461:1;10450:9;10446:17;10439:47;10503:131;10629:4;10503:131;:::i;:::-;10495:139;;10222:419;;;:::o;10647:180::-;10695:77;10692:1;10685:88;10792:4;10789:1;10782:15;10816:4;10813:1;10806:15;10833:320;10877:6;10914:1;10908:4;10904:12;10894:22;;10961:1;10955:4;10951:12;10982:18;10972:81;;11038:4;11030:6;11026:17;11016:27;;10972:81;11100:2;11092:6;11089:14;11069:18;11066:38;11063:84;;;11119:18;;:::i;:::-;11063:84;10884:269;10833:320;;;:::o;11159:180::-;11207:77;11204:1;11197:88;11304:4;11301:1;11294:15;11328:4;11325:1;11318:15;11345:348;11385:7;11408:20;11426:1;11408:20;:::i;:::-;11403:25;;11442:20;11460:1;11442:20;:::i;:::-;11437:25;;11630:1;11562:66;11558:74;11555:1;11552:81;11547:1;11540:9;11533:17;11529:105;11526:131;;;11637:18;;:::i;:::-;11526:131;11685:1;11682;11678:9;11667:20;;11345:348;;;;:::o;11699:180::-;11747:77;11744:1;11737:88;11844:4;11841:1;11834:15;11868:4;11865:1;11858:15;11885:185;11925:1;11942:20;11960:1;11942:20;:::i;:::-;11937:25;;11976:20;11994:1;11976:20;:::i;:::-;11971:25;;12015:1;12005:35;;12020:18;;:::i;:::-;12005:35;12062:1;12059;12055:9;12050:14;;11885:185;;;;:::o;12076:234::-;12216:34;12212:1;12204:6;12200:14;12193:58;12285:17;12280:2;12272:6;12268:15;12261:42;12076:234;:::o;12316:366::-;12458:3;12479:67;12543:2;12538:3;12479:67;:::i;:::-;12472:74;;12555:93;12644:3;12555:93;:::i;:::-;12673:2;12668:3;12664:12;12657:19;;12316:366;;;:::o;12688:419::-;12854:4;12892:2;12881:9;12877:18;12869:26;;12941:9;12935:4;12931:20;12927:1;12916:9;12912:17;12905:47;12969:131;13095:4;12969:131;:::i;:::-;12961:139;;12688:419;;;:::o;13113:305::-;13153:3;13172:20;13190:1;13172:20;:::i;:::-;13167:25;;13206:20;13224:1;13206:20;:::i;:::-;13201:25;;13360:1;13292:66;13288:74;13285:1;13282:81;13279:107;;;13366:18;;:::i;:::-;13279:107;13410:1;13407;13403:9;13396:16;;13113:305;;;;:::o;13424:178::-;13564:30;13560:1;13552:6;13548:14;13541:54;13424:178;:::o;13608:366::-;13750:3;13771:67;13835:2;13830:3;13771:67;:::i;:::-;13764:74;;13847:93;13936:3;13847:93;:::i;:::-;13965:2;13960:3;13956:12;13949:19;;13608:366;;;:::o;13980:419::-;14146:4;14184:2;14173:9;14169:18;14161:26;;14233:9;14227:4;14223:20;14219:1;14208:9;14204:17;14197:47;14261:131;14387:4;14261:131;:::i;:::-;14253:139;;13980:419;;;:::o;14405:244::-;14545:34;14541:1;14533:6;14529:14;14522:58;14614:27;14609:2;14601:6;14597:15;14590:52;14405:244;:::o;14655:366::-;14797:3;14818:67;14882:2;14877:3;14818:67;:::i;:::-;14811:74;;14894:93;14983:3;14894:93;:::i;:::-;15012:2;15007:3;15003:12;14996:19;;14655:366;;;:::o;15027:419::-;15193:4;15231:2;15220:9;15216:18;15208:26;;15280:9;15274:4;15270:20;15266:1;15255:9;15251:17;15244:47;15308:131;15434:4;15308:131;:::i;:::-;15300:139;;15027:419;;;:::o;15452:178::-;15592:30;15588:1;15580:6;15576:14;15569:54;15452:178;:::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:224::-;16573:34;16569:1;16561:6;16557:14;16550:58;16642:7;16637:2;16629:6;16625:15;16618:32;16433:224;:::o;16663:366::-;16805:3;16826:67;16890:2;16885:3;16826:67;:::i;:::-;16819:74;;16902:93;16991:3;16902:93;:::i;:::-;17020:2;17015:3;17011:12;17004:19;;16663:366;;;:::o;17035:419::-;17201:4;17239:2;17228:9;17224:18;17216:26;;17288:9;17282:4;17278:20;17274:1;17263:9;17259:17;17252:47;17316:131;17442:4;17316:131;:::i;:::-;17308:139;;17035:419;;;:::o;17460:240::-;17600:34;17596:1;17588:6;17584:14;17577:58;17669:23;17664:2;17656:6;17652:15;17645:48;17460:240;:::o;17706:366::-;17848:3;17869:67;17933:2;17928:3;17869:67;:::i;:::-;17862:74;;17945:93;18034:3;17945:93;:::i;:::-;18063:2;18058:3;18054:12;18047:19;;17706:366;;;:::o;18078:419::-;18244:4;18282:2;18271:9;18267:18;18259:26;;18331:9;18325:4;18321:20;18317:1;18306:9;18302:17;18295:47;18359:131;18485:4;18359:131;:::i;:::-;18351:139;;18078:419;;;:::o;18503:240::-;18643:34;18639:1;18631:6;18627:14;18620:58;18712:23;18707:2;18699:6;18695:15;18688:48;18503:240;:::o;18749:366::-;18891:3;18912:67;18976:2;18971:3;18912:67;:::i;:::-;18905:74;;18988:93;19077:3;18988:93;:::i;:::-;19106:2;19101:3;19097:12;19090:19;;18749:366;;;:::o;19121:419::-;19287:4;19325:2;19314:9;19310:18;19302:26;;19374:9;19368:4;19364:20;19360:1;19349:9;19345:17;19338:47;19402:131;19528:4;19402:131;:::i;:::-;19394:139;;19121:419;;;:::o;19546:225::-;19686:34;19682:1;19674:6;19670:14;19663:58;19755:8;19750:2;19742:6;19738:15;19731:33;19546:225;:::o;19777:366::-;19919:3;19940:67;20004:2;19999:3;19940:67;:::i;:::-;19933:74;;20016:93;20105:3;20016:93;:::i;:::-;20134:2;20129:3;20125:12;20118:19;;19777:366;;;:::o;20149:419::-;20315:4;20353:2;20342:9;20338:18;20330:26;;20402:9;20396:4;20392:20;20388:1;20377:9;20373:17;20366:47;20430:131;20556:4;20430:131;:::i;:::-;20422:139;;20149:419;;;:::o;20574:177::-;20714:29;20710:1;20702:6;20698:14;20691:53;20574:177;:::o;20757:366::-;20899:3;20920:67;20984:2;20979:3;20920:67;:::i;:::-;20913:74;;20996:93;21085:3;20996:93;:::i;:::-;21114:2;21109:3;21105:12;21098:19;;20757:366;;;:::o;21129:419::-;21295:4;21333:2;21322:9;21318:18;21310:26;;21382:9;21376:4;21372:20;21368:1;21357:9;21353:17;21346:47;21410:131;21536:4;21410:131;:::i;:::-;21402:139;;21129:419;;;:::o;21554:223::-;21694:34;21690:1;21682:6;21678:14;21671:58;21763:6;21758:2;21750:6;21746:15;21739:31;21554:223;:::o;21783:366::-;21925:3;21946:67;22010:2;22005:3;21946:67;:::i;:::-;21939:74;;22022:93;22111:3;22022:93;:::i;:::-;22140:2;22135:3;22131:12;22124:19;;21783:366;;;:::o;22155:419::-;22321:4;22359:2;22348:9;22344:18;22336:26;;22408:9;22402:4;22398:20;22394:1;22383:9;22379:17;22372:47;22436:131;22562:4;22436:131;:::i;:::-;22428:139;;22155:419;;;:::o;22580:221::-;22720:34;22716:1;22708:6;22704:14;22697:58;22789:4;22784:2;22776:6;22772:15;22765:29;22580:221;:::o;22807:366::-;22949:3;22970:67;23034:2;23029:3;22970:67;:::i;:::-;22963:74;;23046:93;23135:3;23046:93;:::i;:::-;23164:2;23159:3;23155:12;23148:19;;22807:366;;;:::o;23179:419::-;23345:4;23383:2;23372:9;23368:18;23360:26;;23432:9;23426:4;23422:20;23418:1;23407:9;23403:17;23396:47;23460:131;23586:4;23460:131;:::i;:::-;23452:139;;23179:419;;;:::o;23604:191::-;23644:4;23664:20;23682:1;23664:20;:::i;:::-;23659:25;;23698:20;23716:1;23698:20;:::i;:::-;23693:25;;23737:1;23734;23731:8;23728:34;;;23742:18;;:::i;:::-;23728:34;23787:1;23784;23780:9;23772:17;;23604:191;;;;:::o;23801:224::-;23941:34;23937:1;23929:6;23925:14;23918:58;24010:7;24005:2;23997:6;23993:15;23986:32;23801:224;:::o;24031:366::-;24173:3;24194:67;24258:2;24253:3;24194:67;:::i;:::-;24187:74;;24270:93;24359:3;24270:93;:::i;:::-;24388:2;24383:3;24379:12;24372:19;;24031:366;;;:::o;24403:419::-;24569:4;24607:2;24596:9;24592:18;24584:26;;24656:9;24650:4;24646:20;24642:1;24631:9;24627:17;24620:47;24684:131;24810:4;24684:131;:::i;:::-;24676:139;;24403:419;;;:::o;24828:222::-;24968:34;24964:1;24956:6;24952:14;24945:58;25037:5;25032:2;25024:6;25020:15;25013:30;24828:222;:::o;25056:366::-;25198:3;25219:67;25283:2;25278:3;25219:67;:::i;:::-;25212:74;;25295:93;25384:3;25295:93;:::i;:::-;25413:2;25408:3;25404:12;25397:19;;25056:366;;;:::o;25428:419::-;25594:4;25632:2;25621:9;25617:18;25609:26;;25681:9;25675:4;25671:20;25667:1;25656:9;25652:17;25645:47;25709:131;25835:4;25709:131;:::i;:::-;25701:139;;25428:419;;;:::o;25853:236::-;25993:34;25989:1;25981:6;25977:14;25970:58;26062:19;26057:2;26049:6;26045:15;26038:44;25853:236;:::o;26095:366::-;26237:3;26258:67;26322:2;26317:3;26258:67;:::i;:::-;26251:74;;26334:93;26423:3;26334:93;:::i;:::-;26452:2;26447:3;26443:12;26436:19;;26095:366;;;:::o;26467:419::-;26633:4;26671:2;26660:9;26656:18;26648:26;;26720:9;26714:4;26710:20;26706:1;26695:9;26691:17;26684:47;26748:131;26874:4;26748:131;:::i;:::-;26740:139;;26467:419;;;:::o;26892:172::-;27032:24;27028:1;27020:6;27016:14;27009:48;26892:172;:::o;27070:366::-;27212:3;27233:67;27297:2;27292:3;27233:67;:::i;:::-;27226:74;;27309:93;27398:3;27309:93;:::i;:::-;27427:2;27422:3;27418:12;27411:19;;27070:366;;;:::o;27442:419::-;27608:4;27646:2;27635:9;27631:18;27623:26;;27695:9;27689:4;27685:20;27681:1;27670:9;27666:17;27659:47;27723:131;27849:4;27723:131;:::i;:::-;27715:139;;27442:419;;;:::o;27867:297::-;28007:34;28003:1;27995:6;27991:14;27984:58;28076:34;28071:2;28063:6;28059:15;28052:59;28145:11;28140:2;28132:6;28128:15;28121:36;27867:297;:::o;28170:366::-;28312:3;28333:67;28397:2;28392:3;28333:67;:::i;:::-;28326:74;;28409:93;28498:3;28409:93;:::i;:::-;28527:2;28522:3;28518:12;28511:19;;28170:366;;;:::o;28542:419::-;28708:4;28746:2;28735:9;28731:18;28723:26;;28795:9;28789:4;28785:20;28781:1;28770:9;28766:17;28759:47;28823:131;28949:4;28823:131;:::i;:::-;28815:139;;28542:419;;;:::o;28967:240::-;29107:34;29103:1;29095:6;29091:14;29084:58;29176:23;29171:2;29163:6;29159:15;29152:48;28967:240;:::o;29213:366::-;29355:3;29376:67;29440:2;29435:3;29376:67;:::i;:::-;29369:74;;29452:93;29541:3;29452:93;:::i;:::-;29570:2;29565:3;29561:12;29554:19;;29213:366;;;:::o;29585:419::-;29751:4;29789:2;29778:9;29774:18;29766:26;;29838:9;29832:4;29828:20;29824:1;29813:9;29809:17;29802:47;29866:131;29992:4;29866:131;:::i;:::-;29858:139;;29585:419;;;:::o;30010:169::-;30150:21;30146:1;30138:6;30134:14;30127:45;30010:169;:::o;30185:366::-;30327:3;30348:67;30412:2;30407:3;30348:67;:::i;:::-;30341:74;;30424:93;30513:3;30424:93;:::i;:::-;30542:2;30537:3;30533:12;30526:19;;30185:366;;;:::o;30557:419::-;30723:4;30761:2;30750:9;30746:18;30738:26;;30810:9;30804:4;30800:20;30796:1;30785:9;30781:17;30774:47;30838:131;30964:4;30838:131;:::i;:::-;30830:139;;30557:419;;;:::o;30982:241::-;31122:34;31118:1;31110:6;31106:14;31099:58;31191:24;31186:2;31178:6;31174:15;31167:49;30982:241;:::o;31229:366::-;31371:3;31392:67;31456:2;31451:3;31392:67;:::i;:::-;31385:74;;31468:93;31557:3;31468:93;:::i;:::-;31586:2;31581:3;31577:12;31570:19;;31229:366;;;:::o;31601:419::-;31767:4;31805:2;31794:9;31790:18;31782:26;;31854:9;31848:4;31844:20;31840:1;31829:9;31825:17;31818:47;31882:131;32008:4;31882:131;:::i;:::-;31874:139;;31601:419;;;:::o;32026:147::-;32127:11;32164:3;32149:18;;32026:147;;;;:::o;32179:114::-;;:::o;32299:398::-;32458:3;32479:83;32560:1;32555:3;32479:83;:::i;:::-;32472:90;;32571:93;32660:3;32571:93;:::i;:::-;32689:1;32684:3;32680:11;32673:18;;32299:398;;;:::o;32703:379::-;32887:3;32909:147;33052:3;32909:147;:::i;:::-;32902:154;;33073:3;33066:10;;32703:379;;;:::o;33088:442::-;33237:4;33275:2;33264:9;33260:18;33252:26;;33288:71;33356:1;33345:9;33341:17;33332:6;33288:71;:::i;:::-;33369:72;33437:2;33426:9;33422:18;33413:6;33369:72;:::i;:::-;33451;33519:2;33508:9;33504:18;33495:6;33451:72;:::i;:::-;33088:442;;;;;;:::o;33536:220::-;33676:34;33672:1;33664:6;33660:14;33653:58;33745:3;33740:2;33732:6;33728:15;33721:28;33536:220;:::o;33762:366::-;33904:3;33925:67;33989:2;33984:3;33925:67;:::i;:::-;33918:74;;34001:93;34090:3;34001:93;:::i;:::-;34119:2;34114:3;34110:12;34103:19;;33762:366;;;:::o;34134:419::-;34300:4;34338:2;34327:9;34323:18;34315:26;;34387:9;34381:4;34377:20;34373:1;34362:9;34358:17;34351:47;34415:131;34541:4;34415:131;:::i;:::-;34407:139;;34134:419;;;:::o;34559:553::-;34736:4;34774:3;34763:9;34759:19;34751:27;;34788:71;34856:1;34845:9;34841:17;34832:6;34788:71;:::i;:::-;34869:72;34937:2;34926:9;34922:18;34913:6;34869:72;:::i;:::-;34951;35019:2;35008:9;35004:18;34995:6;34951:72;:::i;:::-;35033;35101:2;35090:9;35086:18;35077:6;35033:72;:::i;:::-;34559:553;;;;;;;:::o;35118:180::-;35166:77;35163:1;35156:88;35263:4;35260:1;35253:15;35287:4;35284:1;35277:15;35304:180;35352:77;35349:1;35342:88;35449:4;35446:1;35439:15;35473:4;35470:1;35463:15;35490:143;35547:5;35578:6;35572:13;35563:22;;35594:33;35621:5;35594:33;:::i;:::-;35490:143;;;;:::o;35639:351::-;35709:6;35758:2;35746:9;35737:7;35733:23;35729:32;35726:119;;;35764:79;;:::i;:::-;35726:119;35884:1;35909:64;35965:7;35956:6;35945:9;35941:22;35909:64;:::i;:::-;35899:74;;35855:128;35639:351;;;;:::o;35996:85::-;36041:7;36070:5;36059:16;;35996:85;;;:::o;36087:158::-;36145:9;36178:61;36196:42;36205:32;36231:5;36205:32;:::i;:::-;36196:42;:::i;:::-;36178:61;:::i;:::-;36165:74;;36087:158;;;:::o;36251:147::-;36346:45;36385:5;36346:45;:::i;:::-;36341:3;36334:58;36251:147;;:::o;36404:114::-;36471:6;36505:5;36499:12;36489:22;;36404:114;;;:::o;36524:184::-;36623:11;36657:6;36652:3;36645:19;36697:4;36692:3;36688:14;36673:29;;36524:184;;;;:::o;36714:132::-;36781:4;36804:3;36796:11;;36834:4;36829:3;36825:14;36817:22;;36714:132;;;:::o;36852:108::-;36929:24;36947:5;36929:24;:::i;:::-;36924:3;36917:37;36852:108;;:::o;36966:179::-;37035:10;37056:46;37098:3;37090:6;37056:46;:::i;:::-;37134:4;37129:3;37125:14;37111:28;;36966:179;;;;:::o;37151:113::-;37221:4;37253;37248:3;37244:14;37236:22;;37151:113;;;:::o;37300:732::-;37419:3;37448:54;37496:5;37448:54;:::i;:::-;37518:86;37597:6;37592:3;37518:86;:::i;:::-;37511:93;;37628:56;37678:5;37628:56;:::i;:::-;37707:7;37738:1;37723:284;37748:6;37745:1;37742:13;37723:284;;;37824:6;37818:13;37851:63;37910:3;37895:13;37851:63;:::i;:::-;37844:70;;37937:60;37990:6;37937:60;:::i;:::-;37927:70;;37783:224;37770:1;37767;37763:9;37758:14;;37723:284;;;37727:14;38023:3;38016:10;;37424:608;;;37300:732;;;;:::o;38038:831::-;38301:4;38339:3;38328:9;38324:19;38316:27;;38353:71;38421:1;38410:9;38406:17;38397:6;38353:71;:::i;:::-;38434:80;38510:2;38499:9;38495:18;38486:6;38434:80;:::i;:::-;38561:9;38555:4;38551:20;38546:2;38535:9;38531:18;38524:48;38589:108;38692:4;38683:6;38589:108;:::i;:::-;38581:116;;38707:72;38775:2;38764:9;38760:18;38751:6;38707:72;:::i;:::-;38789:73;38857:3;38846:9;38842:19;38833:6;38789:73;:::i;:::-;38038:831;;;;;;;;:::o;38875:807::-;39124:4;39162:3;39151:9;39147:19;39139:27;;39176:71;39244:1;39233:9;39229:17;39220:6;39176:71;:::i;:::-;39257:72;39325:2;39314:9;39310:18;39301:6;39257:72;:::i;:::-;39339:80;39415:2;39404:9;39400:18;39391:6;39339:80;:::i;:::-;39429;39505:2;39494:9;39490:18;39481:6;39429:80;:::i;:::-;39519:73;39587:3;39576:9;39572:19;39563:6;39519:73;:::i;:::-;39602;39670:3;39659:9;39655:19;39646:6;39602:73;:::i;:::-;38875:807;;;;;;;;;:::o;39688:143::-;39745:5;39776:6;39770:13;39761:22;;39792:33;39819:5;39792:33;:::i;:::-;39688:143;;;;:::o;39837:663::-;39925:6;39933;39941;39990:2;39978:9;39969:7;39965:23;39961:32;39958:119;;;39996:79;;:::i;:::-;39958:119;40116:1;40141:64;40197:7;40188:6;40177:9;40173:22;40141:64;:::i;:::-;40131:74;;40087:128;40254:2;40280:64;40336:7;40327:6;40316:9;40312:22;40280:64;:::i;:::-;40270:74;;40225:129;40393:2;40419:64;40475:7;40466:6;40455:9;40451:22;40419:64;:::i;:::-;40409:74;;40364:129;39837:663;;;;;:::o

Swarm Source

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