ETH Price: $3,390.50 (-1.51%)
Gas: 2 Gwei

Token

GM (GM ☕)
 

Overview

Max Total Supply

1,000,000 GM ☕

Holders

123

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
0.00000001 GM ☕

Value
$0.00
0xf93eac886505c9c6d407d91ea9bd2e35aedca734
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:
GM

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.12;

/**
 * @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);
}

/**
 * @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;
    }
}

/**
 * @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);
    }
}

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

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

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract GM is IERC20, Ownable {
    using SafeMath for uint256;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => uint256) private _balances;
    mapping (address => bool) private _isBot;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private _isExcludedFromLimits;

    address[] private _blacklistedWallets;

    address payable private _feeWallet;
    address private _uniswapV2Pair;

    bool private _allBuyersAreBots = true;
    bool private _forceGM = false;
    bool private _inSwap = false;
    bool private _gm = false;
    bool private _tradingOpen = false;

    string private constant _name = unicode"GM";
    string private constant _symbol = unicode"GM ☕";

    int8 private _timezone = -5;

    IUniswapV2Router02 private _uniswapV2Router;

    uint8 private _currentTaxPercent = 3;
    uint8 private _decimals = 8;
    uint8 private _daytimeTaxPercent = 3;
    uint8 private _gmTaxPercent = 0;
    uint8 private _gmHourStart = 9;
    uint8 private _gmHourEnd = 11;
    uint8 private _maxWalletPercent = 2;
    uint8 private _maxTransactionPercent = 1;
    
    uint256 private _currentTimestamp;
    uint256 private _tSupply = 1_000_000 * 10**_decimals;
    uint256 private _maxWallet;
    uint256 private _maxTransaction;

    event MaxTransactionAmountUpdated(uint256 maxTransaction);
    event MaxWalletAmountUpdated(uint256 maxWallet);
    event GMUpdated(bool on);

    modifier lockTheSwap {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    constructor () {

        _currentTimestamp                       = block.timestamp;
        _feeWallet                              = payable(0x5d9A31749eA27Ce29a0d5234cD7C7185546c44D9);

        _balances[_msgSender()]                 = _tSupply;

        _isExcludedFromFee[owner()]             = true;
        _isExcludedFromFee[address(this)]       = true;
        _isExcludedFromFee[_feeWallet]          = true;

        _isExcludedFromLimits[owner()]          = true;
        _isExcludedFromLimits[address(this)]    = true;
        _isExcludedFromLimits[_feeWallet]       = true;

        _setTaxes();
        _setMaxWallet();
        _setMaxTransaction();
        
        emit Transfer(address(0), _msgSender(), _tSupply);
    }
    // ~~~~~~~~~~~~ accessors ~~~~~~~~~~~~ \\

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

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

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

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

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

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

    function feeWallet() public view returns (address) {
        return _feeWallet;
    }

    function gm() public view returns (bool) {
        return _gm;
    }

    function timezone() public view returns (int8) {
        return _timezone;
    }

    function currentTimestamp() public view returns (uint256) {
        return _currentTimestamp;
    }

    function maxWallet() public view returns (uint256) {
        return _maxWallet;
    }

    function maxTransaction () public view returns (uint256) {
        return _maxTransaction;
    }

    function taxPercent() public view returns (uint8) {
        return _currentTaxPercent;
    }

    function tradingOpen() public view returns (bool) {
        return _tradingOpen;
    }

    function isBot(address a) public view returns (bool) {
        return _isBot[a];
    }

    function isExcludedFromFees(address a) public view returns (bool) {
        return _isExcludedFromFee[a];
    }

    function isExcludedFromLimits(address a) public view returns (bool) {
        return _isExcludedFromLimits[a];
    }

    function gmHourStart() public view returns (uint8) {
        return _gmHourStart;
    }

    function gmHourEnd() public view returns (uint8) {
        return _gmHourEnd;
    }

    function getOwner() public view returns (address) {
        return this.owner();
    }

    function getBlacklistedWallets() public view returns (address[] memory) {
        return _blacklistedWallets;
    }

    // ~~~~~~~~~~~~ mutators ~~~~~~~~~~~~ \\

    function setFeeWallet(address payable w) external onlyOwner {
        require(w != address(0), "Can't set fee wallet to burn addr.");
        _feeWallet = w;
    }

    function setTimezone(int8 tz) external onlyOwner {
        /* changes the timezone where tz is interpreted as UTC-<tz>.

            parameters:
                tx (int8): a signed 8-bit int, used to represent when "morning" is.  
            
            returns:
                none
        */
        require(-12 < tz && tz < 13, "Timezone not recognized.");
        _timezone = tz;
    }

    function setMaxWallet(uint8 percent) external onlyOwner {
        /* changes the max wallet percent, and consequently, the max wallet size.

            parameters:
                percent (uint8): Represents the % of total supply a single wallet can hold.
            
            returns:
                none
        */
        require(percent < 101, "Max wallet cannot be larger than total supply.");
        _maxWalletPercent = percent;
        _setMaxWallet();
    }

    function setMaxTransaction(uint8 percent) external onlyOwner {
        /* changes the max transaction percent, and consequently, the max transaction size.

            parameters:
                percent (uint8): represents the % of total supply that can be sent in a single transaction.
            
            returns:
                none
        */
        require(percent < 101, "Max transaction cannot be larger than total supply.");
        _maxTransactionPercent = percent;
        _setMaxTransaction();
    }

    function setTaxPercent(uint8 percent) external onlyOwner {
        /* sets the tax during the daytime (non-gm) period.

            parameters:
                percent (uint8): represents the % of the transaction given to the contract as taxes.
            
            returns:
                none
        */
        require(percent < 4, "Maximum tax of 4%.");
        _daytimeTaxPercent = percent;
    }

    function setGMHourStart(uint8 hour) external onlyOwner {
        /* sets the hour that gm mode starts at.

            parameters:
                hour (uint8): the hour to change the gm start time to.
            
            returns:
                none
        */
        require(hour < _gmHourEnd, "GM mode has to start before it ends.");
        _gmHourStart = hour;
    }

    function setGMHourEnd(uint8 hour) external onlyOwner {
        /* sets the hour that gm mode ends at.

            parameters:
                hour (uint8): the hour to change the gm end time to.

            returns:
                none
        */
        require(hour > _gmHourStart, "GM mode has to end after it starts.");
        _gmHourEnd = hour;
    }

    function setForceGM(bool on) external onlyOwner {
        /* set the _forceGM mode flag.

            parameters:
                on (bool): whether we want _forceGM mode active or not.

            returns:
                none
        */
        _forceGM = on;
    }

    function disableBlacklist() external onlyOwner {
        //sets the flag _allBuyersAreBots to false, stopping the auto-blacklist of buyers
        _allBuyersAreBots = false;
    }

    // ~~~~~~~~~~~~ ierc20 functions ~~~~~~~~~~~~ \\

    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 transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    // ~~~~~~~~~~~~ custom functions ~~~~~~~~~~~~ \\

    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 _transferFeeless(address sender, address recipient, uint256 amount) private {
        /* transfers tokens without taking fees.

            parameters:
                sender (address):
                recipient (address):
                amount (uint256): the amount of tokens (keep in mind theres _decimals more digits than you think).

            returns:
                none


        */
        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _transferSupportingFee(address sender, address recipient, uint256 amount) private {
        /* transfers tokens while taking fees.

            parameters:
                sender (address):
                recipient (address):
                amount (uint256):

            returns:
                none
        */
        uint256 taxedTokens = amount.mul(_currentTaxPercent).div(100);
        uint256 amountRecieved = amount.sub(taxedTokens);

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amountRecieved);
        _balances[address(this)] = _balances[address(this)].add(taxedTokens);

        emit Transfer(sender, recipient, amount);
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        /* runs checks to ensure a valid transfer, then executes.

            first group of statements check that the zero address is not involved, and that the transfer amount is > 0.

            second group checks that a bot isn't involved (they aren't allowed to trade), and ensures trading has started.

            third group only applies when Uniswap is involved (buy/sell, not transfer) and when the involved addresses are not exempt from fees.

            the taxes are then set, which does the time check and sets the `_gm` flag.

            if: GM mode or there is an address exempt from fees involved,
                The helper function to transfer without fees is called.
            else:
                The contract balance of tokens is checked (using the ERC20.sol function balanceOf()), if its > 0, sell tokens.
                The helper function to transfer with fees is called.


            parameters:
                sender (address):
                recipient (address):
                amount (uint256):

            returns:
                none
        */

        bool buy = (sender == _uniswapV2Pair && recipient != address(_uniswapV2Router));
        bool sell = (sender != address(_uniswapV2Router) && recipient == _uniswapV2Pair);        

        // checks base transaction requirements
        require(sender != address(0), "ERC20: transfer from the zero address.");
        require(recipient != address(0), "ERC20: transfer to the zero address.");
        require(amount > 0, "Transfer amount must be greater than zero.");

        // checks that no one involved is a bot, and that trading is open.
        if (!buy) {
            require(!_isBot[sender] && !_isBot[recipient], "Address is labeled as a bot.  Transferring disabled.");
        }

        require(_tradingOpen, "Trading is not yet started.");
        
        // checks if tx is a buy, or if sender/reciever is exluded from these checks.
        if (buy && !(_isExcludedFromLimits[sender] || _isExcludedFromLimits[recipient])) {
            require((amount <= _maxTransaction), "Exceeds the maximum transaction amount.");
            require(((balanceOf(recipient) + amount) <= _maxWallet), "Exceeds the maximum wallet size.");
        }

        _setTaxes();
        
        //TODO: ensure an address cannot map to both bots and exemptfromfee.
        // if sender/reciever is excluded from fees or it is GM mode.
        if ((_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) || _gm) {
            _transferFeeless(sender, recipient, amount);
            return;
        }

        // ensure no transfer tax between addresses.
        if ((sender != _uniswapV2Pair && sender != address(_uniswapV2Router)) &&
            (recipient != _uniswapV2Pair && recipient != (address)(_uniswapV2Router))){
                _transferFeeless(sender, recipient, amount);
                return;
        }

        // handles the contract collecting fees.
        uint256 contractTokenBalance = balanceOf(address(this));

        if (!_inSwap && sender != _uniswapV2Pair && contractTokenBalance > 0) {
            swapTokensForEth(contractTokenBalance);
            uint256 contractETHBalance = address(this).balance;

            if (contractETHBalance > 0) {
                _feeWallet.transfer(address(this).balance);
            }
        }

        if (_allBuyersAreBots) {
            _blacklistedWallets.push(recipient);
            _addBot(recipient);
        }

        // send the tokens
        _transferSupportingFee(sender, recipient, amount);
    }

    function _setTaxes() private {
        // sets GM mode and consequently, the tax rate.
        bool gmChanged = _setGM();

        if (gmChanged) {
            _currentTaxPercent = _gm ? _gmTaxPercent : _daytimeTaxPercent;
        }
    }

    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 manualSwap() external {
        require(_msgSender() == _feeWallet || _msgSender() == owner());
        swapTokensForEth(balanceOf(address(this)));
    }

    function manualSend() external {
        require(_msgSender() == _feeWallet || _msgSender() == owner());
        _feeWallet.transfer(address(this).balance);
    }

    function forceGM(bool g) external onlyOwner {
        _gm = g;
    }

    function addBot(address bot) external onlyOwner {
        _addBot(bot);
    }

    function addBots(address[] memory bots) external onlyOwner {
        for (uint256 i = 0; i < bots.length; i++ ) {
            _addBot(bots[i]);
        }
    }

    function _addBot(address bot) private {
        require(!_isExcludedFromFee[bot], "Cannot be excluded from fees and also be a bot.");
        require(!_isExcludedFromLimits[bot], "Cannot be excluded from limits and also be a bot.");
        _isBot[bot] = true;
    }

    function removeBot(address bot) external {
        require(_msgSender() == _feeWallet || _msgSender() == owner());
        _isBot[bot] = false;
    }

    function removeBots(address[] memory bots) external {
        require(_msgSender() == _feeWallet || _msgSender() == owner());

        for (uint256 i = 0; i < bots.length; i++) {
            _isBot[bots[i]] = false;
        }
    }

    function openTrading() external onlyOwner() {
        require(!_tradingOpen, "Trading is already open.");

        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        _approve(address(this), address(_uniswapV2Router), _tSupply);

        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _tradingOpen = true;
    }

    function _setMaxWallet() private {
        _maxWallet = _tSupply.mul(_maxWalletPercent).div(100);
        emit MaxWalletAmountUpdated(_maxWallet);
    }

    function _setMaxTransaction() private {
        _maxTransaction = _tSupply.mul(_maxTransactionPercent).div(100);
        emit MaxTransactionAmountUpdated(_maxTransaction);
    }

    function _setGM() private returns (bool) {
        _currentTimestamp = block.timestamp;
        uint256 hour = uint256(int(_currentTimestamp.div(3600))+_timezone).mod(24);

        // checks whether we are currently between the hours of GM.
        bool newGM = (_gmHourStart <= hour  && hour <= _gmHourEnd);

        // if the _gm value changes, we emit an event and return true
        if (_gm != newGM) {
            _gm = newGM;
            emit GMUpdated(newGM);
            return true;
        }
        return false;
    }
    
    receive() external payable {}
}

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":"bool","name":"on","type":"bool"}],"name":"GMUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxTransaction","type":"uint256"}],"name":"MaxTransactionAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":[{"internalType":"address","name":"bot","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"g","type":"bool"}],"name":"forceGM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBlacklistedWallets","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gm","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmHourEnd","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gmHourStart","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isExcludedFromLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"removeBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"w","type":"address"}],"name":"setFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"on","type":"bool"}],"name":"setForceGM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"hour","type":"uint8"}],"name":"setGMHourEnd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"hour","type":"uint8"}],"name":"setGMHourStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"percent","type":"uint8"}],"name":"setMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"percent","type":"uint8"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"percent","type":"uint8"}],"name":"setTaxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"int8","name":"tz","type":"int8"}],"name":"setTimezone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxPercent","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timezone","outputs":[{"internalType":"int8","name":"","type":"int8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600860146101000a81548160ff0219169083151502179055506000600860156101000a81548160ff0219169083151502179055506000600860166101000a81548160ff0219169083151502179055506000600860176101000a81548160ff0219169083151502179055506000600860186101000a81548160ff0219169083151502179055507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb600860196101000a81548160ff021916908360000b60ff1602179055506003600960146101000a81548160ff021916908360ff1602179055506008600960156101000a81548160ff021916908360ff1602179055506003600960166101000a81548160ff021916908360ff1602179055506000600960176101000a81548160ff021916908360ff16021790555060098060186101000a81548160ff021916908360ff160217905550600b600960196101000a81548160ff021916908360ff16021790555060026009601a6101000a81548160ff021916908360ff16021790555060016009601b6101000a81548160ff021916908360ff160217905550600960159054906101000a900460ff16600a620001c6919062000b5c565b620f4240620001d6919062000bad565b600b55348015620001e657600080fd5b5062000207620001fb620005d960201b60201c565b620005e160201b60201c565b42600a81905550735d9a31749ea27ce29a0d5234cd7c7185546c44d9600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b54600260006200027a620005d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160046000620002ce620006a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160046000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016005600062000407620006a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200053a620006ce60201b60201c565b6200054a6200074360201b60201c565b6200055a620007ce60201b60201c565b6200056a620005d960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b54604051620005cb919062000c1f565b60405180910390a362000dbd565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000620006e06200085960201b60201c565b905080156200074057600860179054906101000a900460ff166200071457600960169054906101000a900460ff1662000725565b600960179054906101000a900460ff165b600960146101000a81548160ff021916908360ff1602179055505b50565b6200078b6064620007776009601a9054906101000a900460ff1660ff16600b546200097a60201b62001b551790919060201c565b6200099260201b62001b6b1790919060201c565b600c819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600c54604051620007c4919062000c1f565b60405180910390a1565b620008166064620008026009601b9054906101000a900460ff1660ff16600b546200097a60201b62001b551790919060201c565b6200099260201b62001b6b1790919060201c565b600d819055507f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac600d546040516200084f919062000c1f565b60405180910390a1565b600042600a819055506000620008bb6018600860199054906101000a900460000b60000b6200089b610e10600a546200099260201b62001b6b1790919060201c565b620008a7919062000c46565b620009aa60201b62001b811790919060201c565b9050600081600960189054906101000a900460ff1660ff1611158015620008f45750600960199054906101000a900460ff1660ff168211155b9050801515600860179054906101000a900460ff16151514620009705780600860176101000a81548160ff0219169083151502179055507f74b491e4baeda06b7ceae407eab65ee0f7aea1351af1e3acf4a945f7d701d4c1816040516200095c919062000d01565b60405180910390a160019250505062000977565b6000925050505b90565b600081836200098a919062000bad565b905092915050565b60008183620009a2919062000d4d565b905092915050565b60008183620009ba919062000d85565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a505780860481111562000a285762000a27620009c2565b5b600185161562000a385780820291505b808102905062000a4885620009f1565b945062000a08565b94509492505050565b60008262000a6b576001905062000b3e565b8162000a7b576000905062000b3e565b816001811462000a94576002811462000a9f5762000ad5565b600191505062000b3e565b60ff84111562000ab45762000ab3620009c2565b5b8360020a91508482111562000ace5762000acd620009c2565b5b5062000b3e565b5060208310610133831016604e8410600b841016171562000b0f5782820a90508381111562000b095762000b08620009c2565b5b62000b3e565b62000b1e8484846001620009fe565b9250905081840481111562000b385762000b37620009c2565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000b698262000b45565b915062000b768362000b4f565b925062000ba57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a59565b905092915050565b600062000bba8262000b45565b915062000bc78362000b45565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000c035762000c02620009c2565b5b828202905092915050565b62000c198162000b45565b82525050565b600060208201905062000c36600083018462000c0e565b92915050565b6000819050919050565b600062000c538262000c3c565b915062000c608362000c3c565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161562000c9e5762000c9d620009c2565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161562000cd95762000cd8620009c2565b5b828201905092915050565b60008115159050919050565b62000cfb8162000ce4565b82525050565b600060208201905062000d18600083018462000cf0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d5a8262000b45565b915062000d678362000b45565b92508262000d7a5762000d7962000d1e565b5b828204905092915050565b600062000d928262000b45565b915062000d9f8362000b45565b92508262000db25762000db162000d1e565b5b828206905092915050565b61490a8062000dcd6000396000f3fe60806040526004361061026b5760003560e01c80638da5cb5b11610144578063d34628cc116100b6578063f25f4b561161007a578063f25f4b5614610901578063f2fde38b1461092c578063f429389014610955578063f8b45b051461096c578063ffb54a9914610997578063ffecf516146109c257610272565b8063d34628cc14610832578063dd62ed3e1461085b578063de1c57f514610898578063e01cb2d0146108c1578063ea43915e146108ea57610272565b8063b5ead9b711610108578063b5ead9b714610744578063b70373261461076f578063c0129d431461079a578063c3f70b52146107c5578063c4148fe5146107f0578063c9567bf91461081b57610272565b80638da5cb5b1461065d57806390d49b9d1461068857806395d89b41146106b1578063a4324f4b146106dc578063a9059cbb1461070757610272565b806351bc3c85116101dd57806370a08231116101a157806370a0823114610561578063715018a61461059e5780637541f41c146105b55780638013f9a8146105e057806381f4946214610609578063893d20e81461063257610272565b806351bc3c85146104925780635cce86cd146104a95780635d1db1e3146104e65780635fecd9261461050f5780636c3bbfd71461053857610272565b806323b872dd1161022f57806323b872dd1461035e578063240143b81461039b578063313ce567146103c45780633bbac579146103ef5780633e05fee11461042c5780634fbee1931461045557610272565b806306fdde0314610277578063095ea7b3146102a257806318160ddd146102df57806319ade2b81461030a5780631e2ff94f1461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c6109eb565b6040516102999190613329565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c491906133f3565b610a28565b6040516102d6919061344e565b60405180910390f35b3480156102eb57600080fd5b506102f4610a46565b6040516103019190613478565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c91906134cc565b610a50565b005b34801561033f57600080fd5b50610348610acd565b6040516103559190613478565b60405180910390f35b34801561036a57600080fd5b50610385600480360381019061038091906134f9565b610ad7565b604051610392919061344e565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd91906134cc565b610bb0565b005b3480156103d057600080fd5b506103d9610c1c565b6040516103e6919061355b565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613576565b610c33565b604051610423919061344e565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e91906135dc565b610c89565b005b34801561046157600080fd5b5061047c60048036038101906104779190613576565b610d26565b604051610489919061344e565b60405180910390f35b34801561049e57600080fd5b506104a7610d7c565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190613576565b610e34565b6040516104dd919061344e565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190613635565b610e8a565b005b34801561051b57600080fd5b5061053660048036038101906105319190613576565b610eaf565b005b34801561054457600080fd5b5061055f600480360381019061055a91906137aa565b610faf565b005b34801561056d57600080fd5b5061058860048036038101906105839190613576565b6110e9565b6040516105959190613478565b60405180910390f35b3480156105aa57600080fd5b506105b3611132565b005b3480156105c157600080fd5b506105ca611146565b6040516105d7919061355b565b60405180910390f35b3480156105ec57600080fd5b50610607600480360381019061060291906134cc565b61115d565b005b34801561061557600080fd5b50610630600480360381019061062b9190613635565b6111d1565b005b34801561063e57600080fd5b506106476111f6565b6040516106549190613802565b60405180910390f35b34801561066957600080fd5b5061067261126c565b60405161067f9190613802565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa919061385b565b611295565b005b3480156106bd57600080fd5b506106c6611351565b6040516106d39190613329565b60405180910390f35b3480156106e857600080fd5b506106f161138e565b6040516106fe919061355b565b60405180910390f35b34801561071357600080fd5b5061072e600480360381019061072991906133f3565b6113a5565b60405161073b919061344e565b60405180910390f35b34801561075057600080fd5b506107596113c3565b604051610766919061355b565b60405180910390f35b34801561077b57600080fd5b506107846113da565b6040516107919190613946565b60405180910390f35b3480156107a657600080fd5b506107af611468565b6040516107bc919061344e565b60405180910390f35b3480156107d157600080fd5b506107da61147f565b6040516107e79190613478565b60405180910390f35b3480156107fc57600080fd5b50610805611489565b6040516108129190613977565b60405180910390f35b34801561082757600080fd5b506108306114a0565b005b34801561083e57600080fd5b50610859600480360381019061085491906137aa565b611777565b005b34801561086757600080fd5b50610882600480360381019061087d9190613992565b6117c5565b60405161088f9190613478565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906134cc565b61184c565b005b3480156108cd57600080fd5b506108e860048036038101906108e391906134cc565b6118c0565b005b3480156108f657600080fd5b506108ff61193d565b005b34801561090d57600080fd5b50610916611962565b6040516109239190613802565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613576565b61198c565b005b34801561096157600080fd5b5061096a611a10565b005b34801561097857600080fd5b50610981611b20565b60405161098e9190613478565b60405180910390f35b3480156109a357600080fd5b506109ac611b2a565b6040516109b9919061344e565b60405180910390f35b3480156109ce57600080fd5b506109e960048036038101906109e49190613576565b611b41565b005b60606040518060400160405280600281526020017f474d000000000000000000000000000000000000000000000000000000000000815250905090565b6000610a3c610a35611b97565b8484611b9f565b6001905092915050565b6000600b54905090565b610a58611d6a565b600960199054906101000a900460ff1660ff168160ff1610610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613a44565b60405180910390fd5b80600960186101000a81548160ff021916908360ff16021790555050565b6000600a54905090565b6000610ae4848484611de8565b610ba584610af0611b97565b610ba0856040518060600160405280602881526020016148ad60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b56611b97565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126df9092919063ffffffff16565b611b9f565b600190509392505050565b610bb8611d6a565b60048160ff1610610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf590613ab0565b60405180910390fd5b80600960166101000a81548160ff021916908360ff16021790555050565b6000600960159054906101000a900460ff16905090565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c91611d6a565b8060000b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4128015610cc65750600d8160000b125b610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90613b1c565b60405180910390fd5b80600860196101000a81548160ff021916908360000b60ff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610dbd611b97565b73ffffffffffffffffffffffffffffffffffffffff161480610e185750610de261126c565b73ffffffffffffffffffffffffffffffffffffffff16610e00611b97565b73ffffffffffffffffffffffffffffffffffffffff16145b610e2157600080fd5b610e32610e2d306110e9565b612734565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e92611d6a565b80600860176101000a81548160ff02191690831515021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ef0611b97565b73ffffffffffffffffffffffffffffffffffffffff161480610f4b5750610f1561126c565b73ffffffffffffffffffffffffffffffffffffffff16610f33611b97565b73ffffffffffffffffffffffffffffffffffffffff16145b610f5457600080fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ff0611b97565b73ffffffffffffffffffffffffffffffffffffffff16148061104b575061101561126c565b73ffffffffffffffffffffffffffffffffffffffff16611033611b97565b73ffffffffffffffffffffffffffffffffffffffff16145b61105457600080fd5b60005b81518110156110e55760006003600084848151811061107957611078613b3c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110dd90613b9a565b915050611057565b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61113a611d6a565b61114460006129ad565b565b6000600960149054906101000a900460ff16905090565b611165611d6a565b60658160ff16106111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290613c55565b60405180910390fd5b806009601b6101000a81548160ff021916908360ff1602179055506111ce612a71565b50565b6111d9611d6a565b80600860156101000a81548160ff02191690831515021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112679190613c8a565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61129d611d6a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490613d29565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600681526020017f474d20e298950000000000000000000000000000000000000000000000000000815250905090565b6000600960199054906101000a900460ff16905090565b60006113b96113b2611b97565b8484611de8565b6001905092915050565b6000600960189054906101000a900460ff16905090565b6060600680548060200260200160405190810160405280929190818152602001828054801561145e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611414575b5050505050905090565b6000600860179054906101000a900460ff16905090565b6000600d54905090565b6000600860199054906101000a900460000b905090565b6114a8611d6a565b600860189054906101000a900460ff16156114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90613d95565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061157c30600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b54611b9f565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d9190613c8a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190613c8a565b6040518363ffffffff1660e01b81526004016116d7929190613db5565b6020604051808303816000875af11580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a9190613c8a565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860186101000a81548160ff021916908315150217905550565b61177f611d6a565b60005b81518110156117c1576117ae8282815181106117a1576117a0613b3c565b5b6020026020010151612aec565b80806117b990613b9a565b915050611782565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611854611d6a565b60658160ff161061189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190613e50565b60405180910390fd5b806009601a6101000a81548160ff021916908360ff1602179055506118bd612c61565b50565b6118c8611d6a565b600960189054906101000a900460ff1660ff168160ff161161191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690613ee2565b60405180910390fd5b80600960196101000a81548160ff021916908360ff16021790555050565b611945611d6a565b6000600860146101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611994611d6a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613f74565b60405180910390fd5b611a0d816129ad565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a51611b97565b73ffffffffffffffffffffffffffffffffffffffff161480611aac5750611a7661126c565b73ffffffffffffffffffffffffffffffffffffffff16611a94611b97565b73ffffffffffffffffffffffffffffffffffffffff16145b611ab557600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611b1d573d6000803e3d6000fd5b50565b6000600c54905090565b6000600860189054906101000a900460ff16905090565b611b49611d6a565b611b5281612aec565b50565b60008183611b639190613f94565b905092915050565b60008183611b79919061401d565b905092915050565b60008183611b8f919061404e565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906140f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614183565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d5d9190613478565b60405180910390a3505050565b611d72611b97565b73ffffffffffffffffffffffffffffffffffffffff16611d9061126c565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906141ef565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611e955750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611f445750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614281565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90614313565b60405180910390fd5b60008311612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906143a5565b60405180910390fd5b8161215257600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121125750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890614437565b60405180910390fd5b5b600860189054906101000a900460ff166121a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198906144a3565b60405180910390fd5b81801561224c5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061224a5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b156122ef57600d54831115612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614535565b60405180910390fd5b600c54836122a3866110e9565b6122ad9190614555565b11156122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e5906145f7565b60405180910390fd5b5b6122f7612cdc565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123985750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123af5750600860179054906101000a900460ff165b156123c6576123bf858585612d46565b50506126da565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156124725750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156125265750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156125255750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561253d57612536858585612d46565b50506126da565b6000612548306110e9565b9050600860169054906101000a900460ff161580156125b55750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156125c15750600081115b15612649576125cf81612734565b6000479050600081111561264757600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612645573d6000803e3d6000fd5b505b505b600860149054906101000a900460ff16156126cb576006859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126ca85612aec565b5b6126d6868686612eda565b5050505b505050565b6000838311158290612727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271e9190613329565b60405180910390fd5b5082840390509392505050565b6001600860166101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561276c5761276b613667565b5b60405190808252806020026020018201604052801561279a5781602001602082028036833780820191505090505b50905030816000815181106127b2576127b1613b3c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287d9190613c8a565b8160018151811061289157612890613b3c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128f830600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b9f565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161295c95949392919061465c565b600060405180830381600087803b15801561297657600080fd5b505af115801561298a573d6000803e3d6000fd5b50505050506000600860166101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612aab6064612a9d6009601b9054906101000a900460ff1660ff16600b54611b5590919063ffffffff16565b611b6b90919063ffffffff16565b600d819055507f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac600d54604051612ae29190613478565b60405180910390a1565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614728565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfd906147ba565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612c9b6064612c8d6009601a9054906101000a900460ff1660ff16600b54611b5590919063ffffffff16565b611b6b90919063ffffffff16565b600c819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600c54604051612cd29190613478565b60405180910390a1565b6000612ce6613158565b90508015612d4357600860179054906101000a900460ff16612d1757600960169054906101000a900460ff16612d28565b600960179054906101000a900460ff165b600960146101000a81548160ff021916908360ff1602179055505b50565b612d9881600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326490919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e2d81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327a90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ecd9190613478565b60405180910390a3505050565b6000612f146064612f06600960149054906101000a900460ff1660ff1685611b5590919063ffffffff16565b611b6b90919063ffffffff16565b90506000612f2b828461326490919063ffffffff16565b9050612f7f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326490919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061301481600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327a90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a982600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327a90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516131499190613478565b60405180910390a35050505050565b600042600a8190555060006131aa6018600860199054906101000a900460000b60000b613192610e10600a54611b6b90919063ffffffff16565b61319c91906147e4565b611b8190919063ffffffff16565b9050600081600960189054906101000a900460ff1660ff16111580156131e25750600960199054906101000a900460ff1660ff168211155b9050801515600860179054906101000a900460ff1615151461325a5780600860176101000a81548160ff0219169083151502179055507f74b491e4baeda06b7ceae407eab65ee0f7aea1351af1e3acf4a945f7d701d4c181604051613247919061344e565b60405180910390a1600192505050613261565b6000925050505b90565b600081836132729190614878565b905092915050565b600081836132889190614555565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132ca5780820151818401526020810190506132af565b838111156132d9576000848401525b50505050565b6000601f19601f8301169050919050565b60006132fb82613290565b613305818561329b565b93506133158185602086016132ac565b61331e816132df565b840191505092915050565b6000602082019050818103600083015261334381846132f0565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061338a8261335f565b9050919050565b61339a8161337f565b81146133a557600080fd5b50565b6000813590506133b781613391565b92915050565b6000819050919050565b6133d0816133bd565b81146133db57600080fd5b50565b6000813590506133ed816133c7565b92915050565b6000806040838503121561340a57613409613355565b5b6000613418858286016133a8565b9250506020613429858286016133de565b9150509250929050565b60008115159050919050565b61344881613433565b82525050565b6000602082019050613463600083018461343f565b92915050565b613472816133bd565b82525050565b600060208201905061348d6000830184613469565b92915050565b600060ff82169050919050565b6134a981613493565b81146134b457600080fd5b50565b6000813590506134c6816134a0565b92915050565b6000602082840312156134e2576134e1613355565b5b60006134f0848285016134b7565b91505092915050565b60008060006060848603121561351257613511613355565b5b6000613520868287016133a8565b9350506020613531868287016133a8565b9250506040613542868287016133de565b9150509250925092565b61355581613493565b82525050565b6000602082019050613570600083018461354c565b92915050565b60006020828403121561358c5761358b613355565b5b600061359a848285016133a8565b91505092915050565b60008160000b9050919050565b6135b9816135a3565b81146135c457600080fd5b50565b6000813590506135d6816135b0565b92915050565b6000602082840312156135f2576135f1613355565b5b6000613600848285016135c7565b91505092915050565b61361281613433565b811461361d57600080fd5b50565b60008135905061362f81613609565b92915050565b60006020828403121561364b5761364a613355565b5b600061365984828501613620565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61369f826132df565b810181811067ffffffffffffffff821117156136be576136bd613667565b5b80604052505050565b60006136d161334b565b90506136dd8282613696565b919050565b600067ffffffffffffffff8211156136fd576136fc613667565b5b602082029050602081019050919050565b600080fd5b6000613726613721846136e2565b6136c7565b905080838252602082019050602084028301858111156137495761374861370e565b5b835b81811015613772578061375e88826133a8565b84526020840193505060208101905061374b565b5050509392505050565b600082601f83011261379157613790613662565b5b81356137a1848260208601613713565b91505092915050565b6000602082840312156137c0576137bf613355565b5b600082013567ffffffffffffffff8111156137de576137dd61335a565b5b6137ea8482850161377c565b91505092915050565b6137fc8161337f565b82525050565b600060208201905061381760008301846137f3565b92915050565b60006138288261335f565b9050919050565b6138388161381d565b811461384357600080fd5b50565b6000813590506138558161382f565b92915050565b60006020828403121561387157613870613355565b5b600061387f84828501613846565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138bd8161337f565b82525050565b60006138cf83836138b4565b60208301905092915050565b6000602082019050919050565b60006138f382613888565b6138fd8185613893565b9350613908836138a4565b8060005b8381101561393957815161392088826138c3565b975061392b836138db565b92505060018101905061390c565b5085935050505092915050565b6000602082019050818103600083015261396081846138e8565b905092915050565b613971816135a3565b82525050565b600060208201905061398c6000830184613968565b92915050565b600080604083850312156139a9576139a8613355565b5b60006139b7858286016133a8565b92505060206139c8858286016133a8565b9150509250929050565b7f474d206d6f64652068617320746f207374617274206265666f7265206974206560008201527f6e64732e00000000000000000000000000000000000000000000000000000000602082015250565b6000613a2e60248361329b565b9150613a39826139d2565b604082019050919050565b60006020820190508181036000830152613a5d81613a21565b9050919050565b7f4d6178696d756d20746178206f662034252e0000000000000000000000000000600082015250565b6000613a9a60128361329b565b9150613aa582613a64565b602082019050919050565b60006020820190508181036000830152613ac981613a8d565b9050919050565b7f54696d657a6f6e65206e6f74207265636f676e697a65642e0000000000000000600082015250565b6000613b0660188361329b565b9150613b1182613ad0565b602082019050919050565b60006020820190508181036000830152613b3581613af9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ba5826133bd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bd857613bd7613b6b565b5b600182019050919050565b7f4d6178207472616e73616374696f6e2063616e6e6f74206265206c617267657260008201527f207468616e20746f74616c20737570706c792e00000000000000000000000000602082015250565b6000613c3f60338361329b565b9150613c4a82613be3565b604082019050919050565b60006020820190508181036000830152613c6e81613c32565b9050919050565b600081519050613c8481613391565b92915050565b600060208284031215613ca057613c9f613355565b5b6000613cae84828501613c75565b91505092915050565b7f43616e277420736574206665652077616c6c657420746f206275726e2061646460008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d1360228361329b565b9150613d1e82613cb7565b604082019050919050565b60006020820190508181036000830152613d4281613d06565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e2e0000000000000000600082015250565b6000613d7f60188361329b565b9150613d8a82613d49565b602082019050919050565b60006020820190508181036000830152613dae81613d72565b9050919050565b6000604082019050613dca60008301856137f3565b613dd760208301846137f3565b9392505050565b7f4d61782077616c6c65742063616e6e6f74206265206c6172676572207468616e60008201527f20746f74616c20737570706c792e000000000000000000000000000000000000602082015250565b6000613e3a602e8361329b565b9150613e4582613dde565b604082019050919050565b60006020820190508181036000830152613e6981613e2d565b9050919050565b7f474d206d6f64652068617320746f20656e64206166746572206974207374617260008201527f74732e0000000000000000000000000000000000000000000000000000000000602082015250565b6000613ecc60238361329b565b9150613ed782613e70565b604082019050919050565b60006020820190508181036000830152613efb81613ebf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f5e60268361329b565b9150613f6982613f02565b604082019050919050565b60006020820190508181036000830152613f8d81613f51565b9050919050565b6000613f9f826133bd565b9150613faa836133bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fe357613fe2613b6b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614028826133bd565b9150614033836133bd565b92508261404357614042613fee565b5b828204905092915050565b6000614059826133bd565b9150614064836133bd565b92508261407457614073613fee565b5b828206905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140db60248361329b565b91506140e68261407f565b604082019050919050565b6000602082019050818103600083015261410a816140ce565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061416d60228361329b565b915061417882614111565b604082019050919050565b6000602082019050818103600083015261419c81614160565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141d960208361329b565b91506141e4826141a3565b602082019050919050565b60006020820190508181036000830152614208816141cc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f64726573732e0000000000000000000000000000000000000000000000000000602082015250565b600061426b60268361329b565b91506142768261420f565b604082019050919050565b6000602082019050818103600083015261429a8161425e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573732e00000000000000000000000000000000000000000000000000000000602082015250565b60006142fd60248361329b565b9150614308826142a1565b604082019050919050565b6000602082019050818103600083015261432c816142f0565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b600061438f602a8361329b565b915061439a82614333565b604082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b7f41646472657373206973206c6162656c6564206173206120626f742e2020547260008201527f616e7366657272696e672064697361626c65642e000000000000000000000000602082015250565b600061442160348361329b565b915061442c826143c5565b604082019050919050565b6000602082019050818103600083015261445081614414565b9050919050565b7f54726164696e67206973206e6f742079657420737461727465642e0000000000600082015250565b600061448d601b8361329b565b915061449882614457565b602082019050919050565b600060208201905081810360008301526144bc81614480565b9050919050565b7f4578636565647320746865206d6178696d756d207472616e73616374696f6e2060008201527f616d6f756e742e00000000000000000000000000000000000000000000000000602082015250565b600061451f60278361329b565b915061452a826144c3565b604082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b6000614560826133bd565b915061456b836133bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145a05761459f613b6b565b5b828201905092915050565b7f4578636565647320746865206d6178696d756d2077616c6c65742073697a652e600082015250565b60006145e160208361329b565b91506145ec826145ab565b602082019050919050565b60006020820190508181036000830152614610816145d4565b9050919050565b6000819050919050565b6000819050919050565b600061464661464161463c84614617565b614621565b6133bd565b9050919050565b6146568161462b565b82525050565b600060a0820190506146716000830188613469565b61467e602083018761464d565b818103604083015261469081866138e8565b905061469f60608301856137f3565b6146ac6080830184613469565b9695505050505050565b7f43616e6e6f74206265206578636c756465642066726f6d206665657320616e6460008201527f20616c736f206265206120626f742e0000000000000000000000000000000000602082015250565b6000614712602f8361329b565b915061471d826146b6565b604082019050919050565b6000602082019050818103600083015261474181614705565b9050919050565b7f43616e6e6f74206265206578636c756465642066726f6d206c696d697473206160008201527f6e6420616c736f206265206120626f742e000000000000000000000000000000602082015250565b60006147a460318361329b565b91506147af82614748565b604082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b6000819050919050565b60006147ef826147da565b91506147fa836147da565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561483557614834613b6b565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561486d5761486c613b6b565b5b828201905092915050565b6000614883826133bd565b915061488e836133bd565b9250828210156148a1576148a0613b6b565b5b82820390509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b438bbeb34a702f03e6df158c21b332a38899fef4bc64c93c5282e04d8a1e25464736f6c634300080c0033

Deployed Bytecode

0x60806040526004361061026b5760003560e01c80638da5cb5b11610144578063d34628cc116100b6578063f25f4b561161007a578063f25f4b5614610901578063f2fde38b1461092c578063f429389014610955578063f8b45b051461096c578063ffb54a9914610997578063ffecf516146109c257610272565b8063d34628cc14610832578063dd62ed3e1461085b578063de1c57f514610898578063e01cb2d0146108c1578063ea43915e146108ea57610272565b8063b5ead9b711610108578063b5ead9b714610744578063b70373261461076f578063c0129d431461079a578063c3f70b52146107c5578063c4148fe5146107f0578063c9567bf91461081b57610272565b80638da5cb5b1461065d57806390d49b9d1461068857806395d89b41146106b1578063a4324f4b146106dc578063a9059cbb1461070757610272565b806351bc3c85116101dd57806370a08231116101a157806370a0823114610561578063715018a61461059e5780637541f41c146105b55780638013f9a8146105e057806381f4946214610609578063893d20e81461063257610272565b806351bc3c85146104925780635cce86cd146104a95780635d1db1e3146104e65780635fecd9261461050f5780636c3bbfd71461053857610272565b806323b872dd1161022f57806323b872dd1461035e578063240143b81461039b578063313ce567146103c45780633bbac579146103ef5780633e05fee11461042c5780634fbee1931461045557610272565b806306fdde0314610277578063095ea7b3146102a257806318160ddd146102df57806319ade2b81461030a5780631e2ff94f1461033357610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c6109eb565b6040516102999190613329565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c491906133f3565b610a28565b6040516102d6919061344e565b60405180910390f35b3480156102eb57600080fd5b506102f4610a46565b6040516103019190613478565b60405180910390f35b34801561031657600080fd5b50610331600480360381019061032c91906134cc565b610a50565b005b34801561033f57600080fd5b50610348610acd565b6040516103559190613478565b60405180910390f35b34801561036a57600080fd5b50610385600480360381019061038091906134f9565b610ad7565b604051610392919061344e565b60405180910390f35b3480156103a757600080fd5b506103c260048036038101906103bd91906134cc565b610bb0565b005b3480156103d057600080fd5b506103d9610c1c565b6040516103e6919061355b565b60405180910390f35b3480156103fb57600080fd5b5061041660048036038101906104119190613576565b610c33565b604051610423919061344e565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e91906135dc565b610c89565b005b34801561046157600080fd5b5061047c60048036038101906104779190613576565b610d26565b604051610489919061344e565b60405180910390f35b34801561049e57600080fd5b506104a7610d7c565b005b3480156104b557600080fd5b506104d060048036038101906104cb9190613576565b610e34565b6040516104dd919061344e565b60405180910390f35b3480156104f257600080fd5b5061050d60048036038101906105089190613635565b610e8a565b005b34801561051b57600080fd5b5061053660048036038101906105319190613576565b610eaf565b005b34801561054457600080fd5b5061055f600480360381019061055a91906137aa565b610faf565b005b34801561056d57600080fd5b5061058860048036038101906105839190613576565b6110e9565b6040516105959190613478565b60405180910390f35b3480156105aa57600080fd5b506105b3611132565b005b3480156105c157600080fd5b506105ca611146565b6040516105d7919061355b565b60405180910390f35b3480156105ec57600080fd5b50610607600480360381019061060291906134cc565b61115d565b005b34801561061557600080fd5b50610630600480360381019061062b9190613635565b6111d1565b005b34801561063e57600080fd5b506106476111f6565b6040516106549190613802565b60405180910390f35b34801561066957600080fd5b5061067261126c565b60405161067f9190613802565b60405180910390f35b34801561069457600080fd5b506106af60048036038101906106aa919061385b565b611295565b005b3480156106bd57600080fd5b506106c6611351565b6040516106d39190613329565b60405180910390f35b3480156106e857600080fd5b506106f161138e565b6040516106fe919061355b565b60405180910390f35b34801561071357600080fd5b5061072e600480360381019061072991906133f3565b6113a5565b60405161073b919061344e565b60405180910390f35b34801561075057600080fd5b506107596113c3565b604051610766919061355b565b60405180910390f35b34801561077b57600080fd5b506107846113da565b6040516107919190613946565b60405180910390f35b3480156107a657600080fd5b506107af611468565b6040516107bc919061344e565b60405180910390f35b3480156107d157600080fd5b506107da61147f565b6040516107e79190613478565b60405180910390f35b3480156107fc57600080fd5b50610805611489565b6040516108129190613977565b60405180910390f35b34801561082757600080fd5b506108306114a0565b005b34801561083e57600080fd5b50610859600480360381019061085491906137aa565b611777565b005b34801561086757600080fd5b50610882600480360381019061087d9190613992565b6117c5565b60405161088f9190613478565b60405180910390f35b3480156108a457600080fd5b506108bf60048036038101906108ba91906134cc565b61184c565b005b3480156108cd57600080fd5b506108e860048036038101906108e391906134cc565b6118c0565b005b3480156108f657600080fd5b506108ff61193d565b005b34801561090d57600080fd5b50610916611962565b6040516109239190613802565b60405180910390f35b34801561093857600080fd5b50610953600480360381019061094e9190613576565b61198c565b005b34801561096157600080fd5b5061096a611a10565b005b34801561097857600080fd5b50610981611b20565b60405161098e9190613478565b60405180910390f35b3480156109a357600080fd5b506109ac611b2a565b6040516109b9919061344e565b60405180910390f35b3480156109ce57600080fd5b506109e960048036038101906109e49190613576565b611b41565b005b60606040518060400160405280600281526020017f474d000000000000000000000000000000000000000000000000000000000000815250905090565b6000610a3c610a35611b97565b8484611b9f565b6001905092915050565b6000600b54905090565b610a58611d6a565b600960199054906101000a900460ff1660ff168160ff1610610aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa690613a44565b60405180910390fd5b80600960186101000a81548160ff021916908360ff16021790555050565b6000600a54905090565b6000610ae4848484611de8565b610ba584610af0611b97565b610ba0856040518060600160405280602881526020016148ad60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b56611b97565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126df9092919063ffffffff16565b611b9f565b600190509392505050565b610bb8611d6a565b60048160ff1610610bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf590613ab0565b60405180910390fd5b80600960166101000a81548160ff021916908360ff16021790555050565b6000600960159054906101000a900460ff16905090565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c91611d6a565b8060000b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4128015610cc65750600d8160000b125b610d05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfc90613b1c565b60405180910390fd5b80600860196101000a81548160ff021916908360000b60ff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610dbd611b97565b73ffffffffffffffffffffffffffffffffffffffff161480610e185750610de261126c565b73ffffffffffffffffffffffffffffffffffffffff16610e00611b97565b73ffffffffffffffffffffffffffffffffffffffff16145b610e2157600080fd5b610e32610e2d306110e9565b612734565b565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610e92611d6a565b80600860176101000a81548160ff02191690831515021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ef0611b97565b73ffffffffffffffffffffffffffffffffffffffff161480610f4b5750610f1561126c565b73ffffffffffffffffffffffffffffffffffffffff16610f33611b97565b73ffffffffffffffffffffffffffffffffffffffff16145b610f5457600080fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610ff0611b97565b73ffffffffffffffffffffffffffffffffffffffff16148061104b575061101561126c565b73ffffffffffffffffffffffffffffffffffffffff16611033611b97565b73ffffffffffffffffffffffffffffffffffffffff16145b61105457600080fd5b60005b81518110156110e55760006003600084848151811061107957611078613b3c565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806110dd90613b9a565b915050611057565b5050565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61113a611d6a565b61114460006129ad565b565b6000600960149054906101000a900460ff16905090565b611165611d6a565b60658160ff16106111ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a290613c55565b60405180910390fd5b806009601b6101000a81548160ff021916908360ff1602179055506111ce612a71565b50565b6111d9611d6a565b80600860156101000a81548160ff02191690831515021790555050565b60003073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112679190613c8a565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61129d611d6a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561130d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130490613d29565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600681526020017f474d20e298950000000000000000000000000000000000000000000000000000815250905090565b6000600960199054906101000a900460ff16905090565b60006113b96113b2611b97565b8484611de8565b6001905092915050565b6000600960189054906101000a900460ff16905090565b6060600680548060200260200160405190810160405280929190818152602001828054801561145e57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611414575b5050505050905090565b6000600860179054906101000a900460ff16905090565b6000600d54905090565b6000600860199054906101000a900460000b905090565b6114a8611d6a565b600860189054906101000a900460ff16156114f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ef90613d95565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061157c30600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600b54611b9f565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160d9190613c8a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190613c8a565b6040518363ffffffff1660e01b81526004016116d7929190613db5565b6020604051808303816000875af11580156116f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171a9190613c8a565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860186101000a81548160ff021916908315150217905550565b61177f611d6a565b60005b81518110156117c1576117ae8282815181106117a1576117a0613b3c565b5b6020026020010151612aec565b80806117b990613b9a565b915050611782565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611854611d6a565b60658160ff161061189a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189190613e50565b60405180910390fd5b806009601a6101000a81548160ff021916908360ff1602179055506118bd612c61565b50565b6118c8611d6a565b600960189054906101000a900460ff1660ff168160ff161161191f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191690613ee2565b60405180910390fd5b80600960196101000a81548160ff021916908360ff16021790555050565b611945611d6a565b6000600860146101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611994611d6a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a04576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fb90613f74565b60405180910390fd5b611a0d816129ad565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611a51611b97565b73ffffffffffffffffffffffffffffffffffffffff161480611aac5750611a7661126c565b73ffffffffffffffffffffffffffffffffffffffff16611a94611b97565b73ffffffffffffffffffffffffffffffffffffffff16145b611ab557600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611b1d573d6000803e3d6000fd5b50565b6000600c54905090565b6000600860189054906101000a900460ff16905090565b611b49611d6a565b611b5281612aec565b50565b60008183611b639190613f94565b905092915050565b60008183611b79919061401d565b905092915050565b60008183611b8f919061404e565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906140f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7690614183565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611d5d9190613478565b60405180910390a3505050565b611d72611b97565b73ffffffffffffffffffffffffffffffffffffffff16611d9061126c565b73ffffffffffffffffffffffffffffffffffffffff1614611de6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddd906141ef565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148015611e955750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b90506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015611f445750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614281565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d90614313565b60405180910390fd5b60008311612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906143a5565b60405180910390fd5b8161215257600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121125750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214890614437565b60405180910390fd5b5b600860189054906101000a900460ff166121a1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612198906144a3565b60405180910390fd5b81801561224c5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061224a5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b156122ef57600d54831115612296576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228d90614535565b60405180910390fd5b600c54836122a3866110e9565b6122ad9190614555565b11156122ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e5906145f7565b60405180910390fd5b5b6122f7612cdc565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123985750600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806123af5750600860179054906101000a900460ff165b156123c6576123bf858585612d46565b50506126da565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16141580156124725750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156125265750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156125255750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b5b1561253d57612536858585612d46565b50506126da565b6000612548306110e9565b9050600860169054906101000a900460ff161580156125b55750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156125c15750600081115b15612649576125cf81612734565b6000479050600081111561264757600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612645573d6000803e3d6000fd5b505b505b600860149054906101000a900460ff16156126cb576006859080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126ca85612aec565b5b6126d6868686612eda565b5050505b505050565b6000838311158290612727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271e9190613329565b60405180910390fd5b5082840390509392505050565b6001600860166101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561276c5761276b613667565b5b60405190808252806020026020018201604052801561279a5781602001602082028036833780820191505090505b50905030816000815181106127b2576127b1613b3c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612859573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287d9190613c8a565b8160018151811061289157612890613b3c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128f830600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611b9f565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161295c95949392919061465c565b600060405180830381600087803b15801561297657600080fd5b505af115801561298a573d6000803e3d6000fd5b50505050506000600860166101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612aab6064612a9d6009601b9054906101000a900460ff1660ff16600b54611b5590919063ffffffff16565b611b6b90919063ffffffff16565b600d819055507f7c1cb3702d8e1fa6d24b12dd90670ab69c6d66d58233103d37da8b07d6b850ac600d54604051612ae29190613478565b60405180910390a1565b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7090614728565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfd906147ba565b60405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612c9b6064612c8d6009601a9054906101000a900460ff1660ff16600b54611b5590919063ffffffff16565b611b6b90919063ffffffff16565b600c819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600c54604051612cd29190613478565b60405180910390a1565b6000612ce6613158565b90508015612d4357600860179054906101000a900460ff16612d1757600960169054906101000a900460ff16612d28565b600960179054906101000a900460ff165b600960146101000a81548160ff021916908360ff1602179055505b50565b612d9881600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326490919063ffffffff16565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e2d81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327a90919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ecd9190613478565b60405180910390a3505050565b6000612f146064612f06600960149054906101000a900460ff1660ff1685611b5590919063ffffffff16565b611b6b90919063ffffffff16565b90506000612f2b828461326490919063ffffffff16565b9050612f7f83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461326490919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061301481600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327a90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130a982600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461327a90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516131499190613478565b60405180910390a35050505050565b600042600a8190555060006131aa6018600860199054906101000a900460000b60000b613192610e10600a54611b6b90919063ffffffff16565b61319c91906147e4565b611b8190919063ffffffff16565b9050600081600960189054906101000a900460ff1660ff16111580156131e25750600960199054906101000a900460ff1660ff168211155b9050801515600860179054906101000a900460ff1615151461325a5780600860176101000a81548160ff0219169083151502179055507f74b491e4baeda06b7ceae407eab65ee0f7aea1351af1e3acf4a945f7d701d4c181604051613247919061344e565b60405180910390a1600192505050613261565b6000925050505b90565b600081836132729190614878565b905092915050565b600081836132889190614555565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132ca5780820151818401526020810190506132af565b838111156132d9576000848401525b50505050565b6000601f19601f8301169050919050565b60006132fb82613290565b613305818561329b565b93506133158185602086016132ac565b61331e816132df565b840191505092915050565b6000602082019050818103600083015261334381846132f0565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061338a8261335f565b9050919050565b61339a8161337f565b81146133a557600080fd5b50565b6000813590506133b781613391565b92915050565b6000819050919050565b6133d0816133bd565b81146133db57600080fd5b50565b6000813590506133ed816133c7565b92915050565b6000806040838503121561340a57613409613355565b5b6000613418858286016133a8565b9250506020613429858286016133de565b9150509250929050565b60008115159050919050565b61344881613433565b82525050565b6000602082019050613463600083018461343f565b92915050565b613472816133bd565b82525050565b600060208201905061348d6000830184613469565b92915050565b600060ff82169050919050565b6134a981613493565b81146134b457600080fd5b50565b6000813590506134c6816134a0565b92915050565b6000602082840312156134e2576134e1613355565b5b60006134f0848285016134b7565b91505092915050565b60008060006060848603121561351257613511613355565b5b6000613520868287016133a8565b9350506020613531868287016133a8565b9250506040613542868287016133de565b9150509250925092565b61355581613493565b82525050565b6000602082019050613570600083018461354c565b92915050565b60006020828403121561358c5761358b613355565b5b600061359a848285016133a8565b91505092915050565b60008160000b9050919050565b6135b9816135a3565b81146135c457600080fd5b50565b6000813590506135d6816135b0565b92915050565b6000602082840312156135f2576135f1613355565b5b6000613600848285016135c7565b91505092915050565b61361281613433565b811461361d57600080fd5b50565b60008135905061362f81613609565b92915050565b60006020828403121561364b5761364a613355565b5b600061365984828501613620565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61369f826132df565b810181811067ffffffffffffffff821117156136be576136bd613667565b5b80604052505050565b60006136d161334b565b90506136dd8282613696565b919050565b600067ffffffffffffffff8211156136fd576136fc613667565b5b602082029050602081019050919050565b600080fd5b6000613726613721846136e2565b6136c7565b905080838252602082019050602084028301858111156137495761374861370e565b5b835b81811015613772578061375e88826133a8565b84526020840193505060208101905061374b565b5050509392505050565b600082601f83011261379157613790613662565b5b81356137a1848260208601613713565b91505092915050565b6000602082840312156137c0576137bf613355565b5b600082013567ffffffffffffffff8111156137de576137dd61335a565b5b6137ea8482850161377c565b91505092915050565b6137fc8161337f565b82525050565b600060208201905061381760008301846137f3565b92915050565b60006138288261335f565b9050919050565b6138388161381d565b811461384357600080fd5b50565b6000813590506138558161382f565b92915050565b60006020828403121561387157613870613355565b5b600061387f84828501613846565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6138bd8161337f565b82525050565b60006138cf83836138b4565b60208301905092915050565b6000602082019050919050565b60006138f382613888565b6138fd8185613893565b9350613908836138a4565b8060005b8381101561393957815161392088826138c3565b975061392b836138db565b92505060018101905061390c565b5085935050505092915050565b6000602082019050818103600083015261396081846138e8565b905092915050565b613971816135a3565b82525050565b600060208201905061398c6000830184613968565b92915050565b600080604083850312156139a9576139a8613355565b5b60006139b7858286016133a8565b92505060206139c8858286016133a8565b9150509250929050565b7f474d206d6f64652068617320746f207374617274206265666f7265206974206560008201527f6e64732e00000000000000000000000000000000000000000000000000000000602082015250565b6000613a2e60248361329b565b9150613a39826139d2565b604082019050919050565b60006020820190508181036000830152613a5d81613a21565b9050919050565b7f4d6178696d756d20746178206f662034252e0000000000000000000000000000600082015250565b6000613a9a60128361329b565b9150613aa582613a64565b602082019050919050565b60006020820190508181036000830152613ac981613a8d565b9050919050565b7f54696d657a6f6e65206e6f74207265636f676e697a65642e0000000000000000600082015250565b6000613b0660188361329b565b9150613b1182613ad0565b602082019050919050565b60006020820190508181036000830152613b3581613af9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613ba5826133bd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613bd857613bd7613b6b565b5b600182019050919050565b7f4d6178207472616e73616374696f6e2063616e6e6f74206265206c617267657260008201527f207468616e20746f74616c20737570706c792e00000000000000000000000000602082015250565b6000613c3f60338361329b565b9150613c4a82613be3565b604082019050919050565b60006020820190508181036000830152613c6e81613c32565b9050919050565b600081519050613c8481613391565b92915050565b600060208284031215613ca057613c9f613355565b5b6000613cae84828501613c75565b91505092915050565b7f43616e277420736574206665652077616c6c657420746f206275726e2061646460008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000613d1360228361329b565b9150613d1e82613cb7565b604082019050919050565b60006020820190508181036000830152613d4281613d06565b9050919050565b7f54726164696e6720697320616c7265616479206f70656e2e0000000000000000600082015250565b6000613d7f60188361329b565b9150613d8a82613d49565b602082019050919050565b60006020820190508181036000830152613dae81613d72565b9050919050565b6000604082019050613dca60008301856137f3565b613dd760208301846137f3565b9392505050565b7f4d61782077616c6c65742063616e6e6f74206265206c6172676572207468616e60008201527f20746f74616c20737570706c792e000000000000000000000000000000000000602082015250565b6000613e3a602e8361329b565b9150613e4582613dde565b604082019050919050565b60006020820190508181036000830152613e6981613e2d565b9050919050565b7f474d206d6f64652068617320746f20656e64206166746572206974207374617260008201527f74732e0000000000000000000000000000000000000000000000000000000000602082015250565b6000613ecc60238361329b565b9150613ed782613e70565b604082019050919050565b60006020820190508181036000830152613efb81613ebf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f5e60268361329b565b9150613f6982613f02565b604082019050919050565b60006020820190508181036000830152613f8d81613f51565b9050919050565b6000613f9f826133bd565b9150613faa836133bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fe357613fe2613b6b565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614028826133bd565b9150614033836133bd565b92508261404357614042613fee565b5b828204905092915050565b6000614059826133bd565b9150614064836133bd565b92508261407457614073613fee565b5b828206905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006140db60248361329b565b91506140e68261407f565b604082019050919050565b6000602082019050818103600083015261410a816140ce565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061416d60228361329b565b915061417882614111565b604082019050919050565b6000602082019050818103600083015261419c81614160565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006141d960208361329b565b91506141e4826141a3565b602082019050919050565b60006020820190508181036000830152614208816141cc565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f64726573732e0000000000000000000000000000000000000000000000000000602082015250565b600061426b60268361329b565b91506142768261420f565b604082019050919050565b6000602082019050818103600083015261429a8161425e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573732e00000000000000000000000000000000000000000000000000000000602082015250565b60006142fd60248361329b565b9150614308826142a1565b604082019050919050565b6000602082019050818103600083015261432c816142f0565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b600061438f602a8361329b565b915061439a82614333565b604082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b7f41646472657373206973206c6162656c6564206173206120626f742e2020547260008201527f616e7366657272696e672064697361626c65642e000000000000000000000000602082015250565b600061442160348361329b565b915061442c826143c5565b604082019050919050565b6000602082019050818103600083015261445081614414565b9050919050565b7f54726164696e67206973206e6f742079657420737461727465642e0000000000600082015250565b600061448d601b8361329b565b915061449882614457565b602082019050919050565b600060208201905081810360008301526144bc81614480565b9050919050565b7f4578636565647320746865206d6178696d756d207472616e73616374696f6e2060008201527f616d6f756e742e00000000000000000000000000000000000000000000000000602082015250565b600061451f60278361329b565b915061452a826144c3565b604082019050919050565b6000602082019050818103600083015261454e81614512565b9050919050565b6000614560826133bd565b915061456b836133bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145a05761459f613b6b565b5b828201905092915050565b7f4578636565647320746865206d6178696d756d2077616c6c65742073697a652e600082015250565b60006145e160208361329b565b91506145ec826145ab565b602082019050919050565b60006020820190508181036000830152614610816145d4565b9050919050565b6000819050919050565b6000819050919050565b600061464661464161463c84614617565b614621565b6133bd565b9050919050565b6146568161462b565b82525050565b600060a0820190506146716000830188613469565b61467e602083018761464d565b818103604083015261469081866138e8565b905061469f60608301856137f3565b6146ac6080830184613469565b9695505050505050565b7f43616e6e6f74206265206578636c756465642066726f6d206665657320616e6460008201527f20616c736f206265206120626f742e0000000000000000000000000000000000602082015250565b6000614712602f8361329b565b915061471d826146b6565b604082019050919050565b6000602082019050818103600083015261474181614705565b9050919050565b7f43616e6e6f74206265206578636c756465642066726f6d206c696d697473206160008201527f6e6420616c736f206265206120626f742e000000000000000000000000000000602082015250565b60006147a460318361329b565b91506147af82614748565b604082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b6000819050919050565b60006147ef826147da565b91506147fa836147da565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0383136000831215161561483557614834613b6b565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561486d5761486c613b6b565b5b828201905092915050565b6000614883826133bd565b915061488e836133bd565b9250828210156148a1576148a0613b6b565b5b82820390509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220b438bbeb34a702f03e6df158c21b332a38899fef4bc64c93c5282e04d8a1e25464736f6c634300080c0033

Deployed Bytecode Sourcemap

13877:17676:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16320:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21899:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16597:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20592:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17242:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22070:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20167:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16506:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17750:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18726:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17846:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28805:165;;;;;;;;;;;;;:::i;:::-;;17967:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29151:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29765:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29925:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16701:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5257:103;;;;;;;;;;;;;:::i;:::-;;17552:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19629:530;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21367:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18283:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4609:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18552:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16411:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18190:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22391:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18093:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18379:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17074:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17446:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17152:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30170:436;;;;;;;;;;;;;:::i;:::-;;29316:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16828:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19137:484;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20989:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21653:182;;;;;;;;;;;;;:::i;:::-;;16979:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5515:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28978:165;;;;;;;;;;;;;:::i;:::-;;17351:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17654:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29229:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16320:83;16357:13;16390:5;;;;;;;;;;;;;;;;;16383:12;;16320:83;:::o;21899:161::-;21974:4;21991:39;22000:12;:10;:12::i;:::-;22014:7;22023:6;21991:8;:39::i;:::-;22048:4;22041:11;;21899:161;;;;:::o;16597:96::-;16650:7;16677:8;;16670:15;;16597:96;:::o;20592:389::-;4495:13;:11;:13::i;:::-;20892:10:::1;;;;;;;;;;;20885:17;;:4;:17;;;20877:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;20969:4;20954:12;;:19;;;;;;;;;;;;;;;;;;20592:389:::0;:::o;17242:101::-;17291:7;17318:17;;17311:24;;17242:101;:::o;22070:313::-;22168:4;22185:36;22195:6;22203:9;22214:6;22185:9;:36::i;:::-;22232:121;22241:6;22249:12;:10;:12::i;:::-;22263:89;22301:6;22263:89;;;;;;;;;;;;;;;;;:11;:19;22275:6;22263:19;;;;;;;;;;;;;;;:33;22283:12;:10;:12::i;:::-;22263:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22232:8;:121::i;:::-;22371:4;22364:11;;22070:313;;;;;:::o;20167:417::-;4495:13;:11;:13::i;:::-;20513:1:::1;20503:7;:11;;;20495:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;20569:7;20548:18;;:28;;;;;;;;;;;;;;;;;;20167:417:::0;:::o;16506:83::-;16547:5;16572:9;;;;;;;;;;;16565:16;;16506:83;:::o;17750:88::-;17797:4;17821:6;:9;17828:1;17821:9;;;;;;;;;;;;;;;;;;;;;;;;;17814:16;;17750:88;;;:::o;18726:403::-;4495:13;:11;:13::i;:::-;19054:2:::1;19048:8;;:3;:8;:19;;;;;19065:2;19060;:7;;;19048:19;19040:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19119:2;19107:9;;:14;;;;;;;;;;;;;;;;;;;;18726:403:::0;:::o;17846:113::-;17906:4;17930:18;:21;17949:1;17930:21;;;;;;;;;;;;;;;;;;;;;;;;;17923:28;;17846:113;;;:::o;28805:165::-;28871:10;;;;;;;;;;;28855:26;;:12;:10;:12::i;:::-;:26;;;:53;;;;28901:7;:5;:7::i;:::-;28885:23;;:12;:10;:12::i;:::-;:23;;;28855:53;28847:62;;;;;;28920:42;28937:24;28955:4;28937:9;:24::i;:::-;28920:16;:42::i;:::-;28805:165::o;17967:118::-;18029:4;18053:21;:24;18075:1;18053:24;;;;;;;;;;;;;;;;;;;;;;;;;18046:31;;17967:118;;;:::o;29151:70::-;4495:13;:11;:13::i;:::-;29212:1:::1;29206:3;;:7;;;;;;;;;;;;;;;;;;29151:70:::0;:::o;29765:152::-;29841:10;;;;;;;;;;;29825:26;;:12;:10;:12::i;:::-;:26;;;:53;;;;29871:7;:5;:7::i;:::-;29855:23;;:12;:10;:12::i;:::-;:23;;;29825:53;29817:62;;;;;;29904:5;29890:6;:11;29897:3;29890:11;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;29765:152;:::o;29925:237::-;30012:10;;;;;;;;;;;29996:26;;:12;:10;:12::i;:::-;:26;;;:53;;;;30042:7;:5;:7::i;:::-;30026:23;;:12;:10;:12::i;:::-;:23;;;29996:53;29988:62;;;;;;30068:9;30063:92;30087:4;:11;30083:1;:15;30063:92;;;30138:5;30120:6;:15;30127:4;30132:1;30127:7;;;;;;;;:::i;:::-;;;;;;;;30120:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;30100:3;;;;;:::i;:::-;;;;30063:92;;;;29925:237;:::o;16701:119::-;16767:7;16794:9;:18;16804:7;16794:18;;;;;;;;;;;;;;;;16787:25;;16701:119;;;:::o;5257:103::-;4495:13;:11;:13::i;:::-;5322:30:::1;5349:1;5322:18;:30::i;:::-;5257:103::o:0;17552:94::-;17595:5;17620:18;;;;;;;;;;;17613:25;;17552:94;:::o;19629:530::-;4495:13;:11;:13::i;:::-;20018:3:::1;20008:7;:13;;;20000:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;20113:7;20088:22;;:32;;;;;;;;;;;;;;;;;;20131:20;:18;:20::i;:::-;19629:530:::0;:::o;21367:278::-;4495:13;:11;:13::i;:::-;21635:2:::1;21624:8;;:13;;;;;;;;;;;;;;;;;;21367:278:::0;:::o;18283:88::-;18324:7;18351:4;:10;;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18344:19;;18283:88;:::o;4609:87::-;4655:7;4682:6;;;;;;;;;;;4675:13;;4609:87;:::o;18552:166::-;4495:13;:11;:13::i;:::-;18644:1:::1;18631:15;;:1;:15;;;;18623:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;18709:1;18696:10;;:14;;;;;;;;;;;;;;;;;;18552:166:::0;:::o;16411:87::-;16450:13;16483:7;;;;;;;;;;;;;;;;;16476:14;;16411:87;:::o;18190:85::-;18232:5;18257:10;;;;;;;;;;;18250:17;;18190:85;:::o;22391:167::-;22469:4;22486:42;22496:12;:10;:12::i;:::-;22510:9;22521:6;22486:9;:42::i;:::-;22546:4;22539:11;;22391:167;;;;:::o;18093:89::-;18137:5;18162:12;;;;;;;;;;;18155:19;;18093:89;:::o;18379:117::-;18433:16;18469:19;18462:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18379:117;:::o;17074:70::-;17109:4;17133:3;;;;;;;;;;;17126:10;;17074:70;:::o;17446:98::-;17494:7;17521:15;;17514:22;;17446:98;:::o;17152:82::-;17193:4;17217:9;;;;;;;;;;;17210:16;;17152:82;:::o;30170:436::-;4495:13;:11;:13::i;:::-;30234:12:::1;;;;;;;;;;;30233:13;30225:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;30326:42;30288:16;;:81;;;;;;;;;;;;;;;;;;30382:60;30399:4;30414:16;;;;;;;;;;;30433:8;;30382;:60::i;:::-;30490:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30472:56;;;30537:4;30544:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30472:96;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30455:14;;:113;;;;;;;;;;;;;;;;;;30594:4;30579:12;;:19;;;;;;;;;;;;;;;;;;30170:436::o:0;29316:163::-;4495:13;:11;:13::i;:::-;29391:9:::1;29386:86;29410:4;:11;29406:1;:15;29386:86;;;29444:16;29452:4;29457:1;29452:7;;;;;;;;:::i;:::-;;;;;;;;29444;:16::i;:::-;29423:3;;;;;:::i;:::-;;;;29386:86;;;;29316:163:::0;:::o;16828:143::-;16909:7;16936:11;:18;16948:5;16936:18;;;;;;;;;;;;;;;:27;16955:7;16936:27;;;;;;;;;;;;;;;;16929:34;;16828:143;;;;:::o;19137:484::-;4495:13;:11;:13::i;:::-;19495:3:::1;19485:7;:13;;;19477:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;19580:7;19560:17;;:27;;;;;;;;;;;;;;;;;;19598:15;:13;:15::i;:::-;19137:484:::0;:::o;20989:370::-;4495:13;:11;:13::i;:::-;21271:12:::1;;;;;;;;;;;21264:19;;:4;:19;;;21256:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21347:4;21334:10;;:17;;;;;;;;;;;;;;;;;;20989:370:::0;:::o;21653:182::-;4495:13;:11;:13::i;:::-;21822:5:::1;21802:17;;:25;;;;;;;;;;;;;;;;;;21653:182::o:0;16979:87::-;17021:7;17048:10;;;;;;;;;;;17041:17;;16979:87;:::o;5515:201::-;4495:13;:11;:13::i;:::-;5624:1:::1;5604:22;;:8;:22;;;;5596:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5680:28;5699:8;5680:18;:28::i;:::-;5515:201:::0;:::o;28978:165::-;29044:10;;;;;;;;;;;29028:26;;:12;:10;:12::i;:::-;:26;;;:53;;;;29074:7;:5;:7::i;:::-;29058:23;;:12;:10;:12::i;:::-;:23;;;29028:53;29020:62;;;;;;29093:10;;;;;;;;;;;:19;;:42;29113:21;29093:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28978:165::o;17351:87::-;17393:7;17420:10;;17413:17;;17351:87;:::o;17654:88::-;17698:4;17722:12;;;;;;;;;;;17715:19;;17654:88;:::o;29229:79::-;4495:13;:11;:13::i;:::-;29288:12:::1;29296:3;29288:7;:12::i;:::-;29229:79:::0;:::o;9162:98::-;9220:7;9251:1;9247;:5;;;;:::i;:::-;9240:12;;9162:98;;;;:::o;9561:::-;9619:7;9650:1;9646;:5;;;;:::i;:::-;9639:12;;9561:98;;;;:::o;10126:::-;10184:7;10215:1;10211;:5;;;;:::i;:::-;10204:12;;10126:98;;;;:::o;3318:::-;3371:7;3398:10;3391:17;;3318:98;:::o;22622:335::-;22732:1;22715:19;;:5;:19;;;;22707:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22813:1;22794:21;;:7;:21;;;;22786:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22895:6;22865:11;:18;22877:5;22865:18;;;;;;;;;;;;;;;:27;22884:7;22865:27;;;;;;;;;;;;;;;:36;;;;22933:7;22917:32;;22926:5;22917:32;;;22942:6;22917:32;;;;;;:::i;:::-;;;;;;;;22622:335;;;:::o;4774:132::-;4849:12;:10;:12::i;:::-;4838:23;;:7;:5;:7::i;:::-;:23;;;4830:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4774:132::o;24318:3732::-;25525:8;25547:14;;;;;;;;;;;25537:24;;:6;:24;;;:66;;;;;25586:16;;;;;;;;;;;25565:38;;:9;:38;;;;25537:66;25525:79;;25615:9;25646:16;;;;;;;;;;;25628:35;;:6;:35;;;;:66;;;;;25680:14;;;;;;;;;;;25667:27;;:9;:27;;;25628:66;25615:80;;25791:1;25773:20;;:6;:20;;;;25765:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25876:1;25855:23;;:9;:23;;;;25847:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25947:1;25938:6;:10;25930:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26089:3;26084:139;;26118:6;:14;26125:6;26118:14;;;;;;;;;;;;;;;;;;;;;;;;;26117:15;:37;;;;;26137:6;:17;26144:9;26137:17;;;;;;;;;;;;;;;;;;;;;;;;;26136:18;26117:37;26109:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;26084:139;26243:12;;;;;;;;;;;26235:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;26399:3;:75;;;;;26408:21;:29;26430:6;26408:29;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;26441:21;:32;26463:9;26441:32;;;;;;;;;;;;;;;;;;;;;;;;;26408:65;26406:68;26399:75;26395:294;;;26510:15;;26500:6;:25;;26491:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26629:10;;26618:6;26595:20;26605:9;26595;:20::i;:::-;:29;;;;:::i;:::-;26594:45;;26585:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;26395:294;26701:11;:9;:11::i;:::-;26887:18;:26;26906:6;26887:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;26917:18;:29;26936:9;26917:29;;;;;;;;;;;;;;;;;;;;;;;;;26887:59;26886:68;;;;26951:3;;;;;;;;;;;26886:68;26882:165;;;26971:43;26988:6;26996:9;27007:6;26971:16;:43::i;:::-;27029:7;;;;26882:165;27128:14;;;;;;;;;;;27118:24;;:6;:24;;;;:63;;;;;27164:16;;;;;;;;;;;27146:35;;:6;:35;;;;27118:63;27117:155;;;;;27213:14;;;;;;;;;;;27200:27;;:9;:27;;;;:71;;;;;27254:16;;;;;;;;;;;27231:40;;:9;:40;;;;27200:71;27117:155;27113:259;;;27292:43;27309:6;27317:9;27328:6;27292:16;:43::i;:::-;27354:7;;;;27113:259;27434:28;27465:24;27483:4;27465:9;:24::i;:::-;27434:55;;27507:7;;;;;;;;;;;27506:8;:36;;;;;27528:14;;;;;;;;;;;27518:24;;:6;:24;;;;27506:36;:64;;;;;27569:1;27546:20;:24;27506:64;27502:321;;;27587:38;27604:20;27587:16;:38::i;:::-;27640:26;27669:21;27640:50;;27732:1;27711:18;:22;27707:105;;;27754:10;;;;;;;;;;;:19;;:42;27774:21;27754:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27707:105;27572:251;27502:321;27839:17;;;;;;;;;;;27835:118;;;27873:19;27898:9;27873:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27923:18;27931:9;27923:7;:18::i;:::-;27835:118;27993:49;28016:6;28024:9;28035:6;27993:22;:49::i;:::-;24396:3654;;;24318:3732;;;;:::o;10703:240::-;10823:7;10881:1;10876;:6;;10884:12;10868:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10923:1;10919;:5;10912:12;;10703:240;;;;;:::o;28311:486::-;15450:4;15440:7;;:14;;;;;;;;;;;;;;;;;;28389:21:::1;28427:1;28413:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28389:40;;28458:4;28440;28445:1;28440:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;28484:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28474:4;28479:1;28474:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;::::0;::::1;28518:63;28535:4;28550:16;;;;;;;;;;;28569:11;28518:8;:63::i;:::-;28592:16;;;;;;;;;;;:67;;;28674:11;28700:1;28716:4;28743;28763:15;28592:197;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28378:419;15487:5:::0;15477:7;;:15;;;;;;;;;;;;;;;;;;28311:486;:::o;5876:191::-;5950:16;5969:6;;;;;;;;;;;5950:25;;5995:8;5986:6;;:17;;;;;;;;;;;;;;;;;;6050:8;6019:40;;6040:8;6019:40;;;;;;;;;;;;5939:128;5876:191;:::o;30777:180::-;30844:45;30885:3;30844:36;30857:22;;;;;;;;;;;30844:36;;:8;;:12;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;30826:15;:63;;;;30905:44;30933:15;;30905:44;;;;;;:::i;:::-;;;;;;;;30777:180::o;29487:270::-;29545:18;:23;29564:3;29545:23;;;;;;;;;;;;;;;;;;;;;;;;;29544:24;29536:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;29640:21;:26;29662:3;29640:26;;;;;;;;;;;;;;;;;;;;;;;;;29639:27;29631:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;29745:4;29731:6;:11;29738:3;29731:11;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;29487:270;:::o;30614:155::-;30671:40;30707:3;30671:31;30684:17;;;;;;;;;;;30671:31;;:8;;:12;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30658:10;:53;;;;30727:34;30750:10;;30727:34;;;;;;:::i;:::-;;;;;;;;30614:155::o;28058:245::-;28155:14;28172:8;:6;:8::i;:::-;28155:25;;28197:9;28193:103;;;28244:3;;;;;;;;;;;:40;;28266:18;;;;;;;;;;;28244:40;;;28250:13;;;;;;;;;;;28244:40;28223:18;;:61;;;;;;;;;;;;;;;;;;28193:103;28087:216;28058:245::o;22965:598::-;23409:29;23431:6;23409:9;:17;23419:6;23409:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;23389:9;:17;23399:6;23389:17;;;;;;;;;;;;;;;:49;;;;23472:32;23497:6;23472:9;:20;23482:9;23472:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23449:9;:20;23459:9;23449:20;;;;;;;;;;;;;;;:55;;;;23537:9;23520:35;;23529:6;23520:35;;;23548:6;23520:35;;;;;;:::i;:::-;;;;;;;;22965:598;;;:::o;23571:739::-;23914:19;23936:39;23971:3;23936:30;23947:18;;;;;;;;;;;23936:30;;:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;23914:61;;23986:22;24011:23;24022:11;24011:6;:10;;:23;;;;:::i;:::-;23986:48;;24067:29;24089:6;24067:9;:17;24077:6;24067:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;24047:9;:17;24057:6;24047:17;;;;;;;;;;;;;;;:49;;;;24130:40;24155:14;24130:9;:20;24140:9;24130:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;24107:9;:20;24117:9;24107:20;;;;;;;;;;;;;;;:63;;;;24208:41;24237:11;24208:9;:24;24226:4;24208:24;;;;;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;24181:9;:24;24199:4;24181:24;;;;;;;;;;;;;;;:68;;;;24284:9;24267:35;;24276:6;24267:35;;;24295:6;24267:35;;;;;;:::i;:::-;;;;;;;;23662:648;;23571:739;;;:::o;30965:544::-;31000:4;31037:15;31017:17;:35;;;;31063:12;31078:59;31134:2;31119:9;;;;;;;;;;;31086:42;;31090:27;31112:4;31090:17;;:21;;:27;;;;:::i;:::-;31086:42;;;;:::i;:::-;31078:55;;:59;;;;:::i;:::-;31063:74;;31219:10;31249:4;31233:12;;;;;;;;;;;:20;;;;:43;;;;;31266:10;;;;;;;;;;;31258:18;;:4;:18;;31233:43;31219:58;;31372:5;31365:12;;:3;;;;;;;;;;;:12;;;31361:118;;31400:5;31394:3;;:11;;;;;;;;;;;;;;;;;;31425:16;31435:5;31425:16;;;;;;:::i;:::-;;;;;;;;31463:4;31456:11;;;;;;31361:118;31496:5;31489:12;;;;30965:544;;:::o;8805:98::-;8863:7;8894:1;8890;:5;;;;:::i;:::-;8883:12;;8805:98;;;;:::o;8424:::-;8482:7;8513:1;8509;:5;;;;:::i;:::-;8502:12;;8424:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1397:75::-;1430:6;1463:2;1457:9;1447:19;;1397:75;:::o;1478:117::-;1587:1;1584;1577:12;1601:117;1710:1;1707;1700:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:86::-;3881:7;3921:4;3914:5;3910:16;3899:27;;3846:86;;;:::o;3938:118::-;4009:22;4025:5;4009:22;:::i;:::-;4002:5;3999:33;3989:61;;4046:1;4043;4036:12;3989:61;3938:118;:::o;4062:135::-;4106:5;4144:6;4131:20;4122:29;;4160:31;4185:5;4160:31;:::i;:::-;4062:135;;;;:::o;4203:325::-;4260:6;4309:2;4297:9;4288:7;4284:23;4280:32;4277:119;;;4315:79;;:::i;:::-;4277:119;4435:1;4460:51;4503:7;4494:6;4483:9;4479:22;4460:51;:::i;:::-;4450:61;;4406:115;4203:325;;;;:::o;4534:619::-;4611:6;4619;4627;4676:2;4664:9;4655:7;4651:23;4647:32;4644:119;;;4682:79;;:::i;:::-;4644:119;4802:1;4827:53;4872:7;4863:6;4852:9;4848:22;4827:53;:::i;:::-;4817:63;;4773:117;4929:2;4955:53;5000:7;4991:6;4980:9;4976:22;4955:53;:::i;:::-;4945:63;;4900:118;5057:2;5083:53;5128:7;5119:6;5108:9;5104:22;5083:53;:::i;:::-;5073:63;;5028:118;4534:619;;;;;:::o;5159:112::-;5242:22;5258:5;5242:22;:::i;:::-;5237:3;5230:35;5159:112;;:::o;5277:214::-;5366:4;5404:2;5393:9;5389:18;5381:26;;5417:67;5481:1;5470:9;5466:17;5457:6;5417:67;:::i;:::-;5277:214;;;;:::o;5497:329::-;5556:6;5605:2;5593:9;5584:7;5580:23;5576:32;5573:119;;;5611:79;;:::i;:::-;5573:119;5731:1;5756:53;5801:7;5792:6;5781:9;5777:22;5756:53;:::i;:::-;5746:63;;5702:117;5497:329;;;;:::o;5832:89::-;5866:7;5909:5;5906:1;5895:20;5884:31;;5832:89;;;:::o;5927:116::-;5997:21;6012:5;5997:21;:::i;:::-;5990:5;5987:32;5977:60;;6033:1;6030;6023:12;5977:60;5927:116;:::o;6049:133::-;6092:5;6130:6;6117:20;6108:29;;6146:30;6170:5;6146:30;:::i;:::-;6049:133;;;;:::o;6188:323::-;6244:6;6293:2;6281:9;6272:7;6268:23;6264:32;6261:119;;;6299:79;;:::i;:::-;6261:119;6419:1;6444:50;6486:7;6477:6;6466:9;6462:22;6444:50;:::i;:::-;6434:60;;6390:114;6188:323;;;;:::o;6517:116::-;6587:21;6602:5;6587:21;:::i;:::-;6580:5;6577:32;6567:60;;6623:1;6620;6613:12;6567:60;6517:116;:::o;6639:133::-;6682:5;6720:6;6707:20;6698:29;;6736:30;6760:5;6736:30;:::i;:::-;6639:133;;;;:::o;6778:323::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:50;7076:7;7067:6;7056:9;7052:22;7034:50;:::i;:::-;7024:60;;6980:114;6778:323;;;;:::o;7107:117::-;7216:1;7213;7206:12;7230:180;7278:77;7275:1;7268:88;7375:4;7372:1;7365:15;7399:4;7396:1;7389:15;7416:281;7499:27;7521:4;7499:27;:::i;:::-;7491:6;7487:40;7629:6;7617:10;7614:22;7593:18;7581:10;7578:34;7575:62;7572:88;;;7640:18;;:::i;:::-;7572:88;7680:10;7676:2;7669:22;7459:238;7416:281;;:::o;7703:129::-;7737:6;7764:20;;:::i;:::-;7754:30;;7793:33;7821:4;7813:6;7793:33;:::i;:::-;7703:129;;;:::o;7838:311::-;7915:4;8005:18;7997:6;7994:30;7991:56;;;8027:18;;:::i;:::-;7991:56;8077:4;8069:6;8065:17;8057:25;;8137:4;8131;8127:15;8119:23;;7838:311;;;:::o;8155:117::-;8264:1;8261;8254:12;8295:710;8391:5;8416:81;8432:64;8489:6;8432:64;:::i;:::-;8416:81;:::i;:::-;8407:90;;8517:5;8546:6;8539:5;8532:21;8580:4;8573:5;8569:16;8562:23;;8633:4;8625:6;8621:17;8613:6;8609:30;8662:3;8654:6;8651:15;8648:122;;;8681:79;;:::i;:::-;8648:122;8796:6;8779:220;8813:6;8808:3;8805:15;8779:220;;;8888:3;8917:37;8950:3;8938:10;8917:37;:::i;:::-;8912:3;8905:50;8984:4;8979:3;8975:14;8968:21;;8855:144;8839:4;8834:3;8830:14;8823:21;;8779:220;;;8783:21;8397:608;;8295:710;;;;;:::o;9028:370::-;9099:5;9148:3;9141:4;9133:6;9129:17;9125:27;9115:122;;9156:79;;:::i;:::-;9115:122;9273:6;9260:20;9298:94;9388:3;9380:6;9373:4;9365:6;9361:17;9298:94;:::i;:::-;9289:103;;9105:293;9028:370;;;;:::o;9404:539::-;9488:6;9537:2;9525:9;9516:7;9512:23;9508:32;9505:119;;;9543:79;;:::i;:::-;9505:119;9691:1;9680:9;9676:17;9663:31;9721:18;9713:6;9710:30;9707:117;;;9743:79;;:::i;:::-;9707:117;9848:78;9918:7;9909:6;9898:9;9894:22;9848:78;:::i;:::-;9838:88;;9634:302;9404:539;;;;:::o;9949:118::-;10036:24;10054:5;10036:24;:::i;:::-;10031:3;10024:37;9949:118;;:::o;10073:222::-;10166:4;10204:2;10193:9;10189:18;10181:26;;10217:71;10285:1;10274:9;10270:17;10261:6;10217:71;:::i;:::-;10073:222;;;;:::o;10301:104::-;10346:7;10375:24;10393:5;10375:24;:::i;:::-;10364:35;;10301:104;;;:::o;10411:138::-;10492:32;10518:5;10492:32;:::i;:::-;10485:5;10482:43;10472:71;;10539:1;10536;10529:12;10472:71;10411:138;:::o;10555:155::-;10609:5;10647:6;10634:20;10625:29;;10663:41;10698:5;10663:41;:::i;:::-;10555:155;;;;:::o;10716:345::-;10783:6;10832:2;10820:9;10811:7;10807:23;10803:32;10800:119;;;10838:79;;:::i;:::-;10800:119;10958:1;10983:61;11036:7;11027:6;11016:9;11012:22;10983:61;:::i;:::-;10973:71;;10929:125;10716:345;;;;:::o;11067:114::-;11134:6;11168:5;11162:12;11152:22;;11067:114;;;:::o;11187:184::-;11286:11;11320:6;11315:3;11308:19;11360:4;11355:3;11351:14;11336:29;;11187:184;;;;:::o;11377:132::-;11444:4;11467:3;11459:11;;11497:4;11492:3;11488:14;11480:22;;11377:132;;;:::o;11515:108::-;11592:24;11610:5;11592:24;:::i;:::-;11587:3;11580:37;11515:108;;:::o;11629:179::-;11698:10;11719:46;11761:3;11753:6;11719:46;:::i;:::-;11797:4;11792:3;11788:14;11774:28;;11629:179;;;;:::o;11814:113::-;11884:4;11916;11911:3;11907:14;11899:22;;11814:113;;;:::o;11963:732::-;12082:3;12111:54;12159:5;12111:54;:::i;:::-;12181:86;12260:6;12255:3;12181:86;:::i;:::-;12174:93;;12291:56;12341:5;12291:56;:::i;:::-;12370:7;12401:1;12386:284;12411:6;12408:1;12405:13;12386:284;;;12487:6;12481:13;12514:63;12573:3;12558:13;12514:63;:::i;:::-;12507:70;;12600:60;12653:6;12600:60;:::i;:::-;12590:70;;12446:224;12433:1;12430;12426:9;12421:14;;12386:284;;;12390:14;12686:3;12679:10;;12087:608;;;11963:732;;;;:::o;12701:373::-;12844:4;12882:2;12871:9;12867:18;12859:26;;12931:9;12925:4;12921:20;12917:1;12906:9;12902:17;12895:47;12959:108;13062:4;13053:6;12959:108;:::i;:::-;12951:116;;12701:373;;;;:::o;13080:109::-;13161:21;13176:5;13161:21;:::i;:::-;13156:3;13149:34;13080:109;;:::o;13195:210::-;13282:4;13320:2;13309:9;13305:18;13297:26;;13333:65;13395:1;13384:9;13380:17;13371:6;13333:65;:::i;:::-;13195:210;;;;:::o;13411:474::-;13479:6;13487;13536:2;13524:9;13515:7;13511:23;13507:32;13504:119;;;13542:79;;:::i;:::-;13504:119;13662:1;13687:53;13732:7;13723:6;13712:9;13708:22;13687:53;:::i;:::-;13677:63;;13633:117;13789:2;13815:53;13860:7;13851:6;13840:9;13836:22;13815:53;:::i;:::-;13805:63;;13760:118;13411:474;;;;;:::o;13891:223::-;14031:34;14027:1;14019:6;14015:14;14008:58;14100:6;14095:2;14087:6;14083:15;14076:31;13891:223;:::o;14120:366::-;14262:3;14283:67;14347:2;14342:3;14283:67;:::i;:::-;14276:74;;14359:93;14448:3;14359:93;:::i;:::-;14477:2;14472:3;14468:12;14461:19;;14120:366;;;:::o;14492:419::-;14658:4;14696:2;14685:9;14681:18;14673:26;;14745:9;14739:4;14735:20;14731:1;14720:9;14716:17;14709:47;14773:131;14899:4;14773:131;:::i;:::-;14765:139;;14492:419;;;:::o;14917:168::-;15057:20;15053:1;15045:6;15041:14;15034:44;14917:168;:::o;15091:366::-;15233:3;15254:67;15318:2;15313:3;15254:67;:::i;:::-;15247:74;;15330:93;15419:3;15330:93;:::i;:::-;15448:2;15443:3;15439:12;15432:19;;15091:366;;;:::o;15463:419::-;15629:4;15667:2;15656:9;15652:18;15644:26;;15716:9;15710:4;15706:20;15702:1;15691:9;15687:17;15680:47;15744:131;15870:4;15744:131;:::i;:::-;15736:139;;15463:419;;;:::o;15888:174::-;16028:26;16024:1;16016:6;16012:14;16005:50;15888:174;:::o;16068:366::-;16210:3;16231:67;16295:2;16290:3;16231:67;:::i;:::-;16224:74;;16307:93;16396:3;16307:93;:::i;:::-;16425:2;16420:3;16416:12;16409:19;;16068:366;;;:::o;16440:419::-;16606:4;16644:2;16633:9;16629:18;16621:26;;16693:9;16687:4;16683:20;16679:1;16668:9;16664:17;16657:47;16721:131;16847:4;16721:131;:::i;:::-;16713:139;;16440:419;;;:::o;16865:180::-;16913:77;16910:1;16903:88;17010:4;17007:1;17000:15;17034:4;17031:1;17024:15;17051:180;17099:77;17096:1;17089:88;17196:4;17193:1;17186:15;17220:4;17217:1;17210:15;17237:233;17276:3;17299:24;17317:5;17299:24;:::i;:::-;17290:33;;17345:66;17338:5;17335:77;17332:103;;;17415:18;;:::i;:::-;17332:103;17462:1;17455:5;17451:13;17444:20;;17237:233;;;:::o;17476:238::-;17616:34;17612:1;17604:6;17600:14;17593:58;17685:21;17680:2;17672:6;17668:15;17661:46;17476:238;:::o;17720:366::-;17862:3;17883:67;17947:2;17942:3;17883:67;:::i;:::-;17876:74;;17959:93;18048:3;17959:93;:::i;:::-;18077:2;18072:3;18068:12;18061:19;;17720:366;;;:::o;18092:419::-;18258:4;18296:2;18285:9;18281:18;18273:26;;18345:9;18339:4;18335:20;18331:1;18320:9;18316:17;18309:47;18373:131;18499:4;18373:131;:::i;:::-;18365:139;;18092:419;;;:::o;18517:143::-;18574:5;18605:6;18599:13;18590:22;;18621:33;18648:5;18621:33;:::i;:::-;18517:143;;;;:::o;18666:351::-;18736:6;18785:2;18773:9;18764:7;18760:23;18756:32;18753:119;;;18791:79;;:::i;:::-;18753:119;18911:1;18936:64;18992:7;18983:6;18972:9;18968:22;18936:64;:::i;:::-;18926:74;;18882:128;18666:351;;;;:::o;19023:221::-;19163:34;19159:1;19151:6;19147:14;19140:58;19232:4;19227:2;19219:6;19215:15;19208:29;19023:221;:::o;19250:366::-;19392:3;19413:67;19477:2;19472:3;19413:67;:::i;:::-;19406:74;;19489:93;19578:3;19489:93;:::i;:::-;19607:2;19602:3;19598:12;19591:19;;19250:366;;;:::o;19622:419::-;19788:4;19826:2;19815:9;19811:18;19803:26;;19875:9;19869:4;19865:20;19861:1;19850:9;19846:17;19839:47;19903:131;20029:4;19903:131;:::i;:::-;19895:139;;19622:419;;;:::o;20047:174::-;20187:26;20183:1;20175:6;20171:14;20164:50;20047:174;:::o;20227:366::-;20369:3;20390:67;20454:2;20449:3;20390:67;:::i;:::-;20383:74;;20466:93;20555:3;20466:93;:::i;:::-;20584:2;20579:3;20575:12;20568:19;;20227:366;;;:::o;20599:419::-;20765:4;20803:2;20792:9;20788:18;20780:26;;20852:9;20846:4;20842:20;20838:1;20827:9;20823:17;20816:47;20880:131;21006:4;20880:131;:::i;:::-;20872:139;;20599:419;;;:::o;21024:332::-;21145:4;21183:2;21172:9;21168:18;21160:26;;21196:71;21264:1;21253:9;21249:17;21240:6;21196:71;:::i;:::-;21277:72;21345:2;21334:9;21330:18;21321:6;21277:72;:::i;:::-;21024:332;;;;;:::o;21362:233::-;21502:34;21498:1;21490:6;21486:14;21479:58;21571:16;21566:2;21558:6;21554:15;21547:41;21362:233;:::o;21601:366::-;21743:3;21764:67;21828:2;21823:3;21764:67;:::i;:::-;21757:74;;21840:93;21929:3;21840:93;:::i;:::-;21958:2;21953:3;21949:12;21942:19;;21601:366;;;:::o;21973:419::-;22139:4;22177:2;22166:9;22162:18;22154:26;;22226:9;22220:4;22216:20;22212:1;22201:9;22197:17;22190:47;22254:131;22380:4;22254:131;:::i;:::-;22246:139;;21973:419;;;:::o;22398:222::-;22538:34;22534:1;22526:6;22522:14;22515:58;22607:5;22602:2;22594:6;22590:15;22583:30;22398:222;:::o;22626:366::-;22768:3;22789:67;22853:2;22848:3;22789:67;:::i;:::-;22782:74;;22865:93;22954:3;22865:93;:::i;:::-;22983:2;22978:3;22974:12;22967:19;;22626:366;;;:::o;22998:419::-;23164:4;23202:2;23191:9;23187:18;23179:26;;23251:9;23245:4;23241:20;23237:1;23226:9;23222:17;23215:47;23279:131;23405:4;23279:131;:::i;:::-;23271:139;;22998:419;;;:::o;23423:225::-;23563:34;23559:1;23551:6;23547:14;23540:58;23632:8;23627:2;23619:6;23615:15;23608:33;23423:225;:::o;23654:366::-;23796:3;23817:67;23881:2;23876:3;23817:67;:::i;:::-;23810:74;;23893:93;23982:3;23893:93;:::i;:::-;24011:2;24006:3;24002:12;23995:19;;23654:366;;;:::o;24026:419::-;24192:4;24230:2;24219:9;24215:18;24207:26;;24279:9;24273:4;24269:20;24265:1;24254:9;24250:17;24243:47;24307:131;24433:4;24307:131;:::i;:::-;24299:139;;24026:419;;;:::o;24451:348::-;24491:7;24514:20;24532:1;24514:20;:::i;:::-;24509:25;;24548:20;24566:1;24548:20;:::i;:::-;24543:25;;24736:1;24668:66;24664:74;24661:1;24658:81;24653:1;24646:9;24639:17;24635:105;24632:131;;;24743:18;;:::i;:::-;24632:131;24791:1;24788;24784:9;24773:20;;24451:348;;;;:::o;24805:180::-;24853:77;24850:1;24843:88;24950:4;24947:1;24940:15;24974:4;24971:1;24964:15;24991:185;25031:1;25048:20;25066:1;25048:20;:::i;:::-;25043:25;;25082:20;25100:1;25082:20;:::i;:::-;25077:25;;25121:1;25111:35;;25126:18;;:::i;:::-;25111:35;25168:1;25165;25161:9;25156:14;;24991:185;;;;:::o;25182:176::-;25214:1;25231:20;25249:1;25231:20;:::i;:::-;25226:25;;25265:20;25283:1;25265:20;:::i;:::-;25260:25;;25304:1;25294:35;;25309:18;;:::i;:::-;25294:35;25350:1;25347;25343:9;25338:14;;25182:176;;;;:::o;25364:223::-;25504:34;25500:1;25492:6;25488:14;25481:58;25573:6;25568:2;25560:6;25556:15;25549:31;25364:223;:::o;25593:366::-;25735:3;25756:67;25820:2;25815:3;25756:67;:::i;:::-;25749:74;;25832:93;25921:3;25832:93;:::i;:::-;25950:2;25945:3;25941:12;25934:19;;25593:366;;;:::o;25965:419::-;26131:4;26169:2;26158:9;26154:18;26146:26;;26218:9;26212:4;26208:20;26204:1;26193:9;26189:17;26182:47;26246:131;26372:4;26246:131;:::i;:::-;26238:139;;25965:419;;;:::o;26390:221::-;26530:34;26526:1;26518:6;26514:14;26507:58;26599:4;26594:2;26586:6;26582:15;26575:29;26390:221;:::o;26617:366::-;26759:3;26780:67;26844:2;26839:3;26780:67;:::i;:::-;26773:74;;26856:93;26945:3;26856:93;:::i;:::-;26974:2;26969:3;26965:12;26958:19;;26617:366;;;:::o;26989:419::-;27155:4;27193:2;27182:9;27178:18;27170:26;;27242:9;27236:4;27232:20;27228:1;27217:9;27213:17;27206:47;27270:131;27396:4;27270:131;:::i;:::-;27262:139;;26989:419;;;:::o;27414:182::-;27554:34;27550:1;27542:6;27538:14;27531:58;27414:182;:::o;27602:366::-;27744:3;27765:67;27829:2;27824:3;27765:67;:::i;:::-;27758:74;;27841:93;27930:3;27841:93;:::i;:::-;27959:2;27954:3;27950:12;27943:19;;27602:366;;;:::o;27974:419::-;28140:4;28178:2;28167:9;28163:18;28155:26;;28227:9;28221:4;28217:20;28213:1;28202:9;28198:17;28191:47;28255:131;28381:4;28255:131;:::i;:::-;28247:139;;27974:419;;;:::o;28399:225::-;28539:34;28535:1;28527:6;28523:14;28516:58;28608:8;28603:2;28595:6;28591:15;28584:33;28399:225;:::o;28630:366::-;28772:3;28793:67;28857:2;28852:3;28793:67;:::i;:::-;28786:74;;28869:93;28958:3;28869:93;:::i;:::-;28987:2;28982:3;28978:12;28971:19;;28630:366;;;:::o;29002:419::-;29168:4;29206:2;29195:9;29191:18;29183:26;;29255:9;29249:4;29245:20;29241:1;29230:9;29226:17;29219:47;29283:131;29409:4;29283:131;:::i;:::-;29275:139;;29002:419;;;:::o;29427:223::-;29567:34;29563:1;29555:6;29551:14;29544:58;29636:6;29631:2;29623:6;29619:15;29612:31;29427:223;:::o;29656:366::-;29798:3;29819:67;29883:2;29878:3;29819:67;:::i;:::-;29812:74;;29895:93;29984:3;29895:93;:::i;:::-;30013:2;30008:3;30004:12;29997:19;;29656:366;;;:::o;30028:419::-;30194:4;30232:2;30221:9;30217:18;30209:26;;30281:9;30275:4;30271:20;30267:1;30256:9;30252:17;30245:47;30309:131;30435:4;30309:131;:::i;:::-;30301:139;;30028:419;;;:::o;30453:229::-;30593:34;30589:1;30581:6;30577:14;30570:58;30662:12;30657:2;30649:6;30645:15;30638:37;30453:229;:::o;30688:366::-;30830:3;30851:67;30915:2;30910:3;30851:67;:::i;:::-;30844:74;;30927:93;31016:3;30927:93;:::i;:::-;31045:2;31040:3;31036:12;31029:19;;30688:366;;;:::o;31060:419::-;31226:4;31264:2;31253:9;31249:18;31241:26;;31313:9;31307:4;31303:20;31299:1;31288:9;31284:17;31277:47;31341:131;31467:4;31341:131;:::i;:::-;31333:139;;31060:419;;;:::o;31485:239::-;31625:34;31621:1;31613:6;31609:14;31602:58;31694:22;31689:2;31681:6;31677:15;31670:47;31485:239;:::o;31730:366::-;31872:3;31893:67;31957:2;31952:3;31893:67;:::i;:::-;31886:74;;31969:93;32058:3;31969:93;:::i;:::-;32087:2;32082:3;32078:12;32071:19;;31730:366;;;:::o;32102:419::-;32268:4;32306:2;32295:9;32291:18;32283:26;;32355:9;32349:4;32345:20;32341:1;32330:9;32326:17;32319:47;32383:131;32509:4;32383:131;:::i;:::-;32375:139;;32102:419;;;:::o;32527:177::-;32667:29;32663:1;32655:6;32651:14;32644:53;32527:177;:::o;32710:366::-;32852:3;32873:67;32937:2;32932:3;32873:67;:::i;:::-;32866:74;;32949:93;33038:3;32949:93;:::i;:::-;33067:2;33062:3;33058:12;33051:19;;32710:366;;;:::o;33082:419::-;33248:4;33286:2;33275:9;33271:18;33263:26;;33335:9;33329:4;33325:20;33321:1;33310:9;33306:17;33299:47;33363:131;33489:4;33363:131;:::i;:::-;33355:139;;33082:419;;;:::o;33507:226::-;33647:34;33643:1;33635:6;33631:14;33624:58;33716:9;33711:2;33703:6;33699:15;33692:34;33507:226;:::o;33739:366::-;33881:3;33902:67;33966:2;33961:3;33902:67;:::i;:::-;33895:74;;33978:93;34067:3;33978:93;:::i;:::-;34096:2;34091:3;34087:12;34080:19;;33739:366;;;:::o;34111:419::-;34277:4;34315:2;34304:9;34300:18;34292:26;;34364:9;34358:4;34354:20;34350:1;34339:9;34335:17;34328:47;34392:131;34518:4;34392:131;:::i;:::-;34384:139;;34111:419;;;:::o;34536:305::-;34576:3;34595:20;34613:1;34595:20;:::i;:::-;34590:25;;34629:20;34647:1;34629:20;:::i;:::-;34624:25;;34783:1;34715:66;34711:74;34708:1;34705:81;34702:107;;;34789:18;;:::i;:::-;34702:107;34833:1;34830;34826:9;34819:16;;34536:305;;;;:::o;34847:182::-;34987:34;34983:1;34975:6;34971:14;34964:58;34847:182;:::o;35035:366::-;35177:3;35198:67;35262:2;35257:3;35198:67;:::i;:::-;35191:74;;35274:93;35363:3;35274:93;:::i;:::-;35392:2;35387:3;35383:12;35376:19;;35035:366;;;:::o;35407:419::-;35573:4;35611:2;35600:9;35596:18;35588:26;;35660:9;35654:4;35650:20;35646:1;35635:9;35631:17;35624:47;35688:131;35814:4;35688:131;:::i;:::-;35680:139;;35407:419;;;:::o;35832:85::-;35877:7;35906:5;35895:16;;35832:85;;;:::o;35923:60::-;35951:3;35972:5;35965:12;;35923:60;;;:::o;35989:158::-;36047:9;36080:61;36098:42;36107:32;36133:5;36107:32;:::i;:::-;36098:42;:::i;:::-;36080:61;:::i;:::-;36067:74;;35989:158;;;:::o;36153:147::-;36248:45;36287:5;36248:45;:::i;:::-;36243:3;36236:58;36153:147;;:::o;36306:831::-;36569:4;36607:3;36596:9;36592:19;36584:27;;36621:71;36689:1;36678:9;36674:17;36665:6;36621:71;:::i;:::-;36702:80;36778:2;36767:9;36763:18;36754:6;36702:80;:::i;:::-;36829:9;36823:4;36819:20;36814:2;36803:9;36799:18;36792:48;36857:108;36960:4;36951:6;36857:108;:::i;:::-;36849:116;;36975:72;37043:2;37032:9;37028:18;37019:6;36975:72;:::i;:::-;37057:73;37125:3;37114:9;37110:19;37101:6;37057:73;:::i;:::-;36306:831;;;;;;;;:::o;37143:234::-;37283:34;37279:1;37271:6;37267:14;37260:58;37352:17;37347:2;37339:6;37335:15;37328:42;37143:234;:::o;37383:366::-;37525:3;37546:67;37610:2;37605:3;37546:67;:::i;:::-;37539:74;;37622:93;37711:3;37622:93;:::i;:::-;37740:2;37735:3;37731:12;37724:19;;37383:366;;;:::o;37755:419::-;37921:4;37959:2;37948:9;37944:18;37936:26;;38008:9;38002:4;37998:20;37994:1;37983:9;37979:17;37972:47;38036:131;38162:4;38036:131;:::i;:::-;38028:139;;37755:419;;;:::o;38180:236::-;38320:34;38316:1;38308:6;38304:14;38297:58;38389:19;38384:2;38376:6;38372:15;38365:44;38180:236;:::o;38422:366::-;38564:3;38585:67;38649:2;38644:3;38585:67;:::i;:::-;38578:74;;38661:93;38750:3;38661:93;:::i;:::-;38779:2;38774:3;38770:12;38763:19;;38422:366;;;:::o;38794:419::-;38960:4;38998:2;38987:9;38983:18;38975:26;;39047:9;39041:4;39037:20;39033:1;39022:9;39018:17;39011:47;39075:131;39201:4;39075:131;:::i;:::-;39067:139;;38794:419;;;:::o;39219:76::-;39255:7;39284:5;39273:16;;39219:76;;;:::o;39301:525::-;39340:3;39359:19;39376:1;39359:19;:::i;:::-;39354:24;;39392:19;39409:1;39392:19;:::i;:::-;39387:24;;39580:1;39512:66;39508:74;39505:1;39501:82;39496:1;39493;39489:9;39482:17;39478:106;39475:132;;;39587:18;;:::i;:::-;39475:132;39767:1;39699:66;39695:74;39692:1;39688:82;39684:1;39681;39677:9;39673:98;39670:124;;;39774:18;;:::i;:::-;39670:124;39818:1;39815;39811:9;39804:16;;39301:525;;;;:::o;39832:191::-;39872:4;39892:20;39910:1;39892:20;:::i;:::-;39887:25;;39926:20;39944:1;39926:20;:::i;:::-;39921:25;;39965:1;39962;39959:8;39956:34;;;39970:18;;:::i;:::-;39956:34;40015:1;40012;40008:9;40000:17;;39832:191;;;;:::o

Swarm Source

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