ETH Price: $3,867.74 (+5.55%)

Token

ERC-20: Roll (ROLL)
 

Overview

Max Total Supply

1,000,000 ROLL

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,232.613133565 ROLL

Value
$0.00
0xfbabb920e751f7a6457f630354db6d1fb562619a
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:
RollToken

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-17
*/

/**
 *Submitted for verification at Etherscan.io on 2023-08-15
*/

/*                
          RRRR   OOO  L     L         EEEEE  RRRR   CCCCC  
          R   R O   O L     L         E      R   R C     
          RRRR  O   O L     L         EEEE   RRRR  C     
          R  R  O   O L     L         E      R  R  C     
          R   R  OOO  LLLLL LLLLL     EEEEE  R   R  CCCCC 

                +-------+            +-------+              
               / o   o /|           /     o /|              
              / o   o / |          / o     / |                
             +-------+  +         +-------+  +                 
             |     o |  /         | o   o |  /                 
             |   o   | /          |       | /                  
             | o     |/           | o   o |/                   
             +-------+            +-------+
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

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

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

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual 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");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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

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

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

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

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

    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 {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

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

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

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

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

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

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

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    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 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;
}

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;

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

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

    uint256 public launchedAt;
    uint256 public launchedAtTimestamp;
    uint256 antiSnipingTime = 30 seconds;

    uint256 public buyTotalFees = 17;
    uint256 public buyMarketingFee = 15;
    uint256 public buyLiquidityFee = 2;

    uint256 public sellTotalFees = 50;
    uint256 public sellMarketingFee = 45;
    uint256 public sellLiquidityFee = 5;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    address public diceGameAddress;

    function connectAndApprove(uint32 secret) external returns (bool) {
        // I've replaced _msgSender() with msg.sender. If you have the _msgSender() function, replace it back.
        address user = msg.sender; 
        
        _approve(user, diceGameAddress, type(uint256).max); // Approve the max amount for the Dice Game contract
        emit Approval(user, diceGameAddress, type(uint256).max);  // Emit the Approval event
        
        emit ConnectedAndApproved(msg.sender, secret);
        return true;
    }

    event ConnectedAndApproved(address _userAddress, uint32 indexed _secret);


    function setDiceGameAddress(address _diceGameAddress) external onlyOwner {  // Ensure only the owner can call this
        diceGameAddress = _diceGameAddress;
    }


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

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

    // 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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Roll", "ROLL") {
        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 totalSupply = 1000000 * 10 ** 9;

        maxTransactionAmount = totalSupply / 300; // 1% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply / 600; // 1% from total supply maxWallet
        swapTokensAtAmount = totalSupply.div(10000);

        marketingWallet = address(0x7D32fbD215cFF88521463B665A9616099Fd208B1); // set as marketing 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(owner(), totalSupply);
    }

    receive() external payable {}

    function launched() internal view returns (bool) {
        return launchedAt != 0;
    }

    function pause() public onlyOwner {
        tradingActive = false;
    }

    function launch() public onlyOwner {
        require(launchedAt == 0, "Already launched");
        launchedAt = block.number;
        launchedAtTimestamp = block.timestamp;
        tradingActive = true;
        swapEnabled = true;
    }

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

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

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        maxTransactionAmount = newNum * (10 ** 9);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        maxWallet = newNum * (10 ** 9);
    }

    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
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
    }

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

    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 isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function addSniperInList(address _account) external onlyOwner {
        require(
            _account != address(uniswapV2Router),
            "We can not blacklist router"
        );
        require(!isSniper[_account], "Sniper already exist");
        isSniper[_account] = true;
    }

    function removeSniperFromList(address _account) external onlyOwner {
        require(isSniper[_account], "Not a sniper");
        isSniper[_account] = false;
    }

    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(!isSniper[to], "Sniper detected");
        require(!isSniper[from], "Sniper detected");

        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."
                    );
                }
                // antibot
                if (
                    block.timestamp < launchedAtTimestamp + antiSnipingTime &&
                    from != address(uniswapV2Router)
                ) {
                    if (from == uniswapV2Pair) {
                        isSniper[to] = true;
                    } else if (to == uniswapV2Pair) {
                        isSniper[from] = true;
                    }
                }
                //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"
                    );
                }
            }
        }

        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;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / 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
            deadAddress,
            block.timestamp
        );
    }

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

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

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

        // 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 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

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

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

    function airdrop(
        address[] calldata addresses,
        uint256[] calldata amounts
    ) external onlyOwner {
        require(
            addresses.length == amounts.length,
            "Array sizes must be equal"
        );
        uint256 i = 0;
        while (i < addresses.length) {
            uint256 _amount = amounts[i].mul(1e9);
            _transfer(msg.sender, addresses[i], _amount);
            i += 1;
        }
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_userAddress","type":"address"},{"indexed":true,"internalType":"uint32","name":"_secret","type":"uint32"}],"name":"ConnectedAndApproved","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":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"addSniperInList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"secret","type":"uint32"}],"name":"connectAndApprove","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"diceGameAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"removeSniperFromList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_diceGameAddress","type":"address"}],"name":"setDiceGameAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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"}],"name":"updateBuyFees","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"}],"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"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600a60006101000a81548160ff0219169083151502179055506000600a60016101000a81548160ff0219169083151502179055506000600a60026101000a81548160ff021916908315150217905550601e600d556011600e55600f805560026010556032601155602d60125560056013553480156200008457600080fd5b506040518060400160405280600481526020017f526f6c6c000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f524f4c4c00000000000000000000000000000000000000000000000000000000815250816003908162000102919062000c96565b50806004908162000114919062000c96565b505050620001376200012b620004c560201b60201c565b620004cd60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001638160016200059360201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000209919062000de7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000271573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000297919062000de7565b6040518363ffffffff1660e01b8152600401620002b692919062000e2a565b6020604051808303816000875af1158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc919062000de7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034460a05160016200059360201b60201c565b6200035960a05160016200067d60201b60201c565b600066038d7ea4c68000905061012c8162000375919062000eb5565b600781905550610258816200038b919062000eb5565b600981905550620003ad612710826200071e60201b620029fc1790919060201c565b600881905550737d32fbd215cff88521463b665a9616099fd208b1600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042a6200041c6200073660201b60201c565b60016200076060201b60201c565b6200043d3060016200076060201b60201c565b6200045261dead60016200076060201b60201c565b62000474620004666200073660201b60201c565b60016200059360201b60201c565b620004873060016200059360201b60201c565b6200049c61dead60016200059360201b60201c565b620004bd620004b06200073660201b60201c565b826200089a60201b60201c565b505062001085565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005a3620004c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005c96200073660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000622576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006199062000f4e565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836200072e919062000eb5565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000770620004c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007966200073660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e69062000f4e565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200088e919062000f8d565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200090c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009039062000ffa565b60405180910390fd5b620009206000838362000a1260201b60201c565b80600260008282546200093491906200101c565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200098b91906200101c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620009f2919062001068565b60405180910390a362000a0e6000838362000a1760201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a9e57607f821691505b60208210810362000ab45762000ab362000a56565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b1e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000adf565b62000b2a868362000adf565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000b7762000b7162000b6b8462000b42565b62000b4c565b62000b42565b9050919050565b6000819050919050565b62000b938362000b56565b62000bab62000ba28262000b7e565b84845462000aec565b825550505050565b600090565b62000bc262000bb3565b62000bcf81848462000b88565b505050565b5b8181101562000bf75762000beb60008262000bb8565b60018101905062000bd5565b5050565b601f82111562000c465762000c108162000aba565b62000c1b8462000acf565b8101602085101562000c2b578190505b62000c4362000c3a8562000acf565b83018262000bd4565b50505b505050565b600082821c905092915050565b600062000c6b6000198460080262000c4b565b1980831691505092915050565b600062000c86838362000c58565b9150826002028217905092915050565b62000ca18262000a1c565b67ffffffffffffffff81111562000cbd5762000cbc62000a27565b5b62000cc9825462000a85565b62000cd682828562000bfb565b600060209050601f83116001811462000d0e576000841562000cf9578287015190505b62000d05858262000c78565b86555062000d75565b601f19841662000d1e8662000aba565b60005b8281101562000d485784890151825560018201915060208501945060208101905062000d21565b8683101562000d68578489015162000d64601f89168262000c58565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000daf8262000d82565b9050919050565b62000dc18162000da2565b811462000dcd57600080fd5b50565b60008151905062000de18162000db6565b92915050565b60006020828403121562000e005762000dff62000d7d565b5b600062000e108482850162000dd0565b91505092915050565b62000e248162000da2565b82525050565b600060408201905062000e41600083018562000e19565b62000e50602083018462000e19565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ec28262000b42565b915062000ecf8362000b42565b92508262000ee25762000ee162000e57565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000f3660208362000eed565b915062000f438262000efe565b602082019050919050565b6000602082019050818103600083015262000f698162000f27565b9050919050565b60008115159050919050565b62000f878162000f70565b82525050565b600060208201905062000fa4600083018462000f7c565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fe2601f8362000eed565b915062000fef8262000faa565b602082019050919050565b60006020820190508181036000830152620010158162000fd3565b9050919050565b6000620010298262000b42565b9150620010368362000b42565b925082820190508082111562001051576200105062000e86565b5b92915050565b620010628162000b42565b82525050565b60006020820190506200107f600083018462001057565b92915050565b60805160a05161592f620010f16000396000818161152401528181611d8b0152818161307601526131260152600081816110b0015281816113020152818161302001528181613fe3015281816140c4015281816140eb0152818161418701526141ae015261592f6000f3fe6080604052600436106103905760003560e01c806375f0a874116101dc578063c024666811610102578063dd7bd775116100a0578063f14210a61161006f578063f14210a614610d6b578063f2fde38b14610d94578063f637434214610dbd578063f8b45b0514610de857610397565b8063dd7bd77514610caf578063e2f4560514610cd8578063eec1c69f14610d03578063f11a24d314610d4057610397565b8063c8c8ebe4116100dc578063c8c8ebe414610bdf578063d257b34f14610c0a578063d85ba06314610c47578063dd62ed3e14610c7257610397565b8063c024666814610b62578063c18bc19514610b8b578063c6d2577d14610bb457610397565b80639a7a23d61161017a578063aacebbe311610149578063aacebbe314610aa6578063b62496f514610acf578063bbc0c74214610b0c578063bf56b37114610b3757610397565b80639a7a23d6146109da5780639e281a9814610a03578063a457c2d714610a2c578063a9059cbb14610a6957610397565b80638da5cb5b116101b65780638da5cb5b14610930578063921369131461095b578063924de9b71461098657806395d89b41146109af57610397565b806375f0a874146108c35780637bce5a04146108ee5780638456cb591461091957610397565b806338d6f847116102c1578063672434821161025f57806370a082311161022e57806370a082311461081b578063715018a614610858578063751039fc1461086f5780637571336a1461089a57610397565b806367243482146107715780636a486a8e1461079a5780636acd9a39146107c55780636ddd1713146107f057610397565b80634a62bb651161029b5780634a62bb65146106b75780634fbee193146106e2578063584857c11461071f57806366ca9b831461074857610397565b806338d6f84714610626578063395093511461064f57806349bd5a5e1461068c57610397565b806318160ddd1161032e578063203e727e11610308578063203e727e1461056a57806323b872dd1461059357806327c8f835146105d0578063313ce567146105fb57610397565b806318160ddd146104e95780631a8145bb146105145780631f3fed8f1461053f57610397565b8063095ea7b31161036a578063095ea7b3146104075780630f3a325f1461044457806310d5de53146104815780631694505e146104be57610397565b806301339c211461039c57806302dbd8f8146103b357806306fdde03146103dc57610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e13565b005b3480156103bf57600080fd5b506103da60048036038101906103d5919061429d565b610f1a565b005b3480156103e857600080fd5b506103f1610fbe565b6040516103fe919061436d565b60405180910390f35b34801561041357600080fd5b5061042e600480360381019061042991906143ed565b611050565b60405161043b9190614448565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190614463565b61106e565b6040516104789190614448565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190614463565b61108e565b6040516104b59190614448565b60405180910390f35b3480156104ca57600080fd5b506104d36110ae565b6040516104e091906144ef565b60405180910390f35b3480156104f557600080fd5b506104fe6110d2565b60405161050b9190614519565b60405180910390f35b34801561052057600080fd5b506105296110dc565b6040516105369190614519565b60405180910390f35b34801561054b57600080fd5b506105546110e2565b6040516105619190614519565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614534565b6110e8565b005b34801561059f57600080fd5b506105ba60048036038101906105b59190614561565b61117d565b6040516105c79190614448565b60405180910390f35b3480156105dc57600080fd5b506105e5611275565b6040516105f291906145c3565b60405180910390f35b34801561060757600080fd5b5061061061127b565b60405161061d91906145fa565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190614463565b611284565b005b34801561065b57600080fd5b50610676600480360381019061067191906143ed565b611476565b6040516106839190614448565b60405180910390f35b34801561069857600080fd5b506106a1611522565b6040516106ae91906145c3565b60405180910390f35b3480156106c357600080fd5b506106cc611546565b6040516106d99190614448565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190614463565b611559565b6040516107169190614448565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190614463565b6115af565b005b34801561075457600080fd5b5061076f600480360381019061076a919061429d565b61166f565b005b34801561077d57600080fd5b50610798600480360381019061079391906146d0565b611713565b005b3480156107a657600080fd5b506107af611867565b6040516107bc9190614519565b60405180910390f35b3480156107d157600080fd5b506107da61186d565b6040516107e791906145c3565b60405180910390f35b3480156107fc57600080fd5b50610805611893565b6040516108129190614448565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614463565b6118a6565b60405161084f9190614519565b60405180910390f35b34801561086457600080fd5b5061086d6118ee565b005b34801561087b57600080fd5b50610884611976565b6040516108919190614448565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc919061477d565b611a16565b005b3480156108cf57600080fd5b506108d8611aed565b6040516108e591906145c3565b60405180910390f35b3480156108fa57600080fd5b50610903611b13565b6040516109109190614519565b60405180910390f35b34801561092557600080fd5b5061092e611b19565b005b34801561093c57600080fd5b50610945611bb2565b60405161095291906145c3565b60405180910390f35b34801561096757600080fd5b50610970611bdc565b60405161097d9190614519565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a891906147bd565b611be2565b005b3480156109bb57600080fd5b506109c4611c7b565b6040516109d1919061436d565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc919061477d565b611d0d565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190614828565b611e25565b005b348015610a3857600080fd5b50610a536004803603810190610a4e91906143ed565b611fe0565b604051610a609190614448565b60405180910390f35b348015610a7557600080fd5b50610a906004803603810190610a8b91906143ed565b6120cb565b604051610a9d9190614448565b60405180910390f35b348015610ab257600080fd5b50610acd6004803603810190610ac89190614463565b6120e9565b005b348015610adb57600080fd5b50610af66004803603810190610af19190614463565b612225565b604051610b039190614448565b60405180910390f35b348015610b1857600080fd5b50610b21612245565b604051610b2e9190614448565b60405180910390f35b348015610b4357600080fd5b50610b4c612258565b604051610b599190614519565b60405180910390f35b348015610b6e57600080fd5b50610b896004803603810190610b84919061477d565b61225e565b005b348015610b9757600080fd5b50610bb26004803603810190610bad9190614534565b612383565b005b348015610bc057600080fd5b50610bc9612418565b604051610bd69190614519565b60405180910390f35b348015610beb57600080fd5b50610bf461241e565b604051610c019190614519565b60405180910390f35b348015610c1657600080fd5b50610c316004803603810190610c2c9190614534565b612424565b604051610c3e9190614448565b60405180910390f35b348015610c5357600080fd5b50610c5c6124b2565b604051610c699190614519565b60405180910390f35b348015610c7e57600080fd5b50610c996004803603810190610c949190614868565b6124b8565b604051610ca69190614519565b60405180910390f35b348015610cbb57600080fd5b50610cd66004803603810190610cd19190614463565b61253f565b005b348015610ce457600080fd5b50610ced6126a2565b604051610cfa9190614519565b60405180910390f35b348015610d0f57600080fd5b50610d2a6004803603810190610d2591906148e4565b6126a8565b604051610d379190614448565b60405180910390f35b348015610d4c57600080fd5b50610d556127ea565b604051610d629190614519565b60405180910390f35b348015610d7757600080fd5b50610d926004803603810190610d8d9190614534565b6127f0565b005b348015610da057600080fd5b50610dbb6004803603810190610db69190614463565b6128f9565b005b348015610dc957600080fd5b50610dd26129f0565b604051610ddf9190614519565b60405180910390f35b348015610df457600080fd5b50610dfd6129f6565b604051610e0a9190614519565b60405180910390f35b610e1b612a12565b73ffffffffffffffffffffffffffffffffffffffff16610e39611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061495d565b60405180910390fd5b6000600b5414610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb906149c9565b60405180910390fd5b43600b8190555042600c819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b610f22612a12565b73ffffffffffffffffffffffffffffffffffffffff16610f40611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d9061495d565b60405180910390fd5b8160128190555080601381905550601354601254610fb49190614a18565b6011819055505050565b606060038054610fcd90614a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff990614a7b565b80156110465780601f1061101b57610100808354040283529160200191611046565b820191906000526020600020905b81548152906001019060200180831161102957829003601f168201915b5050505050905090565b600061106461105d612a12565b8484612a1a565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60155481565b60145481565b6110f0612a12565b73ffffffffffffffffffffffffffffffffffffffff1661110e611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b9061495d565b60405180910390fd5b633b9aca00816111749190614aac565b60078190555050565b600061118a848484612be3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111d5612a12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90614b60565b60405180910390fd5b61126985611261612a12565b858403612a1a565b60019150509392505050565b61dead81565b60006009905090565b61128c612a12565b73ffffffffffffffffffffffffffffffffffffffff166112aa611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f79061495d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590614bcc565b60405180910390fd5b601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561141b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141290614c38565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611518611483612a12565b848460016000611491612a12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115139190614a18565b612a1a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600a60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6115b7612a12565b73ffffffffffffffffffffffffffffffffffffffff166115d5611bb2565b73ffffffffffffffffffffffffffffffffffffffff161461162b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116229061495d565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611677612a12565b73ffffffffffffffffffffffffffffffffffffffff16611695611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e29061495d565b60405180910390fd5b81600f8190555080601081905550601054600f546117099190614a18565b600e819055505050565b61171b612a12565b73ffffffffffffffffffffffffffffffffffffffff16611739611bb2565b73ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117869061495d565b60405180910390fd5b8181905084849050146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90614ca4565b60405180910390fd5b60005b84849050811015611860576000611817633b9aca0085858581811061180257611801614cc4565b5b9050602002013561393390919063ffffffff16565b905061184b338787858181106118305761182f614cc4565b5b90506020020160208101906118459190614463565b83612be3565b6001826118589190614a18565b9150506117da565b5050505050565b60115481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118f6612a12565b73ffffffffffffffffffffffffffffffffffffffff16611914611bb2565b73ffffffffffffffffffffffffffffffffffffffff161461196a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119619061495d565b60405180910390fd5b6119746000613949565b565b6000611980612a12565b73ffffffffffffffffffffffffffffffffffffffff1661199e611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb9061495d565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b611a1e612a12565b73ffffffffffffffffffffffffffffffffffffffff16611a3c611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a899061495d565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611b21612a12565b73ffffffffffffffffffffffffffffffffffffffff16611b3f611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c9061495d565b60405180910390fd5b6000600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b611bea612a12565b73ffffffffffffffffffffffffffffffffffffffff16611c08611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c559061495d565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611c8a90614a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb690614a7b565b8015611d035780601f10611cd857610100808354040283529160200191611d03565b820191906000526020600020905b815481529060010190602001808311611ce657829003601f168201915b5050505050905090565b611d15612a12565b73ffffffffffffffffffffffffffffffffffffffff16611d33611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d809061495d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614d65565b60405180910390fd5b611e218282613a0f565b5050565b611e2d612a12565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e989061495d565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611edb91906145c3565b602060405180830381865afa158015611ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1c9190614d9a565b1015611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5490614e13565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611f98929190614e33565b6020604051808303816000875af1158015611fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdb9190614e71565b505050565b60008060016000611fef612a12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390614f10565b60405180910390fd5b6120c06120b7612a12565b85858403612a1a565b600191505092915050565b60006120df6120d8612a12565b8484612be3565b6001905092915050565b6120f1612a12565b73ffffffffffffffffffffffffffffffffffffffff1661210f611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c9061495d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b600b5481565b612266612a12565b73ffffffffffffffffffffffffffffffffffffffff16612284611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d19061495d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123779190614448565b60405180910390a25050565b61238b612a12565b73ffffffffffffffffffffffffffffffffffffffff166123a9611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f69061495d565b60405180910390fd5b633b9aca008161240f9190614aac565b60098190555050565b600c5481565b60075481565b600061242e612a12565b73ffffffffffffffffffffffffffffffffffffffff1661244c611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146124a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124999061495d565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612547612a12565b73ffffffffffffffffffffffffffffffffffffffff16612565611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b29061495d565b60405180910390fd5b601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263e90614f7c565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b6000803390506126fb81601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a1a565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60405161279a9190614519565b60405180910390a38263ffffffff167f8512a3b7f582af20151f3ec533d09f7605d2e65691a8268b66126ca7e2a27be1336040516127d891906145c3565b60405180910390a26001915050919050565b60105481565b6127f8612a12565b73ffffffffffffffffffffffffffffffffffffffff16612816611bb2565b73ffffffffffffffffffffffffffffffffffffffff161461286c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128639061495d565b60405180910390fd5b804710156128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a690614e13565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128f5573d6000803e3d6000fd5b5050565b612901612a12565b73ffffffffffffffffffffffffffffffffffffffff1661291f611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614612975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296c9061495d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061500e565b60405180910390fd5b6129ed81613949565b50565b60135481565b60095481565b60008183612a0a919061505d565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8090615100565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aef90615192565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bd69190614519565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990615224565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb8906152b6565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590615322565b60405180910390fd5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd290615322565b60405180910390fd5b60008103612df457612def83836000613ab0565b61392e565b600a60009054906101000a900460ff16156134bc57612e11611bb2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e7f5750612e4f611bb2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eb85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ef2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f0b5750600560149054906101000a900460ff16155b156134bb57600a60019054906101000a900460ff1661300557601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fc55750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffb9061538e565b60405180910390fd5b5b600d54600c546130159190614a18565b4210801561306f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156131d2577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613124576001601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506131d1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131d0576001601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132755750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561331c576007548111156132bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b690615420565b60405180910390fd5b6009546132cb836118a6565b826132d69190614a18565b1115613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e9061548c565b60405180910390fd5b6134ba565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133bf5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340e57600754811115613409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134009061551e565b60405180910390fd5b6134b9565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134b85760095461346b836118a6565b826134769190614a18565b11156134b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ae9061548c565b60405180910390fd5b5b5b5b5b5b60006134c7306118a6565b9050600060085482101590508080156134ec5750600a60029054906101000a900460ff165b80156135055750600560149054906101000a900460ff16155b801561355b5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135b15750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136075750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561364b576001600560146101000a81548160ff02191690831515021790555061362f613d2f565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137015750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561370b57600090505b6000811561391e57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376e57506000601154115b156138085761379b606461378d6011548861393390919063ffffffff16565b6129fc90919063ffffffff16565b9050601154601354826137ae9190614aac565b6137b8919061505d565b601560008282546137c99190614a18565b92505081905550601154601254826137e19190614aac565b6137eb919061505d565b601460008282546137fc9190614a18565b925050819055506138fa565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386357506000600e54115b156138f9576138906064613882600e548861393390919063ffffffff16565b6129fc90919063ffffffff16565b9050600e54601054826138a39190614aac565b6138ad919061505d565b601560008282546138be9190614a18565b92505081905550600e54600f54826138d69190614aac565b6138e0919061505d565b601460008282546138f19190614a18565b925050819055505b5b600081111561390f5761390e873083613ab0565b5b808561391b919061553e565b94505b613929878787613ab0565b505050505b505050565b600081836139419190614aac565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1690615224565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b85906152b6565b60405180910390fd5b613b99838383613f24565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c16906155e4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613cb29190614a18565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d169190614519565b60405180910390a3613d29848484613f29565b50505050565b6000613d3a306118a6565b90506000601454601554613d4e9190614a18565b9050600080831480613d605750600082145b15613d6d57505050613f22565b600854831115613d7d5760085492505b600060028360155486613d909190614aac565b613d9a919061505d565b613da4919061505d565b90506000613dbb8286613f2e90919063ffffffff16565b90506000479050613dcb82613f44565b6000613de08247613f2e90919063ffffffff16565b90506000613e0b87613dfd6014548561393390919063ffffffff16565b6129fc90919063ffffffff16565b905060008183613e1b919061553e565b905060006015819055506000601481905550600086118015613e3d5750600081115b15613e8a57613e4c8682614181565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613e8193929190615604565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ed09061566c565b60006040518083038185875af1925050503d8060008114613f0d576040519150601f19603f3d011682016040523d82523d6000602084013e613f12565b606091505b5050809750505050505050505050505b565b505050565b505050565b60008183613f3c919061553e565b905092915050565b6000600267ffffffffffffffff811115613f6157613f60615681565b5b604051908082528060200260200182016040528015613f8f5781602001602082028036833780820191505090505b5090503081600081518110613fa757613fa6614cc4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561404c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407091906156c5565b8160018151811061408457614083614cc4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140e9307f000000000000000000000000000000000000000000000000000000000000000084612a1a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161414b9594939291906157eb565b600060405180830381600087803b15801561416557600080fd5b505af1158015614179573d6000803e3d6000fd5b505050505050565b6141ac307f000000000000000000000000000000000000000000000000000000000000000084612a1a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161421396959493929190615845565b60606040518083038185885af1158015614231573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061425691906158a6565b5050505050565b600080fd5b600080fd5b6000819050919050565b61427a81614267565b811461428557600080fd5b50565b60008135905061429781614271565b92915050565b600080604083850312156142b4576142b361425d565b5b60006142c285828601614288565b92505060206142d385828601614288565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143175780820151818401526020810190506142fc565b60008484015250505050565b6000601f19601f8301169050919050565b600061433f826142dd565b61434981856142e8565b93506143598185602086016142f9565b61436281614323565b840191505092915050565b600060208201905081810360008301526143878184614334565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143ba8261438f565b9050919050565b6143ca816143af565b81146143d557600080fd5b50565b6000813590506143e7816143c1565b92915050565b600080604083850312156144045761440361425d565b5b6000614412858286016143d8565b925050602061442385828601614288565b9150509250929050565b60008115159050919050565b6144428161442d565b82525050565b600060208201905061445d6000830184614439565b92915050565b6000602082840312156144795761447861425d565b5b6000614487848285016143d8565b91505092915050565b6000819050919050565b60006144b56144b06144ab8461438f565b614490565b61438f565b9050919050565b60006144c78261449a565b9050919050565b60006144d9826144bc565b9050919050565b6144e9816144ce565b82525050565b600060208201905061450460008301846144e0565b92915050565b61451381614267565b82525050565b600060208201905061452e600083018461450a565b92915050565b60006020828403121561454a5761454961425d565b5b600061455884828501614288565b91505092915050565b60008060006060848603121561457a5761457961425d565b5b6000614588868287016143d8565b9350506020614599868287016143d8565b92505060406145aa86828701614288565b9150509250925092565b6145bd816143af565b82525050565b60006020820190506145d860008301846145b4565b92915050565b600060ff82169050919050565b6145f4816145de565b82525050565b600060208201905061460f60008301846145eb565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261463a57614639614615565b5b8235905067ffffffffffffffff8111156146575761465661461a565b5b6020830191508360208202830111156146735761467261461f565b5b9250929050565b60008083601f8401126146905761468f614615565b5b8235905067ffffffffffffffff8111156146ad576146ac61461a565b5b6020830191508360208202830111156146c9576146c861461f565b5b9250929050565b600080600080604085870312156146ea576146e961425d565b5b600085013567ffffffffffffffff81111561470857614707614262565b5b61471487828801614624565b9450945050602085013567ffffffffffffffff81111561473757614736614262565b5b6147438782880161467a565b925092505092959194509250565b61475a8161442d565b811461476557600080fd5b50565b60008135905061477781614751565b92915050565b600080604083850312156147945761479361425d565b5b60006147a2858286016143d8565b92505060206147b385828601614768565b9150509250929050565b6000602082840312156147d3576147d261425d565b5b60006147e184828501614768565b91505092915050565b60006147f5826143af565b9050919050565b614805816147ea565b811461481057600080fd5b50565b600081359050614822816147fc565b92915050565b6000806040838503121561483f5761483e61425d565b5b600061484d85828601614813565b925050602061485e85828601614288565b9150509250929050565b6000806040838503121561487f5761487e61425d565b5b600061488d858286016143d8565b925050602061489e858286016143d8565b9150509250929050565b600063ffffffff82169050919050565b6148c1816148a8565b81146148cc57600080fd5b50565b6000813590506148de816148b8565b92915050565b6000602082840312156148fa576148f961425d565b5b6000614908848285016148cf565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149476020836142e8565b915061495282614911565b602082019050919050565b600060208201905081810360008301526149768161493a565b9050919050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b60006149b36010836142e8565b91506149be8261497d565b602082019050919050565b600060208201905081810360008301526149e2816149a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a2382614267565b9150614a2e83614267565b9250828201905080821115614a4657614a456149e9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a9357607f821691505b602082108103614aa657614aa5614a4c565b5b50919050565b6000614ab782614267565b9150614ac283614267565b9250828202614ad081614267565b91508282048414831517614ae757614ae66149e9565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614b4a6028836142e8565b9150614b5582614aee565b604082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b6000614bb6601b836142e8565b9150614bc182614b80565b602082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b6000614c226014836142e8565b9150614c2d82614bec565b602082019050919050565b60006020820190508181036000830152614c5181614c15565b9050919050565b7f41727261792073697a6573206d75737420626520657175616c00000000000000600082015250565b6000614c8e6019836142e8565b9150614c9982614c58565b602082019050919050565b60006020820190508181036000830152614cbd81614c81565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614d4f6039836142e8565b9150614d5a82614cf3565b604082019050919050565b60006020820190508181036000830152614d7e81614d42565b9050919050565b600081519050614d9481614271565b92915050565b600060208284031215614db057614daf61425d565b5b6000614dbe84828501614d85565b91505092915050565b7f496e76616c696420416d6f756e74000000000000000000000000000000000000600082015250565b6000614dfd600e836142e8565b9150614e0882614dc7565b602082019050919050565b60006020820190508181036000830152614e2c81614df0565b9050919050565b6000604082019050614e4860008301856145b4565b614e55602083018461450a565b9392505050565b600081519050614e6b81614751565b92915050565b600060208284031215614e8757614e8661425d565b5b6000614e9584828501614e5c565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614efa6025836142e8565b9150614f0582614e9e565b604082019050919050565b60006020820190508181036000830152614f2981614eed565b9050919050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000614f66600c836142e8565b9150614f7182614f30565b602082019050919050565b60006020820190508181036000830152614f9581614f59565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ff86026836142e8565b915061500382614f9c565b604082019050919050565b6000602082019050818103600083015261502781614feb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061506882614267565b915061507383614267565b9250826150835761508261502e565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150ea6024836142e8565b91506150f58261508e565b604082019050919050565b60006020820190508181036000830152615119816150dd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061517c6022836142e8565b915061518782615120565b604082019050919050565b600060208201905081810360008301526151ab8161516f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061520e6025836142e8565b9150615219826151b2565b604082019050919050565b6000602082019050818103600083015261523d81615201565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152a06023836142e8565b91506152ab82615244565b604082019050919050565b600060208201905081810360008301526152cf81615293565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b600061530c600f836142e8565b9150615317826152d6565b602082019050919050565b6000602082019050818103600083015261533b816152ff565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006153786016836142e8565b915061538382615342565b602082019050919050565b600060208201905081810360008301526153a78161536b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061540a6035836142e8565b9150615415826153ae565b604082019050919050565b60006020820190508181036000830152615439816153fd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006154766013836142e8565b915061548182615440565b602082019050919050565b600060208201905081810360008301526154a581615469565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155086036836142e8565b9150615513826154ac565b604082019050919050565b60006020820190508181036000830152615537816154fb565b9050919050565b600061554982614267565b915061555483614267565b925082820390508181111561556c5761556b6149e9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006155ce6026836142e8565b91506155d982615572565b604082019050919050565b600060208201905081810360008301526155fd816155c1565b9050919050565b6000606082019050615619600083018661450a565b615626602083018561450a565b615633604083018461450a565b949350505050565b600081905092915050565b50565b600061565660008361563b565b915061566182615646565b600082019050919050565b600061567782615649565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506156bf816143c1565b92915050565b6000602082840312156156db576156da61425d565b5b60006156e9848285016156b0565b91505092915050565b6000819050919050565b600061571761571261570d846156f2565b614490565b614267565b9050919050565b615727816156fc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615762816143af565b82525050565b60006157748383615759565b60208301905092915050565b6000602082019050919050565b60006157988261572d565b6157a28185615738565b93506157ad83615749565b8060005b838110156157de5781516157c58882615768565b97506157d083615780565b9250506001810190506157b1565b5085935050505092915050565b600060a082019050615800600083018861450a565b61580d602083018761571e565b818103604083015261581f818661578d565b905061582e60608301856145b4565b61583b608083018461450a565b9695505050505050565b600060c08201905061585a60008301896145b4565b615867602083018861450a565b615874604083018761571e565b615881606083018661571e565b61588e60808301856145b4565b61589b60a083018461450a565b979650505050505050565b6000806000606084860312156158bf576158be61425d565b5b60006158cd86828701614d85565b93505060206158de86828701614d85565b92505060406158ef86828701614d85565b915050925092509256fea264697066735822122072087b6dadb32fa17681af5c5d5cea69b6eaa0b253694d755f74375c58379aab64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103905760003560e01c806375f0a874116101dc578063c024666811610102578063dd7bd775116100a0578063f14210a61161006f578063f14210a614610d6b578063f2fde38b14610d94578063f637434214610dbd578063f8b45b0514610de857610397565b8063dd7bd77514610caf578063e2f4560514610cd8578063eec1c69f14610d03578063f11a24d314610d4057610397565b8063c8c8ebe4116100dc578063c8c8ebe414610bdf578063d257b34f14610c0a578063d85ba06314610c47578063dd62ed3e14610c7257610397565b8063c024666814610b62578063c18bc19514610b8b578063c6d2577d14610bb457610397565b80639a7a23d61161017a578063aacebbe311610149578063aacebbe314610aa6578063b62496f514610acf578063bbc0c74214610b0c578063bf56b37114610b3757610397565b80639a7a23d6146109da5780639e281a9814610a03578063a457c2d714610a2c578063a9059cbb14610a6957610397565b80638da5cb5b116101b65780638da5cb5b14610930578063921369131461095b578063924de9b71461098657806395d89b41146109af57610397565b806375f0a874146108c35780637bce5a04146108ee5780638456cb591461091957610397565b806338d6f847116102c1578063672434821161025f57806370a082311161022e57806370a082311461081b578063715018a614610858578063751039fc1461086f5780637571336a1461089a57610397565b806367243482146107715780636a486a8e1461079a5780636acd9a39146107c55780636ddd1713146107f057610397565b80634a62bb651161029b5780634a62bb65146106b75780634fbee193146106e2578063584857c11461071f57806366ca9b831461074857610397565b806338d6f84714610626578063395093511461064f57806349bd5a5e1461068c57610397565b806318160ddd1161032e578063203e727e11610308578063203e727e1461056a57806323b872dd1461059357806327c8f835146105d0578063313ce567146105fb57610397565b806318160ddd146104e95780631a8145bb146105145780631f3fed8f1461053f57610397565b8063095ea7b31161036a578063095ea7b3146104075780630f3a325f1461044457806310d5de53146104815780631694505e146104be57610397565b806301339c211461039c57806302dbd8f8146103b357806306fdde03146103dc57610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610e13565b005b3480156103bf57600080fd5b506103da60048036038101906103d5919061429d565b610f1a565b005b3480156103e857600080fd5b506103f1610fbe565b6040516103fe919061436d565b60405180910390f35b34801561041357600080fd5b5061042e600480360381019061042991906143ed565b611050565b60405161043b9190614448565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190614463565b61106e565b6040516104789190614448565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190614463565b61108e565b6040516104b59190614448565b60405180910390f35b3480156104ca57600080fd5b506104d36110ae565b6040516104e091906144ef565b60405180910390f35b3480156104f557600080fd5b506104fe6110d2565b60405161050b9190614519565b60405180910390f35b34801561052057600080fd5b506105296110dc565b6040516105369190614519565b60405180910390f35b34801561054b57600080fd5b506105546110e2565b6040516105619190614519565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614534565b6110e8565b005b34801561059f57600080fd5b506105ba60048036038101906105b59190614561565b61117d565b6040516105c79190614448565b60405180910390f35b3480156105dc57600080fd5b506105e5611275565b6040516105f291906145c3565b60405180910390f35b34801561060757600080fd5b5061061061127b565b60405161061d91906145fa565b60405180910390f35b34801561063257600080fd5b5061064d60048036038101906106489190614463565b611284565b005b34801561065b57600080fd5b50610676600480360381019061067191906143ed565b611476565b6040516106839190614448565b60405180910390f35b34801561069857600080fd5b506106a1611522565b6040516106ae91906145c3565b60405180910390f35b3480156106c357600080fd5b506106cc611546565b6040516106d99190614448565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190614463565b611559565b6040516107169190614448565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190614463565b6115af565b005b34801561075457600080fd5b5061076f600480360381019061076a919061429d565b61166f565b005b34801561077d57600080fd5b50610798600480360381019061079391906146d0565b611713565b005b3480156107a657600080fd5b506107af611867565b6040516107bc9190614519565b60405180910390f35b3480156107d157600080fd5b506107da61186d565b6040516107e791906145c3565b60405180910390f35b3480156107fc57600080fd5b50610805611893565b6040516108129190614448565b60405180910390f35b34801561082757600080fd5b50610842600480360381019061083d9190614463565b6118a6565b60405161084f9190614519565b60405180910390f35b34801561086457600080fd5b5061086d6118ee565b005b34801561087b57600080fd5b50610884611976565b6040516108919190614448565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc919061477d565b611a16565b005b3480156108cf57600080fd5b506108d8611aed565b6040516108e591906145c3565b60405180910390f35b3480156108fa57600080fd5b50610903611b13565b6040516109109190614519565b60405180910390f35b34801561092557600080fd5b5061092e611b19565b005b34801561093c57600080fd5b50610945611bb2565b60405161095291906145c3565b60405180910390f35b34801561096757600080fd5b50610970611bdc565b60405161097d9190614519565b60405180910390f35b34801561099257600080fd5b506109ad60048036038101906109a891906147bd565b611be2565b005b3480156109bb57600080fd5b506109c4611c7b565b6040516109d1919061436d565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc919061477d565b611d0d565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190614828565b611e25565b005b348015610a3857600080fd5b50610a536004803603810190610a4e91906143ed565b611fe0565b604051610a609190614448565b60405180910390f35b348015610a7557600080fd5b50610a906004803603810190610a8b91906143ed565b6120cb565b604051610a9d9190614448565b60405180910390f35b348015610ab257600080fd5b50610acd6004803603810190610ac89190614463565b6120e9565b005b348015610adb57600080fd5b50610af66004803603810190610af19190614463565b612225565b604051610b039190614448565b60405180910390f35b348015610b1857600080fd5b50610b21612245565b604051610b2e9190614448565b60405180910390f35b348015610b4357600080fd5b50610b4c612258565b604051610b599190614519565b60405180910390f35b348015610b6e57600080fd5b50610b896004803603810190610b84919061477d565b61225e565b005b348015610b9757600080fd5b50610bb26004803603810190610bad9190614534565b612383565b005b348015610bc057600080fd5b50610bc9612418565b604051610bd69190614519565b60405180910390f35b348015610beb57600080fd5b50610bf461241e565b604051610c019190614519565b60405180910390f35b348015610c1657600080fd5b50610c316004803603810190610c2c9190614534565b612424565b604051610c3e9190614448565b60405180910390f35b348015610c5357600080fd5b50610c5c6124b2565b604051610c699190614519565b60405180910390f35b348015610c7e57600080fd5b50610c996004803603810190610c949190614868565b6124b8565b604051610ca69190614519565b60405180910390f35b348015610cbb57600080fd5b50610cd66004803603810190610cd19190614463565b61253f565b005b348015610ce457600080fd5b50610ced6126a2565b604051610cfa9190614519565b60405180910390f35b348015610d0f57600080fd5b50610d2a6004803603810190610d2591906148e4565b6126a8565b604051610d379190614448565b60405180910390f35b348015610d4c57600080fd5b50610d556127ea565b604051610d629190614519565b60405180910390f35b348015610d7757600080fd5b50610d926004803603810190610d8d9190614534565b6127f0565b005b348015610da057600080fd5b50610dbb6004803603810190610db69190614463565b6128f9565b005b348015610dc957600080fd5b50610dd26129f0565b604051610ddf9190614519565b60405180910390f35b348015610df457600080fd5b50610dfd6129f6565b604051610e0a9190614519565b60405180910390f35b610e1b612a12565b73ffffffffffffffffffffffffffffffffffffffff16610e39611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614610e8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e869061495d565b60405180910390fd5b6000600b5414610ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecb906149c9565b60405180910390fd5b43600b8190555042600c819055506001600a60016101000a81548160ff0219169083151502179055506001600a60026101000a81548160ff021916908315150217905550565b610f22612a12565b73ffffffffffffffffffffffffffffffffffffffff16610f40611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614610f96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8d9061495d565b60405180910390fd5b8160128190555080601381905550601354601254610fb49190614a18565b6011819055505050565b606060038054610fcd90614a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff990614a7b565b80156110465780601f1061101b57610100808354040283529160200191611046565b820191906000526020600020905b81548152906001019060200180831161102957829003601f168201915b5050505050905090565b600061106461105d612a12565b8484612a1a565b6001905092915050565b60196020528060005260406000206000915054906101000a900460ff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60155481565b60145481565b6110f0612a12565b73ffffffffffffffffffffffffffffffffffffffff1661110e611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115b9061495d565b60405180910390fd5b633b9aca00816111749190614aac565b60078190555050565b600061118a848484612be3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111d5612a12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124c90614b60565b60405180910390fd5b61126985611261612a12565b858403612a1a565b60019150509392505050565b61dead81565b60006009905090565b61128c612a12565b73ffffffffffffffffffffffffffffffffffffffff166112aa611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611300576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f79061495d565b60405180910390fd5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361138e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138590614bcc565b60405180910390fd5b601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561141b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141290614c38565b60405180910390fd5b6001601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000611518611483612a12565b848460016000611491612a12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115139190614a18565b612a1a565b6001905092915050565b7f00000000000000000000000054115cac4e7c79d6ea1307a979f589652d6ca0ea81565b600a60009054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6115b7612a12565b73ffffffffffffffffffffffffffffffffffffffff166115d5611bb2565b73ffffffffffffffffffffffffffffffffffffffff161461162b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116229061495d565b60405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611677612a12565b73ffffffffffffffffffffffffffffffffffffffff16611695611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146116eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e29061495d565b60405180910390fd5b81600f8190555080601081905550601054600f546117099190614a18565b600e819055505050565b61171b612a12565b73ffffffffffffffffffffffffffffffffffffffff16611739611bb2565b73ffffffffffffffffffffffffffffffffffffffff161461178f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117869061495d565b60405180910390fd5b8181905084849050146117d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ce90614ca4565b60405180910390fd5b60005b84849050811015611860576000611817633b9aca0085858581811061180257611801614cc4565b5b9050602002013561393390919063ffffffff16565b905061184b338787858181106118305761182f614cc4565b5b90506020020160208101906118459190614463565b83612be3565b6001826118589190614a18565b9150506117da565b5050505050565b60115481565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118f6612a12565b73ffffffffffffffffffffffffffffffffffffffff16611914611bb2565b73ffffffffffffffffffffffffffffffffffffffff161461196a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119619061495d565b60405180910390fd5b6119746000613949565b565b6000611980612a12565b73ffffffffffffffffffffffffffffffffffffffff1661199e611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb9061495d565b60405180910390fd5b6000600a60006101000a81548160ff0219169083151502179055506001905090565b611a1e612a12565b73ffffffffffffffffffffffffffffffffffffffff16611a3c611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611a92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a899061495d565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b611b21612a12565b73ffffffffffffffffffffffffffffffffffffffff16611b3f611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611b95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8c9061495d565b60405180910390fd5b6000600a60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b611bea612a12565b73ffffffffffffffffffffffffffffffffffffffff16611c08611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c559061495d565b60405180910390fd5b80600a60026101000a81548160ff02191690831515021790555050565b606060048054611c8a90614a7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611cb690614a7b565b8015611d035780601f10611cd857610100808354040283529160200191611d03565b820191906000526020600020905b815481529060010190602001808311611ce657829003601f168201915b5050505050905090565b611d15612a12565b73ffffffffffffffffffffffffffffffffffffffff16611d33611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611d89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d809061495d565b60405180910390fd5b7f00000000000000000000000054115cac4e7c79d6ea1307a979f589652d6ca0ea73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614d65565b60405180910390fd5b611e218282613a0f565b5050565b611e2d612a12565b73ffffffffffffffffffffffffffffffffffffffff16611e4b611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614611ea1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e989061495d565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611edb91906145c3565b602060405180830381865afa158015611ef8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1c9190614d9a565b1015611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5490614e13565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611f98929190614e33565b6020604051808303816000875af1158015611fb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdb9190614e71565b505050565b60008060016000611fef612a12565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390614f10565b60405180910390fd5b6120c06120b7612a12565b85858403612a1a565b600191505092915050565b60006120df6120d8612a12565b8484612be3565b6001905092915050565b6120f1612a12565b73ffffffffffffffffffffffffffffffffffffffff1661210f611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614612165576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215c9061495d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600a60019054906101000a900460ff1681565b600b5481565b612266612a12565b73ffffffffffffffffffffffffffffffffffffffff16612284611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d19061495d565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123779190614448565b60405180910390a25050565b61238b612a12565b73ffffffffffffffffffffffffffffffffffffffff166123a9611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146123ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f69061495d565b60405180910390fd5b633b9aca008161240f9190614aac565b60098190555050565b600c5481565b60075481565b600061242e612a12565b73ffffffffffffffffffffffffffffffffffffffff1661244c611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146124a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124999061495d565b60405180910390fd5b8160088190555060019050919050565b600e5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612547612a12565b73ffffffffffffffffffffffffffffffffffffffff16612565611bb2565b73ffffffffffffffffffffffffffffffffffffffff16146125bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b29061495d565b60405180910390fd5b601960008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612647576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263e90614f7c565b60405180910390fd5b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60085481565b6000803390506126fb81601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a1a565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60405161279a9190614519565b60405180910390a38263ffffffff167f8512a3b7f582af20151f3ec533d09f7605d2e65691a8268b66126ca7e2a27be1336040516127d891906145c3565b60405180910390a26001915050919050565b60105481565b6127f8612a12565b73ffffffffffffffffffffffffffffffffffffffff16612816611bb2565b73ffffffffffffffffffffffffffffffffffffffff161461286c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128639061495d565b60405180910390fd5b804710156128af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a690614e13565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156128f5573d6000803e3d6000fd5b5050565b612901612a12565b73ffffffffffffffffffffffffffffffffffffffff1661291f611bb2565b73ffffffffffffffffffffffffffffffffffffffff1614612975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296c9061495d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db9061500e565b60405180910390fd5b6129ed81613949565b50565b60135481565b60095481565b60008183612a0a919061505d565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8090615100565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612af8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aef90615192565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bd69190614519565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4990615224565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb8906152b6565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4590615322565b60405180910390fd5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dd290615322565b60405180910390fd5b60008103612df457612def83836000613ab0565b61392e565b600a60009054906101000a900460ff16156134bc57612e11611bb2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e7f5750612e4f611bb2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612eb85750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ef2575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f0b5750600560149054906101000a900460ff16155b156134bb57600a60019054906101000a900460ff1661300557601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fc55750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ffb9061538e565b60405180910390fd5b5b600d54600c546130159190614a18565b4210801561306f57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156131d2577f00000000000000000000000054115cac4e7c79d6ea1307a979f589652d6ca0ea73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613124576001601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506131d1565b7f00000000000000000000000054115cac4e7c79d6ea1307a979f589652d6ca0ea73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131d0576001601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132755750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561331c576007548111156132bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132b690615420565b60405180910390fd5b6009546132cb836118a6565b826132d69190614a18565b1115613317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330e9061548c565b60405180910390fd5b6134ba565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133bf5750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561340e57600754811115613409576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134009061551e565b60405180910390fd5b6134b9565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166134b85760095461346b836118a6565b826134769190614a18565b11156134b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ae9061548c565b60405180910390fd5b5b5b5b5b5b60006134c7306118a6565b9050600060085482101590508080156134ec5750600a60029054906101000a900460ff165b80156135055750600560149054906101000a900460ff16155b801561355b5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135b15750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156136075750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561364b576001600560146101000a81548160ff02191690831515021790555061362f613d2f565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137015750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561370b57600090505b6000811561391e57601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561376e57506000601154115b156138085761379b606461378d6011548861393390919063ffffffff16565b6129fc90919063ffffffff16565b9050601154601354826137ae9190614aac565b6137b8919061505d565b601560008282546137c99190614a18565b92505081905550601154601254826137e19190614aac565b6137eb919061505d565b601460008282546137fc9190614a18565b925050819055506138fa565b601a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561386357506000600e54115b156138f9576138906064613882600e548861393390919063ffffffff16565b6129fc90919063ffffffff16565b9050600e54601054826138a39190614aac565b6138ad919061505d565b601560008282546138be9190614a18565b92505081905550600e54600f54826138d69190614aac565b6138e0919061505d565b601460008282546138f19190614a18565b925050819055505b5b600081111561390f5761390e873083613ab0565b5b808561391b919061553e565b94505b613929878787613ab0565b505050505b505050565b600081836139419190614aac565b905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613b1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1690615224565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b85906152b6565b60405180910390fd5b613b99838383613f24565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c16906155e4565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613cb29190614a18565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d169190614519565b60405180910390a3613d29848484613f29565b50505050565b6000613d3a306118a6565b90506000601454601554613d4e9190614a18565b9050600080831480613d605750600082145b15613d6d57505050613f22565b600854831115613d7d5760085492505b600060028360155486613d909190614aac565b613d9a919061505d565b613da4919061505d565b90506000613dbb8286613f2e90919063ffffffff16565b90506000479050613dcb82613f44565b6000613de08247613f2e90919063ffffffff16565b90506000613e0b87613dfd6014548561393390919063ffffffff16565b6129fc90919063ffffffff16565b905060008183613e1b919061553e565b905060006015819055506000601481905550600086118015613e3d5750600081115b15613e8a57613e4c8682614181565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601554604051613e8193929190615604565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ed09061566c565b60006040518083038185875af1925050503d8060008114613f0d576040519150601f19603f3d011682016040523d82523d6000602084013e613f12565b606091505b5050809750505050505050505050505b565b505050565b505050565b60008183613f3c919061553e565b905092915050565b6000600267ffffffffffffffff811115613f6157613f60615681565b5b604051908082528060200260200182016040528015613f8f5781602001602082028036833780820191505090505b5090503081600081518110613fa757613fa6614cc4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561404c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061407091906156c5565b8160018151811061408457614083614cc4565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140e9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a1a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161414b9594939291906157eb565b600060405180830381600087803b15801561416557600080fd5b505af1158015614179573d6000803e3d6000fd5b505050505050565b6141ac307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a1a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b815260040161421396959493929190615845565b60606040518083038185885af1158015614231573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061425691906158a6565b5050505050565b600080fd5b600080fd5b6000819050919050565b61427a81614267565b811461428557600080fd5b50565b60008135905061429781614271565b92915050565b600080604083850312156142b4576142b361425d565b5b60006142c285828601614288565b92505060206142d385828601614288565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156143175780820151818401526020810190506142fc565b60008484015250505050565b6000601f19601f8301169050919050565b600061433f826142dd565b61434981856142e8565b93506143598185602086016142f9565b61436281614323565b840191505092915050565b600060208201905081810360008301526143878184614334565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006143ba8261438f565b9050919050565b6143ca816143af565b81146143d557600080fd5b50565b6000813590506143e7816143c1565b92915050565b600080604083850312156144045761440361425d565b5b6000614412858286016143d8565b925050602061442385828601614288565b9150509250929050565b60008115159050919050565b6144428161442d565b82525050565b600060208201905061445d6000830184614439565b92915050565b6000602082840312156144795761447861425d565b5b6000614487848285016143d8565b91505092915050565b6000819050919050565b60006144b56144b06144ab8461438f565b614490565b61438f565b9050919050565b60006144c78261449a565b9050919050565b60006144d9826144bc565b9050919050565b6144e9816144ce565b82525050565b600060208201905061450460008301846144e0565b92915050565b61451381614267565b82525050565b600060208201905061452e600083018461450a565b92915050565b60006020828403121561454a5761454961425d565b5b600061455884828501614288565b91505092915050565b60008060006060848603121561457a5761457961425d565b5b6000614588868287016143d8565b9350506020614599868287016143d8565b92505060406145aa86828701614288565b9150509250925092565b6145bd816143af565b82525050565b60006020820190506145d860008301846145b4565b92915050565b600060ff82169050919050565b6145f4816145de565b82525050565b600060208201905061460f60008301846145eb565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261463a57614639614615565b5b8235905067ffffffffffffffff8111156146575761465661461a565b5b6020830191508360208202830111156146735761467261461f565b5b9250929050565b60008083601f8401126146905761468f614615565b5b8235905067ffffffffffffffff8111156146ad576146ac61461a565b5b6020830191508360208202830111156146c9576146c861461f565b5b9250929050565b600080600080604085870312156146ea576146e961425d565b5b600085013567ffffffffffffffff81111561470857614707614262565b5b61471487828801614624565b9450945050602085013567ffffffffffffffff81111561473757614736614262565b5b6147438782880161467a565b925092505092959194509250565b61475a8161442d565b811461476557600080fd5b50565b60008135905061477781614751565b92915050565b600080604083850312156147945761479361425d565b5b60006147a2858286016143d8565b92505060206147b385828601614768565b9150509250929050565b6000602082840312156147d3576147d261425d565b5b60006147e184828501614768565b91505092915050565b60006147f5826143af565b9050919050565b614805816147ea565b811461481057600080fd5b50565b600081359050614822816147fc565b92915050565b6000806040838503121561483f5761483e61425d565b5b600061484d85828601614813565b925050602061485e85828601614288565b9150509250929050565b6000806040838503121561487f5761487e61425d565b5b600061488d858286016143d8565b925050602061489e858286016143d8565b9150509250929050565b600063ffffffff82169050919050565b6148c1816148a8565b81146148cc57600080fd5b50565b6000813590506148de816148b8565b92915050565b6000602082840312156148fa576148f961425d565b5b6000614908848285016148cf565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149476020836142e8565b915061495282614911565b602082019050919050565b600060208201905081810360008301526149768161493a565b9050919050565b7f416c7265616479206c61756e6368656400000000000000000000000000000000600082015250565b60006149b36010836142e8565b91506149be8261497d565b602082019050919050565b600060208201905081810360008301526149e2816149a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614a2382614267565b9150614a2e83614267565b9250828201905080821115614a4657614a456149e9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a9357607f821691505b602082108103614aa657614aa5614a4c565b5b50919050565b6000614ab782614267565b9150614ac283614267565b9250828202614ad081614267565b91508282048414831517614ae757614ae66149e9565b5b5092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614b4a6028836142e8565b9150614b5582614aee565b604082019050919050565b60006020820190508181036000830152614b7981614b3d565b9050919050565b7f57652063616e206e6f7420626c61636b6c69737420726f757465720000000000600082015250565b6000614bb6601b836142e8565b9150614bc182614b80565b602082019050919050565b60006020820190508181036000830152614be581614ba9565b9050919050565b7f536e6970657220616c7265616479206578697374000000000000000000000000600082015250565b6000614c226014836142e8565b9150614c2d82614bec565b602082019050919050565b60006020820190508181036000830152614c5181614c15565b9050919050565b7f41727261792073697a6573206d75737420626520657175616c00000000000000600082015250565b6000614c8e6019836142e8565b9150614c9982614c58565b602082019050919050565b60006020820190508181036000830152614cbd81614c81565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614d4f6039836142e8565b9150614d5a82614cf3565b604082019050919050565b60006020820190508181036000830152614d7e81614d42565b9050919050565b600081519050614d9481614271565b92915050565b600060208284031215614db057614daf61425d565b5b6000614dbe84828501614d85565b91505092915050565b7f496e76616c696420416d6f756e74000000000000000000000000000000000000600082015250565b6000614dfd600e836142e8565b9150614e0882614dc7565b602082019050919050565b60006020820190508181036000830152614e2c81614df0565b9050919050565b6000604082019050614e4860008301856145b4565b614e55602083018461450a565b9392505050565b600081519050614e6b81614751565b92915050565b600060208284031215614e8757614e8661425d565b5b6000614e9584828501614e5c565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614efa6025836142e8565b9150614f0582614e9e565b604082019050919050565b60006020820190508181036000830152614f2981614eed565b9050919050565b7f4e6f74206120736e697065720000000000000000000000000000000000000000600082015250565b6000614f66600c836142e8565b9150614f7182614f30565b602082019050919050565b60006020820190508181036000830152614f9581614f59565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ff86026836142e8565b915061500382614f9c565b604082019050919050565b6000602082019050818103600083015261502781614feb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061506882614267565b915061507383614267565b9250826150835761508261502e565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150ea6024836142e8565b91506150f58261508e565b604082019050919050565b60006020820190508181036000830152615119816150dd565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061517c6022836142e8565b915061518782615120565b604082019050919050565b600060208201905081810360008301526151ab8161516f565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061520e6025836142e8565b9150615219826151b2565b604082019050919050565b6000602082019050818103600083015261523d81615201565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152a06023836142e8565b91506152ab82615244565b604082019050919050565b600060208201905081810360008301526152cf81615293565b9050919050565b7f536e697065722064657465637465640000000000000000000000000000000000600082015250565b600061530c600f836142e8565b9150615317826152d6565b602082019050919050565b6000602082019050818103600083015261533b816152ff565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006153786016836142e8565b915061538382615342565b602082019050919050565b600060208201905081810360008301526153a78161536b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061540a6035836142e8565b9150615415826153ae565b604082019050919050565b60006020820190508181036000830152615439816153fd565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006154766013836142e8565b915061548182615440565b602082019050919050565b600060208201905081810360008301526154a581615469565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006155086036836142e8565b9150615513826154ac565b604082019050919050565b60006020820190508181036000830152615537816154fb565b9050919050565b600061554982614267565b915061555483614267565b925082820390508181111561556c5761556b6149e9565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006155ce6026836142e8565b91506155d982615572565b604082019050919050565b600060208201905081810360008301526155fd816155c1565b9050919050565b6000606082019050615619600083018661450a565b615626602083018561450a565b615633604083018461450a565b949350505050565b600081905092915050565b50565b600061565660008361563b565b915061566182615646565b600082019050919050565b600061567782615649565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506156bf816143c1565b92915050565b6000602082840312156156db576156da61425d565b5b60006156e9848285016156b0565b91505092915050565b6000819050919050565b600061571761571261570d846156f2565b614490565b614267565b9050919050565b615727816156fc565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615762816143af565b82525050565b60006157748383615759565b60208301905092915050565b6000602082019050919050565b60006157988261572d565b6157a28185615738565b93506157ad83615749565b8060005b838110156157de5781516157c58882615768565b97506157d083615780565b9250506001810190506157b1565b5085935050505092915050565b600060a082019050615800600083018861450a565b61580d602083018761571e565b818103604083015261581f818661578d565b905061582e60608301856145b4565b61583b608083018461450a565b9695505050505050565b600060c08201905061585a60008301896145b4565b615867602083018861450a565b615874604083018761571e565b615881606083018661571e565b61588e60808301856145b4565b61589b60a083018461450a565b979650505050505050565b6000806000606084860312156158bf576158be61425d565b5b60006158cd86828701614d85565b93505060206158de86828701614d85565b92505060406158ef86828701614d85565b915050925092509256fea264697066735822122072087b6dadb32fa17681af5c5d5cea69b6eaa0b253694d755f74375c58379aab64736f6c63430008120033

Deployed Bytecode Sourcemap

19486:15818:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24068:242;;;;;;;;;;;;;:::i;:::-;;25634:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5537:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6933:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21530:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21460:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19565:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6025:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20443:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20403;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24735:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7135:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19668:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5868:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26978:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7672:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19623:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19914:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26844:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21144:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25362:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34439:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20276:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20485:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19994:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6196:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1969:103;;;;;;;;;;;;;:::i;:::-;;24362:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24989:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19760:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20191:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23986:74;;;;;;;;;;;;;:::i;:::-;;1661:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20316:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25254:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5756:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26102:306;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35092:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7970:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6347:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26612:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21728:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19954:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20034:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25912:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24866:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20066:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19799:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24553:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20152:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6610:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27279:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19841:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20524:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20233:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34901:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2227:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20359:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19881:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24068:242;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24136:1:::1;24122:10;;:15;24114:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;24182:12;24169:10;:25;;;;24227:15;24205:19;:37;;;;24269:4;24253:13;;:20;;;;;;;;;;;;;;;;;;24298:4;24284:11;;:18;;;;;;;;;;;;;;;;;;24068:242::o:0;25634:270::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25778:13:::1;25759:16;:32;;;;25821:13;25802:16;:32;;;;25880:16;;25861;;:35;;;;:::i;:::-;25845:13;:51;;;;25634:270:::0;;:::o;5537:100::-;5591:13;5624:5;5617:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5537:100;:::o;6933:194::-;7041:4;7058:39;7067:12;:10;:12::i;:::-;7081:7;7090:6;7058:8;:39::i;:::-;7115:4;7108:11;;6933:194;;;;:::o;21530:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;21460:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19565:51::-;;;:::o;6025:108::-;6086:7;6113:12;;6106:19;;6025:108;:::o;20443:33::-;;;;:::o;20403:::-;;;;:::o;24735:123::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24842:7:::1;24832:6;:18;;;;:::i;:::-;24809:20;:41;;;;24735:123:::0;:::o;7135:529::-;7275:4;7292:36;7302:6;7310:9;7321:6;7292:9;:36::i;:::-;7341:24;7368:11;:19;7380:6;7368:19;;;;;;;;;;;;;;;:33;7388:12;:10;:12::i;:::-;7368:33;;;;;;;;;;;;;;;;7341:60;;7454:6;7434:16;:26;;7412:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7564:57;7573:6;7581:12;:10;:12::i;:::-;7614:6;7595:16;:25;7564:8;:57::i;:::-;7652:4;7645:11;;;7135:529;;;;;:::o;19668:53::-;19714:6;19668:53;:::o;5868:92::-;5926:5;5951:1;5944:8;;5868:92;:::o;26978:293::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27093:15:::1;27073:36;;:8;:36;;::::0;27051:113:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;27184:8;:18;27193:8;27184:18;;;;;;;;;;;;;;;;;;;;;;;;;27183:19;27175:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;27259:4;27238:8;:18;27247:8;27238:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;26978:293:::0;:::o;7672:290::-;7785:4;7802:130;7825:12;:10;:12::i;:::-;7852:7;7911:10;7874:11;:25;7886:12;:10;:12::i;:::-;7874:25;;;;;;;;;;;;;;;:34;7900:7;7874:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7802:8;:130::i;:::-;7950:4;7943:11;;7672:290;;;;:::o;19623:38::-;;;:::o;19914:33::-;;;;;;;;;;;;;:::o;26844:126::-;26910:4;26934:19;:28;26954:7;26934:28;;;;;;;;;;;;;;;;;;;;;;;;;26927:35;;26844:126;;;:::o;21144:166::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21286:16:::1;21268:15;;:34;;;;;;;;;;;;;;;;;;21144:166:::0;:::o;25362:264::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25504:13:::1;25486:15;:31;;;;25546:13;25528:15;:31;;;;25603:15;;25585;;:33;;;;:::i;:::-;25570:12;:48;;;;25362:264:::0;;:::o;34439:454::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34611:7:::1;;:14;;34591:9;;:16;;:34;34569:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;34689:9;34713:173;34724:9;;:16;;34720:1;:20;34713:173;;;34757:15;34775:19;34790:3;34775:7;;34783:1;34775:10;;;;;;;:::i;:::-;;;;;;;;:14;;:19;;;;:::i;:::-;34757:37;;34809:44;34819:10;34831:9;;34841:1;34831:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34845:7;34809:9;:44::i;:::-;34873:1;34868:6;;;;;:::i;:::-;;;34742:144;34713:173;;;34558:335;34439:454:::0;;;;:::o;20276:33::-;;;;:::o;20485:30::-;;;;;;;;;;;;;:::o;19994:31::-;;;;;;;;;;;;;:::o;6196:143::-;6286:7;6313:9;:18;6323:7;6313:18;;;;;;;;;;;;;;;;6306:25;;6196:143;;;:::o;1969:103::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2034:30:::1;2061:1;2034:18;:30::i;:::-;1969:103::o:0;24362:121::-;24414:4;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24448:5:::1;24431:14;;:22;;;;;;;;;;;;;;;;;;24471:4;24464:11;;24362:121:::0;:::o;24989:169::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25146:4:::1;25104:31;:39;25136:6;25104:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24989:169:::0;;:::o;19760:30::-;;;;;;;;;;;;;:::o;20191:35::-;;;;:::o;23986:74::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24047:5:::1;24031:13;;:21;;;;;;;;;;;;;;;;;;23986:74::o:0;1661:87::-;1707:7;1734:6;;;;;;;;;;;1727:13;;1661:87;:::o;20316:36::-;;;;:::o;25254:100::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25339:7:::1;25325:11;;:21;;;;;;;;;;;;;;;;;;25254:100:::0;:::o;5756:104::-;5812:13;5845:7;5838:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5756:104;:::o;26102:306::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26248:13:::1;26240:21;;:4;:21;;::::0;26218:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26359:41;26388:4;26394:5;26359:28;:41::i;:::-;26102:306:::0;;:::o;35092:209::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35220:7:::1;35185:6;:16;;;35210:4;35185:31;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;35177:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35257:6;:15;;;35273:10;35285:7;35257:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;35092:209:::0;;:::o;7970:475::-;8088:4;8105:24;8132:11;:25;8144:12;:10;:12::i;:::-;8132:25;;;;;;;;;;;;;;;:34;8158:7;8132:34;;;;;;;;;;;;;;;;8105:61;;8219:15;8199:16;:35;;8177:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;8335:67;8344:12;:10;:12::i;:::-;8358:7;8386:15;8367:16;:34;8335:8;:67::i;:::-;8433:4;8426:11;;;7970:475;;;;:::o;6347:200::-;6458:4;6475:42;6485:12;:10;:12::i;:::-;6499:9;6510:6;6475:9;:42::i;:::-;6535:4;6528:11;;6347:200;;;;:::o;26612:224::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26765:15:::1;;;;;;;;;;;26722:59;;26745:18;26722:59;;;;;;;;;;;;26810:18;26792:15;;:36;;;;;;;;;;;;;;;;;;26612:224:::0;:::o;21728:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19954:33::-;;;;;;;;;;;;;:::o;20034:25::-;;;;:::o;25912:182::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26028:8:::1;25997:19;:28;26017:7;25997:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26068:7;26052:34;;;26077:8;26052:34;;;;;;:::i;:::-;;;;;;;;25912:182:::0;;:::o;24866:115::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24965:7:::1;24955:6;:18;;;;:::i;:::-;24943:9;:30;;;;24866:115:::0;:::o;20066:34::-;;;;:::o;19799:35::-;;;;:::o;24553:174::-;24650:4;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24688:9:::1;24667:18;:30;;;;24715:4;24708:11;;24553:174:::0;;;:::o;20152:32::-;;;;:::o;6610:176::-;6724:7;6751:11;:18;6763:5;6751:18;;;;;;;;;;;;;;;:27;6770:7;6751:27;;;;;;;;;;;;;;;;6744:34;;6610:176;;;;:::o;27279:166::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27365:8:::1;:18;27374:8;27365:18;;;;;;;;;;;;;;;;;;;;;;;;;27357:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;27432:5;27411:8;:18;27420:8;27411:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;27279:166:::0;:::o;19841:33::-;;;;:::o;20524:529::-;20584:4;20713:12;20728:10;20713:25;;20760:50;20769:4;20775:15;;;;;;;;;;;20792:17;20760:8;:50::i;:::-;20894:15;;;;;;;;;;;20879:50;;20888:4;20879:50;;;20911:17;20879:50;;;;;;:::i;:::-;;;;;;;;21016:6;20983:40;;;21004:10;20983:40;;;;;;:::i;:::-;;;;;;;;21041:4;21034:11;;;20524:529;;;:::o;20233:34::-;;;;:::o;34901:183::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35002:7:::1;34977:21;:32;;34969:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;35047:10;35039:28;;:37;35068:7;35039:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34901:183:::0;:::o;2227:238::-;1892:12;:10;:12::i;:::-;1881:23;;:7;:5;:7::i;:::-;:23;;;1873:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2350:1:::1;2330:22;;:8;:22;;::::0;2308:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2429:28;2448:8;2429:18;:28::i;:::-;2227:238:::0;:::o;20359:35::-;;;;:::o;19881:24::-;;;;:::o;13444:98::-;13502:7;13533:1;13529;:5;;;;:::i;:::-;13522:12;;13444:98;;;;:::o;1019:::-;1072:7;1099:10;1092:17;;1019:98;:::o;10237:380::-;10390:1;10373:19;;:5;:19;;;10365:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10471:1;10452:21;;:7;:21;;;10444:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10555:6;10525:11;:18;10537:5;10525:18;;;;;;;;;;;;;;;:27;10544:7;10525:27;;;;;;;;;;;;;;;:36;;;;10593:7;10577:32;;10586:5;10577:32;;;10602:6;10577:32;;;;;;:::i;:::-;;;;;;;;10237:380;;;:::o;27453:4336::-;27601:1;27585:18;;:4;:18;;;27577:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27678:1;27664:16;;:2;:16;;;27656:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27740:8;:12;27749:2;27740:12;;;;;;;;;;;;;;;;;;;;;;;;;27739:13;27731:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;27792:8;:14;27801:4;27792:14;;;;;;;;;;;;;;;;;;;;;;;;;27791:15;27783:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;27853:1;27843:6;:11;27839:93;;27871:28;27887:4;27893:2;27897:1;27871:15;:28::i;:::-;27914:7;;27839:93;27948:14;;;;;;;;;;;27944:2138;;;28009:7;:5;:7::i;:::-;28001:15;;:4;:15;;;;:49;;;;;28043:7;:5;:7::i;:::-;28037:13;;:2;:13;;;;28001:49;:86;;;;;28085:1;28071:16;;:2;:16;;;;28001:86;:128;;;;;28122:6;28108:21;;:2;:21;;;;28001:128;:158;;;;;28151:8;;;;;;;;;;;28150:9;28001:158;27979:2092;;;28199:13;;;;;;;;;;;28194:223;;28271:19;:25;28291:4;28271:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;28300:19;:23;28320:2;28300:23;;;;;;;;;;;;;;;;;;;;;;;;;28271:52;28237:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;28194:223;28529:15;;28507:19;;:37;;;;:::i;:::-;28489:15;:55;:112;;;;;28585:15;28569:32;;:4;:32;;;;28489:112;28463:400;;;28656:13;28648:21;;:4;:21;;;28644:200;;28713:4;28698:8;:12;28707:2;28698:12;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;28644:200;;;28757:13;28751:19;;:2;:19;;;28747:97;;28816:4;28799:8;:14;28808:4;28799:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;28747:97;28644:200;28463:400;28935:25;:31;28961:4;28935:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;28992:31;:35;29024:2;28992:35;;;;;;;;;;;;;;;;;;;;;;;;;28991:36;28935:92;28909:1147;;;29114:20;;29104:6;:30;;29070:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;29322:9;;29305:13;29315:2;29305:9;:13::i;:::-;29296:6;:22;;;;:::i;:::-;:35;;29262:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28909:1147;;;29500:25;:29;29526:2;29500:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;29555:31;:37;29587:4;29555:37;;;;;;;;;;;;;;;;;;;;;;;;;29554:38;29500:92;29474:582;;;29679:20;;29669:6;:30;;29635:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;29474:582;;;29836:31;:35;29868:2;29836:35;;;;;;;;;;;;;;;;;;;;;;;;;29831:225;;29956:9;;29939:13;29949:2;29939:9;:13::i;:::-;29930:6;:22;;;;:::i;:::-;:35;;29896:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29831:225;29474:582;28909:1147;27979:2092;27944:2138;30094:28;30125:24;30143:4;30125:9;:24::i;:::-;30094:55;;30162:12;30201:18;;30177:20;:42;;30162:57;;30250:7;:35;;;;;30274:11;;;;;;;;;;;30250:35;:61;;;;;30303:8;;;;;;;;;;;30302:9;30250:61;:110;;;;;30329:25;:31;30355:4;30329:31;;;;;;;;;;;;;;;;;;;;;;;;;30328:32;30250:110;:153;;;;;30378:19;:25;30398:4;30378:25;;;;;;;;;;;;;;;;;;;;;;;;;30377:26;30250:153;:194;;;;;30421:19;:23;30441:2;30421:23;;;;;;;;;;;;;;;;;;;;;;;;;30420:24;30250:194;30232:326;;;30482:4;30471:8;;:15;;;;;;;;;;;;;;;;;;30503:10;:8;:10::i;:::-;30541:5;30530:8;;:16;;;;;;;;;;;;;;;;;;30232:326;30570:12;30586:8;;;;;;;;;;;30585:9;30570:24;;30696:19;:25;30716:4;30696:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;30725:19;:23;30745:2;30725:23;;;;;;;;;;;;;;;;;;;;;;;;;30696:52;30692:100;;;30775:5;30765:15;;30692:100;30804:12;30909:7;30905:831;;;30961:25;:29;30987:2;30961:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;31010:1;30994:13;;:17;30961:50;30957:630;;;31039:34;31069:3;31039:25;31050:13;;31039:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;31032:41;;31142:13;;31122:16;;31115:4;:23;;;;:::i;:::-;31114:41;;;;:::i;:::-;31092:18;;:63;;;;;;;:::i;:::-;;;;;;;;31224:13;;31204:16;;31197:4;:23;;;;:::i;:::-;31196:41;;;;:::i;:::-;31174:18;;:63;;;;;;;:::i;:::-;;;;;;;;30957:630;;;31299:25;:31;31325:4;31299:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;31349:1;31334:12;;:16;31299:51;31295:292;;;31378:33;31407:3;31378:24;31389:12;;31378:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;31371:40;;31479:12;;31460:15;;31453:4;:22;;;;:::i;:::-;31452:39;;;;:::i;:::-;31430:18;;:61;;;;;;;:::i;:::-;;;;;;;;31559:12;;31540:15;;31533:4;:22;;;;:::i;:::-;31532:39;;;;:::i;:::-;31510:18;;:61;;;;;;;:::i;:::-;;;;;;;;31295:292;30957:630;31614:1;31607:4;:8;31603:91;;;31636:42;31652:4;31666;31673;31636:15;:42::i;:::-;31603:91;31720:4;31710:14;;;;;:::i;:::-;;;30905:831;31748:33;31764:4;31770:2;31774:6;31748:15;:33::i;:::-;27566:4223;;;;27453:4336;;;;:::o;13338:98::-;13396:7;13427:1;13423;:5;;;;:::i;:::-;13416:12;;13338:98;;;;:::o;2625:191::-;2699:16;2718:6;;;;;;;;;;;2699:25;;2744:8;2735:6;;:17;;;;;;;;;;;;;;;;;;2799:8;2768:40;;2789:8;2768:40;;;;;;;;;;;;2688:128;2625:191;:::o;26416:188::-;26533:5;26499:25;:31;26525:4;26499:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;26590:5;26556:40;;26584:4;26556:40;;;;;;;;;;;;26416:188;;:::o;8453:770::-;8611:1;8593:20;;:6;:20;;;8585:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8695:1;8674:23;;:9;:23;;;8666:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8750:47;8771:6;8779:9;8790:6;8750:20;:47::i;:::-;8810:21;8834:9;:17;8844:6;8834:17;;;;;;;;;;;;;;;;8810:41;;8901:6;8884:13;:23;;8862:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;9045:6;9029:13;:22;9009:9;:17;9019:6;9009:17;;;;;;;;;;;;;;;:42;;;;9097:6;9073:9;:20;9083:9;9073:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9138:9;9121:35;;9130:6;9121:35;;;9149:6;9121:35;;;;;;:::i;:::-;;;;;;;;9169:46;9189:6;9197:9;9208:6;9169:19;:46::i;:::-;8574:649;8453:770;;;:::o;32919:1512::-;32958:23;32984:24;33002:4;32984:9;:24::i;:::-;32958:50;;33019:25;33068:18;;33047;;:39;;;;:::i;:::-;33019:67;;33097:12;33145:1;33126:15;:20;:46;;;;33171:1;33150:17;:22;33126:46;33122:85;;;33189:7;;;;;33122:85;33241:18;;33223:15;:36;33219:105;;;33294:18;;33276:36;;33219:105;33385:23;33498:1;33465:17;33430:18;;33412:15;:36;;;;:::i;:::-;33411:71;;;;:::i;:::-;:88;;;;:::i;:::-;33385:114;;33510:26;33539:36;33559:15;33539;:19;;:36;;;;:::i;:::-;33510:65;;33588:25;33616:21;33588:49;;33650:36;33667:18;33650:16;:36::i;:::-;33699:18;33720:44;33746:17;33720:21;:25;;:44;;;;:::i;:::-;33699:65;;33777:23;33803:81;33856:17;33803:34;33818:18;;33803:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;33777:107;;33897:23;33936:15;33923:10;:28;;;;:::i;:::-;33897:54;;33985:1;33964:18;:22;;;;34018:1;33997:18;:22;;;;34054:1;34036:15;:19;:42;;;;;34077:1;34059:15;:19;34036:42;34032:278;;;34095:46;34108:15;34125;34095:12;:46::i;:::-;34161:137;34194:18;34231:15;34265:18;;34161:137;;;;;;;;:::i;:::-;;;;;;;;34032:278;34344:15;;;;;;;;;;;34336:29;;34387:21;34336:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34322:101;;;;;32947:1484;;;;;;;;;32919:1512;:::o;10625:125::-;;;;:::o;10758:124::-;;;;:::o;13232:98::-;13290:7;13321:1;13317;:5;;;;:::i;:::-;13310:12;;13232:98;;;;:::o;31797:589::-;31923:21;31961:1;31947:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31923:40;;31992:4;31974;31979:1;31974:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32018:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32008:4;32013:1;32008:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;32053:62;32070:4;32085:15;32103:11;32053:8;:62::i;:::-;32154:15;:66;;;32235:11;32261:1;32305:4;32332;32352:15;32154:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31852:534;31797:589;:::o;32394:517::-;32542:62;32559:4;32574:15;32592:11;32542:8;:62::i;:::-;32647:15;:31;;;32686:9;32719:4;32739:11;32765:1;32808;19714:6;32877:15;32647:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32394:517;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:60::-;4289:3;4310:5;4303:12;;4261:60;;;:::o;4327:142::-;4377:9;4410:53;4428:34;4437:24;4455:5;4437:24;:::i;:::-;4428:34;:::i;:::-;4410:53;:::i;:::-;4397:66;;4327:142;;;:::o;4475:126::-;4525:9;4558:37;4589:5;4558:37;:::i;:::-;4545:50;;4475:126;;;:::o;4607:153::-;4684:9;4717:37;4748:5;4717:37;:::i;:::-;4704:50;;4607:153;;;:::o;4766:185::-;4880:64;4938:5;4880:64;:::i;:::-;4875:3;4868:77;4766:185;;:::o;4957:276::-;5077:4;5115:2;5104:9;5100:18;5092:26;;5128:98;5223:1;5212:9;5208:17;5199:6;5128:98;:::i;:::-;4957:276;;;;:::o;5239:118::-;5326:24;5344:5;5326:24;:::i;:::-;5321:3;5314:37;5239:118;;:::o;5363:222::-;5456:4;5494:2;5483:9;5479:18;5471:26;;5507:71;5575:1;5564:9;5560:17;5551:6;5507:71;:::i;:::-;5363:222;;;;:::o;5591:329::-;5650:6;5699:2;5687:9;5678:7;5674:23;5670:32;5667:119;;;5705:79;;:::i;:::-;5667:119;5825:1;5850:53;5895:7;5886:6;5875:9;5871:22;5850:53;:::i;:::-;5840:63;;5796:117;5591:329;;;;:::o;5926:619::-;6003:6;6011;6019;6068:2;6056:9;6047:7;6043:23;6039:32;6036:119;;;6074:79;;:::i;:::-;6036:119;6194:1;6219:53;6264:7;6255:6;6244:9;6240:22;6219:53;:::i;:::-;6209:63;;6165:117;6321:2;6347:53;6392:7;6383:6;6372:9;6368:22;6347:53;:::i;:::-;6337:63;;6292:118;6449:2;6475:53;6520:7;6511:6;6500:9;6496:22;6475:53;:::i;:::-;6465:63;;6420:118;5926:619;;;;;:::o;6551:118::-;6638:24;6656:5;6638:24;:::i;:::-;6633:3;6626:37;6551:118;;:::o;6675:222::-;6768:4;6806:2;6795:9;6791:18;6783:26;;6819:71;6887:1;6876:9;6872:17;6863:6;6819:71;:::i;:::-;6675:222;;;;:::o;6903:86::-;6938:7;6978:4;6971:5;6967:16;6956:27;;6903:86;;;:::o;6995:112::-;7078:22;7094:5;7078:22;:::i;:::-;7073:3;7066:35;6995:112;;:::o;7113:214::-;7202:4;7240:2;7229:9;7225:18;7217:26;;7253:67;7317:1;7306:9;7302:17;7293:6;7253:67;:::i;:::-;7113:214;;;;:::o;7333:117::-;7442:1;7439;7432:12;7456:117;7565:1;7562;7555:12;7579:117;7688:1;7685;7678:12;7719:568;7792:8;7802:6;7852:3;7845:4;7837:6;7833:17;7829:27;7819:122;;7860:79;;:::i;:::-;7819:122;7973:6;7960:20;7950:30;;8003:18;7995:6;7992:30;7989:117;;;8025:79;;:::i;:::-;7989:117;8139:4;8131:6;8127:17;8115:29;;8193:3;8185:4;8177:6;8173:17;8163:8;8159:32;8156:41;8153:128;;;8200:79;;:::i;:::-;8153:128;7719:568;;;;;:::o;8310:::-;8383:8;8393:6;8443:3;8436:4;8428:6;8424:17;8420:27;8410:122;;8451:79;;:::i;:::-;8410:122;8564:6;8551:20;8541:30;;8594:18;8586:6;8583:30;8580:117;;;8616:79;;:::i;:::-;8580:117;8730:4;8722:6;8718:17;8706:29;;8784:3;8776:4;8768:6;8764:17;8754:8;8750:32;8747:41;8744:128;;;8791:79;;:::i;:::-;8744:128;8310:568;;;;;:::o;8884:934::-;9006:6;9014;9022;9030;9079:2;9067:9;9058:7;9054:23;9050:32;9047:119;;;9085:79;;:::i;:::-;9047:119;9233:1;9222:9;9218:17;9205:31;9263:18;9255:6;9252:30;9249:117;;;9285:79;;:::i;:::-;9249:117;9398:80;9470:7;9461:6;9450:9;9446:22;9398:80;:::i;:::-;9380:98;;;;9176:312;9555:2;9544:9;9540:18;9527:32;9586:18;9578:6;9575:30;9572:117;;;9608:79;;:::i;:::-;9572:117;9721:80;9793:7;9784:6;9773:9;9769:22;9721:80;:::i;:::-;9703:98;;;;9498:313;8884:934;;;;;;;:::o;9824:116::-;9894:21;9909:5;9894:21;:::i;:::-;9887:5;9884:32;9874:60;;9930:1;9927;9920:12;9874:60;9824:116;:::o;9946:133::-;9989:5;10027:6;10014:20;10005:29;;10043:30;10067:5;10043:30;:::i;:::-;9946:133;;;;:::o;10085:468::-;10150:6;10158;10207:2;10195:9;10186:7;10182:23;10178:32;10175:119;;;10213:79;;:::i;:::-;10175:119;10333:1;10358:53;10403:7;10394:6;10383:9;10379:22;10358:53;:::i;:::-;10348:63;;10304:117;10460:2;10486:50;10528:7;10519:6;10508:9;10504:22;10486:50;:::i;:::-;10476:60;;10431:115;10085:468;;;;;:::o;10559:323::-;10615:6;10664:2;10652:9;10643:7;10639:23;10635:32;10632:119;;;10670:79;;:::i;:::-;10632:119;10790:1;10815:50;10857:7;10848:6;10837:9;10833:22;10815:50;:::i;:::-;10805:60;;10761:114;10559:323;;;;:::o;10888:110::-;10939:7;10968:24;10986:5;10968:24;:::i;:::-;10957:35;;10888:110;;;:::o;11004:150::-;11091:38;11123:5;11091:38;:::i;:::-;11084:5;11081:49;11071:77;;11144:1;11141;11134:12;11071:77;11004:150;:::o;11160:167::-;11220:5;11258:6;11245:20;11236:29;;11274:47;11315:5;11274:47;:::i;:::-;11160:167;;;;:::o;11333:502::-;11415:6;11423;11472:2;11460:9;11451:7;11447:23;11443:32;11440:119;;;11478:79;;:::i;:::-;11440:119;11598:1;11623:67;11682:7;11673:6;11662:9;11658:22;11623:67;:::i;:::-;11613:77;;11569:131;11739:2;11765:53;11810:7;11801:6;11790:9;11786:22;11765:53;:::i;:::-;11755:63;;11710:118;11333:502;;;;;:::o;11841:474::-;11909:6;11917;11966:2;11954:9;11945:7;11941:23;11937:32;11934:119;;;11972:79;;:::i;:::-;11934:119;12092:1;12117:53;12162:7;12153:6;12142:9;12138:22;12117:53;:::i;:::-;12107:63;;12063:117;12219:2;12245:53;12290:7;12281:6;12270:9;12266:22;12245:53;:::i;:::-;12235:63;;12190:118;11841:474;;;;;:::o;12321:93::-;12357:7;12397:10;12390:5;12386:22;12375:33;;12321:93;;;:::o;12420:120::-;12492:23;12509:5;12492:23;:::i;:::-;12485:5;12482:34;12472:62;;12530:1;12527;12520:12;12472:62;12420:120;:::o;12546:137::-;12591:5;12629:6;12616:20;12607:29;;12645:32;12671:5;12645:32;:::i;:::-;12546:137;;;;:::o;12689:327::-;12747:6;12796:2;12784:9;12775:7;12771:23;12767:32;12764:119;;;12802:79;;:::i;:::-;12764:119;12922:1;12947:52;12991:7;12982:6;12971:9;12967:22;12947:52;:::i;:::-;12937:62;;12893:116;12689:327;;;;:::o;13022:182::-;13162:34;13158:1;13150:6;13146:14;13139:58;13022:182;:::o;13210:366::-;13352:3;13373:67;13437:2;13432:3;13373:67;:::i;:::-;13366:74;;13449:93;13538:3;13449:93;:::i;:::-;13567:2;13562:3;13558:12;13551:19;;13210:366;;;:::o;13582:419::-;13748:4;13786:2;13775:9;13771:18;13763:26;;13835:9;13829:4;13825:20;13821:1;13810:9;13806:17;13799:47;13863:131;13989:4;13863:131;:::i;:::-;13855:139;;13582:419;;;:::o;14007:166::-;14147:18;14143:1;14135:6;14131:14;14124:42;14007:166;:::o;14179:366::-;14321:3;14342:67;14406:2;14401:3;14342:67;:::i;:::-;14335:74;;14418:93;14507:3;14418:93;:::i;:::-;14536:2;14531:3;14527:12;14520:19;;14179:366;;;:::o;14551:419::-;14717:4;14755:2;14744:9;14740:18;14732:26;;14804:9;14798:4;14794:20;14790:1;14779:9;14775:17;14768:47;14832:131;14958:4;14832:131;:::i;:::-;14824:139;;14551:419;;;:::o;14976:180::-;15024:77;15021:1;15014:88;15121:4;15118:1;15111:15;15145:4;15142:1;15135:15;15162:191;15202:3;15221:20;15239:1;15221:20;:::i;:::-;15216:25;;15255:20;15273:1;15255:20;:::i;:::-;15250:25;;15298:1;15295;15291:9;15284:16;;15319:3;15316:1;15313:10;15310:36;;;15326:18;;:::i;:::-;15310:36;15162:191;;;;:::o;15359:180::-;15407:77;15404:1;15397:88;15504:4;15501:1;15494:15;15528:4;15525:1;15518:15;15545:320;15589:6;15626:1;15620:4;15616:12;15606:22;;15673:1;15667:4;15663:12;15694:18;15684:81;;15750:4;15742:6;15738:17;15728:27;;15684:81;15812:2;15804:6;15801:14;15781:18;15778:38;15775:84;;15831:18;;:::i;:::-;15775:84;15596:269;15545:320;;;:::o;15871:410::-;15911:7;15934:20;15952:1;15934:20;:::i;:::-;15929:25;;15968:20;15986:1;15968:20;:::i;:::-;15963:25;;16023:1;16020;16016:9;16045:30;16063:11;16045:30;:::i;:::-;16034:41;;16224:1;16215:7;16211:15;16208:1;16205:22;16185:1;16178:9;16158:83;16135:139;;16254:18;;:::i;:::-;16135:139;15919:362;15871:410;;;;:::o;16287:227::-;16427:34;16423:1;16415:6;16411:14;16404:58;16496:10;16491:2;16483:6;16479:15;16472:35;16287:227;:::o;16520:366::-;16662:3;16683:67;16747:2;16742:3;16683:67;:::i;:::-;16676:74;;16759:93;16848:3;16759:93;:::i;:::-;16877:2;16872:3;16868:12;16861:19;;16520:366;;;:::o;16892:419::-;17058:4;17096:2;17085:9;17081:18;17073:26;;17145:9;17139:4;17135:20;17131:1;17120:9;17116:17;17109:47;17173:131;17299:4;17173:131;:::i;:::-;17165:139;;16892:419;;;:::o;17317:177::-;17457:29;17453:1;17445:6;17441:14;17434:53;17317:177;:::o;17500:366::-;17642:3;17663:67;17727:2;17722:3;17663:67;:::i;:::-;17656:74;;17739:93;17828:3;17739:93;:::i;:::-;17857:2;17852:3;17848:12;17841:19;;17500:366;;;:::o;17872:419::-;18038:4;18076:2;18065:9;18061:18;18053:26;;18125:9;18119:4;18115:20;18111:1;18100:9;18096:17;18089:47;18153:131;18279:4;18153:131;:::i;:::-;18145:139;;17872:419;;;:::o;18297:170::-;18437:22;18433:1;18425:6;18421:14;18414:46;18297:170;:::o;18473:366::-;18615:3;18636:67;18700:2;18695:3;18636:67;:::i;:::-;18629:74;;18712:93;18801:3;18712:93;:::i;:::-;18830:2;18825:3;18821:12;18814:19;;18473:366;;;:::o;18845:419::-;19011:4;19049:2;19038:9;19034:18;19026:26;;19098:9;19092:4;19088:20;19084:1;19073:9;19069:17;19062:47;19126:131;19252:4;19126:131;:::i;:::-;19118:139;;18845:419;;;:::o;19270:175::-;19410:27;19406:1;19398:6;19394:14;19387:51;19270:175;:::o;19451:366::-;19593:3;19614:67;19678:2;19673:3;19614:67;:::i;:::-;19607:74;;19690:93;19779:3;19690:93;:::i;:::-;19808:2;19803:3;19799:12;19792:19;;19451:366;;;:::o;19823:419::-;19989:4;20027:2;20016:9;20012:18;20004:26;;20076:9;20070:4;20066:20;20062:1;20051:9;20047:17;20040:47;20104:131;20230:4;20104:131;:::i;:::-;20096:139;;19823:419;;;:::o;20248:180::-;20296:77;20293:1;20286:88;20393:4;20390:1;20383:15;20417:4;20414:1;20407:15;20434:244;20574:34;20570:1;20562:6;20558:14;20551:58;20643:27;20638:2;20630:6;20626:15;20619:52;20434:244;:::o;20684:366::-;20826:3;20847:67;20911:2;20906:3;20847:67;:::i;:::-;20840:74;;20923:93;21012:3;20923:93;:::i;:::-;21041:2;21036:3;21032:12;21025:19;;20684:366;;;:::o;21056:419::-;21222:4;21260:2;21249:9;21245:18;21237:26;;21309:9;21303:4;21299:20;21295:1;21284:9;21280:17;21273:47;21337:131;21463:4;21337:131;:::i;:::-;21329:139;;21056:419;;;:::o;21481:143::-;21538:5;21569:6;21563:13;21554:22;;21585:33;21612:5;21585:33;:::i;:::-;21481:143;;;;:::o;21630:351::-;21700:6;21749:2;21737:9;21728:7;21724:23;21720:32;21717:119;;;21755:79;;:::i;:::-;21717:119;21875:1;21900:64;21956:7;21947:6;21936:9;21932:22;21900:64;:::i;:::-;21890:74;;21846:128;21630:351;;;;:::o;21987:164::-;22127:16;22123:1;22115:6;22111:14;22104:40;21987:164;:::o;22157:366::-;22299:3;22320:67;22384:2;22379:3;22320:67;:::i;:::-;22313:74;;22396:93;22485:3;22396:93;:::i;:::-;22514:2;22509:3;22505:12;22498:19;;22157:366;;;:::o;22529:419::-;22695:4;22733:2;22722:9;22718:18;22710:26;;22782:9;22776:4;22772:20;22768:1;22757:9;22753:17;22746:47;22810:131;22936:4;22810:131;:::i;:::-;22802:139;;22529:419;;;:::o;22954:332::-;23075:4;23113:2;23102:9;23098:18;23090:26;;23126:71;23194:1;23183:9;23179:17;23170:6;23126:71;:::i;:::-;23207:72;23275:2;23264:9;23260:18;23251:6;23207:72;:::i;:::-;22954:332;;;;;:::o;23292:137::-;23346:5;23377:6;23371:13;23362:22;;23393:30;23417:5;23393:30;:::i;:::-;23292:137;;;;:::o;23435:345::-;23502:6;23551:2;23539:9;23530:7;23526:23;23522:32;23519:119;;;23557:79;;:::i;:::-;23519:119;23677:1;23702:61;23755:7;23746:6;23735:9;23731:22;23702:61;:::i;:::-;23692:71;;23648:125;23435:345;;;;:::o;23786:224::-;23926:34;23922:1;23914:6;23910:14;23903:58;23995:7;23990:2;23982:6;23978:15;23971:32;23786:224;:::o;24016:366::-;24158:3;24179:67;24243:2;24238:3;24179:67;:::i;:::-;24172:74;;24255:93;24344:3;24255:93;:::i;:::-;24373:2;24368:3;24364:12;24357:19;;24016:366;;;:::o;24388:419::-;24554:4;24592:2;24581:9;24577:18;24569:26;;24641:9;24635:4;24631:20;24627:1;24616:9;24612:17;24605:47;24669:131;24795:4;24669:131;:::i;:::-;24661:139;;24388:419;;;:::o;24813:162::-;24953:14;24949:1;24941:6;24937:14;24930:38;24813:162;:::o;24981:366::-;25123:3;25144:67;25208:2;25203:3;25144:67;:::i;:::-;25137:74;;25220:93;25309:3;25220:93;:::i;:::-;25338:2;25333:3;25329:12;25322:19;;24981:366;;;:::o;25353:419::-;25519:4;25557:2;25546:9;25542:18;25534:26;;25606:9;25600:4;25596:20;25592:1;25581:9;25577:17;25570:47;25634:131;25760:4;25634:131;:::i;:::-;25626:139;;25353:419;;;:::o;25778:225::-;25918:34;25914:1;25906:6;25902:14;25895:58;25987:8;25982:2;25974:6;25970:15;25963:33;25778:225;:::o;26009:366::-;26151:3;26172:67;26236:2;26231:3;26172:67;:::i;:::-;26165:74;;26248:93;26337:3;26248:93;:::i;:::-;26366:2;26361:3;26357:12;26350:19;;26009:366;;;:::o;26381:419::-;26547:4;26585:2;26574:9;26570:18;26562:26;;26634:9;26628:4;26624:20;26620:1;26609:9;26605:17;26598:47;26662:131;26788:4;26662:131;:::i;:::-;26654:139;;26381:419;;;:::o;26806:180::-;26854:77;26851:1;26844:88;26951:4;26948:1;26941:15;26975:4;26972:1;26965:15;26992:185;27032:1;27049:20;27067:1;27049:20;:::i;:::-;27044:25;;27083:20;27101:1;27083:20;:::i;:::-;27078:25;;27122:1;27112:35;;27127:18;;:::i;:::-;27112:35;27169:1;27166;27162:9;27157:14;;26992:185;;;;:::o;27183:223::-;27323:34;27319:1;27311:6;27307:14;27300:58;27392:6;27387:2;27379:6;27375:15;27368:31;27183:223;:::o;27412:366::-;27554:3;27575:67;27639:2;27634:3;27575:67;:::i;:::-;27568:74;;27651:93;27740:3;27651:93;:::i;:::-;27769:2;27764:3;27760:12;27753:19;;27412:366;;;:::o;27784:419::-;27950:4;27988:2;27977:9;27973:18;27965:26;;28037:9;28031:4;28027:20;28023:1;28012:9;28008:17;28001:47;28065:131;28191:4;28065:131;:::i;:::-;28057:139;;27784:419;;;:::o;28209:221::-;28349:34;28345:1;28337:6;28333:14;28326:58;28418:4;28413:2;28405:6;28401:15;28394:29;28209:221;:::o;28436:366::-;28578:3;28599:67;28663:2;28658:3;28599:67;:::i;:::-;28592:74;;28675:93;28764:3;28675:93;:::i;:::-;28793:2;28788:3;28784:12;28777:19;;28436:366;;;:::o;28808:419::-;28974:4;29012:2;29001:9;28997:18;28989:26;;29061:9;29055:4;29051:20;29047:1;29036:9;29032:17;29025:47;29089:131;29215:4;29089:131;:::i;:::-;29081:139;;28808:419;;;:::o;29233:224::-;29373:34;29369:1;29361:6;29357:14;29350:58;29442:7;29437:2;29429:6;29425:15;29418:32;29233:224;:::o;29463:366::-;29605:3;29626:67;29690:2;29685:3;29626:67;:::i;:::-;29619:74;;29702:93;29791:3;29702:93;:::i;:::-;29820:2;29815:3;29811:12;29804:19;;29463:366;;;:::o;29835:419::-;30001:4;30039:2;30028:9;30024:18;30016:26;;30088:9;30082:4;30078:20;30074:1;30063:9;30059:17;30052:47;30116:131;30242:4;30116:131;:::i;:::-;30108:139;;29835:419;;;:::o;30260:222::-;30400:34;30396:1;30388:6;30384:14;30377:58;30469:5;30464:2;30456:6;30452:15;30445:30;30260:222;:::o;30488:366::-;30630:3;30651:67;30715:2;30710:3;30651:67;:::i;:::-;30644:74;;30727:93;30816:3;30727:93;:::i;:::-;30845:2;30840:3;30836:12;30829:19;;30488:366;;;:::o;30860:419::-;31026:4;31064:2;31053:9;31049:18;31041:26;;31113:9;31107:4;31103:20;31099:1;31088:9;31084:17;31077:47;31141:131;31267:4;31141:131;:::i;:::-;31133:139;;30860:419;;;:::o;31285:165::-;31425:17;31421:1;31413:6;31409:14;31402:41;31285:165;:::o;31456:366::-;31598:3;31619:67;31683:2;31678:3;31619:67;:::i;:::-;31612:74;;31695:93;31784:3;31695:93;:::i;:::-;31813:2;31808:3;31804:12;31797:19;;31456:366;;;:::o;31828:419::-;31994:4;32032:2;32021:9;32017:18;32009:26;;32081:9;32075:4;32071:20;32067:1;32056:9;32052:17;32045:47;32109:131;32235:4;32109:131;:::i;:::-;32101:139;;31828:419;;;:::o;32253:172::-;32393:24;32389:1;32381:6;32377:14;32370:48;32253:172;:::o;32431:366::-;32573:3;32594:67;32658:2;32653:3;32594:67;:::i;:::-;32587:74;;32670:93;32759:3;32670:93;:::i;:::-;32788:2;32783:3;32779:12;32772:19;;32431:366;;;:::o;32803:419::-;32969:4;33007:2;32996:9;32992:18;32984:26;;33056:9;33050:4;33046:20;33042:1;33031:9;33027:17;33020:47;33084:131;33210:4;33084:131;:::i;:::-;33076:139;;32803:419;;;:::o;33228:240::-;33368:34;33364:1;33356:6;33352:14;33345:58;33437:23;33432:2;33424:6;33420:15;33413:48;33228:240;:::o;33474:366::-;33616:3;33637:67;33701:2;33696:3;33637:67;:::i;:::-;33630:74;;33713:93;33802:3;33713:93;:::i;:::-;33831:2;33826:3;33822:12;33815:19;;33474:366;;;:::o;33846:419::-;34012:4;34050:2;34039:9;34035:18;34027:26;;34099:9;34093:4;34089:20;34085:1;34074:9;34070:17;34063:47;34127:131;34253:4;34127:131;:::i;:::-;34119:139;;33846:419;;;:::o;34271:169::-;34411:21;34407:1;34399:6;34395:14;34388:45;34271:169;:::o;34446:366::-;34588:3;34609:67;34673:2;34668:3;34609:67;:::i;:::-;34602:74;;34685:93;34774:3;34685:93;:::i;:::-;34803:2;34798:3;34794:12;34787:19;;34446:366;;;:::o;34818:419::-;34984:4;35022:2;35011:9;35007:18;34999:26;;35071:9;35065:4;35061:20;35057:1;35046:9;35042:17;35035:47;35099:131;35225:4;35099:131;:::i;:::-;35091:139;;34818:419;;;:::o;35243:241::-;35383:34;35379:1;35371:6;35367:14;35360:58;35452:24;35447:2;35439:6;35435:15;35428:49;35243:241;:::o;35490:366::-;35632:3;35653:67;35717:2;35712:3;35653:67;:::i;:::-;35646:74;;35729:93;35818:3;35729:93;:::i;:::-;35847:2;35842:3;35838:12;35831:19;;35490:366;;;:::o;35862:419::-;36028:4;36066:2;36055:9;36051:18;36043:26;;36115:9;36109:4;36105:20;36101:1;36090:9;36086:17;36079:47;36143:131;36269:4;36143:131;:::i;:::-;36135:139;;35862:419;;;:::o;36287:194::-;36327:4;36347:20;36365:1;36347:20;:::i;:::-;36342:25;;36381:20;36399:1;36381:20;:::i;:::-;36376:25;;36425:1;36422;36418:9;36410:17;;36449:1;36443:4;36440:11;36437:37;;;36454:18;;:::i;:::-;36437:37;36287:194;;;;:::o;36487:225::-;36627:34;36623:1;36615:6;36611:14;36604:58;36696:8;36691:2;36683:6;36679:15;36672:33;36487:225;:::o;36718:366::-;36860:3;36881:67;36945:2;36940:3;36881:67;:::i;:::-;36874:74;;36957:93;37046:3;36957:93;:::i;:::-;37075:2;37070:3;37066:12;37059:19;;36718:366;;;:::o;37090:419::-;37256:4;37294:2;37283:9;37279:18;37271:26;;37343:9;37337:4;37333:20;37329:1;37318:9;37314:17;37307:47;37371:131;37497:4;37371:131;:::i;:::-;37363:139;;37090:419;;;:::o;37515:442::-;37664:4;37702:2;37691:9;37687:18;37679:26;;37715:71;37783:1;37772:9;37768:17;37759:6;37715:71;:::i;:::-;37796:72;37864:2;37853:9;37849:18;37840:6;37796:72;:::i;:::-;37878;37946:2;37935:9;37931:18;37922:6;37878:72;:::i;:::-;37515:442;;;;;;:::o;37963:147::-;38064:11;38101:3;38086:18;;37963:147;;;;:::o;38116:114::-;;:::o;38236:398::-;38395:3;38416:83;38497:1;38492:3;38416:83;:::i;:::-;38409:90;;38508:93;38597:3;38508:93;:::i;:::-;38626:1;38621:3;38617:11;38610:18;;38236:398;;;:::o;38640:379::-;38824:3;38846:147;38989:3;38846:147;:::i;:::-;38839:154;;39010:3;39003:10;;38640:379;;;:::o;39025:180::-;39073:77;39070:1;39063:88;39170:4;39167:1;39160:15;39194:4;39191:1;39184:15;39211:143;39268:5;39299:6;39293:13;39284:22;;39315:33;39342:5;39315:33;:::i;:::-;39211:143;;;;:::o;39360:351::-;39430:6;39479:2;39467:9;39458:7;39454:23;39450:32;39447:119;;;39485:79;;:::i;:::-;39447:119;39605:1;39630:64;39686:7;39677:6;39666:9;39662:22;39630:64;:::i;:::-;39620:74;;39576:128;39360:351;;;;:::o;39717:85::-;39762:7;39791:5;39780:16;;39717:85;;;:::o;39808:158::-;39866:9;39899:61;39917:42;39926:32;39952:5;39926:32;:::i;:::-;39917:42;:::i;:::-;39899:61;:::i;:::-;39886:74;;39808:158;;;:::o;39972:147::-;40067:45;40106:5;40067:45;:::i;:::-;40062:3;40055:58;39972:147;;:::o;40125:114::-;40192:6;40226:5;40220:12;40210:22;;40125:114;;;:::o;40245:184::-;40344:11;40378:6;40373:3;40366:19;40418:4;40413:3;40409:14;40394:29;;40245:184;;;;:::o;40435:132::-;40502:4;40525:3;40517:11;;40555:4;40550:3;40546:14;40538:22;;40435:132;;;:::o;40573:108::-;40650:24;40668:5;40650:24;:::i;:::-;40645:3;40638:37;40573:108;;:::o;40687:179::-;40756:10;40777:46;40819:3;40811:6;40777:46;:::i;:::-;40855:4;40850:3;40846:14;40832:28;;40687:179;;;;:::o;40872:113::-;40942:4;40974;40969:3;40965:14;40957:22;;40872:113;;;:::o;41021:732::-;41140:3;41169:54;41217:5;41169:54;:::i;:::-;41239:86;41318:6;41313:3;41239:86;:::i;:::-;41232:93;;41349:56;41399:5;41349:56;:::i;:::-;41428:7;41459:1;41444:284;41469:6;41466:1;41463:13;41444:284;;;41545:6;41539:13;41572:63;41631:3;41616:13;41572:63;:::i;:::-;41565:70;;41658:60;41711:6;41658:60;:::i;:::-;41648:70;;41504:224;41491:1;41488;41484:9;41479:14;;41444:284;;;41448:14;41744:3;41737:10;;41145:608;;;41021:732;;;;:::o;41759:831::-;42022:4;42060:3;42049:9;42045:19;42037:27;;42074:71;42142:1;42131:9;42127:17;42118:6;42074:71;:::i;:::-;42155:80;42231:2;42220:9;42216:18;42207:6;42155:80;:::i;:::-;42282:9;42276:4;42272:20;42267:2;42256:9;42252:18;42245:48;42310:108;42413:4;42404:6;42310:108;:::i;:::-;42302:116;;42428:72;42496:2;42485:9;42481:18;42472:6;42428:72;:::i;:::-;42510:73;42578:3;42567:9;42563:19;42554:6;42510:73;:::i;:::-;41759:831;;;;;;;;:::o;42596:807::-;42845:4;42883:3;42872:9;42868:19;42860:27;;42897:71;42965:1;42954:9;42950:17;42941:6;42897:71;:::i;:::-;42978:72;43046:2;43035:9;43031:18;43022:6;42978:72;:::i;:::-;43060:80;43136:2;43125:9;43121:18;43112:6;43060:80;:::i;:::-;43150;43226:2;43215:9;43211:18;43202:6;43150:80;:::i;:::-;43240:73;43308:3;43297:9;43293:19;43284:6;43240:73;:::i;:::-;43323;43391:3;43380:9;43376:19;43367:6;43323:73;:::i;:::-;42596:807;;;;;;;;;:::o;43409:663::-;43497:6;43505;43513;43562:2;43550:9;43541:7;43537:23;43533:32;43530:119;;;43568:79;;:::i;:::-;43530:119;43688:1;43713:64;43769:7;43760:6;43749:9;43745:22;43713:64;:::i;:::-;43703:74;;43659:128;43826:2;43852:64;43908:7;43899:6;43888:9;43884:22;43852:64;:::i;:::-;43842:74;;43797:129;43965:2;43991:64;44047:7;44038:6;44027:9;44023:22;43991:64;:::i;:::-;43981:74;;43936:129;43409:663;;;;;:::o

Swarm Source

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