ETH Price: $3,416.46 (-2.39%)
Gas: 9 Gwei

Token

DogeBased (xDOGE)
 

Overview

Max Total Supply

132,048.979591836 xDOGE

Holders

135

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.517757668 xDOGE

Value
$0.00
0x92048db9d572f3d153d415a41502ad20e9756904
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:
DogeBased

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-02-01
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

library SafeCast {

    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value < 2**128, "SafeCast: value doesn\'t fit in 128 bits");
        return uint128(value);
    }

    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value < 2**64, "SafeCast: value doesn\'t fit in 64 bits");
        return uint64(value);
    }

    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value < 2**32, "SafeCast: value doesn\'t fit in 32 bits");
        return uint32(value);
    }

    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value < 2**16, "SafeCast: value doesn\'t fit in 16 bits");
        return uint16(value);
    }

    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value < 2**8, "SafeCast: value doesn\'t fit in 8 bits");
        return uint8(value);
    }
    
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    function toInt256(uint256 value) internal pure returns (int256) {
        require(value < 2**255, "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

/*
 * @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 GSN 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 virtual view returns (address payable) {
        return msg.sender;
    }

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;


            bytes32 accountHash
         = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 */
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() internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

interface IUniswapV2Pair {
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
}

contract DogeBased is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    using SafeCast for int256;

    uint256 private _epoch;
    event LogRebase(uint256 indexed epoch, uint256 totalSupply);

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

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 128_000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public taxFee = 200; //2%

    bool public tradingEnabled = false;
    uint256 public tradingEnabledAt = 0;

    uint256 private constant RATE_PRECISION = 10 ** 9;
    address public rebaser;

    string private _name = 'DogeBased';
    string private _symbol = 'xDOGE';
    uint8 private _decimals = 9;

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    constructor () public {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         //@dev Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
            
        uniswapV2Router = _uniswapV2Router;
        
        _rOwned[_msgSender()] = _rTotal;
        rebaser = _msgSender();
        emit Transfer(address(0), _msgSender(), _tTotal);
        
        excludeAccount(_msgSender());
        excludeAccount(address(this));
    }
    
    function setTaxFee(uint256 fee) public onlyOwner {
        taxFee = fee;
    }
    
    function setRebaser(address _rebaser) public onlyOwner {
        rebaser = _rebaser;
    }
    
    function EnableTrading() external onlyOwner {
        tradingEnabled = true;
        tradingEnabledAt = now;
    }
    
    // supplyDelta = totalSupply * (exchangeRate - targetRate) / targetRate
    function rebase(int256 supplyDelta)
        external
        returns (uint256)
    {
        require(_msgSender() == owner() || _msgSender() == rebaser, "Sender not authorized");
        
        _epoch = _epoch.add(1);
		
        if (supplyDelta == 0) {
            emit LogRebase(_epoch, _tTotal);
            return _tTotal;
        }
        
        uint256 uSupplyDelta = (supplyDelta < 0 ? -supplyDelta : supplyDelta).toUint256();
        uint256 rate = uSupplyDelta.mul(RATE_PRECISION).div(_tTotal);
        uint256 multiplier;
        
        if (supplyDelta < 0) {
            multiplier = RATE_PRECISION.sub(rate);
        } else {
            multiplier = RATE_PRECISION.add(rate);
        }
        
        if (supplyDelta < 0) {
            _tTotal = _tTotal.sub(uSupplyDelta);
        } else {
            _tTotal = _tTotal.add(uSupplyDelta);
        }
        
        if (_tTotal > MAX) {
            _tTotal = MAX;
        }
        
        for (uint256 i = 0; i < _excluded.length; i++) {
            if(_tOwned[_excluded[i]] > 0) {
                _tOwned[_excluded[i]] = _tOwned[_excluded[i]].mul(multiplier).div(RATE_PRECISION);
            }
        }
        
        IUniswapV2Pair(uniswapV2Pair).sync();
        
        emit LogRebase(_epoch, _tTotal);

        return _tTotal;
    }

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

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

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

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

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

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

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

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

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

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

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

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }
    
    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeAccount(address account) public onlyOwner() {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

    function _transfer(address sender, address recipient, uint256 amount) private {
        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");
        require(sender == owner() || recipient == owner() || tradingEnabled, "Token is paused until presale is completed." );
        require(now > tradingEnabledAt + 5 minutes  || amount <= 3360e9, "You cannot transfer more than 3360 tokens.");
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

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

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

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

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

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

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

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(10000);
        uint256 tTransferAmount = tAmount.sub(tFee);
        return (tTransferAmount, tFee);
    }

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

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"epoch","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"LogRebase","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"EnableTrading","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"supplyDelta","type":"int256"}],"name":"rebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebaser","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rebaser","type":"address"}],"name":"setRebaser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabledAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

608060405265746a52880000600755600754600019816200001c57fe5b066000190360085560c8600a556000600b60006101000a81548160ff0219169083151502179055506000600c556040518060400160405280600981526020017f446f676542617365640000000000000000000000000000000000000000000000815250600e90805190602001906200009692919062000e60565b506040518060400160405280600581526020017f78444f4745000000000000000000000000000000000000000000000000000000815250600f9080519060200190620000e492919062000e60565b506009601060006101000a81548160ff021916908360ff1602179055503480156200010e57600080fd5b506000620001216200057860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021f57600080fd5b505afa15801562000234573d6000803e3d6000fd5b505050506040513d60208110156200024b57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002bf57600080fd5b505afa158015620002d4573d6000803e3d6000fd5b505050506040513d6020811015620002eb57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200036657600080fd5b505af11580156200037b573d6000803e3d6000fd5b505050506040513d60208110156200039257600080fd5b8101908080519060200190929190505050601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600854600260006200043b6200057860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620004896200057860201b60201c565b600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004d96200057860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040518082815260200191505060405180910390a362000560620005546200057860201b60201c565b6200058060201b60201c565b62000571306200058060201b60201c565b5062000f06565b600033905090565b620005906200057860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000651576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161562000712576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115620007ef57620007ab600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620008ad60201b60201c565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006008548211156200090c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018062004f1b602a913960400191505060405180910390fd5b60006200091e6200094260201b60201c565b90506200093a81846200097c60201b6200253f1790919060201c565b915050919050565b600080600062000957620009ce60201b60201c565b915091506200097581836200097c60201b6200253f1790919060201c565b9250505090565b6000620009c683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000c7f60201b60201c565b905092915050565b600080600060085490506000600754905060005b60068054905081101562000c395782600260006006848154811062000a0357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118062000aec575081600360006006848154811062000a8457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1562000b05576008546007549450945050505062000c7b565b62000b96600260006006848154811062000b1b57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548462000d4a60201b620025891790919060201c565b925062000c29600360006006848154811062000bae57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548362000d4a60201b620025891790919060201c565b91508080600101915050620009e2565b5062000c586007546008546200097c60201b6200253f1790919060201c565b82101562000c725760085460075493509350505062000c7b565b81819350935050505b9091565b6000808311829062000d2f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000cf357808201518184015260208101905062000cd6565b50505050905090810190601f16801562000d215780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858162000d3c57fe5b049050809150509392505050565b600062000d9483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000d9c60201b60201c565b905092915050565b600083831115829062000e4d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000e1157808201518184015260208101905062000df4565b50505050905090810190601f16801562000e3f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000ea357805160ff191683800117855562000ed4565b8280016001018555821562000ed4579182015b8281111562000ed357825182559160200191906001019062000eb6565b5b50905062000ee3919062000ee7565b5090565b5b8082111562000f0257600081600090555060010162000ee8565b5090565b6140058062000f166000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80634ada218b1161010f578063c31fe80a116100a2578063e46adf6211610071578063e46adf62146108f9578063f2cc0c181461093d578063f2fde38b14610981578063f84354f1146109c5576101e5565b8063c31fe80a146107db578063c4081a4c146107f9578063cba0e99614610827578063dd62ed3e14610881576101e5565b806395d89b41116100de57806395d89b4114610672578063a071dcf4146106f5578063a457c2d714610713578063a9059cbb14610777576101e5565b80634ada218b146105bc57806370a08231146105dc578063715018a6146106345780638da5cb5b1461063e576101e5565b806318160ddd11610187578063313ce56711610156578063313ce567146104b557806339509351146104d65780634549b0391461053a57806349bd5a5e14610588576101e5565b806318160ddd146103c75780631d97b7cd146103e557806323b872dd146103ef5780632d83811914610473576101e5565b80630ab114f9116101c35780630ab114f9146102ff57806311fd8a831461034157806313114a9d146103755780631694505e14610393576101e5565b8063053ab182146101ea57806306fdde0314610218578063095ea7b31461029b575b600080fd5b6102166004803603602081101561020057600080fd5b8101908080359060200190929190505050610a09565b005b610220610b99565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610260578082015181840152602081019050610245565b50505050905090810190601f16801561028d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7600480360360408110156102b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c3b565b60405180821515815260200191505060405180910390f35b61032b6004803603602081101561031557600080fd5b8101908080359060200190929190505050610c59565b6040518082815260200191505060405180910390f35b610349611141565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037d611167565b6040518082815260200191505060405180910390f35b61039b611171565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103cf611197565b6040518082815260200191505060405180910390f35b6103ed6111a1565b005b61045b6004803603606081101561040557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061128d565b60405180821515815260200191505060405180910390f35b61049f6004803603602081101561048957600080fd5b8101908080359060200190929190505050611366565b6040518082815260200191505060405180910390f35b6104bd6113ea565b604051808260ff16815260200191505060405180910390f35b610522600480360360408110156104ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611401565b60405180821515815260200191505060405180910390f35b6105726004803603604081101561055057600080fd5b81019080803590602001909291908035151590602001909291905050506114b4565b6040518082815260200191505060405180910390f35b610590611569565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c461158f565b60405180821515815260200191505060405180910390f35b61061e600480360360208110156105f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a2565b6040518082815260200191505060405180910390f35b61063c61168d565b005b610646611813565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61067a61183c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106ba57808201518184015260208101905061069f565b50505050905090810190601f1680156106e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106fd6118de565b6040518082815260200191505060405180910390f35b61075f6004803603604081101561072957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118e4565b60405180821515815260200191505060405180910390f35b6107c36004803603604081101561078d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119b1565b60405180821515815260200191505060405180910390f35b6107e36119cf565b6040518082815260200191505060405180910390f35b6108256004803603602081101561080f57600080fd5b81019080803590602001909291905050506119d5565b005b6108696004803603602081101561083d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa7565b60405180821515815260200191505060405180910390f35b6108e36004803603604081101561089757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611afd565b6040518082815260200191505060405180910390f35b61093b6004803603602081101561090f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b84565b005b61097f6004803603602081101561095357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c90565b005b6109c36004803603602081101561099757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611faa565b005b610a07600480360360208110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121b5565b005b6000610a136125d3565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613f7f602c913960400191505060405180910390fd5b6000610ac3836125db565b505050509050610b1b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b738160085461258990919063ffffffff16565b600881905550610b8e8360095461263390919063ffffffff16565b600981905550505050565b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c315780601f10610c0657610100808354040283529160200191610c31565b820191906000526020600020905b815481529060010190602001808311610c1457829003601f168201915b5050505050905090565b6000610c4f610c486125d3565b84846126bb565b6001905092915050565b6000610c63611813565b73ffffffffffffffffffffffffffffffffffffffff16610c816125d3565b73ffffffffffffffffffffffffffffffffffffffff161480610cf75750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610cdf6125d3565b73ffffffffffffffffffffffffffffffffffffffff16145b610d69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610d7e6001805461263390919063ffffffff16565b6001819055506000821415610dd3576001547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26007546040518082815260200191505060405180910390a2600754905061113c565b6000610df060008412610de65783610deb565b836000035b6128b2565b90506000610e1f600754610e11633b9aca008561293290919063ffffffff16565b61253f90919063ffffffff16565b9050600080851215610e4957610e4282633b9aca0061258990919063ffffffff16565b9050610e63565b610e6082633b9aca0061263390919063ffffffff16565b90505b6000851215610e8c57610e818360075461258990919063ffffffff16565b600781905550610ea8565b610ea18360075461263390919063ffffffff16565b6007819055505b6000196007541115610ebe576000196007819055505b60005b6006805490508110156110745760006003600060068481548110610ee157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561106757610fec633b9aca00610fde846003600060068781548110610f6a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293290919063ffffffff16565b61253f90919063ffffffff16565b6003600060068481548110610ffd57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050610ec1565b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110df57600080fd5b505af11580156110f3573d6000803e3d6000fd5b505050506001547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26007546040518082815260200191505060405180910390a260075493505050505b919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b6111a96125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600b60006101000a81548160ff02191690831515021790555042600c81905550565b600061129a8484846129b8565b61135b846112a66125d3565b61135685604051806060016040528060288152602001613ee560289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061130c6125d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5f9092919063ffffffff16565b6126bb565b600190509392505050565b60006008548211156113c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613dfd602a913960400191505060405180910390fd5b60006113cd61301f565b90506113e2818461253f90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b60006114aa61140e6125d3565b846114a5856004600061141f6125d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b6126bb565b6001905092915050565b600060075483111561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161154d57600061153e846125db565b50505050905080915050611563565b6000611558846125db565b505050915050809150505b92915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561163d57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611688565b611685600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611366565b90505b919050565b6116956125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118d45780601f106118a9576101008083540402835291602001916118d4565b820191906000526020600020905b8154815290600101906020018083116118b757829003601f168201915b5050505050905090565b600a5481565b60006119a76118f16125d3565b846119a285604051806060016040528060258152602001613fab602591396004600061191b6125d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5f9092919063ffffffff16565b6126bb565b6001905092915050565b60006119c56119be6125d3565b84846129b8565b6001905092915050565b600c5481565b6119dd6125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b8c6125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c986125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611eec57611ea8600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611366565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fb26125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612072576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e276026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121bd6125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461227d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661233c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c726561647920696e636c75646564000000000081525060200191505060405180910390fd5b60005b60068054905081101561253b578173ffffffffffffffffffffffffffffffffffffffff166006828154811061237057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561252e576006600160068054905003815481106123cc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061240457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060068054806124f457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561253b565b808060010191505061233f565b5050565b600061258183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061304a565b905092915050565b60006125cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f5f565b905092915050565b600033905090565b60008060008060008060006125ef88613110565b9150915060006125fd61301f565b9050600080600061260f8c8686613164565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000808284019050838110156126b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f5b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613e4d6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008082121561292a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b60008083141561294557600090506129b2565b600082840290508284828161295657fe5b04146129ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ec46021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613f366025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613dda6023913960400191505060405180910390fd5b60008111612b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613f0d6029913960400191505060405180910390fd5b612b25611813565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b905750612b61611813565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ba75750600b60009054906101000a900460ff165b612bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613e6f602b913960400191505060405180910390fd5b61012c600c5401421180612c16575065030e4f9b40008111155b612c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613e9a602a913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d0e5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2357612d1e8383836131c2565b612f5a565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dc65750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ddb57612dd6838383613415565b612f59565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e7f5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9457612e8f838383613668565b612f58565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f365750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f4b57612f46838383613826565b612f57565b612f56838383613668565b5b5b5b5b505050565b600083831115829061300c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fd1578082015181840152602081019050612fb6565b50505050905090810190601f168015612ffe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061302c613b0e565b91509150613043818361253f90919063ffffffff16565b9250505090565b600080831182906130f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130bb5780820151818401526020810190506130a0565b50505050905090810190601f1680156130e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161310257fe5b049050809150509392505050565b600080600061313e612710613130600a548761293290919063ffffffff16565b61253f90919063ffffffff16565b90506000613155828661258990919063ffffffff16565b90508082935093505050915091565b60008060008061317d858861293290919063ffffffff16565b90506000613194868861293290919063ffffffff16565b905060006131ab828461258990919063ffffffff16565b905082818395509550955050505093509350939050565b60008060008060006131d3866125db565b9450945094509450945061322f86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132c485600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335984600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133a68382613d9f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613426866125db565b9450945094509450945061348285600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061351782600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135ac84600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135f98382613d9f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613679866125db565b945094509450945094506136d585600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061376a84600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b78382613d9f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613837866125db565b9450945094509450945061389386600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061392885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139bd82600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5284600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9f8382613d9f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b600080600060085490506000600754905060005b600680549050811015613d6257826002600060068481548110613b4157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613c285750816003600060068481548110613bc057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613c3f5760085460075494509450505050613d9b565b613cc86002600060068481548110613c5357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461258990919063ffffffff16565b9250613d536003600060068481548110613cde57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361258990919063ffffffff16565b91508080600101915050613b22565b50613d7a60075460085461253f90919063ffffffff16565b821015613d9257600854600754935093505050613d9b565b81819350935050505b9091565b613db48260085461258990919063ffffffff16565b600881905550613dcf8160095461263390919063ffffffff16565b600981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373546f6b656e2069732070617573656420756e74696c2070726573616c6520697320636f6d706c657465642e596f752063616e6e6f74207472616e73666572206d6f7265207468616e203333363020746f6b656e732e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206027c0d167ac66485f24bd395556f95ab164045471bb7f635ba2b4c932691e1364736f6c634300060c0033416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e73

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80634ada218b1161010f578063c31fe80a116100a2578063e46adf6211610071578063e46adf62146108f9578063f2cc0c181461093d578063f2fde38b14610981578063f84354f1146109c5576101e5565b8063c31fe80a146107db578063c4081a4c146107f9578063cba0e99614610827578063dd62ed3e14610881576101e5565b806395d89b41116100de57806395d89b4114610672578063a071dcf4146106f5578063a457c2d714610713578063a9059cbb14610777576101e5565b80634ada218b146105bc57806370a08231146105dc578063715018a6146106345780638da5cb5b1461063e576101e5565b806318160ddd11610187578063313ce56711610156578063313ce567146104b557806339509351146104d65780634549b0391461053a57806349bd5a5e14610588576101e5565b806318160ddd146103c75780631d97b7cd146103e557806323b872dd146103ef5780632d83811914610473576101e5565b80630ab114f9116101c35780630ab114f9146102ff57806311fd8a831461034157806313114a9d146103755780631694505e14610393576101e5565b8063053ab182146101ea57806306fdde0314610218578063095ea7b31461029b575b600080fd5b6102166004803603602081101561020057600080fd5b8101908080359060200190929190505050610a09565b005b610220610b99565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610260578082015181840152602081019050610245565b50505050905090810190601f16801561028d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e7600480360360408110156102b157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c3b565b60405180821515815260200191505060405180910390f35b61032b6004803603602081101561031557600080fd5b8101908080359060200190929190505050610c59565b6040518082815260200191505060405180910390f35b610349611141565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037d611167565b6040518082815260200191505060405180910390f35b61039b611171565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103cf611197565b6040518082815260200191505060405180910390f35b6103ed6111a1565b005b61045b6004803603606081101561040557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061128d565b60405180821515815260200191505060405180910390f35b61049f6004803603602081101561048957600080fd5b8101908080359060200190929190505050611366565b6040518082815260200191505060405180910390f35b6104bd6113ea565b604051808260ff16815260200191505060405180910390f35b610522600480360360408110156104ec57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611401565b60405180821515815260200191505060405180910390f35b6105726004803603604081101561055057600080fd5b81019080803590602001909291908035151590602001909291905050506114b4565b6040518082815260200191505060405180910390f35b610590611569565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105c461158f565b60405180821515815260200191505060405180910390f35b61061e600480360360208110156105f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115a2565b6040518082815260200191505060405180910390f35b61063c61168d565b005b610646611813565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61067a61183c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156106ba57808201518184015260208101905061069f565b50505050905090810190601f1680156106e75780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106fd6118de565b6040518082815260200191505060405180910390f35b61075f6004803603604081101561072957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118e4565b60405180821515815260200191505060405180910390f35b6107c36004803603604081101561078d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119b1565b60405180821515815260200191505060405180910390f35b6107e36119cf565b6040518082815260200191505060405180910390f35b6108256004803603602081101561080f57600080fd5b81019080803590602001909291905050506119d5565b005b6108696004803603602081101561083d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611aa7565b60405180821515815260200191505060405180910390f35b6108e36004803603604081101561089757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611afd565b6040518082815260200191505060405180910390f35b61093b6004803603602081101561090f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b84565b005b61097f6004803603602081101561095357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c90565b005b6109c36004803603602081101561099757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611faa565b005b610a07600480360360208110156109db57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506121b5565b005b6000610a136125d3565b9050600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610ab8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613f7f602c913960400191505060405180910390fd5b6000610ac3836125db565b505050509050610b1b81600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b738160085461258990919063ffffffff16565b600881905550610b8e8360095461263390919063ffffffff16565b600981905550505050565b6060600e8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610c315780601f10610c0657610100808354040283529160200191610c31565b820191906000526020600020905b815481529060010190602001808311610c1457829003601f168201915b5050505050905090565b6000610c4f610c486125d3565b84846126bb565b6001905092915050565b6000610c63611813565b73ffffffffffffffffffffffffffffffffffffffff16610c816125d3565b73ffffffffffffffffffffffffffffffffffffffff161480610cf75750600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610cdf6125d3565b73ffffffffffffffffffffffffffffffffffffffff16145b610d69576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f53656e646572206e6f7420617574686f72697a6564000000000000000000000081525060200191505060405180910390fd5b610d7e6001805461263390919063ffffffff16565b6001819055506000821415610dd3576001547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26007546040518082815260200191505060405180910390a2600754905061113c565b6000610df060008412610de65783610deb565b836000035b6128b2565b90506000610e1f600754610e11633b9aca008561293290919063ffffffff16565b61253f90919063ffffffff16565b9050600080851215610e4957610e4282633b9aca0061258990919063ffffffff16565b9050610e63565b610e6082633b9aca0061263390919063ffffffff16565b90505b6000851215610e8c57610e818360075461258990919063ffffffff16565b600781905550610ea8565b610ea18360075461263390919063ffffffff16565b6007819055505b6000196007541115610ebe576000196007819055505b60005b6006805490508110156110745760006003600060068481548110610ee157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561106757610fec633b9aca00610fde846003600060068781548110610f6a57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461293290919063ffffffff16565b61253f90919063ffffffff16565b6003600060068481548110610ffd57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b8080600101915050610ec1565b50601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156110df57600080fd5b505af11580156110f3573d6000803e3d6000fd5b505050506001547f72725a3b1e5bd622d6bcd1339bb31279c351abe8f541ac7fd320f24e1b1641f26007546040518082815260200191505060405180910390a260075493505050505b919050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b601060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600754905090565b6111a96125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600b60006101000a81548160ff02191690831515021790555042600c81905550565b600061129a8484846129b8565b61135b846112a66125d3565b61135685604051806060016040528060288152602001613ee560289139600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061130c6125d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5f9092919063ffffffff16565b6126bb565b600190509392505050565b60006008548211156113c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613dfd602a913960400191505060405180910390fd5b60006113cd61301f565b90506113e2818461253f90919063ffffffff16565b915050919050565b6000601060009054906101000a900460ff16905090565b60006114aa61140e6125d3565b846114a5856004600061141f6125d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b6126bb565b6001905092915050565b600060075483111561152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b8161154d57600061153e846125db565b50505050905080915050611563565b6000611558846125db565b505050915050809150505b92915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561163d57600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611688565b611685600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611366565b90505b919050565b6116956125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611755576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118d45780601f106118a9576101008083540402835291602001916118d4565b820191906000526020600020905b8154815290600101906020018083116118b757829003601f168201915b5050505050905090565b600a5481565b60006119a76118f16125d3565b846119a285604051806060016040528060258152602001613fab602591396004600061191b6125d3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f5f9092919063ffffffff16565b6126bb565b6001905092915050565b60006119c56119be6125d3565b84846129b8565b6001905092915050565b600c5481565b6119dd6125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a9d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600a8190555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b8c6125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c4c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611c986125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d58576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e18576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611eec57611ea8600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611366565b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506006819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fb26125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612072576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120f8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613e276026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121bd6125d3565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461227d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661233c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c726561647920696e636c75646564000000000081525060200191505060405180910390fd5b60005b60068054905081101561253b578173ffffffffffffffffffffffffffffffffffffffff166006828154811061237057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561252e576006600160068054905003815481106123cc57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006828154811061240457fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060068054806124f457fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561253b565b808060010191505061233f565b5050565b600061258183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061304a565b905092915050565b60006125cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f5f565b905092915050565b600033905090565b60008060008060008060006125ef88613110565b9150915060006125fd61301f565b9050600080600061260f8c8686613164565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b6000808284019050838110156126b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613f5b6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613e4d6022913960400191505060405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008082121561292a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f53616665436173743a2076616c7565206d75737420626520706f73697469766581525060200191505060405180910390fd5b819050919050565b60008083141561294557600090506129b2565b600082840290508284828161295657fe5b04146129ad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613ec46021913960400191505060405180910390fd5b809150505b92915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613f366025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ac4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613dda6023913960400191505060405180910390fd5b60008111612b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613f0d6029913960400191505060405180910390fd5b612b25611813565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b905750612b61611813565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612ba75750600b60009054906101000a900460ff165b612bfc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613e6f602b913960400191505060405180910390fd5b61012c600c5401421180612c16575065030e4f9b40008111155b612c6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613e9a602a913960400191505060405180910390fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d0e5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d2357612d1e8383836131c2565b612f5a565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dc65750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ddb57612dd6838383613415565b612f59565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612e7f5750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e9457612e8f838383613668565b612f58565b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f365750600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f4b57612f46838383613826565b612f57565b612f56838383613668565b5b5b5b5b505050565b600083831115829061300c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612fd1578082015181840152602081019050612fb6565b50505050905090810190601f168015612ffe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080600061302c613b0e565b91509150613043818361253f90919063ffffffff16565b9250505090565b600080831182906130f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130bb5780820151818401526020810190506130a0565b50505050905090810190601f1680156130e85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161310257fe5b049050809150509392505050565b600080600061313e612710613130600a548761293290919063ffffffff16565b61253f90919063ffffffff16565b90506000613155828661258990919063ffffffff16565b90508082935093505050915091565b60008060008061317d858861293290919063ffffffff16565b90506000613194868861293290919063ffffffff16565b905060006131ab828461258990919063ffffffff16565b905082818395509550955050505093509350939050565b60008060008060006131d3866125db565b9450945094509450945061322f86600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132c485600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061335984600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133a68382613d9f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613426866125db565b9450945094509450945061348285600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061351782600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135ac84600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135f98382613d9f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613679866125db565b945094509450945094506136d585600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061376a84600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137b78382613d9f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b6000806000806000613837866125db565b9450945094509450945061389386600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061392885600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461258990919063ffffffff16565b600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139bd82600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a5284600260008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461263390919063ffffffff16565b600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9f8382613d9f565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a35050505050505050565b600080600060085490506000600754905060005b600680549050811015613d6257826002600060068481548110613b4157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613c285750816003600060068481548110613bc057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613c3f5760085460075494509450505050613d9b565b613cc86002600060068481548110613c5357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461258990919063ffffffff16565b9250613d536003600060068481548110613cde57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361258990919063ffffffff16565b91508080600101915050613b22565b50613d7a60075460085461253f90919063ffffffff16565b821015613d9257600854600754935093505050613d9b565b81819350935050505b9091565b613db48260085461258990919063ffffffff16565b600881905550613dcf8160095461263390919063ffffffff16565b600981905550505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373546f6b656e2069732070617573656420756e74696c2070726573616c6520697320636f6d706c657465642e596f752063616e6e6f74207472616e73666572206d6f7265207468616e203333363020746f6b656e732e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212206027c0d167ac66485f24bd395556f95ab164045471bb7f635ba2b4c932691e1364736f6c634300060c0033

Deployed Bytecode Sourcemap

21235:13108:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26887:376;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24765:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25677:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;23400:1357;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22124:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26788:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22271:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25042:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23194:117;;;:::i;:::-;;25846:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27713:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24951:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26167:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27271:434;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22320:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;21983:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25145:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18798:148;;;:::i;:::-;;18156:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;24856:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21942:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26393:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25351:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;22024:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22998:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26670:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25526:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23090:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27974:330;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19101:281;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28312:478;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26887:376;26939:14;26956:12;:10;:12::i;:::-;26939:29;;26988:11;:19;27000:6;26988:19;;;;;;;;;;;;;;;;;;;;;;;;;26987:20;26979:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27068:15;27091:19;27102:7;27091:10;:19::i;:::-;27067:43;;;;;;27139:28;27159:7;27139;:15;27147:6;27139:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27121:7;:15;27129:6;27121:15;;;;;;;;;;;;;;;:46;;;;27188:20;27200:7;27188;;:11;;:20;;;;:::i;:::-;27178:7;:30;;;;27232:23;27247:7;27232:10;;:14;;:23;;;;:::i;:::-;27219:10;:36;;;;26887:376;;;:::o;24765:83::-;24802:13;24835:5;24828:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24765:83;:::o;25677:161::-;25752:4;25769:39;25778:12;:10;:12::i;:::-;25792:7;25801:6;25769:8;:39::i;:::-;25826:4;25819:11;;25677:161;;;;:::o;23400:1357::-;23472:7;23521;:5;:7::i;:::-;23505:23;;:12;:10;:12::i;:::-;:23;;;:50;;;;23548:7;;;;;;;;;;;23532:23;;:12;:10;:12::i;:::-;:23;;;23505:50;23497:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23611:13;23622:1;23611:6;;:10;;:13;;;;:::i;:::-;23602:6;:22;;;;23658:1;23643:11;:16;23639:109;;;23691:6;;23681:26;23699:7;;23681:26;;;;;;;;;;;;;;;;;;23729:7;;23722:14;;;;23639:109;23768:20;23791:58;23806:1;23792:11;:15;:44;;23825:11;23792:44;;;23811:11;23810:12;;23792:44;23791:56;:58::i;:::-;23768:81;;23860:12;23875:45;23912:7;;23875:32;22110:7;23875:12;:16;;:32;;;;:::i;:::-;:36;;:45;;;;:::i;:::-;23860:60;;23931:18;23988:1;23974:11;:15;23970:155;;;24019:24;24038:4;22110:7;24019:18;;:24;;;;:::i;:::-;24006:37;;23970:155;;;24089:24;24108:4;22110:7;24089:18;;:24;;;;:::i;:::-;24076:37;;23970:155;24163:1;24149:11;:15;24145:151;;;24191:25;24203:12;24191:7;;:11;;:25;;;;:::i;:::-;24181:7;:35;;;;24145:151;;;24259:25;24271:12;24259:7;;:11;;:25;;;;:::i;:::-;24249:7;:35;;;;24145:151;21796:1;21787:11;24320:7;;:13;24316:59;;;21796:1;21787:11;24350:7;:13;;;;24316:59;24400:9;24395:219;24419:9;:16;;;;24415:1;:20;24395:219;;;24484:1;24460:7;:21;24468:9;24478:1;24468:12;;;;;;;;;;;;;;;;;;;;;;;;;24460:21;;;;;;;;;;;;;;;;:25;24457:146;;;24530:57;22110:7;24530:37;24556:10;24530:7;:21;24538:9;24548:1;24538:12;;;;;;;;;;;;;;;;;;;;;;;;;24530:21;;;;;;;;;;;;;;;;:25;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;24506:7;:21;24514:9;24524:1;24514:12;;;;;;;;;;;;;;;;;;;;;;;;;24506:21;;;;;;;;;;;;;;;:81;;;;24457:146;24437:3;;;;;;;24395:219;;;;24649:13;;;;;;;;;;;24634:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24706:6;;24696:26;24714:7;;24696:26;;;;;;;;;;;;;;;;;;24742:7;;24735:14;;;;;23400:1357;;;;:::o;22124:22::-;;;;;;;;;;;;;:::o;26788:87::-;26830:7;26857:10;;26850:17;;26788:87;:::o;22271:42::-;;;;;;;;;;;;;:::o;25042:95::-;25095:7;25122;;25115:14;;25042:95;:::o;23194:117::-;18378:12;:10;:12::i;:::-;18368:22;;:6;;;;;;;;;;:22;;;18360:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23266:4:::1;23249:14;;:21;;;;;;;;;;;;;;;;;;23300:3;23281:16;:22;;;;23194:117::o:0;25846:313::-;25944:4;25961:36;25971:6;25979:9;25990:6;25961:9;:36::i;:::-;26008:121;26017:6;26025:12;:10;:12::i;:::-;26039:89;26077:6;26039:89;;;;;;;;;;;;;;;;;:11;:19;26051:6;26039:19;;;;;;;;;;;;;;;:33;26059:12;:10;:12::i;:::-;26039:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;26008:8;:121::i;:::-;26147:4;26140:11;;25846:313;;;;;:::o;27713:253::-;27779:7;27818;;27807;:18;;27799:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27883:19;27906:10;:8;:10::i;:::-;27883:33;;27934:24;27946:11;27934:7;:11;;:24;;;;:::i;:::-;27927:31;;;27713:253;;;:::o;24951:83::-;24992:5;25017:9;;;;;;;;;;;25010:16;;24951:83;:::o;26167:218::-;26255:4;26272:83;26281:12;:10;:12::i;:::-;26295:7;26304:50;26343:10;26304:11;:25;26316:12;:10;:12::i;:::-;26304:25;;;;;;;;;;;;;;;:34;26330:7;26304:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;26272:8;:83::i;:::-;26373:4;26366:11;;26167:218;;;;:::o;27271:434::-;27361:7;27400;;27389;:18;;27381:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27459:17;27454:244;;27494:15;27517:19;27528:7;27517:10;:19::i;:::-;27493:43;;;;;;27558:7;27551:14;;;;;27454:244;27600:23;27630:19;27641:7;27630:10;:19::i;:::-;27598:51;;;;;;27671:15;27664:22;;;27271:434;;;;;:::o;22320:29::-;;;;;;;;;;;;;:::o;21983:34::-;;;;;;;;;;;;;:::o;25145:198::-;25211:7;25235:11;:20;25247:7;25235:20;;;;;;;;;;;;;;;;;;;;;;;;;25231:49;;;25264:7;:16;25272:7;25264:16;;;;;;;;;;;;;;;;25257:23;;;;25231:49;25298:37;25318:7;:16;25326:7;25318:16;;;;;;;;;;;;;;;;25298:19;:37::i;:::-;25291:44;;25145:198;;;;:::o;18798:148::-;18378:12;:10;:12::i;:::-;18368:22;;:6;;;;;;;;;;:22;;;18360:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18905:1:::1;18868:40;;18889:6;::::0;::::1;;;;;;;;18868:40;;;;;;;;;;;;18936:1;18919:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18798:148::o:0;18156:79::-;18194:7;18221:6;;;;;;;;;;;18214:13;;18156:79;:::o;24856:87::-;24895:13;24928:7;24921:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24856:87;:::o;21942:27::-;;;;:::o;26393:269::-;26486:4;26503:129;26512:12;:10;:12::i;:::-;26526:7;26535:96;26574:15;26535:96;;;;;;;;;;;;;;;;;:11;:25;26547:12;:10;:12::i;:::-;26535:25;;;;;;;;;;;;;;;:34;26561:7;26535:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;26503:8;:129::i;:::-;26650:4;26643:11;;26393:269;;;;:::o;25351:167::-;25429:4;25446:42;25456:12;:10;:12::i;:::-;25470:9;25481:6;25446:9;:42::i;:::-;25506:4;25499:11;;25351:167;;;;:::o;22024:35::-;;;;:::o;22998:80::-;18378:12;:10;:12::i;:::-;18368:22;;:6;;;;;;;;;;:22;;;18360:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23067:3:::1;23058:6;:12;;;;22998:80:::0;:::o;26670:110::-;26728:4;26752:11;:20;26764:7;26752:20;;;;;;;;;;;;;;;;;;;;;;;;;26745:27;;26670:110;;;:::o;25526:143::-;25607:7;25634:11;:18;25646:5;25634:18;;;;;;;;;;;;;;;:27;25653:7;25634:27;;;;;;;;;;;;;;;;25627:34;;25526:143;;;;:::o;23090:92::-;18378:12;:10;:12::i;:::-;18368:22;;:6;;;;;;;;;;:22;;;18360:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23166:8:::1;23156:7;;:18;;;;;;;;;;;;;;;;;;23090:92:::0;:::o;27974:330::-;18378:12;:10;:12::i;:::-;18368:22;;:6;;;;;;;;;;:22;;;18360:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28054:11:::1;:20;28066:7;28054:20;;;;;;;;;;;;;;;;;;;;;;;;;28053:21;28045:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28139:1;28120:7;:16;28128:7;28120:16;;;;;;;;;;;;;;;;:20;28117:108;;;28176:37;28196:7;:16;28204:7;28196:16;;;;;;;;;;;;;;;;28176:19;:37::i;:::-;28157:7;:16;28165:7;28157:16;;;;;;;;;;;;;;;:56;;;;28117:108;28258:4;28235:11;:20;28247:7;28235:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;28273:9;28288:7;28273:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27974:330:::0;:::o;19101:281::-;18378:12;:10;:12::i;:::-;18368:22;;:6;;;;;;;;;;:22;;;18360:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19224:1:::1;19204:22;;:8;:22;;;;19182:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19337:8;19308:38;;19329:6;::::0;::::1;;;;;;;;19308:38;;;;;;;;;;;;19366:8;19357:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;19101:281:::0;:::o;28312:478::-;18378:12;:10;:12::i;:::-;18368:22;;:6;;;;;;;;;;:22;;;18360:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28393:11:::1;:20;28405:7;28393:20;;;;;;;;;;;;;;;;;;;;;;;;;28385:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;28461:9;28456:327;28480:9;:16;;;;28476:1;:20;28456:327;;;28538:7;28522:23;;:9;28532:1;28522:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;28518:254;;;28581:9;28610:1;28591:9;:16;;;;:20;28581:31;;;;;;;;;;;;;;;;;;;;;;;;;28566:9;28576:1;28566:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28650:1;28631:7;:16;28639:7;28631:16;;;;;;;;;;;;;;;:20;;;;28693:5;28670:11;:20;28682:7;28670:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;28717:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28751:5;;28518:254;28498:3;;;;;;;28456:327;;;;28312:478:::0;:::o;8292:132::-;8350:7;8377:39;8381:1;8384;8377:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8370:46;;8292:132;;;;:::o;6421:136::-;6479:7;6506:43;6510:1;6513;6506:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6499:50;;6421:136;;;;:::o;1937:106::-;1990:15;2025:10;2018:17;;1937:106;:::o;32602:411::-;32661:7;32670;32679;32688;32697;32718:23;32743:12;32759:20;32771:7;32759:11;:20::i;:::-;32717:62;;;;32790:19;32813:10;:8;:10::i;:::-;32790:33;;32835:15;32852:23;32877:12;32893:39;32905:7;32914:4;32920:11;32893;:39::i;:::-;32834:98;;;;;;32951:7;32960:15;32977:4;32983:15;33000:4;32943:62;;;;;;;;;;;;;;;;32602:411;;;;;;;:::o;5957:181::-;6015:7;6035:9;6051:1;6047;:5;6035:17;;6076:1;6071;:6;;6063:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6129:1;6122:8;;;5957:181;;;;:::o;28798:337::-;28908:1;28891:19;;:5;:19;;;;28883:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28989:1;28970:21;;:7;:21;;;;28962:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29073:6;29043:11;:18;29055:5;29043:18;;;;;;;;;;;;;;;:27;29062:7;29043:27;;;;;;;;;;;;;;;:36;;;;29111:7;29095:32;;29104:5;29095:32;;;29120:6;29095:32;;;;;;;;;;;;;;;;;;28798:337;;;:::o;1027:171::-;1083:7;1120:1;1111:5;:10;;1103:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1184:5;1169:21;;1027:171;;;:::o;7345:471::-;7403:7;7653:1;7648;:6;7644:47;;;7678:1;7671:8;;;;7644:47;7703:9;7719:1;7715;:5;7703:17;;7748:1;7743;7739;:5;;;;;;:10;7731:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7807:1;7800:8;;;7345:471;;;;;:::o;29143:1189::-;29258:1;29240:20;;:6;:20;;;;29232:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29342:1;29321:23;;:9;:23;;;;29313:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29412:1;29403:6;:10;29395:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29488:7;:5;:7::i;:::-;29478:17;;:6;:17;;;:41;;;;29512:7;:5;:7::i;:::-;29499:20;;:9;:20;;;29478:41;:59;;;;29523:14;;;;;;;;;;;29478:59;29470:116;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29630:9;29611:16;;:28;29605:3;:34;:55;;;;29654:6;29644;:16;;29605:55;29597:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29732:11;:19;29744:6;29732:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;29756:11;:22;29768:9;29756:22;;;;;;;;;;;;;;;;;;;;;;;;;29755:23;29732:46;29728:597;;;29795:48;29817:6;29825:9;29836:6;29795:21;:48::i;:::-;29728:597;;;29866:11;:19;29878:6;29866:19;;;;;;;;;;;;;;;;;;;;;;;;;29865:20;:46;;;;;29889:11;:22;29901:9;29889:22;;;;;;;;;;;;;;;;;;;;;;;;;29865:46;29861:464;;;29928:46;29948:6;29956:9;29967:6;29928:19;:46::i;:::-;29861:464;;;29997:11;:19;30009:6;29997:19;;;;;;;;;;;;;;;;;;;;;;;;;29996:20;:47;;;;;30021:11;:22;30033:9;30021:22;;;;;;;;;;;;;;;;;;;;;;;;;30020:23;29996:47;29992:333;;;30060:44;30078:6;30086:9;30097:6;30060:17;:44::i;:::-;29992:333;;;30126:11;:19;30138:6;30126:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;30149:11;:22;30161:9;30149:22;;;;;;;;;;;;;;;;;;;;;;;;;30126:45;30122:203;;;30188:48;30210:6;30218:9;30229:6;30188:21;:48::i;:::-;30122:203;;;30269:44;30287:6;30295:9;30306:6;30269:17;:44::i;:::-;30122:203;29992:333;29861:464;29728:597;29143:1189;;;:::o;6860:226::-;6980:7;7013:1;7008;:6;;7016:12;7000:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7040:9;7056:1;7052;:5;7040:17;;7077:1;7070:8;;;6860:226;;;;;:::o;33608:163::-;33649:7;33670:15;33687;33706:19;:17;:19::i;:::-;33669:56;;;;33743:20;33755:7;33743;:11;;:20;;;;:::i;:::-;33736:27;;;;33608:163;:::o;8920:312::-;9040:7;9072:1;9068;:5;9075:12;9060:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9099:9;9115:1;9111;:5;;;;;;9099:17;;9223:1;9216:8;;;8920:312;;;;;:::o;33021:237::-;33081:7;33090;33110:12;33125:30;33149:5;33125:19;33137:6;;33125:7;:11;;:19;;;;:::i;:::-;:23;;:30;;;;:::i;:::-;33110:45;;33166:23;33192:17;33204:4;33192:7;:11;;:17;;;;:::i;:::-;33166:43;;33228:15;33245:4;33220:30;;;;;;33021:237;;;:::o;33266:334::-;33361:7;33370;33379;33399:15;33417:24;33429:11;33417:7;:11;;:24;;;;:::i;:::-;33399:42;;33452:12;33467:21;33476:11;33467:4;:8;;:21;;;;:::i;:::-;33452:36;;33499:23;33525:17;33537:4;33525:7;:11;;:17;;;;:::i;:::-;33499:43;;33561:7;33570:15;33587:4;33553:39;;;;;;;;;33266:334;;;;;;;:::o;31337:509::-;31440:15;31457:23;31482:12;31496:23;31521:12;31537:19;31548:7;31537:10;:19::i;:::-;31439:117;;;;;;;;;;31585:28;31605:7;31585;:15;31593:6;31585:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31567:7;:15;31575:6;31567:15;;;;;;;;;;;;;;;:46;;;;31642:28;31662:7;31642;:15;31650:6;31642:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31624:7;:15;31632:6;31624:15;;;;;;;;;;;;;;;:46;;;;31702:39;31725:15;31702:7;:18;31710:9;31702:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31681:7;:18;31689:9;31681:18;;;;;;;;;;;;;;;:60;;;;31755:23;31767:4;31773;31755:11;:23::i;:::-;31811:9;31794:44;;31803:6;31794:44;;;31822:15;31794:44;;;;;;;;;;;;;;;;;;31337:509;;;;;;;;:::o;30800:529::-;30901:15;30918:23;30943:12;30957:23;30982:12;30998:19;31009:7;30998:10;:19::i;:::-;30900:117;;;;;;;;;;31046:28;31066:7;31046;:15;31054:6;31046:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31028:7;:15;31036:6;31028:15;;;;;;;;;;;;;;;:46;;;;31106:39;31129:15;31106:7;:18;31114:9;31106:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31085:7;:18;31093:9;31085:18;;;;;;;;;;;;;;;:60;;;;31177:39;31200:15;31177:7;:18;31185:9;31177:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31156:7;:18;31164:9;31156:18;;;;;;;;;;;;;;;:60;;;;31238:23;31250:4;31256;31238:11;:23::i;:::-;31294:9;31277:44;;31286:6;31277:44;;;31305:15;31277:44;;;;;;;;;;;;;;;;;;30800:529;;;;;;;;:::o;30340:452::-;30439:15;30456:23;30481:12;30495:23;30520:12;30536:19;30547:7;30536:10;:19::i;:::-;30438:117;;;;;;;;;;30584:28;30604:7;30584;:15;30592:6;30584:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30566:7;:15;30574:6;30566:15;;;;;;;;;;;;;;;:46;;;;30644:39;30667:15;30644:7;:18;30652:9;30644:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30623:7;:18;30631:9;30623:18;;;;;;;;;;;;;;;:60;;;;30701:23;30713:4;30719;30701:11;:23::i;:::-;30757:9;30740:44;;30749:6;30740:44;;;30768:15;30740:44;;;;;;;;;;;;;;;;;;30340:452;;;;;;;;:::o;31854:585::-;31957:15;31974:23;31999:12;32013:23;32038:12;32054:19;32065:7;32054:10;:19::i;:::-;31956:117;;;;;;;;;;32102:28;32122:7;32102;:15;32110:6;32102:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32084:7;:15;32092:6;32084:15;;;;;;;;;;;;;;;:46;;;;32159:28;32179:7;32159;:15;32167:6;32159:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32141:7;:15;32149:6;32141:15;;;;;;;;;;;;;;;:46;;;;32219:39;32242:15;32219:7;:18;32227:9;32219:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32198:7;:18;32206:9;32198:18;;;;;;;;;;;;;;;:60;;;;32290:39;32313:15;32290:7;:18;32298:9;32290:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32269:7;:18;32277:9;32269:18;;;;;;;;;;;;;;;:60;;;;32348:23;32360:4;32366;32348:11;:23::i;:::-;32404:9;32387:44;;32396:6;32387:44;;;32415:15;32387:44;;;;;;;;;;;;;;;;;;31854:585;;;;;;;;:::o;33779:561::-;33829:7;33838;33858:15;33876:7;;33858:25;;33894:15;33912:7;;33894:25;;33941:9;33936:289;33960:9;:16;;;;33956:1;:20;33936:289;;;34026:7;34002;:21;34010:9;34020:1;34010:12;;;;;;;;;;;;;;;;;;;;;;;;;34002:21;;;;;;;;;;;;;;;;:31;:66;;;;34061:7;34037;:21;34045:9;34055:1;34045:12;;;;;;;;;;;;;;;;;;;;;;;;;34037:21;;;;;;;;;;;;;;;;:31;34002:66;33998:97;;;34078:7;;34087;;34070:25;;;;;;;;;33998:97;34120:34;34132:7;:21;34140:9;34150:1;34140:12;;;;;;;;;;;;;;;;;;;;;;;;;34132:21;;;;;;;;;;;;;;;;34120:7;:11;;:34;;;;:::i;:::-;34110:44;;34179:34;34191:7;:21;34199:9;34209:1;34199:12;;;;;;;;;;;;;;;;;;;;;;;;;34191:21;;;;;;;;;;;;;;;;34179:7;:11;;:34;;;;:::i;:::-;34169:44;;33978:3;;;;;;;33936:289;;;;34249:20;34261:7;;34249;;:11;;:20;;;;:::i;:::-;34239:7;:30;34235:61;;;34279:7;;34288;;34271:25;;;;;;;;34235:61;34315:7;34324;34307:25;;;;;;33779:561;;;:::o;32447:147::-;32525:17;32537:4;32525:7;;:11;;:17;;;;:::i;:::-;32515:7;:27;;;;32566:20;32581:4;32566:10;;:14;;:20;;;;:::i;:::-;32553:10;:33;;;;32447:147;;:::o

Swarm Source

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