ETH Price: $3,103.65 (+1.14%)
Gas: 6 Gwei

Token

CryptoCombs (COMBS)
 

Overview

Max Total Supply

100,000,000 COMBS

Holders

35

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.036312696 COMBS

Value
$0.00
0x32f3895ede4de3601c9e8fab0e88e8c4a7ba16ab
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:
CryptoCombs

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.7;

//                  ___-----------___
//            __--~~                 ~~--__
//        _-~~                             ~~-_
//     _-~                                     ~-_
//    /                                           \
//   |                                             |
//  |                                               |
//  |                                               |
// |                                                 |
// |                                                 |
// |                                                 |
//  |                                               |
//  |  |    _-------_               _-------_    |  |
//  |  |  /~         ~\           /~         ~\  |  |
//   ||  |             |         |             |  ||
//   || |               |       |               | ||
//   || |              |         |              | ||
//   |   \_           /           \           _/   |
//  |      ~~--_____-~    /~V~\    ~-_____--~~      |
//  |                    |     |                    |
// |                    |       |                    |
// |                    |  /^\  |                    |
//  |                    ~~   ~~                    |
//   \_         _                       _         _/
//     ~--____-~ ~\                   /~ ~-____--~
//          \     /\                 /\     /
//           \    | ( ,           , ) |    /
//            |   | (~(__(  |  )__)~) |   |
//             |   \/ (  (~~|~~)  ) \/   |
//              |   |  [ [  |  ] ]  /   |
//               |                     |
//                \                   /
//                 ~-_             _-~
//                    ~--___-___--~
//
// CryptoCombs - A Play-To-Earn experience on Ethereum
// Telegram: https://t.me/cryptocombs_portal
// 

// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/interfaces/IERC20.sol

// OpenZeppelin Contracts v4.4.1 (interfaces/IERC20.sol)

// File: @openzeppelin/contracts/utils/Context.sol

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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);
    }
}

// File: contracts/CryptoCombs.sol

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

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

    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

contract CryptoCombs is Context, IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "CryptoCombs";
    string private constant _symbol = "COMBS";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;

    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 100_000_000 * 10**_decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public launchBlock;

    uint256 public gameTicketPrice = 100000;
    mapping(address => uint256) public gameTicketsOwned;

    // Buy Fee
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 6;

    // Sell Fee
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 6;

    // Original Fee
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousRedisFee = _redisFee;
    uint256 private _previousTaxFee = _taxFee;

    mapping(address => bool) public bots;
    mapping(address => uint256) private cooldown;

    address payable private _developmentAddress =
        payable(0x9A21C0E121242e5eAD0B44CB509b5d0C2dEF01EF);

    address payable private _marketingAddress =
        payable(0x7EdFdE58537F223436dDC30E0627fB3faF33A221);

    // Initialized with dead address, will be changed once reward contract is deployed.
    address payable private _rewardDistributerAddress =
        payable(0x000000000000000000000000000000000000dEaD);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = true;

    uint256 public _maxTxAmount = 2_000_000 * 10**_decimals;
    uint256 public _maxWalletSize = 4_000_000 * 10**_decimals;
    uint256 public _swapTokensAtAmount = 500_000 * 10**_decimals;

    event MaxTxAmountUpdated(uint256 _maxTxAmount);
    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        bots[address(0x66f049111958809841Bbe4b81c034Da2D953AA0c)] = true;
        bots[address(0x000000005736775Feb0C8568e7DEe77222a26880)] = true;
        bots[address(0x34822A742BDE3beF13acabF14244869841f06A73)] = true;
        bots[address(0x69611A66d0CF67e5Ddd1957e6499b5C5A3E44845)] = true;
        bots[address(0x69611A66d0CF67e5Ddd1957e6499b5C5A3E44845)] = true;
        bots[address(0x8484eFcBDa76955463aa12e1d504D7C6C89321F8)] = true;
        bots[address(0xe5265ce4D0a3B191431e1bac056d72b2b9F0Fe44)] = true;
        bots[address(0x33F9Da98C57674B5FC5AE7349E3C732Cf2E6Ce5C)] = true;
        bots[address(0xc59a8E2d2c476BA9122aa4eC19B4c5E2BBAbbC28)] = true;
        bots[address(0x21053Ff2D9Fc37D4DB8687d48bD0b57581c1333D)] = true;
        bots[address(0x4dd6A0D3191A41522B84BC6b65d17f6f5e6a4192)] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function name() public pure returns (string memory) {
        return _name;
    }

    function symbol() public pure returns (string memory) {
        return _symbol;
    }

    function decimals() public pure returns (uint8) {
        return _decimals;
    }

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function tokenFromReflection(uint256 rAmount)
        private
        view
        returns (uint256)
    {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousRedisFee = _redisFee;
        _previousTaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousRedisFee;
        _taxFee = _previousTaxFee;
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) private {
        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 _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {
            // Trade start check.
            if (!tradingOpen) {
                require(
                    from == owner(),
                    "TOKEN: This account cannot send tokens until trading is enabled"
                );
            }

            require(amount <= _maxTxAmount, "TOKEN: Max Transaction Limit");
            require(
                !bots[from] && !bots[to],
                "TOKEN: Your account is blacklisted!"
            );

            if (
                block.number <= launchBlock &&
                from == uniswapV2Pair &&
                to != address(uniswapV2Router) &&
                to != address(this)
            ) {
                bots[to] = true;
            }

            if (to != uniswapV2Pair) {
                require(
                    balanceOf(to) + amount < _maxWalletSize,
                    "TOKEN: Balance exceeds wallet size!"
                );
            }

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

            if (contractTokenBalance >= _maxTxAmount) {
                contractTokenBalance = _maxTxAmount;
            }

            if (
                canSwap &&
                !inSwap &&
                from != uniswapV2Pair &&
                swapEnabled &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        // Transfer tokens.
        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        } else {
            // Set fee for buys.
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }

            // Set fee for sells.
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        _developmentAddress.transfer(amount.div(2));
        _marketingAddress.transfer(amount.div(2));
    }

    function setTrading(bool _tradingOpen) public onlyOwner {
        tradingOpen = _tradingOpen;
        launchBlock = block.number;
    }

    function manualSwap() external {
        require(
            _msgSender() == _developmentAddress ||
            _msgSender() == _marketingAddress ||
            _msgSender() == owner()
        );
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualSend() external {
        require(
            _msgSender() == _developmentAddress ||
            _msgSender() == _marketingAddress ||
            _msgSender() == owner()
        );
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function blockBots(address[] memory bots_) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function unblockBot(address notBot) public onlyOwner {
        bots[notBot] = false;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeTeam(tTeam);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    receive() external payable {}

    function _getValues(uint256 tAmount)
        private
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(
            tAmount,
            _redisFee,
            _taxFee
        );
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tTeam,
            currentRate
        );

        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);

        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    )
        private
        pure
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);

        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();

        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);

        return (rSupply, tSupply);
    }

    function setFee(
        uint256 redisFeeOnBuy,
        uint256 redisFeeOnSell,
        uint256 taxFeeOnBuy,
        uint256 taxFeeOnSell
    ) public onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;

        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    // Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(uint256 swapTokensAtAmount)
        public
        onlyOwner
    {
        _swapTokensAtAmount = swapTokensAtAmount;
    }

    // Enable/Disable token swaps.
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

    function setMaxTxnAmount(uint256 maxTxAmount) public onlyOwner {
        _maxTxAmount = maxTxAmount;
    }

    function setMaxWalletSize(uint256 maxWalletSize) public onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

    function updateRewardDistributerAddress(address newAddress) external onlyOwner {
        _rewardDistributerAddress = payable(newAddress);
    }

    function updateGameTokenPrice(uint256 newPrice) external onlyOwner {
        require(newPrice != gameTicketPrice, "Cannot set the same price.");
        gameTicketPrice = newPrice;
    }

    function sendTokensToRewardDistributer(uint256 amount) public onlyOwner {
        require(
            _rewardDistributerAddress != address(0),
            "Reward Distributer address is not set."
        );
        transfer(_rewardDistributerAddress, amount);
    }

    function turnIntoGameTickets(uint256 gameTokenCount) external payable {
        require(
            balanceOf(msg.sender) > msg.value,
            "Not enough tokens to turn into game tokens."
        );
        require(
            msg.value == gameTicketPrice * gameTokenCount,
            "Transaction value is incorrect."
        );
        sendTokensToRewardDistributer(msg.value);
        gameTicketsOwned[msg.sender] += gameTokenCount;
    }

    function useGameTicket() external {
        require(gameTicketsOwned[msg.sender] >= 1, "Not enough game tokens.");
        gameTicketsOwned[msg.sender] -= 1;
    }
}

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":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"blockBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gameTicketPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gameTicketsOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendTokensToRewardDistributer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"setTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","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":[{"internalType":"uint256","name":"gameTokenCount","type":"uint256"}],"name":"turnIntoGameTickets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"notBot","type":"address"}],"name":"unblockBot","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":"newPrice","type":"uint256"}],"name":"updateGameTokenPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateRewardDistributerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"useGameTicket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a62000014919062000dad565b6305f5e10062000025919062000eea565b60001962000034919062000fd1565b60001962000043919062000f4b565b600555620186a06008556000600a556006600b556000600c556006600d55600c54600e55600d54600f55600e54601055600f54601155739a21c0e121242e5ead0b44cb509b5d0c2def01ef601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737edfde58537f223436ddc30e0627fb3faf33a221601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601860156101000a81548160ff0219169083151502179055506001601860166101000a81548160ff0219169083151502179055506009600a620001ac919062000dad565b621e8480620001bc919062000eea565b6019556009600a620001cf919062000dad565b623d0900620001df919062000eea565b601a556009600a620001f2919062000dad565b6207a12062000202919062000eea565b601b553480156200021257600080fd5b50620002336200022762000ba860201b60201c565b62000bb060201b60201c565b600554600160006200024a62000ba860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032957600080fd5b505afa1580156200033e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000364919062000cb4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c757600080fd5b505afa158015620003dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000402919062000cb4565b6040518363ffffffff1660e01b81526004016200042192919062000d08565b602060405180830381600087803b1580156200043c57600080fd5b505af115801562000451573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000477919062000cb4565b601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160046000620004cd62000c7460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260007366f049111958809841bbe4b81c034da2d953aa0c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260006f5736775feb0c8568e7dee77222a2688073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260007334822a742bde3bef13acabf14244869841f06a7373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260007369611a66d0cf67e5ddd1957e6499b5c5a3e4484573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260007369611a66d0cf67e5ddd1957e6499b5c5a3e4484573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000738484efcbda76955463aa12e1d504d7c6c89321f873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016012600073e5265ce4d0a3b191431e1bac056d72b2b9f0fe4473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260007333f9da98c57674b5fc5ae7349e3c732cf2e6ce5c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016012600073c59a8e2d2c476ba9122aa4ec19b4c5e2bbabbc2873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260007321053ff2d9fc37d4db8687d48bd0b57581c1333d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160126000734dd6a0d3191a41522b84bc6b65d17f6f5e6a419273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b1a62000ba860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a62000b79919062000dad565b6305f5e10062000b8a919062000eea565b60405162000b99919062000d35565b60405180910390a35062001093565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008151905062000cae8162001079565b92915050565b60006020828403121562000ccd5762000ccc62001067565b5b600062000cdd8482850162000c9d565b91505092915050565b62000cf18162000f86565b82525050565b62000d028162000fba565b82525050565b600060408201905062000d1f600083018562000ce6565b62000d2e602083018462000ce6565b9392505050565b600060208201905062000d4c600083018462000cf7565b92915050565b6000808291508390505b600185111562000da45780860481111562000d7c5762000d7b62001009565b5b600185161562000d8c5780820291505b808102905062000d9c856200106c565b945062000d5c565b94509492505050565b600062000dba8262000fba565b915062000dc78362000fc4565b925062000df67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000dfe565b905092915050565b60008262000e10576001905062000ee3565b8162000e20576000905062000ee3565b816001811462000e39576002811462000e445762000e7a565b600191505062000ee3565b60ff84111562000e595762000e5862001009565b5b8360020a91508482111562000e735762000e7262001009565b5b5062000ee3565b5060208310610133831016604e8410600b841016171562000eb45782820a90508381111562000eae5762000ead62001009565b5b62000ee3565b62000ec3848484600162000d52565b9250905081840481111562000edd5762000edc62001009565b5b81810290505b9392505050565b600062000ef78262000fba565b915062000f048362000fba565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000f405762000f3f62001009565b5b828202905092915050565b600062000f588262000fba565b915062000f658362000fba565b92508282101562000f7b5762000f7a62001009565b5b828203905092915050565b600062000f938262000f9a565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600062000fde8262000fba565b915062000feb8362000fba565b92508262000ffe5762000ffd62001038565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b60008160011c9050919050565b620010848162000f86565b81146200109057600080fd5b50565b61404680620010a36000396000f3fe60806040526004361061021d5760003560e01c80638221e35811610123578063bfd79284116100ab578063ea1644d51161006f578063ea1644d5146107bc578063ef5f99b1146107e5578063f0ec80021461080e578063f2fde38b14610825578063f42938901461084e57610224565b8063bfd79284146106c3578063c492f04614610700578063d00efb2f14610729578063dd62ed3e14610754578063e65a29f71461079157610224565b806395d89b41116100f257806395d89b41146105ed57806398a5c31514610618578063a2a957bb14610641578063a9059cbb1461066a578063bf1df049146106a757610224565b80638221e358146105315780638da5cb5b1461056e5780638f70ccf7146105995780638f9a55c0146105c257610224565b806351bc3c85116101a65780636d8aa8f8116101755780636d8aa8f81461046057806370a0823114610489578063715018a6146104c657806374010ece146104dd5780637d1db4a51461050657610224565b806351bc3c85146103ce5780635a8bafa6146103e55780636b9990531461040e5780636cb9bafb1461043757610224565b806318160ddd116101ed57806318160ddd146102e557806323b872dd146103105780632fd689e31461034d578063313ce5671461037857806349bd5a5e146103a357610224565b8062b8cf2a1461022957806306fdde0314610252578063095ea7b31461027d5780631694505e146102ba57610224565b3661022457005b600080fd5b34801561023557600080fd5b50610250600480360381019061024b9190612e21565b610865565b005b34801561025e57600080fd5b50610267610902565b60405161027491906132e7565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612d81565b61093f565b6040516102b191906132b1565b60405180910390f35b3480156102c657600080fd5b506102cf61095d565b6040516102dc91906132cc565b60405180910390f35b3480156102f157600080fd5b506102fa610983565b6040516103079190613529565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190612d2e565b6109a7565b60405161034491906132b1565b60405180910390f35b34801561035957600080fd5b50610362610a80565b60405161036f9190613529565b60405180910390f35b34801561038457600080fd5b5061038d610a86565b60405161039a919061359e565b60405180910390f35b3480156103af57600080fd5b506103b8610a8f565b6040516103c59190613296565b60405180910390f35b3480156103da57600080fd5b506103e3610ab5565b005b3480156103f157600080fd5b5061040c60048036038101906104079190612e97565b610bd2565b005b34801561041a57600080fd5b5061043560048036038101906104309190612c94565b610c9c565b005b34801561044357600080fd5b5061045e60048036038101906104599190612e97565b610cff565b005b34801561046c57600080fd5b5061048760048036038101906104829190612e6a565b610d56565b005b34801561049557600080fd5b506104b060048036038101906104ab9190612c94565b610d7b565b6040516104bd9190613529565b60405180910390f35b3480156104d257600080fd5b506104db610dcc565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190612e97565b610de0565b005b34801561051257600080fd5b5061051b610df2565b6040516105289190613529565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612c94565b610df8565b6040516105659190613529565b60405180910390f35b34801561057a57600080fd5b50610583610e10565b6040516105909190613296565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190612e6a565b610e39565b005b3480156105ce57600080fd5b506105d7610e65565b6040516105e49190613529565b60405180910390f35b3480156105f957600080fd5b50610602610e6b565b60405161060f91906132e7565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190612e97565b610ea8565b005b34801561064d57600080fd5b5061066860048036038101906106639190612ec4565b610eba565b005b34801561067657600080fd5b50610691600480360381019061068c9190612d81565b610ee4565b60405161069e91906132b1565b60405180910390f35b6106c160048036038101906106bc9190612e97565b610f02565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190612c94565b610ffd565b6040516106f791906132b1565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190612dc1565b61101d565b005b34801561073557600080fd5b5061073e6110ca565b60405161074b9190613529565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190612cee565b6110d0565b6040516107889190613529565b60405180910390f35b34801561079d57600080fd5b506107a6611157565b6040516107b39190613529565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190612e97565b61115d565b005b3480156107f157600080fd5b5061080c60048036038101906108079190612c94565b61116f565b005b34801561081a57600080fd5b506108236111bb565b005b34801561083157600080fd5b5061084c60048036038101906108479190612c94565b611297565b005b34801561085a57600080fd5b5061086361131b565b005b61086d611430565b60005b81518110156108fe5760016012600084848151811061089257610891613a8d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806108f6906139e6565b915050610870565b5050565b60606040518060400160405280600b81526020017f43727970746f436f6d6273000000000000000000000000000000000000000000815250905090565b600061095361094c6114ae565b84846114b6565b6001905092915050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a6109939190613739565b6305f5e1006109a29190613857565b905090565b60006109b4848484611681565b610a75846109c06114ae565b610a7085604051806060016040528060288152602001613fe960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a266114ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120579092919063ffffffff16565b6114b6565b600190509392505050565b601b5481565b60006009905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610af66114ae565b73ffffffffffffffffffffffffffffffffffffffff161480610b6c5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b546114ae565b73ffffffffffffffffffffffffffffffffffffffff16145b80610bb05750610b7a610e10565b73ffffffffffffffffffffffffffffffffffffffff16610b986114ae565b73ffffffffffffffffffffffffffffffffffffffff16145b610bb957600080fd5b6000610bc430610d7b565b9050610bcf816120ac565b50565b610bda611430565b600073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6390613429565b60405180910390fd5b610c98601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610ee4565b5050565b610ca4611430565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d07611430565b600854811415610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d43906133c9565b60405180910390fd5b8060088190555050565b610d5e611430565b80601860166101000a81548160ff02191690831515021790555050565b6000610dc5600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612334565b9050919050565b610dd4611430565b610dde60006123a2565b565b610de8611430565b8060198190555050565b60195481565b60096020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e41611430565b80601860146101000a81548160ff0219169083151502179055504360078190555050565b601a5481565b60606040518060400160405280600581526020017f434f4d4253000000000000000000000000000000000000000000000000000000815250905090565b610eb0611430565b80601b8190555050565b610ec2611430565b83600a8190555082600c8190555081600b8190555080600d8190555050505050565b6000610ef8610ef16114ae565b8484611681565b6001905092915050565b34610f0c33610d7b565b11610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390613409565b60405180910390fd5b80600854610f5a9190613857565b3414610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906134a9565b60405180910390fd5b610fa434610bd2565b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ff3919061365f565b9250508190555050565b60126020528060005260406000206000915054906101000a900460ff1681565b611025611430565b60005b838390508110156110c457816004600086868581811061104b5761104a613a8d565b5b90506020020160208101906110609190612c94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110bc906139e6565b915050611028565b50505050565b60075481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611165611430565b80601a8190555050565b611177611430565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613449565b60405180910390fd5b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128e91906138b1565b92505081905550565b61129f611430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690613389565b60405180910390fd5b611318816123a2565b50565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661135c6114ae565b73ffffffffffffffffffffffffffffffffffffffff1614806113d25750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113ba6114ae565b73ffffffffffffffffffffffffffffffffffffffff16145b8061141657506113e0610e10565b73ffffffffffffffffffffffffffffffffffffffff166113fe6114ae565b73ffffffffffffffffffffffffffffffffffffffff16145b61141f57600080fd5b600047905061142d81612466565b50565b6114386114ae565b73ffffffffffffffffffffffffffffffffffffffff16611456610e10565b73ffffffffffffffffffffffffffffffffffffffff16146114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390613469565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90613509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906133a9565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116749190613529565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e8906134c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175890613309565b60405180910390fd5b600081116117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90613489565b60405180910390fd5b6117ac610e10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561181a57506117ea610e10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611d5657601860149054906101000a900460ff166118a95761183b610e10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613329565b60405180910390fd5b5b6019548111156118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e590613369565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119925750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906133e9565b60405180910390fd5b6007544311158015611a305750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015611a8a5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ac257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b20576001601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611bcd57601a5481611b8284610d7b565b611b8c919061365f565b10611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc3906134e9565b60405180910390fd5b5b6000611bd830610d7b565b90506000601b5482101590506019548210611bf35760195491505b808015611c0d5750601860159054906101000a900460ff16155b8015611c675750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611c7f5750601860169054906101000a900460ff165b8015611cd55750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d2b5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d5357611d39826120ac565b60004790506000811115611d5157611d5047612466565b5b505b50505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dfd5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611eb05750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611eaf5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611ebe5760009050612045565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611f695750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f8157600a54600e81905550600b54600f819055505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561202c5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561204457600c54600e81905550600d54600f819055505b5b61205184848484612561565b50505050565b600083831115829061209f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209691906132e7565b60405180910390fd5b5082840390509392505050565b6001601860156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156120e4576120e3613abc565b5b6040519080825280602002602001820160405280156121125781602001602082028036833780820191505090505b509050308160008151811061212a57612129613a8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121cc57600080fd5b505afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190612cc1565b8160018151811061221857612217613a8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061227f30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114b6565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122e3959493929190613544565b600060405180830381600087803b1580156122fd57600080fd5b505af1158015612311573d6000803e3d6000fd5b50505050506000601860156101000a81548160ff02191690831515021790555050565b600060055482111561237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290613349565b60405180910390fd5b600061238561258e565b905061239a81846125b990919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6124b66002846125b990919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156124e1573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6125326002846125b990919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561255d573d6000803e3d6000fd5b5050565b8061256f5761256e6125cf565b5b61257a848484612612565b80612588576125876127dd565b5b50505050565b600080600061259b6127f1565b915091506125b281836125b990919063ffffffff16565b9250505090565b600081836125c791906136b5565b905092915050565b6000600e541480156125e357506000600f54145b156125ed57612610565b600e54601081905550600f546011819055506000600e819055506000600f819055505b565b6000806000806000806126248761288c565b95509550955095509550955061268286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061276381612920565b61276d84836129dd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516127ca9190613529565b60405180910390a3505050505050505050565b601054600e81905550601154600f81905550565b6000806000600554905060006009600a61280b9190613739565b6305f5e10061281a9190613857565b905061284d6009600a61282d9190613739565b6305f5e10061283c9190613857565b6005546125b990919063ffffffff16565b82101561287f576005546009600a6128659190613739565b6305f5e1006128749190613857565b935093505050612888565b81819350935050505b9091565b60008060008060008060008060006128a98a600e54600f54612a17565b92509250925060006128b961258e565b905060008060006128cc8e878787612aad565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000818361290291906138b1565b905092915050565b60008183612918919061365f565b905092915050565b600061292a61258e565b905060006129418284612b3690919063ffffffff16565b905061299581600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6129f2826005546128f490919063ffffffff16565b600581905550612a0d8160065461290a90919063ffffffff16565b6006819055505050565b600080600080612a436064612a35888a612b3690919063ffffffff16565b6125b990919063ffffffff16565b90506000612a6d6064612a5f888b612b3690919063ffffffff16565b6125b990919063ffffffff16565b90506000612a9682612a88858c6128f490919063ffffffff16565b6128f490919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612ac68589612b3690919063ffffffff16565b90506000612add8689612b3690919063ffffffff16565b90506000612af48789612b3690919063ffffffff16565b90506000612b1d82612b0f85876128f490919063ffffffff16565b6128f490919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008183612b449190613857565b905092915050565b6000612b5f612b5a846135de565b6135b9565b90508083825260208201905082856020860282011115612b8257612b81613af5565b5b60005b85811015612bb25781612b988882612bbc565b845260208401935060208301925050600181019050612b85565b5050509392505050565b600081359050612bcb81613fa3565b92915050565b600081519050612be081613fa3565b92915050565b60008083601f840112612bfc57612bfb613af0565b5b8235905067ffffffffffffffff811115612c1957612c18613aeb565b5b602083019150836020820283011115612c3557612c34613af5565b5b9250929050565b600082601f830112612c5157612c50613af0565b5b8135612c61848260208601612b4c565b91505092915050565b600081359050612c7981613fba565b92915050565b600081359050612c8e81613fd1565b92915050565b600060208284031215612caa57612ca9613aff565b5b6000612cb884828501612bbc565b91505092915050565b600060208284031215612cd757612cd6613aff565b5b6000612ce584828501612bd1565b91505092915050565b60008060408385031215612d0557612d04613aff565b5b6000612d1385828601612bbc565b9250506020612d2485828601612bbc565b9150509250929050565b600080600060608486031215612d4757612d46613aff565b5b6000612d5586828701612bbc565b9350506020612d6686828701612bbc565b9250506040612d7786828701612c7f565b9150509250925092565b60008060408385031215612d9857612d97613aff565b5b6000612da685828601612bbc565b9250506020612db785828601612c7f565b9150509250929050565b600080600060408486031215612dda57612dd9613aff565b5b600084013567ffffffffffffffff811115612df857612df7613afa565b5b612e0486828701612be6565b93509350506020612e1786828701612c6a565b9150509250925092565b600060208284031215612e3757612e36613aff565b5b600082013567ffffffffffffffff811115612e5557612e54613afa565b5b612e6184828501612c3c565b91505092915050565b600060208284031215612e8057612e7f613aff565b5b6000612e8e84828501612c6a565b91505092915050565b600060208284031215612ead57612eac613aff565b5b6000612ebb84828501612c7f565b91505092915050565b60008060008060808587031215612ede57612edd613aff565b5b6000612eec87828801612c7f565b9450506020612efd87828801612c7f565b9350506040612f0e87828801612c7f565b9250506060612f1f87828801612c7f565b91505092959194509250565b6000612f378383612f43565b60208301905092915050565b612f4c816138e5565b82525050565b612f5b816138e5565b82525050565b6000612f6c8261361a565b612f76818561363d565b9350612f818361360a565b8060005b83811015612fb2578151612f998882612f2b565b9750612fa483613630565b925050600181019050612f85565b5085935050505092915050565b612fc8816138f7565b82525050565b612fd78161393a565b82525050565b612fe68161394c565b82525050565b6000612ff782613625565b613001818561364e565b9350613011818560208601613982565b61301a81613b04565b840191505092915050565b600061303260238361364e565b915061303d82613b22565b604082019050919050565b6000613055603f8361364e565b915061306082613b71565b604082019050919050565b6000613078602a8361364e565b915061308382613bc0565b604082019050919050565b600061309b601c8361364e565b91506130a682613c0f565b602082019050919050565b60006130be60268361364e565b91506130c982613c38565b604082019050919050565b60006130e160228361364e565b91506130ec82613c87565b604082019050919050565b6000613104601a8361364e565b915061310f82613cd6565b602082019050919050565b600061312760238361364e565b915061313282613cff565b604082019050919050565b600061314a602b8361364e565b915061315582613d4e565b604082019050919050565b600061316d60268361364e565b915061317882613d9d565b604082019050919050565b600061319060178361364e565b915061319b82613dec565b602082019050919050565b60006131b360208361364e565b91506131be82613e15565b602082019050919050565b60006131d660298361364e565b91506131e182613e3e565b604082019050919050565b60006131f9601f8361364e565b915061320482613e8d565b602082019050919050565b600061321c60258361364e565b915061322782613eb6565b604082019050919050565b600061323f60238361364e565b915061324a82613f05565b604082019050919050565b600061326260248361364e565b915061326d82613f54565b604082019050919050565b61328181613923565b82525050565b6132908161392d565b82525050565b60006020820190506132ab6000830184612f52565b92915050565b60006020820190506132c66000830184612fbf565b92915050565b60006020820190506132e16000830184612fce565b92915050565b600060208201905081810360008301526133018184612fec565b905092915050565b6000602082019050818103600083015261332281613025565b9050919050565b6000602082019050818103600083015261334281613048565b9050919050565b600060208201905081810360008301526133628161306b565b9050919050565b600060208201905081810360008301526133828161308e565b9050919050565b600060208201905081810360008301526133a2816130b1565b9050919050565b600060208201905081810360008301526133c2816130d4565b9050919050565b600060208201905081810360008301526133e2816130f7565b9050919050565b600060208201905081810360008301526134028161311a565b9050919050565b600060208201905081810360008301526134228161313d565b9050919050565b6000602082019050818103600083015261344281613160565b9050919050565b6000602082019050818103600083015261346281613183565b9050919050565b60006020820190508181036000830152613482816131a6565b9050919050565b600060208201905081810360008301526134a2816131c9565b9050919050565b600060208201905081810360008301526134c2816131ec565b9050919050565b600060208201905081810360008301526134e28161320f565b9050919050565b6000602082019050818103600083015261350281613232565b9050919050565b6000602082019050818103600083015261352281613255565b9050919050565b600060208201905061353e6000830184613278565b92915050565b600060a0820190506135596000830188613278565b6135666020830187612fdd565b81810360408301526135788186612f61565b90506135876060830185612f52565b6135946080830184613278565b9695505050505050565b60006020820190506135b36000830184613287565b92915050565b60006135c36135d4565b90506135cf82826139b5565b919050565b6000604051905090565b600067ffffffffffffffff8211156135f9576135f8613abc565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061366a82613923565b915061367583613923565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136aa576136a9613a2f565b5b828201905092915050565b60006136c082613923565b91506136cb83613923565b9250826136db576136da613a5e565b5b828204905092915050565b6000808291508390505b60018511156137305780860481111561370c5761370b613a2f565b5b600185161561371b5780820291505b808102905061372985613b15565b94506136f0565b94509492505050565b600061374482613923565b915061374f8361392d565b925061377c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613784565b905092915050565b6000826137945760019050613850565b816137a25760009050613850565b81600181146137b857600281146137c2576137f1565b6001915050613850565b60ff8411156137d4576137d3613a2f565b5b8360020a9150848211156137eb576137ea613a2f565b5b50613850565b5060208310610133831016604e8410600b84101617156138265782820a90508381111561382157613820613a2f565b5b613850565b61383384848460016136e6565b9250905081840481111561384a57613849613a2f565b5b81810290505b9392505050565b600061386282613923565b915061386d83613923565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138a6576138a5613a2f565b5b828202905092915050565b60006138bc82613923565b91506138c783613923565b9250828210156138da576138d9613a2f565b5b828203905092915050565b60006138f082613903565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006139458261395e565b9050919050565b600061395782613923565b9050919050565b600061396982613970565b9050919050565b600061397b82613903565b9050919050565b60005b838110156139a0578082015181840152602081019050613985565b838111156139af576000848401525b50505050565b6139be82613b04565b810181811067ffffffffffffffff821117156139dd576139dc613abc565b5b80604052505050565b60006139f182613923565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a2457613a23613a2f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574207468652073616d652070726963652e000000000000600082015250565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e7320746f207475726e20696e746f206760008201527f616d6520746f6b656e732e000000000000000000000000000000000000000000602082015250565b7f5265776172642044697374726962757465722061646472657373206973206e6f60008201527f74207365742e0000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682067616d6520746f6b656e732e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e2076616c756520697320696e636f72726563742e00600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613fac816138e5565b8114613fb757600080fd5b50565b613fc3816138f7565b8114613fce57600080fd5b50565b613fda81613923565b8114613fe557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a189649b50186c8da2454e5fea10f4fe3d5649dc5b03deb4e7c57c16be8b465764736f6c63430008070033

Deployed Bytecode

0x60806040526004361061021d5760003560e01c80638221e35811610123578063bfd79284116100ab578063ea1644d51161006f578063ea1644d5146107bc578063ef5f99b1146107e5578063f0ec80021461080e578063f2fde38b14610825578063f42938901461084e57610224565b8063bfd79284146106c3578063c492f04614610700578063d00efb2f14610729578063dd62ed3e14610754578063e65a29f71461079157610224565b806395d89b41116100f257806395d89b41146105ed57806398a5c31514610618578063a2a957bb14610641578063a9059cbb1461066a578063bf1df049146106a757610224565b80638221e358146105315780638da5cb5b1461056e5780638f70ccf7146105995780638f9a55c0146105c257610224565b806351bc3c85116101a65780636d8aa8f8116101755780636d8aa8f81461046057806370a0823114610489578063715018a6146104c657806374010ece146104dd5780637d1db4a51461050657610224565b806351bc3c85146103ce5780635a8bafa6146103e55780636b9990531461040e5780636cb9bafb1461043757610224565b806318160ddd116101ed57806318160ddd146102e557806323b872dd146103105780632fd689e31461034d578063313ce5671461037857806349bd5a5e146103a357610224565b8062b8cf2a1461022957806306fdde0314610252578063095ea7b31461027d5780631694505e146102ba57610224565b3661022457005b600080fd5b34801561023557600080fd5b50610250600480360381019061024b9190612e21565b610865565b005b34801561025e57600080fd5b50610267610902565b60405161027491906132e7565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f9190612d81565b61093f565b6040516102b191906132b1565b60405180910390f35b3480156102c657600080fd5b506102cf61095d565b6040516102dc91906132cc565b60405180910390f35b3480156102f157600080fd5b506102fa610983565b6040516103079190613529565b60405180910390f35b34801561031c57600080fd5b5061033760048036038101906103329190612d2e565b6109a7565b60405161034491906132b1565b60405180910390f35b34801561035957600080fd5b50610362610a80565b60405161036f9190613529565b60405180910390f35b34801561038457600080fd5b5061038d610a86565b60405161039a919061359e565b60405180910390f35b3480156103af57600080fd5b506103b8610a8f565b6040516103c59190613296565b60405180910390f35b3480156103da57600080fd5b506103e3610ab5565b005b3480156103f157600080fd5b5061040c60048036038101906104079190612e97565b610bd2565b005b34801561041a57600080fd5b5061043560048036038101906104309190612c94565b610c9c565b005b34801561044357600080fd5b5061045e60048036038101906104599190612e97565b610cff565b005b34801561046c57600080fd5b5061048760048036038101906104829190612e6a565b610d56565b005b34801561049557600080fd5b506104b060048036038101906104ab9190612c94565b610d7b565b6040516104bd9190613529565b60405180910390f35b3480156104d257600080fd5b506104db610dcc565b005b3480156104e957600080fd5b5061050460048036038101906104ff9190612e97565b610de0565b005b34801561051257600080fd5b5061051b610df2565b6040516105289190613529565b60405180910390f35b34801561053d57600080fd5b5061055860048036038101906105539190612c94565b610df8565b6040516105659190613529565b60405180910390f35b34801561057a57600080fd5b50610583610e10565b6040516105909190613296565b60405180910390f35b3480156105a557600080fd5b506105c060048036038101906105bb9190612e6a565b610e39565b005b3480156105ce57600080fd5b506105d7610e65565b6040516105e49190613529565b60405180910390f35b3480156105f957600080fd5b50610602610e6b565b60405161060f91906132e7565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190612e97565b610ea8565b005b34801561064d57600080fd5b5061066860048036038101906106639190612ec4565b610eba565b005b34801561067657600080fd5b50610691600480360381019061068c9190612d81565b610ee4565b60405161069e91906132b1565b60405180910390f35b6106c160048036038101906106bc9190612e97565b610f02565b005b3480156106cf57600080fd5b506106ea60048036038101906106e59190612c94565b610ffd565b6040516106f791906132b1565b60405180910390f35b34801561070c57600080fd5b5061072760048036038101906107229190612dc1565b61101d565b005b34801561073557600080fd5b5061073e6110ca565b60405161074b9190613529565b60405180910390f35b34801561076057600080fd5b5061077b60048036038101906107769190612cee565b6110d0565b6040516107889190613529565b60405180910390f35b34801561079d57600080fd5b506107a6611157565b6040516107b39190613529565b60405180910390f35b3480156107c857600080fd5b506107e360048036038101906107de9190612e97565b61115d565b005b3480156107f157600080fd5b5061080c60048036038101906108079190612c94565b61116f565b005b34801561081a57600080fd5b506108236111bb565b005b34801561083157600080fd5b5061084c60048036038101906108479190612c94565b611297565b005b34801561085a57600080fd5b5061086361131b565b005b61086d611430565b60005b81518110156108fe5760016012600084848151811061089257610891613a8d565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806108f6906139e6565b915050610870565b5050565b60606040518060400160405280600b81526020017f43727970746f436f6d6273000000000000000000000000000000000000000000815250905090565b600061095361094c6114ae565b84846114b6565b6001905092915050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a6109939190613739565b6305f5e1006109a29190613857565b905090565b60006109b4848484611681565b610a75846109c06114ae565b610a7085604051806060016040528060288152602001613fe960289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610a266114ae565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120579092919063ffffffff16565b6114b6565b600190509392505050565b601b5481565b60006009905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610af66114ae565b73ffffffffffffffffffffffffffffffffffffffff161480610b6c5750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b546114ae565b73ffffffffffffffffffffffffffffffffffffffff16145b80610bb05750610b7a610e10565b73ffffffffffffffffffffffffffffffffffffffff16610b986114ae565b73ffffffffffffffffffffffffffffffffffffffff16145b610bb957600080fd5b6000610bc430610d7b565b9050610bcf816120ac565b50565b610bda611430565b600073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6390613429565b60405180910390fd5b610c98601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682610ee4565b5050565b610ca4611430565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d07611430565b600854811415610d4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d43906133c9565b60405180910390fd5b8060088190555050565b610d5e611430565b80601860166101000a81548160ff02191690831515021790555050565b6000610dc5600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612334565b9050919050565b610dd4611430565b610dde60006123a2565b565b610de8611430565b8060198190555050565b60195481565b60096020528060005260406000206000915090505481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610e41611430565b80601860146101000a81548160ff0219169083151502179055504360078190555050565b601a5481565b60606040518060400160405280600581526020017f434f4d4253000000000000000000000000000000000000000000000000000000815250905090565b610eb0611430565b80601b8190555050565b610ec2611430565b83600a8190555082600c8190555081600b8190555080600d8190555050505050565b6000610ef8610ef16114ae565b8484611681565b6001905092915050565b34610f0c33610d7b565b11610f4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4390613409565b60405180910390fd5b80600854610f5a9190613857565b3414610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f92906134a9565b60405180910390fd5b610fa434610bd2565b80600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ff3919061365f565b9250508190555050565b60126020528060005260406000206000915054906101000a900460ff1681565b611025611430565b60005b838390508110156110c457816004600086868581811061104b5761104a613a8d565b5b90506020020160208101906110609190612c94565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110bc906139e6565b915050611028565b50505050565b60075481565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60085481565b611165611430565b80601a8190555050565b611177611430565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613449565b60405180910390fd5b6001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461128e91906138b1565b92505081905550565b61129f611430565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561130f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130690613389565b60405180910390fd5b611318816123a2565b50565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661135c6114ae565b73ffffffffffffffffffffffffffffffffffffffff1614806113d25750601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166113ba6114ae565b73ffffffffffffffffffffffffffffffffffffffff16145b8061141657506113e0610e10565b73ffffffffffffffffffffffffffffffffffffffff166113fe6114ae565b73ffffffffffffffffffffffffffffffffffffffff16145b61141f57600080fd5b600047905061142d81612466565b50565b6114386114ae565b73ffffffffffffffffffffffffffffffffffffffff16611456610e10565b73ffffffffffffffffffffffffffffffffffffffff16146114ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a390613469565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151d90613509565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611596576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158d906133a9565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116749190613529565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e8906134c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175890613309565b60405180910390fd5b600081116117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90613489565b60405180910390fd5b6117ac610e10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561181a57506117ea610e10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611d5657601860149054906101000a900460ff166118a95761183b610e10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613329565b60405180910390fd5b5b6019548111156118ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e590613369565b60405180910390fd5b601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119925750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6119d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c8906133e9565b60405180910390fd5b6007544311158015611a305750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8015611a8a5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611ac257503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611b20576001601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611bcd57601a5481611b8284610d7b565b611b8c919061365f565b10611bcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc3906134e9565b60405180910390fd5b5b6000611bd830610d7b565b90506000601b5482101590506019548210611bf35760195491505b808015611c0d5750601860159054906101000a900460ff16155b8015611c675750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611c7f5750601860169054906101000a900460ff165b8015611cd55750600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611d2b5750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d5357611d39826120ac565b60004790506000811115611d5157611d5047612466565b5b505b50505b600060019050600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611dfd5750600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80611eb05750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015611eaf5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b15611ebe5760009050612045565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611f695750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611f8157600a54600e81905550600b54600f819055505b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561202c5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561204457600c54600e81905550600d54600f819055505b5b61205184848484612561565b50505050565b600083831115829061209f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209691906132e7565b60405180910390fd5b5082840390509392505050565b6001601860156101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156120e4576120e3613abc565b5b6040519080825280602002602001820160405280156121125781602001602082028036833780820191505090505b509050308160008151811061212a57612129613a8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156121cc57600080fd5b505afa1580156121e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122049190612cc1565b8160018151811061221857612217613a8d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061227f30601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114b6565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016122e3959493929190613544565b600060405180830381600087803b1580156122fd57600080fd5b505af1158015612311573d6000803e3d6000fd5b50505050506000601860156101000a81548160ff02191690831515021790555050565b600060055482111561237b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237290613349565b60405180910390fd5b600061238561258e565b905061239a81846125b990919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6124b66002846125b990919063ffffffff16565b9081150290604051600060405180830381858888f193505050501580156124e1573d6000803e3d6000fd5b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6125326002846125b990919063ffffffff16565b9081150290604051600060405180830381858888f1935050505015801561255d573d6000803e3d6000fd5b5050565b8061256f5761256e6125cf565b5b61257a848484612612565b80612588576125876127dd565b5b50505050565b600080600061259b6127f1565b915091506125b281836125b990919063ffffffff16565b9250505090565b600081836125c791906136b5565b905092915050565b6000600e541480156125e357506000600f54145b156125ed57612610565b600e54601081905550600f546011819055506000600e819055506000600f819055505b565b6000806000806000806126248761288c565b95509550955095509550955061268286600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128f490919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061271785600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290a90919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061276381612920565b61276d84836129dd565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516127ca9190613529565b60405180910390a3505050505050505050565b601054600e81905550601154600f81905550565b6000806000600554905060006009600a61280b9190613739565b6305f5e10061281a9190613857565b905061284d6009600a61282d9190613739565b6305f5e10061283c9190613857565b6005546125b990919063ffffffff16565b82101561287f576005546009600a6128659190613739565b6305f5e1006128749190613857565b935093505050612888565b81819350935050505b9091565b60008060008060008060008060006128a98a600e54600f54612a17565b92509250925060006128b961258e565b905060008060006128cc8e878787612aad565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000818361290291906138b1565b905092915050565b60008183612918919061365f565b905092915050565b600061292a61258e565b905060006129418284612b3690919063ffffffff16565b905061299581600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290a90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6129f2826005546128f490919063ffffffff16565b600581905550612a0d8160065461290a90919063ffffffff16565b6006819055505050565b600080600080612a436064612a35888a612b3690919063ffffffff16565b6125b990919063ffffffff16565b90506000612a6d6064612a5f888b612b3690919063ffffffff16565b6125b990919063ffffffff16565b90506000612a9682612a88858c6128f490919063ffffffff16565b6128f490919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612ac68589612b3690919063ffffffff16565b90506000612add8689612b3690919063ffffffff16565b90506000612af48789612b3690919063ffffffff16565b90506000612b1d82612b0f85876128f490919063ffffffff16565b6128f490919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008183612b449190613857565b905092915050565b6000612b5f612b5a846135de565b6135b9565b90508083825260208201905082856020860282011115612b8257612b81613af5565b5b60005b85811015612bb25781612b988882612bbc565b845260208401935060208301925050600181019050612b85565b5050509392505050565b600081359050612bcb81613fa3565b92915050565b600081519050612be081613fa3565b92915050565b60008083601f840112612bfc57612bfb613af0565b5b8235905067ffffffffffffffff811115612c1957612c18613aeb565b5b602083019150836020820283011115612c3557612c34613af5565b5b9250929050565b600082601f830112612c5157612c50613af0565b5b8135612c61848260208601612b4c565b91505092915050565b600081359050612c7981613fba565b92915050565b600081359050612c8e81613fd1565b92915050565b600060208284031215612caa57612ca9613aff565b5b6000612cb884828501612bbc565b91505092915050565b600060208284031215612cd757612cd6613aff565b5b6000612ce584828501612bd1565b91505092915050565b60008060408385031215612d0557612d04613aff565b5b6000612d1385828601612bbc565b9250506020612d2485828601612bbc565b9150509250929050565b600080600060608486031215612d4757612d46613aff565b5b6000612d5586828701612bbc565b9350506020612d6686828701612bbc565b9250506040612d7786828701612c7f565b9150509250925092565b60008060408385031215612d9857612d97613aff565b5b6000612da685828601612bbc565b9250506020612db785828601612c7f565b9150509250929050565b600080600060408486031215612dda57612dd9613aff565b5b600084013567ffffffffffffffff811115612df857612df7613afa565b5b612e0486828701612be6565b93509350506020612e1786828701612c6a565b9150509250925092565b600060208284031215612e3757612e36613aff565b5b600082013567ffffffffffffffff811115612e5557612e54613afa565b5b612e6184828501612c3c565b91505092915050565b600060208284031215612e8057612e7f613aff565b5b6000612e8e84828501612c6a565b91505092915050565b600060208284031215612ead57612eac613aff565b5b6000612ebb84828501612c7f565b91505092915050565b60008060008060808587031215612ede57612edd613aff565b5b6000612eec87828801612c7f565b9450506020612efd87828801612c7f565b9350506040612f0e87828801612c7f565b9250506060612f1f87828801612c7f565b91505092959194509250565b6000612f378383612f43565b60208301905092915050565b612f4c816138e5565b82525050565b612f5b816138e5565b82525050565b6000612f6c8261361a565b612f76818561363d565b9350612f818361360a565b8060005b83811015612fb2578151612f998882612f2b565b9750612fa483613630565b925050600181019050612f85565b5085935050505092915050565b612fc8816138f7565b82525050565b612fd78161393a565b82525050565b612fe68161394c565b82525050565b6000612ff782613625565b613001818561364e565b9350613011818560208601613982565b61301a81613b04565b840191505092915050565b600061303260238361364e565b915061303d82613b22565b604082019050919050565b6000613055603f8361364e565b915061306082613b71565b604082019050919050565b6000613078602a8361364e565b915061308382613bc0565b604082019050919050565b600061309b601c8361364e565b91506130a682613c0f565b602082019050919050565b60006130be60268361364e565b91506130c982613c38565b604082019050919050565b60006130e160228361364e565b91506130ec82613c87565b604082019050919050565b6000613104601a8361364e565b915061310f82613cd6565b602082019050919050565b600061312760238361364e565b915061313282613cff565b604082019050919050565b600061314a602b8361364e565b915061315582613d4e565b604082019050919050565b600061316d60268361364e565b915061317882613d9d565b604082019050919050565b600061319060178361364e565b915061319b82613dec565b602082019050919050565b60006131b360208361364e565b91506131be82613e15565b602082019050919050565b60006131d660298361364e565b91506131e182613e3e565b604082019050919050565b60006131f9601f8361364e565b915061320482613e8d565b602082019050919050565b600061321c60258361364e565b915061322782613eb6565b604082019050919050565b600061323f60238361364e565b915061324a82613f05565b604082019050919050565b600061326260248361364e565b915061326d82613f54565b604082019050919050565b61328181613923565b82525050565b6132908161392d565b82525050565b60006020820190506132ab6000830184612f52565b92915050565b60006020820190506132c66000830184612fbf565b92915050565b60006020820190506132e16000830184612fce565b92915050565b600060208201905081810360008301526133018184612fec565b905092915050565b6000602082019050818103600083015261332281613025565b9050919050565b6000602082019050818103600083015261334281613048565b9050919050565b600060208201905081810360008301526133628161306b565b9050919050565b600060208201905081810360008301526133828161308e565b9050919050565b600060208201905081810360008301526133a2816130b1565b9050919050565b600060208201905081810360008301526133c2816130d4565b9050919050565b600060208201905081810360008301526133e2816130f7565b9050919050565b600060208201905081810360008301526134028161311a565b9050919050565b600060208201905081810360008301526134228161313d565b9050919050565b6000602082019050818103600083015261344281613160565b9050919050565b6000602082019050818103600083015261346281613183565b9050919050565b60006020820190508181036000830152613482816131a6565b9050919050565b600060208201905081810360008301526134a2816131c9565b9050919050565b600060208201905081810360008301526134c2816131ec565b9050919050565b600060208201905081810360008301526134e28161320f565b9050919050565b6000602082019050818103600083015261350281613232565b9050919050565b6000602082019050818103600083015261352281613255565b9050919050565b600060208201905061353e6000830184613278565b92915050565b600060a0820190506135596000830188613278565b6135666020830187612fdd565b81810360408301526135788186612f61565b90506135876060830185612f52565b6135946080830184613278565b9695505050505050565b60006020820190506135b36000830184613287565b92915050565b60006135c36135d4565b90506135cf82826139b5565b919050565b6000604051905090565b600067ffffffffffffffff8211156135f9576135f8613abc565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061366a82613923565b915061367583613923565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156136aa576136a9613a2f565b5b828201905092915050565b60006136c082613923565b91506136cb83613923565b9250826136db576136da613a5e565b5b828204905092915050565b6000808291508390505b60018511156137305780860481111561370c5761370b613a2f565b5b600185161561371b5780820291505b808102905061372985613b15565b94506136f0565b94509492505050565b600061374482613923565b915061374f8361392d565b925061377c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613784565b905092915050565b6000826137945760019050613850565b816137a25760009050613850565b81600181146137b857600281146137c2576137f1565b6001915050613850565b60ff8411156137d4576137d3613a2f565b5b8360020a9150848211156137eb576137ea613a2f565b5b50613850565b5060208310610133831016604e8410600b84101617156138265782820a90508381111561382157613820613a2f565b5b613850565b61383384848460016136e6565b9250905081840481111561384a57613849613a2f565b5b81810290505b9392505050565b600061386282613923565b915061386d83613923565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138a6576138a5613a2f565b5b828202905092915050565b60006138bc82613923565b91506138c783613923565b9250828210156138da576138d9613a2f565b5b828203905092915050565b60006138f082613903565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006139458261395e565b9050919050565b600061395782613923565b9050919050565b600061396982613970565b9050919050565b600061397b82613903565b9050919050565b60005b838110156139a0578082015181840152602081019050613985565b838111156139af576000848401525b50505050565b6139be82613b04565b810181811067ffffffffffffffff821117156139dd576139dc613abc565b5b80604052505050565b60006139f182613923565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a2457613a23613a2f565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574207468652073616d652070726963652e000000000000600082015250565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e7320746f207475726e20696e746f206760008201527f616d6520746f6b656e732e000000000000000000000000000000000000000000602082015250565b7f5265776172642044697374726962757465722061646472657373206973206e6f60008201527f74207365742e0000000000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682067616d6520746f6b656e732e000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f5472616e73616374696f6e2076616c756520697320696e636f72726563742e00600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b613fac816138e5565b8114613fb757600080fd5b50565b613fc3816138f7565b8114613fce57600080fd5b50565b613fda81613923565b8114613fe557600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220a189649b50186c8da2454e5fea10f4fe3d5649dc5b03deb4e7c57c16be8b465764736f6c63430008070033

Deployed Bytecode Sourcemap

16336:17054:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27140:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20135:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21060:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18108:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20412:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21261:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18424:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20321:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18156:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26499:313;;;;;;;;;;;;;:::i;:::-;;32473:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27317:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32276:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31507:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20515:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14588:103;;;;;;;;;;;;;:::i;:::-;;31616:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18298:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17094:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13940:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26353:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18360:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20226:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31301:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30912:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20661:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32753:460;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17574:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31855:260;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17013:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20868:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17048:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31732:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32123:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33221:166;;;;;;;;;;;;;:::i;:::-;;14846:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26820:312;;;;;;;;;;;;;:::i;:::-;;27140:169;13826:13;:11;:13::i;:::-;27216:9:::1;27211:91;27235:5;:12;27231:1;:16;27211:91;;;27286:4;27269;:14;27274:5;27280:1;27274:8;;;;;;;;:::i;:::-;;;;;;;;27269:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27249:3;;;;;:::i;:::-;;;;27211:91;;;;27140:169:::0;:::o;20135:83::-;20172:13;20205:5;;;;;;;;;;;;;;;;;20198:12;;20135:83;:::o;21060:193::-;21162:4;21184:39;21193:12;:10;:12::i;:::-;21207:7;21216:6;21184:8;:39::i;:::-;21241:4;21234:11;;21060:193;;;;:::o;18108:41::-;;;;;;;;;;;;;:::o;20412:95::-;20465:7;16562:1;16904:2;:13;;;;:::i;:::-;16890:11;:27;;;;:::i;:::-;20485:14;;20412:95;:::o;21261:446::-;21393:4;21410:36;21420:6;21428:9;21439:6;21410:9;:36::i;:::-;21457:220;21480:6;21501:12;:10;:12::i;:::-;21528:138;21584:6;21528:138;;;;;;;;;;;;;;;;;:11;:19;21540:6;21528:19;;;;;;;;;;;;;;;:33;21548:12;:10;:12::i;:::-;21528:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;21457:8;:220::i;:::-;21695:4;21688:11;;21261:446;;;;;:::o;18424:60::-;;;;:::o;20321:83::-;20362:5;16562:1;20380:16;;20321:83;:::o;18156:28::-;;;;;;;;;;;;;:::o;26499:313::-;26579:19;;;;;;;;;;;26563:35;;:12;:10;:12::i;:::-;:35;;;:85;;;;26631:17;;;;;;;;;;;26615:33;;:12;:10;:12::i;:::-;:33;;;26563:85;:125;;;;26681:7;:5;:7::i;:::-;26665:23;;:12;:10;:12::i;:::-;:23;;;26563:125;26541:158;;;;;;26710:23;26736:24;26754:4;26736:9;:24::i;:::-;26710:50;;26771:33;26788:15;26771:16;:33::i;:::-;26530:282;26499:313::o;32473:272::-;13826:13;:11;:13::i;:::-;32615:1:::1;32578:39;;:25;;;;;;;;;;;:39;;;;32556:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;32694:43;32703:25;;;;;;;;;;;32730:6;32694:8;:43::i;:::-;;32473:272:::0;:::o;27317:92::-;13826:13;:11;:13::i;:::-;27396:5:::1;27381:4;:12;27386:6;27381:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;27317:92:::0;:::o;32276:189::-;13826:13;:11;:13::i;:::-;32374:15:::1;;32362:8;:27;;32354:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32449:8;32431:15;:26;;;;32276:189:::0;:::o;31507:101::-;13826:13;:11;:13::i;:::-;31588:12:::1;31574:11;;:26;;;;;;;;;;;;;;;;;;31507:101:::0;:::o;20515:138::-;20581:7;20608:37;20628:7;:16;20636:7;20628:16;;;;;;;;;;;;;;;;20608:19;:37::i;:::-;20601:44;;20515:138;;;:::o;14588:103::-;13826:13;:11;:13::i;:::-;14653:30:::1;14680:1;14653:18;:30::i;:::-;14588:103::o:0;31616:108::-;13826:13;:11;:13::i;:::-;31705:11:::1;31690:12;:26;;;;31616:108:::0;:::o;18298:55::-;;;;:::o;17094:51::-;;;;;;;;;;;;;;;;;:::o;13940:87::-;13986:7;14013:6;;;;;;;;;;;14006:13;;13940:87;:::o;26353:138::-;13826:13;:11;:13::i;:::-;26434:12:::1;26420:11;;:26;;;;;;;;;;;;;;;;;;26471:12;26457:11;:26;;;;26353:138:::0;:::o;18360:57::-;;;;:::o;20226:87::-;20265:13;20298:7;;;;;;;;;;;;;;;;;20291:14;;20226:87;:::o;31301:162::-;13826:13;:11;:13::i;:::-;31437:18:::1;31415:19;:40;;;;31301:162:::0;:::o;30912:336::-;13826:13;:11;:13::i;:::-;31106::::1;31089:14;:30;;;;31148:14;31130:15;:32;;;;31190:11;31175:12;:26;;;;31228:12;31212:13;:28;;;;30912:336:::0;;;;:::o;20661:199::-;20766:4;20788:42;20798:12;:10;:12::i;:::-;20812:9;20823:6;20788:9;:42::i;:::-;20848:4;20841:11;;20661:199;;;;:::o;32753:460::-;32880:9;32856:21;32866:10;32856:9;:21::i;:::-;:33;32834:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;33024:14;33006:15;;:32;;;;:::i;:::-;32993:9;:45;32971:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;33108:40;33138:9;33108:29;:40::i;:::-;33191:14;33159:16;:28;33176:10;33159:28;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;32753:460;:::o;17574:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;31855:260::-;13826:13;:11;:13::i;:::-;31998:9:::1;31993:115;32017:8;;:15;;32013:1;:19;31993:115;;;32088:8;32054:18;:31;32073:8;;32082:1;32073:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;32054:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;32034:3;;;;;:::i;:::-;;;;31993:115;;;;31855:260:::0;;;:::o;17013:26::-;;;;:::o;20868:184::-;20985:7;21017:11;:18;21029:5;21017:18;;;;;;;;;;;;;;;:27;21036:7;21017:27;;;;;;;;;;;;;;;;21010:34;;20868:184;;;;:::o;17048:39::-;;;;:::o;31732:115::-;13826:13;:11;:13::i;:::-;31826::::1;31809:14;:30;;;;31732:115:::0;:::o;32123:145::-;13826:13;:11;:13::i;:::-;32249:10:::1;32213:25;;:47;;;;;;;;;;;;;;;;;;32123:145:::0;:::o;33221:166::-;33306:1;33274:16;:28;33291:10;33274:28;;;;;;;;;;;;;;;;:33;;33266:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;33378:1;33346:16;:28;33363:10;33346:28;;;;;;;;;;;;;;;;:33;;;;;;;:::i;:::-;;;;;;;;33221:166::o;14846:201::-;13826:13;:11;:13::i;:::-;14955:1:::1;14935:22;;:8;:22;;;;14927:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;15011:28;15030:8;15011:18;:28::i;:::-;14846:201:::0;:::o;26820:312::-;26900:19;;;;;;;;;;;26884:35;;:12;:10;:12::i;:::-;:35;;;:85;;;;26952:17;;;;;;;;;;;26936:33;;:12;:10;:12::i;:::-;:33;;;26884:85;:125;;;;27002:7;:5;:7::i;:::-;26986:23;;:12;:10;:12::i;:::-;:23;;;26884:125;26862:158;;;;;;27031:26;27060:21;27031:50;;27092:32;27105:18;27092:12;:32::i;:::-;26851:281;26820:312::o;14105:132::-;14180:12;:10;:12::i;:::-;14169:23;;:7;:5;:7::i;:::-;:23;;;14161:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14105:132::o;12524:98::-;12577:7;12604:10;12597:17;;12524:98;:::o;22398:369::-;22542:1;22525:19;;:5;:19;;;;22517:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22623:1;22604:21;;:7;:21;;;;22596:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22705:6;22675:11;:18;22687:5;22675:18;;;;;;;;;;;;;;;:27;22694:7;22675:27;;;;;;;;;;;;;;;:36;;;;22743:7;22727:32;;22736:5;22727:32;;;22752:6;22727:32;;;;;;:::i;:::-;;;;;;;;22398:369;;;:::o;22775:2911::-;22913:1;22897:18;;:4;:18;;;;22889:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22990:1;22976:16;;:2;:16;;;;22968:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23060:1;23051:6;:10;23043:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23132:7;:5;:7::i;:::-;23124:15;;:4;:15;;;;:32;;;;;23149:7;:5;:7::i;:::-;23143:13;;:2;:13;;;;23124:32;23120:1800;;;23213:11;;;;;;;;;;;23208:205;;23283:7;:5;:7::i;:::-;23275:15;;:4;:15;;;23245:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;23208:205;23447:12;;23437:6;:22;;23429:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;23534:4;:10;23539:4;23534:10;;;;;;;;;;;;;;;;;;;;;;;;;23533:11;:24;;;;;23549:4;:8;23554:2;23549:8;;;;;;;;;;;;;;;;;;;;;;;;;23548:9;23533:24;23507:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;23683:11;;23667:12;:27;;:69;;;;;23723:13;;;;;;;;;;;23715:21;;:4;:21;;;23667:69;:120;;;;;23771:15;;;;;;;;;;;23757:30;;:2;:30;;;;23667:120;:160;;;;;23822:4;23808:19;;:2;:19;;;;23667:160;23645:248;;;23873:4;23862;:8;23867:2;23862:8;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;;;;;;23645:248;23919:13;;;;;;;;;;;23913:19;;:2;:19;;;23909:208;;24008:14;;23999:6;23983:13;23993:2;23983:9;:13::i;:::-;:22;;;;:::i;:::-;:39;23953:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;23909:208;24133:28;24164:24;24182:4;24164:9;:24::i;:::-;24133:55;;24203:12;24242:19;;24218:20;:43;;24203:58;;24306:12;;24282:20;:36;24278:112;;24362:12;;24339:35;;24278:112;24428:7;:35;;;;;24457:6;;;;;;;;;;;24456:7;24428:35;:77;;;;;24492:13;;;;;;;;;;;24484:21;;:4;:21;;;;24428:77;:109;;;;;24526:11;;;;;;;;;;;24428:109;:155;;;;;24559:18;:24;24578:4;24559:24;;;;;;;;;;;;;;;;;;;;;;;;;24558:25;24428:155;:199;;;;;24605:18;:22;24624:2;24605:22;;;;;;;;;;;;;;;;;;;;;;;;;24604:23;24428:199;24406:503;;;24662:38;24679:20;24662:16;:38::i;:::-;24719:26;24748:21;24719:50;;24813:1;24792:18;:22;24788:106;;;24839:35;24852:21;24839:12;:35::i;:::-;24788:106;24643:266;24406:503;23158:1762;;23120:1800;24932:12;24947:4;24932:19;;25012:18;:24;25031:4;25012:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;25040:18;:22;25059:2;25040:22;;;;;;;;;;;;;;;;;;;;;;;;;25012:50;25011:115;;;;25089:13;;;;;;;;;;;25081:21;;:4;:21;;;;:44;;;;;25112:13;;;;;;;;;;;25106:19;;:2;:19;;;;25081:44;25011:115;24993:632;;;25163:5;25153:15;;24993:632;;;25247:13;;;;;;;;;;;25239:21;;:4;:21;;;:55;;;;;25278:15;;;;;;;;;;;25264:30;;:2;:30;;;;25239:55;25235:163;;;25327:14;;25315:9;:26;;;;25370:12;;25360:7;:22;;;;25235:163;25459:13;;;;;;;;;;;25453:19;;:2;:19;;;:55;;;;;25492:15;;;;;;;;;;;25476:32;;:4;:32;;;;25453:55;25449:165;;;25541:15;;25529:9;:27;;;;25585:13;;25575:7;:23;;;;25449:165;24993:632;25637:41;25652:4;25658:2;25662:6;25670:7;25637:14;:41::i;:::-;22878:2808;22775:2911;;;:::o;7022:240::-;7142:7;7200:1;7195;:6;;7203:12;7187:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7242:1;7238;:5;7231:12;;7022:240;;;;;:::o;25694:483::-;18589:4;18580:6;;:13;;;;;;;;;;;;;;;;;;25772:21:::1;25810:1;25796:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25772:40;;25841:4;25823;25828:1;25823:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;25867:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25857:4;25862:1;25857:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;25900:62;25917:4;25932:15;;;;;;;;;;;25950:11;25900:8;:62::i;:::-;25973:15;;;;;;;;;;;:66;;;26054:11;26080:1;26096:4;26123;26143:15;25973:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25761:416;18625:5:::0;18616:6;;:14;;;;;;;;;;;;;;;;;;25694:483;:::o;21715:323::-;21810:7;21868;;21857;:18;;21835:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;21956:19;21978:10;:8;:10::i;:::-;21956:32;;22006:24;22018:11;22006:7;:11;;:24;;;;:::i;:::-;21999:31;;;21715:323;;;:::o;15207:191::-;15281:16;15300:6;;;;;;;;;;;15281:25;;15326:8;15317:6;;:17;;;;;;;;;;;;;;;;;;15381:8;15350:40;;15371:8;15350:40;;;;;;;;;;;;15270:128;15207:191;:::o;26185:160::-;26242:19;;;;;;;;;;;:28;;:43;26271:13;26282:1;26271:6;:10;;:13;;;;:::i;:::-;26242:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26296:17;;;;;;;;;;;:26;;:41;26323:13;26334:1;26323:6;:10;;:13;;;;:::i;:::-;26296:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26185:160;:::o;27417:282::-;27573:7;27568:28;;27582:14;:12;:14::i;:::-;27568:28;27607:44;27625:6;27633:9;27644:6;27607:17;:44::i;:::-;27667:7;27662:29;;27676:15;:13;:15::i;:::-;27662:29;27417:282;;;;:::o;30471:166::-;30513:7;30534:15;30551;30570:19;:17;:19::i;:::-;30533:56;;;;30609:20;30621:7;30609;:11;;:20;;;;:::i;:::-;30602:27;;;;30471:166;:::o;5880:98::-;5938:7;5969:1;5965;:5;;;;:::i;:::-;5958:12;;5880:98;;;;:::o;22046:219::-;22106:1;22093:9;;:14;:30;;;;;22122:1;22111:7;;:12;22093:30;22089:43;;;22125:7;;22089:43;22164:9;;22144:17;:29;;;;22202:7;;22184:15;:25;;;;22234:1;22222:9;:13;;;;22256:1;22246:7;:11;;;;22046:219;:::o;27707:610::-;27854:15;27884:23;27922:12;27949:23;27987:12;28014:13;28041:19;28052:7;28041:10;:19::i;:::-;27839:221;;;;;;;;;;;;28089:28;28109:7;28089;:15;28097:6;28089:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28071:7;:15;28079:6;28071:15;;;;;;;;;;;;;;;:46;;;;28149:39;28172:15;28149:7;:18;28157:9;28149:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28128:7;:18;28136:9;28128:18;;;;;;;;;;;;;;;:60;;;;28199:16;28209:5;28199:9;:16::i;:::-;28226:23;28238:4;28244;28226:11;:23::i;:::-;28282:9;28265:44;;28274:6;28265:44;;;28293:15;28265:44;;;;;;:::i;:::-;;;;;;;;27828:489;;;;;;27707:610;;;:::o;22273:117::-;22329:17;;22317:9;:29;;;;22367:15;;22357:7;:25;;;;22273:117::o;30645:259::-;30696:7;30705;30725:15;30743:7;;30725:25;;30761:15;16562:1;16904:2;:13;;;;:::i;:::-;16890:11;:27;;;;:::i;:::-;30761:25;;30811:20;16562:1;16904:2;:13;;;;:::i;:::-;16890:11;:27;;;;:::i;:::-;30811:7;;:11;;:20;;;;:::i;:::-;30801:7;:30;30797:61;;;30841:7;;16562:1;16904:2;:13;;;;:::i;:::-;16890:11;:27;;;;:::i;:::-;30833:25;;;;;;;;30797:61;30879:7;30888;30871:25;;;;;;30645:259;;;:::o;28736:704::-;28836:7;28858;28880;28902;28924;28946;28982:23;29007:12;29021:13;29038:90;29064:7;29086:9;;29110:7;;29038:11;:90::i;:::-;28981:147;;;;;;29139:19;29161:10;:8;:10::i;:::-;29139:32;;29183:15;29200:23;29225:12;29241:109;29267:7;29289:4;29308:5;29328:11;29241;:109::i;:::-;29182:168;;;;;;29371:7;29380:15;29397:4;29403:15;29420:4;29426:5;29363:69;;;;;;;;;;;;;;;;;;;28736:704;;;;;;;:::o;5124:98::-;5182:7;5213:1;5209;:5;;;;:::i;:::-;5202:12;;5124:98;;;;:::o;4743:::-;4801:7;4832:1;4828;:5;;;;:::i;:::-;4821:12;;4743:98;;;;:::o;28325:211::-;28378:19;28400:10;:8;:10::i;:::-;28378:32;;28421:13;28437:22;28447:11;28437:5;:9;;:22;;;;:::i;:::-;28421:38;;28495:33;28522:5;28495:7;:22;28511:4;28495:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;28470:7;:22;28486:4;28470:22;;;;;;;;;;;;;;;:58;;;;28367:169;;28325:211;:::o;28544:147::-;28622:17;28634:4;28622:7;;:11;;:17;;;;:::i;:::-;28612:7;:27;;;;28663:20;28678:4;28663:10;;:14;;:20;;;;:::i;:::-;28650:10;:33;;;;28544:147;;:::o;29448:471::-;29617:7;29639;29661;29696:12;29711:30;29737:3;29711:21;29723:8;29711:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;29696:45;;29752:13;29768:28;29792:3;29768:19;29780:6;29768:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;29752:44;;29807:23;29833:28;29855:5;29833:17;29845:4;29833:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;29807:54;;29882:15;29899:4;29905:5;29874:37;;;;;;;;;29448:471;;;;;;;:::o;29927:536::-;30121:7;30143;30165;30200:15;30218:24;30230:11;30218:7;:11;;:24;;;;:::i;:::-;30200:42;;30253:12;30268:21;30277:11;30268:4;:8;;:21;;;;:::i;:::-;30253:36;;30300:13;30316:22;30326:11;30316:5;:9;;:22;;;;:::i;:::-;30300:38;;30349:23;30375:28;30397:5;30375:17;30387:4;30375:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;30349:54;;30424:7;30433:15;30450:4;30416:39;;;;;;;;;;29927:536;;;;;;;;:::o;5481:98::-;5539:7;5570:1;5566;:5;;;;:::i;:::-;5559:12;;5481:98;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:139::-;798:5;836:6;823:20;814:29;;852:33;879:5;852:33;:::i;:::-;752:139;;;;:::o;897:143::-;954:5;985:6;979:13;970:22;;1001:33;1028:5;1001:33;:::i;:::-;897:143;;;;:::o;1063:568::-;1136:8;1146:6;1196:3;1189:4;1181:6;1177:17;1173:27;1163:122;;1204:79;;:::i;:::-;1163:122;1317:6;1304:20;1294:30;;1347:18;1339:6;1336:30;1333:117;;;1369:79;;:::i;:::-;1333:117;1483:4;1475:6;1471:17;1459:29;;1537:3;1529:4;1521:6;1517:17;1507:8;1503:32;1500:41;1497:128;;;1544:79;;:::i;:::-;1497:128;1063:568;;;;;:::o;1654:370::-;1725:5;1774:3;1767:4;1759:6;1755:17;1751:27;1741:122;;1782:79;;:::i;:::-;1741:122;1899:6;1886:20;1924:94;2014:3;2006:6;1999:4;1991:6;1987:17;1924:94;:::i;:::-;1915:103;;1731:293;1654:370;;;;:::o;2030:133::-;2073:5;2111:6;2098:20;2089:29;;2127:30;2151:5;2127:30;:::i;:::-;2030:133;;;;:::o;2169:139::-;2215:5;2253:6;2240:20;2231:29;;2269:33;2296:5;2269:33;:::i;:::-;2169:139;;;;:::o;2314:329::-;2373:6;2422:2;2410:9;2401:7;2397:23;2393:32;2390:119;;;2428:79;;:::i;:::-;2390:119;2548:1;2573:53;2618:7;2609:6;2598:9;2594:22;2573:53;:::i;:::-;2563:63;;2519:117;2314:329;;;;:::o;2649:351::-;2719:6;2768:2;2756:9;2747:7;2743:23;2739:32;2736:119;;;2774:79;;:::i;:::-;2736:119;2894:1;2919:64;2975:7;2966:6;2955:9;2951:22;2919:64;:::i;:::-;2909:74;;2865:128;2649:351;;;;:::o;3006:474::-;3074:6;3082;3131:2;3119:9;3110:7;3106:23;3102:32;3099:119;;;3137:79;;:::i;:::-;3099:119;3257:1;3282:53;3327:7;3318:6;3307:9;3303:22;3282:53;:::i;:::-;3272:63;;3228:117;3384:2;3410:53;3455:7;3446:6;3435:9;3431:22;3410:53;:::i;:::-;3400:63;;3355:118;3006:474;;;;;:::o;3486:619::-;3563:6;3571;3579;3628:2;3616:9;3607:7;3603:23;3599:32;3596:119;;;3634:79;;:::i;:::-;3596:119;3754:1;3779:53;3824:7;3815:6;3804:9;3800:22;3779:53;:::i;:::-;3769:63;;3725:117;3881:2;3907:53;3952:7;3943:6;3932:9;3928:22;3907:53;:::i;:::-;3897:63;;3852:118;4009:2;4035:53;4080:7;4071:6;4060:9;4056:22;4035:53;:::i;:::-;4025:63;;3980:118;3486:619;;;;;:::o;4111:474::-;4179:6;4187;4236:2;4224:9;4215:7;4211:23;4207:32;4204:119;;;4242:79;;:::i;:::-;4204:119;4362:1;4387:53;4432:7;4423:6;4412:9;4408:22;4387:53;:::i;:::-;4377:63;;4333:117;4489:2;4515:53;4560:7;4551:6;4540:9;4536:22;4515:53;:::i;:::-;4505:63;;4460:118;4111:474;;;;;:::o;4591:698::-;4683:6;4691;4699;4748:2;4736:9;4727:7;4723:23;4719:32;4716:119;;;4754:79;;:::i;:::-;4716:119;4902:1;4891:9;4887:17;4874:31;4932:18;4924:6;4921:30;4918:117;;;4954:79;;:::i;:::-;4918:117;5067:80;5139:7;5130:6;5119:9;5115:22;5067:80;:::i;:::-;5049:98;;;;4845:312;5196:2;5222:50;5264:7;5255:6;5244:9;5240:22;5222:50;:::i;:::-;5212:60;;5167:115;4591:698;;;;;:::o;5295:539::-;5379:6;5428:2;5416:9;5407:7;5403:23;5399:32;5396:119;;;5434:79;;:::i;:::-;5396:119;5582:1;5571:9;5567:17;5554:31;5612:18;5604:6;5601:30;5598:117;;;5634:79;;:::i;:::-;5598:117;5739:78;5809:7;5800:6;5789:9;5785:22;5739:78;:::i;:::-;5729:88;;5525:302;5295:539;;;;:::o;5840:323::-;5896:6;5945:2;5933:9;5924:7;5920:23;5916:32;5913:119;;;5951:79;;:::i;:::-;5913:119;6071:1;6096:50;6138:7;6129:6;6118:9;6114:22;6096:50;:::i;:::-;6086:60;;6042:114;5840:323;;;;:::o;6169:329::-;6228:6;6277:2;6265:9;6256:7;6252:23;6248:32;6245:119;;;6283:79;;:::i;:::-;6245:119;6403:1;6428:53;6473:7;6464:6;6453:9;6449:22;6428:53;:::i;:::-;6418:63;;6374:117;6169:329;;;;:::o;6504:765::-;6590:6;6598;6606;6614;6663:3;6651:9;6642:7;6638:23;6634:33;6631:120;;;6670:79;;:::i;:::-;6631:120;6790:1;6815:53;6860:7;6851:6;6840:9;6836:22;6815:53;:::i;:::-;6805:63;;6761:117;6917:2;6943:53;6988:7;6979:6;6968:9;6964:22;6943:53;:::i;:::-;6933:63;;6888:118;7045:2;7071:53;7116:7;7107:6;7096:9;7092:22;7071:53;:::i;:::-;7061:63;;7016:118;7173:2;7199:53;7244:7;7235:6;7224:9;7220:22;7199:53;:::i;:::-;7189:63;;7144:118;6504:765;;;;;;;:::o;7275:179::-;7344:10;7365:46;7407:3;7399:6;7365:46;:::i;:::-;7443:4;7438:3;7434:14;7420:28;;7275:179;;;;:::o;7460:108::-;7537:24;7555:5;7537:24;:::i;:::-;7532:3;7525:37;7460:108;;:::o;7574:118::-;7661:24;7679:5;7661:24;:::i;:::-;7656:3;7649:37;7574:118;;:::o;7728:732::-;7847:3;7876:54;7924:5;7876:54;:::i;:::-;7946:86;8025:6;8020:3;7946:86;:::i;:::-;7939:93;;8056:56;8106:5;8056:56;:::i;:::-;8135:7;8166:1;8151:284;8176:6;8173:1;8170:13;8151:284;;;8252:6;8246:13;8279:63;8338:3;8323:13;8279:63;:::i;:::-;8272:70;;8365:60;8418:6;8365:60;:::i;:::-;8355:70;;8211:224;8198:1;8195;8191:9;8186:14;;8151:284;;;8155:14;8451:3;8444:10;;7852:608;;;7728:732;;;;:::o;8466:109::-;8547:21;8562:5;8547:21;:::i;:::-;8542:3;8535:34;8466:109;;:::o;8581:183::-;8694:63;8751:5;8694:63;:::i;:::-;8689:3;8682:76;8581:183;;:::o;8770:147::-;8865:45;8904:5;8865:45;:::i;:::-;8860:3;8853:58;8770:147;;:::o;8923:364::-;9011:3;9039:39;9072:5;9039:39;:::i;:::-;9094:71;9158:6;9153:3;9094:71;:::i;:::-;9087:78;;9174:52;9219:6;9214:3;9207:4;9200:5;9196:16;9174:52;:::i;:::-;9251:29;9273:6;9251:29;:::i;:::-;9246:3;9242:39;9235:46;;9015:272;8923:364;;;;:::o;9293:366::-;9435:3;9456:67;9520:2;9515:3;9456:67;:::i;:::-;9449:74;;9532:93;9621:3;9532:93;:::i;:::-;9650:2;9645:3;9641:12;9634:19;;9293:366;;;:::o;9665:::-;9807:3;9828:67;9892:2;9887:3;9828:67;:::i;:::-;9821:74;;9904:93;9993:3;9904:93;:::i;:::-;10022:2;10017:3;10013:12;10006:19;;9665:366;;;:::o;10037:::-;10179:3;10200:67;10264:2;10259:3;10200:67;:::i;:::-;10193:74;;10276:93;10365:3;10276:93;:::i;:::-;10394:2;10389:3;10385:12;10378:19;;10037:366;;;:::o;10409:::-;10551:3;10572:67;10636:2;10631:3;10572:67;:::i;:::-;10565:74;;10648:93;10737:3;10648:93;:::i;:::-;10766:2;10761:3;10757:12;10750:19;;10409:366;;;:::o;10781:::-;10923:3;10944:67;11008:2;11003:3;10944:67;:::i;:::-;10937:74;;11020:93;11109:3;11020:93;:::i;:::-;11138:2;11133:3;11129:12;11122:19;;10781:366;;;:::o;11153:::-;11295:3;11316:67;11380:2;11375:3;11316:67;:::i;:::-;11309:74;;11392:93;11481:3;11392:93;:::i;:::-;11510:2;11505:3;11501:12;11494:19;;11153:366;;;:::o;11525:::-;11667:3;11688:67;11752:2;11747:3;11688:67;:::i;:::-;11681:74;;11764:93;11853:3;11764:93;:::i;:::-;11882:2;11877:3;11873:12;11866:19;;11525:366;;;:::o;11897:::-;12039:3;12060:67;12124:2;12119:3;12060:67;:::i;:::-;12053:74;;12136:93;12225:3;12136:93;:::i;:::-;12254:2;12249:3;12245:12;12238:19;;11897:366;;;:::o;12269:::-;12411:3;12432:67;12496:2;12491:3;12432:67;:::i;:::-;12425:74;;12508:93;12597:3;12508:93;:::i;:::-;12626:2;12621:3;12617:12;12610:19;;12269:366;;;:::o;12641:::-;12783:3;12804:67;12868:2;12863:3;12804:67;:::i;:::-;12797:74;;12880:93;12969:3;12880:93;:::i;:::-;12998:2;12993:3;12989:12;12982:19;;12641:366;;;:::o;13013:::-;13155:3;13176:67;13240:2;13235:3;13176:67;:::i;:::-;13169:74;;13252:93;13341:3;13252:93;:::i;:::-;13370:2;13365:3;13361:12;13354:19;;13013:366;;;:::o;13385:::-;13527:3;13548:67;13612:2;13607:3;13548:67;:::i;:::-;13541:74;;13624:93;13713:3;13624:93;:::i;:::-;13742:2;13737:3;13733:12;13726:19;;13385:366;;;:::o;13757:::-;13899:3;13920:67;13984:2;13979:3;13920:67;:::i;:::-;13913:74;;13996:93;14085:3;13996:93;:::i;:::-;14114:2;14109:3;14105:12;14098:19;;13757:366;;;:::o;14129:::-;14271:3;14292:67;14356:2;14351:3;14292:67;:::i;:::-;14285:74;;14368:93;14457:3;14368:93;:::i;:::-;14486:2;14481:3;14477:12;14470:19;;14129:366;;;:::o;14501:::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:::-;15015:3;15036:67;15100:2;15095:3;15036:67;:::i;:::-;15029:74;;15112:93;15201:3;15112:93;:::i;:::-;15230:2;15225:3;15221:12;15214:19;;14873:366;;;:::o;15245:::-;15387:3;15408:67;15472:2;15467:3;15408:67;:::i;:::-;15401:74;;15484:93;15573:3;15484:93;:::i;:::-;15602:2;15597:3;15593:12;15586:19;;15245:366;;;:::o;15617:118::-;15704:24;15722:5;15704:24;:::i;:::-;15699:3;15692:37;15617:118;;:::o;15741:112::-;15824:22;15840:5;15824:22;:::i;:::-;15819:3;15812:35;15741:112;;:::o;15859:222::-;15952:4;15990:2;15979:9;15975:18;15967:26;;16003:71;16071:1;16060:9;16056:17;16047:6;16003:71;:::i;:::-;15859:222;;;;:::o;16087:210::-;16174:4;16212:2;16201:9;16197:18;16189:26;;16225:65;16287:1;16276:9;16272:17;16263:6;16225:65;:::i;:::-;16087:210;;;;:::o;16303:274::-;16422:4;16460:2;16449:9;16445:18;16437:26;;16473:97;16567:1;16556:9;16552:17;16543:6;16473:97;:::i;:::-;16303:274;;;;:::o;16583:313::-;16696:4;16734:2;16723:9;16719:18;16711:26;;16783:9;16777:4;16773:20;16769:1;16758:9;16754:17;16747:47;16811:78;16884:4;16875:6;16811:78;:::i;:::-;16803:86;;16583:313;;;;:::o;16902:419::-;17068:4;17106:2;17095:9;17091:18;17083:26;;17155:9;17149:4;17145:20;17141:1;17130:9;17126:17;17119:47;17183:131;17309:4;17183:131;:::i;:::-;17175:139;;16902:419;;;:::o;17327:::-;17493:4;17531:2;17520:9;17516:18;17508:26;;17580:9;17574:4;17570:20;17566:1;17555:9;17551:17;17544:47;17608:131;17734:4;17608:131;:::i;:::-;17600:139;;17327:419;;;:::o;17752:::-;17918:4;17956:2;17945:9;17941:18;17933:26;;18005:9;17999:4;17995:20;17991:1;17980:9;17976:17;17969:47;18033:131;18159:4;18033:131;:::i;:::-;18025:139;;17752:419;;;:::o;18177:::-;18343:4;18381:2;18370:9;18366:18;18358:26;;18430:9;18424:4;18420:20;18416:1;18405:9;18401:17;18394:47;18458:131;18584:4;18458:131;:::i;:::-;18450:139;;18177:419;;;:::o;18602:::-;18768:4;18806:2;18795:9;18791:18;18783:26;;18855:9;18849:4;18845:20;18841:1;18830:9;18826:17;18819:47;18883:131;19009:4;18883:131;:::i;:::-;18875:139;;18602:419;;;:::o;19027:::-;19193:4;19231:2;19220:9;19216:18;19208:26;;19280:9;19274:4;19270:20;19266:1;19255:9;19251:17;19244:47;19308:131;19434:4;19308:131;:::i;:::-;19300:139;;19027:419;;;:::o;19452:::-;19618:4;19656:2;19645:9;19641:18;19633:26;;19705:9;19699:4;19695:20;19691:1;19680:9;19676:17;19669:47;19733:131;19859:4;19733:131;:::i;:::-;19725:139;;19452:419;;;:::o;19877:::-;20043:4;20081:2;20070:9;20066:18;20058:26;;20130:9;20124:4;20120:20;20116:1;20105:9;20101:17;20094:47;20158:131;20284:4;20158:131;:::i;:::-;20150:139;;19877:419;;;:::o;20302:::-;20468:4;20506:2;20495:9;20491:18;20483:26;;20555:9;20549:4;20545:20;20541:1;20530:9;20526:17;20519:47;20583:131;20709:4;20583:131;:::i;:::-;20575:139;;20302:419;;;:::o;20727:::-;20893:4;20931:2;20920:9;20916:18;20908:26;;20980:9;20974:4;20970:20;20966:1;20955:9;20951:17;20944:47;21008:131;21134:4;21008:131;:::i;:::-;21000:139;;20727:419;;;:::o;21152:::-;21318:4;21356:2;21345:9;21341:18;21333:26;;21405:9;21399:4;21395:20;21391:1;21380:9;21376:17;21369:47;21433:131;21559:4;21433:131;:::i;:::-;21425:139;;21152:419;;;:::o;21577:::-;21743:4;21781:2;21770:9;21766:18;21758:26;;21830:9;21824:4;21820:20;21816:1;21805:9;21801:17;21794:47;21858:131;21984:4;21858:131;:::i;:::-;21850:139;;21577:419;;;:::o;22002:::-;22168:4;22206:2;22195:9;22191:18;22183:26;;22255:9;22249:4;22245:20;22241:1;22230:9;22226:17;22219:47;22283:131;22409:4;22283:131;:::i;:::-;22275:139;;22002:419;;;:::o;22427:::-;22593:4;22631:2;22620:9;22616:18;22608:26;;22680:9;22674:4;22670:20;22666:1;22655:9;22651:17;22644:47;22708:131;22834:4;22708:131;:::i;:::-;22700:139;;22427:419;;;:::o;22852:::-;23018:4;23056:2;23045:9;23041:18;23033:26;;23105:9;23099:4;23095:20;23091:1;23080:9;23076:17;23069:47;23133:131;23259:4;23133:131;:::i;:::-;23125:139;;22852:419;;;:::o;23277:::-;23443:4;23481:2;23470:9;23466:18;23458:26;;23530:9;23524:4;23520:20;23516:1;23505:9;23501:17;23494:47;23558:131;23684:4;23558:131;:::i;:::-;23550:139;;23277:419;;;:::o;23702:::-;23868:4;23906:2;23895:9;23891:18;23883:26;;23955:9;23949:4;23945:20;23941:1;23930:9;23926:17;23919:47;23983:131;24109:4;23983:131;:::i;:::-;23975:139;;23702:419;;;:::o;24127:222::-;24220:4;24258:2;24247:9;24243:18;24235:26;;24271:71;24339:1;24328:9;24324:17;24315:6;24271:71;:::i;:::-;24127:222;;;;:::o;24355:831::-;24618:4;24656:3;24645:9;24641:19;24633:27;;24670:71;24738:1;24727:9;24723:17;24714:6;24670:71;:::i;:::-;24751:80;24827:2;24816:9;24812:18;24803:6;24751:80;:::i;:::-;24878:9;24872:4;24868:20;24863:2;24852:9;24848:18;24841:48;24906:108;25009:4;25000:6;24906:108;:::i;:::-;24898:116;;25024:72;25092:2;25081:9;25077:18;25068:6;25024:72;:::i;:::-;25106:73;25174:3;25163:9;25159:19;25150:6;25106:73;:::i;:::-;24355:831;;;;;;;;:::o;25192:214::-;25281:4;25319:2;25308:9;25304:18;25296:26;;25332:67;25396:1;25385:9;25381:17;25372:6;25332:67;:::i;:::-;25192:214;;;;:::o;25412:129::-;25446:6;25473:20;;:::i;:::-;25463:30;;25502:33;25530:4;25522:6;25502:33;:::i;:::-;25412:129;;;:::o;25547:75::-;25580:6;25613:2;25607:9;25597:19;;25547:75;:::o;25628:311::-;25705:4;25795:18;25787:6;25784:30;25781:56;;;25817:18;;:::i;:::-;25781:56;25867:4;25859:6;25855:17;25847:25;;25927:4;25921;25917:15;25909:23;;25628:311;;;:::o;25945:132::-;26012:4;26035:3;26027:11;;26065:4;26060:3;26056:14;26048:22;;25945:132;;;:::o;26083:114::-;26150:6;26184:5;26178:12;26168:22;;26083:114;;;:::o;26203:99::-;26255:6;26289:5;26283:12;26273:22;;26203:99;;;:::o;26308:113::-;26378:4;26410;26405:3;26401:14;26393:22;;26308:113;;;:::o;26427:184::-;26526:11;26560:6;26555:3;26548:19;26600:4;26595:3;26591:14;26576:29;;26427:184;;;;:::o;26617:169::-;26701:11;26735:6;26730:3;26723:19;26775:4;26770:3;26766:14;26751:29;;26617:169;;;;:::o;26792:305::-;26832:3;26851:20;26869:1;26851:20;:::i;:::-;26846:25;;26885:20;26903:1;26885:20;:::i;:::-;26880:25;;27039:1;26971:66;26967:74;26964:1;26961:81;26958:107;;;27045:18;;:::i;:::-;26958:107;27089:1;27086;27082:9;27075:16;;26792:305;;;;:::o;27103:185::-;27143:1;27160:20;27178:1;27160:20;:::i;:::-;27155:25;;27194:20;27212:1;27194:20;:::i;:::-;27189:25;;27233:1;27223:35;;27238:18;;:::i;:::-;27223:35;27280:1;27277;27273:9;27268:14;;27103:185;;;;:::o;27294:848::-;27355:5;27362:4;27386:6;27377:15;;27410:5;27401:14;;27424:712;27445:1;27435:8;27432:15;27424:712;;;27540:4;27535:3;27531:14;27525:4;27522:24;27519:50;;;27549:18;;:::i;:::-;27519:50;27599:1;27589:8;27585:16;27582:451;;;28014:4;28007:5;28003:16;27994:25;;27582:451;28064:4;28058;28054:15;28046:23;;28094:32;28117:8;28094:32;:::i;:::-;28082:44;;27424:712;;;27294:848;;;;;;;:::o;28148:281::-;28206:5;28230:23;28248:4;28230:23;:::i;:::-;28222:31;;28274:25;28290:8;28274:25;:::i;:::-;28262:37;;28318:104;28355:66;28345:8;28339:4;28318:104;:::i;:::-;28309:113;;28148:281;;;;:::o;28435:1073::-;28489:5;28680:8;28670:40;;28701:1;28692:10;;28703:5;;28670:40;28729:4;28719:36;;28746:1;28737:10;;28748:5;;28719:36;28815:4;28863:1;28858:27;;;;28899:1;28894:191;;;;28808:277;;28858:27;28876:1;28867:10;;28878:5;;;28894:191;28939:3;28929:8;28926:17;28923:43;;;28946:18;;:::i;:::-;28923:43;28995:8;28992:1;28988:16;28979:25;;29030:3;29023:5;29020:14;29017:40;;;29037:18;;:::i;:::-;29017:40;29070:5;;;28808:277;;29194:2;29184:8;29181:16;29175:3;29169:4;29166:13;29162:36;29144:2;29134:8;29131:16;29126:2;29120:4;29117:12;29113:35;29097:111;29094:246;;;29250:8;29244:4;29240:19;29231:28;;29285:3;29278:5;29275:14;29272:40;;;29292:18;;:::i;:::-;29272:40;29325:5;;29094:246;29365:42;29403:3;29393:8;29387:4;29384:1;29365:42;:::i;:::-;29350:57;;;;29439:4;29434:3;29430:14;29423:5;29420:25;29417:51;;;29448:18;;:::i;:::-;29417:51;29497:4;29490:5;29486:16;29477:25;;28435:1073;;;;;;:::o;29514:348::-;29554:7;29577:20;29595:1;29577:20;:::i;:::-;29572:25;;29611:20;29629:1;29611:20;:::i;:::-;29606:25;;29799:1;29731:66;29727:74;29724:1;29721:81;29716:1;29709:9;29702:17;29698:105;29695:131;;;29806:18;;:::i;:::-;29695:131;29854:1;29851;29847:9;29836:20;;29514:348;;;;:::o;29868:191::-;29908:4;29928:20;29946:1;29928:20;:::i;:::-;29923:25;;29962:20;29980:1;29962:20;:::i;:::-;29957:25;;30001:1;29998;29995:8;29992:34;;;30006:18;;:::i;:::-;29992:34;30051:1;30048;30044:9;30036:17;;29868:191;;;;:::o;30065:96::-;30102:7;30131:24;30149:5;30131:24;:::i;:::-;30120:35;;30065:96;;;:::o;30167:90::-;30201:7;30244:5;30237:13;30230:21;30219:32;;30167:90;;;:::o;30263:126::-;30300:7;30340:42;30333:5;30329:54;30318:65;;30263:126;;;:::o;30395:77::-;30432:7;30461:5;30450:16;;30395:77;;;:::o;30478:86::-;30513:7;30553:4;30546:5;30542:16;30531:27;;30478:86;;;:::o;30570:152::-;30646:9;30679:37;30710:5;30679:37;:::i;:::-;30666:50;;30570:152;;;:::o;30728:121::-;30786:9;30819:24;30837:5;30819:24;:::i;:::-;30806:37;;30728:121;;;:::o;30855:126::-;30905:9;30938:37;30969:5;30938:37;:::i;:::-;30925:50;;30855:126;;;:::o;30987:113::-;31037:9;31070:24;31088:5;31070:24;:::i;:::-;31057:37;;30987:113;;;:::o;31106:307::-;31174:1;31184:113;31198:6;31195:1;31192:13;31184:113;;;31283:1;31278:3;31274:11;31268:18;31264:1;31259:3;31255:11;31248:39;31220:2;31217:1;31213:10;31208:15;;31184:113;;;31315:6;31312:1;31309:13;31306:101;;;31395:1;31386:6;31381:3;31377:16;31370:27;31306:101;31155:258;31106:307;;;:::o;31419:281::-;31502:27;31524:4;31502:27;:::i;:::-;31494:6;31490:40;31632:6;31620:10;31617:22;31596:18;31584:10;31581:34;31578:62;31575:88;;;31643:18;;:::i;:::-;31575:88;31683:10;31679:2;31672:22;31462:238;31419:281;;:::o;31706:233::-;31745:3;31768:24;31786:5;31768:24;:::i;:::-;31759:33;;31814:66;31807:5;31804:77;31801:103;;;31884:18;;:::i;:::-;31801:103;31931:1;31924:5;31920:13;31913:20;;31706:233;;;:::o;31945:180::-;31993:77;31990:1;31983:88;32090:4;32087:1;32080:15;32114:4;32111:1;32104:15;32131:180;32179:77;32176:1;32169:88;32276:4;32273:1;32266:15;32300:4;32297:1;32290:15;32317:180;32365:77;32362:1;32355:88;32462:4;32459:1;32452:15;32486:4;32483:1;32476:15;32503:180;32551:77;32548:1;32541:88;32648:4;32645:1;32638:15;32672:4;32669:1;32662:15;32689:117;32798:1;32795;32788:12;32812:117;32921:1;32918;32911:12;32935:117;33044:1;33041;33034:12;33058:117;33167:1;33164;33157:12;33181:117;33290:1;33287;33280:12;33304:102;33345:6;33396:2;33392:7;33387:2;33380:5;33376:14;33372:28;33362:38;;33304:102;;;:::o;33412:::-;33454:8;33501:5;33498:1;33494:13;33473:34;;33412:102;;;:::o;33520:222::-;33660:34;33656:1;33648:6;33644:14;33637:58;33729:5;33724:2;33716:6;33712:15;33705:30;33520:222;:::o;33748:250::-;33888:34;33884:1;33876:6;33872:14;33865:58;33957:33;33952:2;33944:6;33940:15;33933:58;33748:250;:::o;34004:229::-;34144:34;34140:1;34132:6;34128:14;34121:58;34213:12;34208:2;34200:6;34196:15;34189:37;34004:229;:::o;34239:178::-;34379:30;34375:1;34367:6;34363:14;34356:54;34239:178;:::o;34423:225::-;34563:34;34559:1;34551:6;34547:14;34540:58;34632:8;34627:2;34619:6;34615:15;34608:33;34423:225;:::o;34654:221::-;34794:34;34790:1;34782:6;34778:14;34771:58;34863:4;34858:2;34850:6;34846:15;34839:29;34654:221;:::o;34881:176::-;35021:28;35017:1;35009:6;35005:14;34998:52;34881:176;:::o;35063:222::-;35203:34;35199:1;35191:6;35187:14;35180:58;35272:5;35267:2;35259:6;35255:15;35248:30;35063:222;:::o;35291:230::-;35431:34;35427:1;35419:6;35415:14;35408:58;35500:13;35495:2;35487:6;35483:15;35476:38;35291:230;:::o;35527:225::-;35667:34;35663:1;35655:6;35651:14;35644:58;35736:8;35731:2;35723:6;35719:15;35712:33;35527:225;:::o;35758:173::-;35898:25;35894:1;35886:6;35882:14;35875:49;35758:173;:::o;35937:182::-;36077:34;36073:1;36065:6;36061:14;36054:58;35937:182;:::o;36125:228::-;36265:34;36261:1;36253:6;36249:14;36242:58;36334:11;36329:2;36321:6;36317:15;36310:36;36125:228;:::o;36359:181::-;36499:33;36495:1;36487:6;36483:14;36476:57;36359:181;:::o;36546:224::-;36686:34;36682:1;36674:6;36670:14;36663:58;36755:7;36750:2;36742:6;36738:15;36731:32;36546:224;:::o;36776:222::-;36916:34;36912:1;36904:6;36900:14;36893:58;36985:5;36980:2;36972:6;36968:15;36961:30;36776:222;:::o;37004:223::-;37144:34;37140:1;37132:6;37128:14;37121:58;37213:6;37208:2;37200:6;37196:15;37189:31;37004:223;:::o;37233:122::-;37306:24;37324:5;37306:24;:::i;:::-;37299:5;37296:35;37286:63;;37345:1;37342;37335:12;37286:63;37233:122;:::o;37361:116::-;37431:21;37446:5;37431:21;:::i;:::-;37424:5;37421:32;37411:60;;37467:1;37464;37457:12;37411:60;37361:116;:::o;37483:122::-;37556:24;37574:5;37556:24;:::i;:::-;37549:5;37546:35;37536:63;;37595:1;37592;37585:12;37536:63;37483:122;:::o

Swarm Source

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