ETH Price: $3,337.10 (-1.39%)
Gas: 24 Gwei

Token

WOLFYCOIN (WOLFY)
 

Overview

Max Total Supply

880,126,459.336250097 WOLFY

Holders

827 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
Uniswap V2: WOLFY
Balance
270,586,869.477033971 WOLFY

Value
$0.00
0x75c83c6dafe52218f7a13c8244e9af5b60bc4511
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

WOLFY is the underlying ERC-20 token of WolfyStreetBets, a blockchain-agnostic prediction market bridging traditional, centrallized finance with DeFi.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
WOLFYCOIN

Compiler Version
v0.6.2+commit.bacdbe57

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-03
*/

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

pragma solidity >=0.6.2;



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

    function _msgData() internal view virtual 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);
}



contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    //Locks the contract for owner for the amount of time provided
    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    //Unlocks the contract for owner when _lockTime is exceeds
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now > _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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


contract WOLFYCOIN is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    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 = 1000000000 * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _tBurnTotal;

    string private _name = 'WOLFYCOIN';
    string private _symbol = 'WOLFY';
    uint8 private _decimals = 9;
    
    uint256 private _taxFee = 2;
    uint256 private _burnFee = 1;
    uint256 private _maxTxAmount = 1000000000e9;

    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        emit Transfer(address(0), _msgSender(), _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 totalBurn() public view returns (uint256) {
        return _tBurnTotal;
    }

    function deliver(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) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
        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 excluded");
        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");
        
        if(sender != owner() && recipient != owner())
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        
        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 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);       
        _reflectFee(rFee, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tBurn) = _getValues(tAmount);
        uint256 rBurn =  tBurn.mul(currentRate);
        _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, rBurn, tFee, tBurn);
        emit Transfer(sender, recipient, tTransferAmount);
    }

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

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

    function _getTValues(uint256 tAmount, uint256 taxFee, uint256 burnFee) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(taxFee).div(100);
        uint256 tBurn = tAmount.mul(burnFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn);
        return (tTransferAmount, tFee, tBurn);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tBurn, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rBurn = tBurn.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rBurn);
        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);
    }
    
    function _getTaxFee() private view returns(uint256) {
        return _taxFee;
    }

    function _getMaxTxAmount() private view returns(uint256) {
        return _maxTxAmount;
    }
    
    function _setTaxFee(uint256 taxFee) external onlyOwner() {
        require(taxFee >= 1 && taxFee <= 10, 'taxFee should be in 1 - 10');
        _taxFee = taxFee;
    }
    
    function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= 100000000000000e9 , 'maxTxAmount should be greater than 100000000000000e9');
        _maxTxAmount = maxTxAmount;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":"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":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"totalBurn","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":[{"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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052670de0b6b3a7640000600855600854600019816200001e57fe5b06600019036009556040518060400160405280600981526020017f574f4c4659434f494e0000000000000000000000000000000000000000000000815250600c9080519060200190620000739291906200028c565b506040518060400160405280600581526020017f574f4c4659000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c19291906200028c565b506009600e60006101000a81548160ff021916908360ff1602179055506002600f556001601055670de0b6b3a76400006011553480156200010157600080fd5b506000620001146200028460201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060095460036000620001c96200028460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002176200028460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040518082815260200191505060405180910390a36200033b565b600033905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620002cf57805160ff191683800117855562000300565b8280016001018555821562000300579182015b82811115620002ff578251825591602001919060010190620002e2565b5b5090506200030f919062000313565b5090565b6200033891905b80821115620003345760008160009055506001016200031a565b5090565b90565b613ee8806200034b6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b6c5232411610097578063dd62ed3e11610071578063dd62ed3e146107c8578063f2cc0c1814610840578063f2fde38b14610884578063f84354f1146108c8576101a9565b8063b6c5232414610720578063cba0e9961461073e578063dd4670641461079a576101a9565b806395d89b41116100d357806395d89b41146105c7578063a457c2d71461064a578063a69df4b5146106b0578063a9059cbb146106ba576101a9565b806370a082311461051b578063715018a6146105735780638da5cb5b1461057d576101a9565b80632d838119116101665780633bd5d173116101405780633bd5d173146104535780633c9f861d146104815780634549b0391461049f5780635880b873146104ed576101a9565b80632d83811914610387578063313ce567146103c957806339509351146103ed576101a9565b806306fdde03146101ae578063095ea7b31461023157806313114a9d1461029757806318160ddd146102b55780631bbae6e0146102d357806323b872dd14610301575b600080fd5b6101b661090c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561024757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109ae565b604051808215151515815260200191505060405180910390f35b61029f6109cc565b6040518082815260200191505060405180910390f35b6102bd6109d6565b6040518082815260200191505060405180910390f35b6102ff600480360360208110156102e957600080fd5b81019080803590602001909291905050506109e0565b005b61036d6004803603606081101561031757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b16565b604051808215151515815260200191505060405180910390f35b6103b36004803603602081101561039d57600080fd5b8101908080359060200190929190505050610bef565b6040518082815260200191505060405180910390f35b6103d1610c73565b604051808260ff1660ff16815260200191505060405180910390f35b6104396004803603604081101561040357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c8a565b604051808215151515815260200191505060405180910390f35b61047f6004803603602081101561046957600080fd5b8101908080359060200190929190505050610d3d565b005b610489610ece565b6040518082815260200191505060405180910390f35b6104d7600480360360408110156104b557600080fd5b8101908080359060200190929190803515159060200190929190505050610ed8565b6040518082815260200191505060405180910390f35b6105196004803603602081101561050357600080fd5b8101908080359060200190929190505050610f8f565b005b61055d6004803603602081101561053157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110e6565b6040518082815260200191505060405180910390f35b61057b6111d1565b005b610585611359565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105cf611382565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060f5780820151818401526020810190506105f4565b50505050905090810190601f16801561063c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106966004803603604081101561066057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611424565b604051808215151515815260200191505060405180910390f35b6106b86114f1565b005b610706600480360360408110156106d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061170f565b604051808215151515815260200191505060405180910390f35b61072861172d565b6040518082815260200191505060405180910390f35b6107806004803603602081101561075457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611737565b604051808215151515815260200191505060405180910390f35b6107c6600480360360208110156107b057600080fd5b810190808035906020019092919050505061178d565b005b61082a600480360360408110156107de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611981565b6040518082815260200191505060405180910390f35b6108826004803603602081101561085657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a08565b005b6108c66004803603602081101561089a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dbc565b005b61090a600480360360208110156108de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fc9565b005b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109a45780601f10610979576101008083540402835291602001916109a4565b820191906000526020600020905b81548152906001019060200180831161098757829003601f168201915b5050505050905090565b60006109c26109bb612357565b848461235f565b6001905092915050565b6000600a54905090565b6000600854905090565b6109e8612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aa9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b69152d02c7e14af6800000811015610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613d066034913960400191505060405180910390fd5b8060118190555050565b6000610b23848484612556565b610be484610b2f612357565b610bdf85604051806060016040528060288152602001613d8360289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b95612357565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a869092919063ffffffff16565b61235f565b600190509392505050565b6000600954821115610c4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613c94602a913960400191505060405180910390fd5b6000610c56612b46565b9050610c6b8184612b7190919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b6000610d33610c97612357565b84610d2e8560056000610ca8612357565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b61235f565b6001905092915050565b6000610d47612357565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613e3f602c913960400191505060405180910390fd5b6000610df783612c43565b50505050509050610e5081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ea881600954612cab90919063ffffffff16565b600981905550610ec383600a54612bbb90919063ffffffff16565b600a81905550505050565b6000600b54905090565b6000600854831115610f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610f72576000610f6284612c43565b5050505050905080915050610f89565b6000610f7d84612c43565b50505050915050809150505b92915050565b610f97612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561106a5750600a8111155b6110dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b80600f8190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561118157600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506111cc565b6111c9600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bef565b90505b919050565b6111d9612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561141a5780601f106113ef5761010080835404028352916020019161141a565b820191906000526020600020905b8154815290600101906020018083116113fd57829003601f168201915b5050505050905090565b60006114e7611431612357565b846114e285604051806060016040528060258152602001613e8e602591396005600061145b612357565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a869092919063ffffffff16565b61235f565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611597576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613e6b6023913960400191505060405180910390fd5b600254421161160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061172361171c612357565b8484612556565b6001905092915050565b6000600254905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611795612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611856576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a10612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613e1d6022913960400191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cfe57611cba600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bef565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611dc4612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613cbe6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fd1612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60008090505b600780549050811015612353578173ffffffffffffffffffffffffffffffffffffffff166007828154811061218857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612346576007600160078054905003815481106121e457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166007828154811061221c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061230c57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612353565b8080600101915050612157565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613df96024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ce46022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613dd46025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613c716023913960400191505060405180910390fd5b600081116126bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613dab6029913960400191505060405180910390fd5b6126c3611359565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127315750612701611359565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561279257601154811115612791576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613d3a6028913960400191505060405180910390fd5b5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128355750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561284a57612845838383612cf5565b612a81565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128ed5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612902576128fd838383612f73565b612a80565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129a65750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129bb576129b68383836131f1565b612a7f565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a5d5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7257612a6d8383836133da565b612a7e565b612a7d8383836131f1565b5b5b5b5b505050565b6000838311158290612b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612af8578082015181840152602081019050612add565b50505050905090810190601f168015612b255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000612b536136ed565b91509150612b6a8183612b7190919063ffffffff16565b9250505090565b6000612bb383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613981565b905092915050565b600080828401905083811015612c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612c608a600f54601054613a47565b9250925092506000612c70612b46565b90506000806000612c838e878787613add565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000612ced83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a86565b905092915050565b6000612cff612b46565b9050600080600080600080612d1388612c43565b9550955095509550955095506000612d348883613b6690919063ffffffff16565b9050612d8889600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e1d87600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eb286600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f0185828585613bec565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000612f7d612b46565b9050600080600080600080612f9188612c43565b9550955095509550955095506000612fb28883613b6690919063ffffffff16565b905061300687600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061309b84600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061313086600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061317f85828585613bec565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006131fb612b46565b905060008060008060008061320f88612c43565b95509550955095509550955060006132308883613b6690919063ffffffff16565b905061328487600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331986600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061336885828585613bec565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006133e4612b46565b90506000806000806000806133f888612c43565b95509550955095509550955060006134198883613b6690919063ffffffff16565b905061346d89600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061350287600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061359784600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061362c86600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061367b85828585613bec565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600080600060095490506000600854905060008090505b6007805490508110156139445782600360006007848154811061372357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061380a57508160046000600784815481106137a257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613821576009546008549450945050505061397d565b6138aa600360006007848154811061383557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612cab90919063ffffffff16565b925061393560046000600784815481106138c057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612cab90919063ffffffff16565b91508080600101915050613704565b5061395c600854600954612b7190919063ffffffff16565b8210156139745760095460085493509350505061397d565b81819350935050505b9091565b60008083118290613a2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139f25780820151818401526020810190506139d7565b50505050905090810190601f168015613a1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a3957fe5b049050809150509392505050565b600080600080613a736064613a65888a613b6690919063ffffffff16565b612b7190919063ffffffff16565b90506000613a9d6064613a8f888b613b6690919063ffffffff16565b612b7190919063ffffffff16565b90506000613ac682613ab8858c612cab90919063ffffffff16565b612cab90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080613af68589613b6690919063ffffffff16565b90506000613b0d8689613b6690919063ffffffff16565b90506000613b248789613b6690919063ffffffff16565b90506000613b4d82613b3f8587612cab90919063ffffffff16565b612cab90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080831415613b795760009050613be6565b6000828402905082848281613b8a57fe5b0414613be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613d626021913960400191505060405180910390fd5b809150505b92915050565b613c1383613c0586600954612cab90919063ffffffff16565b612cab90919063ffffffff16565b600981905550613c2e82600a54612bbb90919063ffffffff16565b600a81905550613c4981600b54612bbb90919063ffffffff16565b600b81905550613c6481600854612cab90919063ffffffff16565b6008819055505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736d61785478416d6f756e742073686f756c642062652067726561746572207468616e2031303030303030303030303030303065395472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220755c4d41865773241c7170ea6dade517a89904a0e02671fbc22f8f03da13480c64736f6c63430006020033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a95760003560e01c806370a08231116100f9578063b6c5232411610097578063dd62ed3e11610071578063dd62ed3e146107c8578063f2cc0c1814610840578063f2fde38b14610884578063f84354f1146108c8576101a9565b8063b6c5232414610720578063cba0e9961461073e578063dd4670641461079a576101a9565b806395d89b41116100d357806395d89b41146105c7578063a457c2d71461064a578063a69df4b5146106b0578063a9059cbb146106ba576101a9565b806370a082311461051b578063715018a6146105735780638da5cb5b1461057d576101a9565b80632d838119116101665780633bd5d173116101405780633bd5d173146104535780633c9f861d146104815780634549b0391461049f5780635880b873146104ed576101a9565b80632d83811914610387578063313ce567146103c957806339509351146103ed576101a9565b806306fdde03146101ae578063095ea7b31461023157806313114a9d1461029757806318160ddd146102b55780631bbae6e0146102d357806323b872dd14610301575b600080fd5b6101b661090c565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b61027d6004803603604081101561024757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506109ae565b604051808215151515815260200191505060405180910390f35b61029f6109cc565b6040518082815260200191505060405180910390f35b6102bd6109d6565b6040518082815260200191505060405180910390f35b6102ff600480360360208110156102e957600080fd5b81019080803590602001909291905050506109e0565b005b61036d6004803603606081101561031757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610b16565b604051808215151515815260200191505060405180910390f35b6103b36004803603602081101561039d57600080fd5b8101908080359060200190929190505050610bef565b6040518082815260200191505060405180910390f35b6103d1610c73565b604051808260ff1660ff16815260200191505060405180910390f35b6104396004803603604081101561040357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610c8a565b604051808215151515815260200191505060405180910390f35b61047f6004803603602081101561046957600080fd5b8101908080359060200190929190505050610d3d565b005b610489610ece565b6040518082815260200191505060405180910390f35b6104d7600480360360408110156104b557600080fd5b8101908080359060200190929190803515159060200190929190505050610ed8565b6040518082815260200191505060405180910390f35b6105196004803603602081101561050357600080fd5b8101908080359060200190929190505050610f8f565b005b61055d6004803603602081101561053157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110e6565b6040518082815260200191505060405180910390f35b61057b6111d1565b005b610585611359565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105cf611382565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561060f5780820151818401526020810190506105f4565b50505050905090810190601f16801561063c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106966004803603604081101561066057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611424565b604051808215151515815260200191505060405180910390f35b6106b86114f1565b005b610706600480360360408110156106d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061170f565b604051808215151515815260200191505060405180910390f35b61072861172d565b6040518082815260200191505060405180910390f35b6107806004803603602081101561075457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611737565b604051808215151515815260200191505060405180910390f35b6107c6600480360360208110156107b057600080fd5b810190808035906020019092919050505061178d565b005b61082a600480360360408110156107de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611981565b6040518082815260200191505060405180910390f35b6108826004803603602081101561085657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a08565b005b6108c66004803603602081101561089a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611dbc565b005b61090a600480360360208110156108de57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611fc9565b005b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156109a45780601f10610979576101008083540402835291602001916109a4565b820191906000526020600020905b81548152906001019060200180831161098757829003601f168201915b5050505050905090565b60006109c26109bb612357565b848461235f565b6001905092915050565b6000600a54905090565b6000600854905090565b6109e8612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aa9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b69152d02c7e14af6800000811015610b0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613d066034913960400191505060405180910390fd5b8060118190555050565b6000610b23848484612556565b610be484610b2f612357565b610bdf85604051806060016040528060288152602001613d8360289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b95612357565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a869092919063ffffffff16565b61235f565b600190509392505050565b6000600954821115610c4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613c94602a913960400191505060405180910390fd5b6000610c56612b46565b9050610c6b8184612b7190919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b6000610d33610c97612357565b84610d2e8560056000610ca8612357565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b61235f565b6001905092915050565b6000610d47612357565b9050600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610dec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180613e3f602c913960400191505060405180910390fd5b6000610df783612c43565b50505050509050610e5081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ea881600954612cab90919063ffffffff16565b600981905550610ec383600a54612bbb90919063ffffffff16565b600a81905550505050565b6000600b54905090565b6000600854831115610f52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81610f72576000610f6284612c43565b5050505050905080915050610f89565b6000610f7d84612c43565b50505050915050809150505b92915050565b610f97612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611058576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001811015801561106a5750600a8111155b6110dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f7461784665652073686f756c6420626520696e2031202d20313000000000000081525060200191505060405180910390fd5b80600f8190555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561118157600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506111cc565b6111c9600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bef565b90505b919050565b6111d9612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461129a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561141a5780601f106113ef5761010080835404028352916020019161141a565b820191906000526020600020905b8154815290600101906020018083116113fd57829003601f168201915b5050505050905090565b60006114e7611431612357565b846114e285604051806060016040528060258152602001613e8e602591396005600061145b612357565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a869092919063ffffffff16565b61235f565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611597576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613e6b6023913960400191505060405180910390fd5b600254421161160e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061172361171c612357565b8484612556565b6001905092915050565b6000600254905090565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611795612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611856576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611a10612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ad1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613e1d6022913960400191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611cfe57611cba600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610bef565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611dc4612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613cbe6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611fd1612357565b73ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612092576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60008090505b600780549050811015612353578173ffffffffffffffffffffffffffffffffffffffff166007828154811061218857fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612346576007600160078054905003815481106121e457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166007828154811061221c57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061230c57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055612353565b8080600101915050612157565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156123e5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613df96024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561246b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613ce46022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613dd46025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612662576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613c716023913960400191505060405180910390fd5b600081116126bb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180613dab6029913960400191505060405180910390fd5b6126c3611359565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156127315750612701611359565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561279257601154811115612791576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613d3a6028913960400191505060405180910390fd5b5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128355750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561284a57612845838383612cf5565b612a81565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128ed5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612902576128fd838383612f73565b612a80565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129a65750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129bb576129b68383836131f1565b612a7f565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a5d5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612a7257612a6d8383836133da565b612a7e565b612a7d8383836131f1565b5b5b5b5b505050565b6000838311158290612b33576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612af8578082015181840152602081019050612add565b50505050905090810190601f168015612b255780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000806000612b536136ed565b91509150612b6a8183612b7190919063ffffffff16565b9250505090565b6000612bb383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613981565b905092915050565b600080828401905083811015612c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612c608a600f54601054613a47565b9250925092506000612c70612b46565b90506000806000612c838e878787613add565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b6000612ced83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a86565b905092915050565b6000612cff612b46565b9050600080600080600080612d1388612c43565b9550955095509550955095506000612d348883613b6690919063ffffffff16565b9050612d8889600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612e1d87600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612eb286600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f0185828585613bec565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b6000612f7d612b46565b9050600080600080600080612f9188612c43565b9550955095509550955095506000612fb28883613b6690919063ffffffff16565b905061300687600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061309b84600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061313086600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061317f85828585613bec565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006131fb612b46565b905060008060008060008061320f88612c43565b95509550955095509550955060006132308883613b6690919063ffffffff16565b905061328487600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061331986600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061336885828585613bec565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b60006133e4612b46565b90506000806000806000806133f888612c43565b95509550955095509550955060006134198883613b6690919063ffffffff16565b905061346d89600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061350287600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612cab90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061359784600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061362c86600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bbb90919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061367b85828585613bec565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a35050505050505050505050565b600080600060095490506000600854905060008090505b6007805490508110156139445782600360006007848154811061372357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061380a57508160046000600784815481106137a257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613821576009546008549450945050505061397d565b6138aa600360006007848154811061383557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612cab90919063ffffffff16565b925061393560046000600784815481106138c057fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612cab90919063ffffffff16565b91508080600101915050613704565b5061395c600854600954612b7190919063ffffffff16565b8210156139745760095460085493509350505061397d565b81819350935050505b9091565b60008083118290613a2d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156139f25780820151818401526020810190506139d7565b50505050905090810190601f168015613a1f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613a3957fe5b049050809150509392505050565b600080600080613a736064613a65888a613b6690919063ffffffff16565b612b7190919063ffffffff16565b90506000613a9d6064613a8f888b613b6690919063ffffffff16565b612b7190919063ffffffff16565b90506000613ac682613ab8858c612cab90919063ffffffff16565b612cab90919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080613af68589613b6690919063ffffffff16565b90506000613b0d8689613b6690919063ffffffff16565b90506000613b248789613b6690919063ffffffff16565b90506000613b4d82613b3f8587612cab90919063ffffffff16565b612cab90919063ffffffff16565b9050838184965096509650505050509450945094915050565b600080831415613b795760009050613be6565b6000828402905082848281613b8a57fe5b0414613be1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613d626021913960400191505060405180910390fd5b809150505b92915050565b613c1383613c0586600954612cab90919063ffffffff16565b612cab90919063ffffffff16565b600981905550613c2e82600a54612bbb90919063ffffffff16565b600a81905550613c4981600b54612bbb90919063ffffffff16565b600b81905550613c6481600854612cab90919063ffffffff16565b6008819055505050505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573736d61785478416d6f756e742073686f756c642062652067726561746572207468616e2031303030303030303030303030303065395472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220755c4d41865773241c7170ea6dade517a89904a0e02671fbc22f8f03da13480c64736f6c63430006020033

Deployed Bytecode Sourcemap

17199:12173:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17199:12173:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18196:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18196:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19108:161;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19108:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20219:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18473:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29148:221;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29148:221:0;;;;;;;;;;;;;;;;;:::i;:::-;;19277:313;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19277:313:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;21243:253;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21243:253:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18382:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19598:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19598:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20414:377;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20414:377:0;;;;;;;;;;;;;;;;;:::i;:::-;;20318:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20799:436;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20799:436:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28967:169;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28967:169:0;;;;;;;;;;;;;;;;;:::i;:::-;;18576:198;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18576:198:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4424:148;;;:::i;:::-;;3781:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;18287:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;18287:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19824:269;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19824:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5434:293;;;:::i;:::-;;18782:167;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18782:167:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4979:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20101:110;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20101:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5144:214;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5144:214:0;;;;;;;;;;;;;;;;;:::i;:::-;;18957:143;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18957:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21504:443;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21504:443:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;4727:244;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4727:244:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;21955:478;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21955:478:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;18196:83;18233:13;18266:5;18259:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18196:83;:::o;19108:161::-;19183:4;19200:39;19209:12;:10;:12::i;:::-;19223:7;19232:6;19200:8;:39::i;:::-;19257:4;19250:11;;19108:161;;;;:::o;20219:87::-;20261:7;20288:10;;20281:17;;20219:87;:::o;18473:95::-;18526:7;18553;;18546:14;;18473:95;:::o;29148:221::-;4003:12;:10;:12::i;:::-;3993:22;;:6;;;;;;;;;;;:22;;;3985:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29249:17:::1;29234:11;:32;;29226:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29350:11;29335:12;:26;;;;29148:221:::0;:::o;19277:313::-;19375:4;19392:36;19402:6;19410:9;19421:6;19392:9;:36::i;:::-;19439:121;19448:6;19456:12;:10;:12::i;:::-;19470:89;19508:6;19470:89;;;;;;;;;;;;;;;;;:11;:19;19482:6;19470:19;;;;;;;;;;;;;;;:33;19490:12;:10;:12::i;:::-;19470:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;19439:8;:121::i;:::-;19578:4;19571:11;;19277:313;;;;;:::o;21243:253::-;21309:7;21348;;21337;:18;;21329:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21413:19;21436:10;:8;:10::i;:::-;21413:33;;21464:24;21476:11;21464:7;:11;;:24;;;;:::i;:::-;21457:31;;;21243:253;;;:::o;18382:83::-;18423:5;18448:9;;;;;;;;;;;18441:16;;18382:83;:::o;19598:218::-;19686:4;19703:83;19712:12;:10;:12::i;:::-;19726:7;19735:50;19774:10;19735:11;:25;19747:12;:10;:12::i;:::-;19735:25;;;;;;;;;;;;;;;:34;19761:7;19735:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19703:8;:83::i;:::-;19804:4;19797:11;;19598:218;;;;:::o;20414:377::-;20466:14;20483:12;:10;:12::i;:::-;20466:29;;20515:11;:19;20527:6;20515:19;;;;;;;;;;;;;;;;;;;;;;;;;20514:20;20506:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20595:15;20619:19;20630:7;20619:10;:19::i;:::-;20594:44;;;;;;;20667:28;20687:7;20667;:15;20675:6;20667:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20649:7;:15;20657:6;20649:15;;;;;;;;;;;;;;;:46;;;;20716:20;20728:7;20716;;:11;;:20;;;;:::i;:::-;20706:7;:30;;;;20760:23;20775:7;20760:10;;:14;;:23;;;;:::i;:::-;20747:10;:36;;;;20414:377;;;:::o;20318:88::-;20360:7;20387:11;;20380:18;;20318:88;:::o;20799:436::-;20889:7;20928;;20917;:18;;20909:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20987:17;20982:246;;21022:15;21046:19;21057:7;21046:10;:19::i;:::-;21021:44;;;;;;;21087:7;21080:14;;;;;20982:246;21129:23;21160:19;21171:7;21160:10;:19::i;:::-;21127:52;;;;;;;21201:15;21194:22;;;20799:436;;;;;:::o;28967:169::-;4003:12;:10;:12::i;:::-;3993:22;;:6;;;;;;;;;;;:22;;;3985:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29053:1:::1;29043:6;:11;;:27;;;;;29068:2;29058:6;:12;;29043:27;29035:66;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;29122:6;29112:7;:16;;;;28967:169:::0;:::o;18576:198::-;18642:7;18666:11;:20;18678:7;18666:20;;;;;;;;;;;;;;;;;;;;;;;;;18662:49;;;18695:7;:16;18703:7;18695:16;;;;;;;;;;;;;;;;18688:23;;;;18662:49;18729:37;18749:7;:16;18757:7;18749:16;;;;;;;;;;;;;;;;18729:19;:37::i;:::-;18722:44;;18576:198;;;;:::o;4424:148::-;4003:12;:10;:12::i;:::-;3993:22;;:6;;;;;;;;;;;:22;;;3985:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4531:1:::1;4494:40;;4515:6;::::0;::::1;;;;;;;;;4494:40;;;;;;;;;;;;4562:1;4545:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;4424:148::o:0;3781:79::-;3819:7;3846:6;;;;;;;;;;;3839:13;;3781:79;:::o;18287:87::-;18326:13;18359:7;18352:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18287:87;:::o;19824:269::-;19917:4;19934:129;19943:12;:10;:12::i;:::-;19957:7;19966:96;20005:15;19966:96;;;;;;;;;;;;;;;;;:11;:25;19978:12;:10;:12::i;:::-;19966:25;;;;;;;;;;;;;;;:34;19992:7;19966:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19934:8;:129::i;:::-;20081:4;20074:11;;19824:269;;;;:::o;5434:293::-;5504:10;5486:28;;:14;;;;;;;;;;;:28;;;5478:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5579:9;;5573:3;:15;5565:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5670:14;;;;;;;;;;;5641:44;;5662:6;;;;;;;;;;;5641:44;;;;;;;;;;;;5705:14;;;;;;;;;;;5696:6;;:23;;;;;;;;;;;;;;;;;;5434:293::o;18782:167::-;18860:4;18877:42;18887:12;:10;:12::i;:::-;18901:9;18912:6;18877:9;:42::i;:::-;18937:4;18930:11;;18782:167;;;;:::o;4979:89::-;5024:7;5051:9;;5044:16;;4979:89;:::o;20101:110::-;20159:4;20183:11;:20;20195:7;20183:20;;;;;;;;;;;;;;;;;;;;;;;;;20176:27;;20101:110;;;:::o;5144:214::-;4003:12;:10;:12::i;:::-;3993:22;;:6;;;;;;;;;;;:22;;;3985:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5225:6:::1;::::0;::::1;;;;;;;;;5208:14;;:23;;;;;;;;;;;;;;;;;;5259:1;5242:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5290:4;5284:3;:10;5272:9;:22;;;;5347:1;5310:40;;5331:6;::::0;::::1;;;;;;;;;5310:40;;;;;;;;;;;;5144:214:::0;:::o;18957:143::-;19038:7;19065:11;:18;19077:5;19065:18;;;;;;;;;;;;;;;:27;19084:7;19065:27;;;;;;;;;;;;;;;;19058:34;;18957:143;;;;:::o;21504:443::-;4003:12;:10;:12::i;:::-;3993:22;;:6;;;;;;;;;;;:22;;;3985:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21596:42:::1;21585:53;;:7;:53;;;;21577:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21697:11;:20;21709:7;21697:20;;;;;;;;;;;;;;;;;;;;;;;;;21696:21;21688:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;21782:1;21763:7;:16;21771:7;21763:16;;;;;;;;;;;;;;;;:20;21760:108;;;21819:37;21839:7;:16;21847:7;21839:16;;;;;;;;;;;;;;;;21819:19;:37::i;:::-;21800:7;:16;21808:7;21800:16;;;;;;;;;;;;;;;:56;;;;21760:108;21901:4;21878:11;:20;21890:7;21878:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21916:9;21931:7;21916:23;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;21916:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21504:443:::0;:::o;4727:244::-;4003:12;:10;:12::i;:::-;3993:22;;:6;;;;;;;;;;;:22;;;3985:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4836:1:::1;4816:22;;:8;:22;;;;4808:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4926:8;4897:38;;4918:6;::::0;::::1;;;;;;;;;4897:38;;;;;;;;;;;;4955:8;4946:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;4727:244:::0;:::o;21955:478::-;4003:12;:10;:12::i;:::-;3993:22;;:6;;;;;;;;;;;:22;;;3985:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22036:11:::1;:20;22048:7;22036:20;;;;;;;;;;;;;;;;;;;;;;;;;22028:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;22104:9;22116:1:::0;22104:13:::1;;22099:327;22123:9;:16;;;;22119:1;:20;22099:327;;;22181:7;22165:23;;:9;22175:1;22165:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;22161:254;;;22224:9;22253:1;22234:9;:16;;;;:20;22224:31;;;;;;;;;;;;;;;;;;;;;;;;;22209:9;22219:1;22209:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;22293:1;22274:7;:16;22282:7;22274:16;;;;;;;;;;;;;;;:20;;;;22336:5;22313:11;:20;22325:7;22313:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;22360:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22394:5;;22161:254;22141:3;;;;;;;22099:327;;;;21955:478:::0;:::o;136:106::-;189:15;224:10;217:17;;136:106;:::o;22441:337::-;22551:1;22534:19;;:5;:19;;;;22526:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22632:1;22613:21;;:7;:21;;;;22605:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22716:6;22686:11;:18;22698:5;22686:18;;;;;;;;;;;;;;;:27;22705:7;22686:27;;;;;;;;;;;;;;;:36;;;;22754:7;22738:32;;22747:5;22738:32;;;22763:6;22738:32;;;;;;;;;;;;;;;;;;22441:337;;;:::o;22786:1096::-;22901:1;22883:20;;:6;:20;;;;22875:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22985:1;22964:23;;:9;:23;;;;22956:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23055:1;23046:6;:10;23038:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23136:7;:5;:7::i;:::-;23126:17;;:6;:17;;;;:41;;;;;23160:7;:5;:7::i;:::-;23147:20;;:9;:20;;;;23126:41;23123:134;;;23200:12;;23190:6;:22;;23182:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23123:134;23282:11;:19;23294:6;23282:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;23306:11;:22;23318:9;23306:22;;;;;;;;;;;;;;;;;;;;;;;;;23305:23;23282:46;23278:597;;;23345:48;23367:6;23375:9;23386:6;23345:21;:48::i;:::-;23278:597;;;23416:11;:19;23428:6;23416:19;;;;;;;;;;;;;;;;;;;;;;;;;23415:20;:46;;;;;23439:11;:22;23451:9;23439:22;;;;;;;;;;;;;;;;;;;;;;;;;23415:46;23411:464;;;23478:46;23498:6;23506:9;23517:6;23478:19;:46::i;:::-;23411:464;;;23547:11;:19;23559:6;23547:19;;;;;;;;;;;;;;;;;;;;;;;;;23546:20;:47;;;;;23571:11;:22;23583:9;23571:22;;;;;;;;;;;;;;;;;;;;;;;;;23570:23;23546:47;23542:333;;;23610:44;23628:6;23636:9;23647:6;23610:17;:44::i;:::-;23542:333;;;23676:11;:19;23688:6;23676:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;23699:11;:22;23711:9;23699:22;;;;;;;;;;;;;;;;;;;;;;;;;23676:45;23672:203;;;23738:48;23760:6;23768:9;23779:6;23738:21;:48::i;:::-;23672:203;;;23819:44;23837:6;23845:9;23856:6;23819:17;:44::i;:::-;23672:203;23542:333;23411:464;23278:597;22786:1096;;;:::o;7479:192::-;7565:7;7598:1;7593;:6;;7601:12;7585:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7585:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7625:9;7641:1;7637;:5;7625:17;;7662:1;7655:8;;;7479:192;;;;;:::o;28023:163::-;28064:7;28085:15;28102;28121:19;:17;:19::i;:::-;28084:56;;;;28158:20;28170:7;28158;:11;;:20;;;;:::i;:::-;28151:27;;;;28023:163;:::o;8877:132::-;8935:7;8962:39;8966:1;8969;8962:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8955:46;;8877:132;;;;:::o;6576:181::-;6634:7;6654:9;6670:1;6666;:5;6654:17;;6695:1;6690;:6;;6682:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6748:1;6741:8;;;6576:181;;;;:::o;26771:468::-;26830:7;26839;26848;26857;26866;26875;26896:23;26921:12;26935:13;26952:39;26964:7;26973;;26982:8;;26952:11;:39::i;:::-;26895:96;;;;;;27002:19;27025:10;:8;:10::i;:::-;27002:33;;27047:15;27064:23;27089:12;27105:46;27117:7;27126:4;27132:5;27139:11;27105;:46::i;:::-;27046:105;;;;;;27170:7;27179:15;27196:4;27202:15;27219:4;27225:5;27162:69;;;;;;;;;;;;;;;;;;;26771:468;;;;;;;:::o;7040:136::-;7098:7;7125:43;7129:1;7132;7125:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7118:50;;7040:136;;;;:::o;25133:632::-;25235:19;25258:10;:8;:10::i;:::-;25235:33;;25280:15;25297:23;25322:12;25336:23;25361:12;25375:13;25392:19;25403:7;25392:10;:19::i;:::-;25279:132;;;;;;;;;;;;25422:13;25439:22;25449:11;25439:5;:9;;:22;;;;:::i;:::-;25422:39;;25490:28;25510:7;25490;:15;25498:6;25490:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25472:7;:15;25480:6;25472:15;;;;;;;;;;;;;;;:46;;;;25547:28;25567:7;25547;:15;25555:6;25547:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25529:7;:15;25537:6;25529:15;;;;;;;;;;;;;;;:46;;;;25607:39;25630:15;25607:7;:18;25615:9;25607:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;25586:7;:18;25594:9;25586:18;;;;;;;;;;;;;;;:60;;;;25660:37;25672:4;25678:5;25685:4;25691:5;25660:11;:37::i;:::-;25730:9;25713:44;;25722:6;25713:44;;;25741:15;25713:44;;;;;;;;;;;;;;;;;;25133:632;;;;;;;;;;;:::o;24473:652::-;24573:19;24596:10;:8;:10::i;:::-;24573:33;;24618:15;24635:23;24660:12;24674:23;24699:12;24713:13;24730:19;24741:7;24730:10;:19::i;:::-;24617:132;;;;;;;;;;;;24760:13;24777:22;24787:11;24777:5;:9;;:22;;;;:::i;:::-;24760:39;;24828:28;24848:7;24828;:15;24836:6;24828:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24810:7;:15;24818:6;24810:15;;;;;;;;;;;;;;;:46;;;;24888:39;24911:15;24888:7;:18;24896:9;24888:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24867:7;:18;24875:9;24867:18;;;;;;;;;;;;;;;:60;;;;24959:39;24982:15;24959:7;:18;24967:9;24959:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24938:7;:18;24946:9;24938:18;;;;;;;;;;;;;;;:60;;;;25020:37;25032:4;25038:5;25045:4;25051:5;25020:11;:37::i;:::-;25090:9;25073:44;;25082:6;25073:44;;;25101:15;25073:44;;;;;;;;;;;;;;;;;;24473:652;;;;;;;;;;;:::o;23890:575::-;23988:19;24011:10;:8;:10::i;:::-;23988:33;;24033:15;24050:23;24075:12;24089:23;24114:12;24128:13;24145:19;24156:7;24145:10;:19::i;:::-;24032:132;;;;;;;;;;;;24175:13;24192:22;24202:11;24192:5;:9;;:22;;;;:::i;:::-;24175:39;;24243:28;24263:7;24243;:15;24251:6;24243:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;24225:7;:15;24233:6;24225:15;;;;;;;;;;;;;;;:46;;;;24303:39;24326:15;24303:7;:18;24311:9;24303:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;24282:7;:18;24290:9;24282:18;;;;;;;;;;;;;;;:60;;;;24360:37;24372:4;24378:5;24385:4;24391:5;24360:11;:37::i;:::-;24430:9;24413:44;;24422:6;24413:44;;;24441:15;24413:44;;;;;;;;;;;;;;;;;;23890:575;;;;;;;;;;;:::o;25773:708::-;25875:19;25898:10;:8;:10::i;:::-;25875:33;;25920:15;25937:23;25962:12;25976:23;26001:12;26015:13;26032:19;26043:7;26032:10;:19::i;:::-;25919:132;;;;;;;;;;;;26062:13;26079:22;26089:11;26079:5;:9;;:22;;;;:::i;:::-;26062:39;;26130:28;26150:7;26130;:15;26138:6;26130:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26112:7;:15;26120:6;26112:15;;;;;;;;;;;;;;;:46;;;;26187:28;26207:7;26187;:15;26195:6;26187:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;26169:7;:15;26177:6;26169:15;;;;;;;;;;;;;;;:46;;;;26247:39;26270:15;26247:7;:18;26255:9;26247:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26226:7;:18;26234:9;26226:18;;;;;;;;;;;;;;;:60;;;;26318:39;26341:15;26318:7;:18;26326:9;26318:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;26297:7;:18;26305:9;26297:18;;;;;;;;;;;;;;;:60;;;;26376:37;26388:4;26394:5;26401:4;26407:5;26376:11;:37::i;:::-;26446:9;26429:44;;26438:6;26429:44;;;26457:15;26429:44;;;;;;;;;;;;;;;;;;25773:708;;;;;;;;;;;:::o;28194:561::-;28244:7;28253;28273:15;28291:7;;28273:25;;28309:15;28327:7;;28309:25;;28356:9;28368:1;28356:13;;28351:289;28375:9;:16;;;;28371:1;:20;28351:289;;;28441:7;28417;:21;28425:9;28435:1;28425:12;;;;;;;;;;;;;;;;;;;;;;;;;28417:21;;;;;;;;;;;;;;;;:31;:66;;;;28476:7;28452;:21;28460:9;28470:1;28460:12;;;;;;;;;;;;;;;;;;;;;;;;;28452:21;;;;;;;;;;;;;;;;:31;28417:66;28413:97;;;28493:7;;28502;;28485:25;;;;;;;;;28413:97;28535:34;28547:7;:21;28555:9;28565:1;28555:12;;;;;;;;;;;;;;;;;;;;;;;;;28547:21;;;;;;;;;;;;;;;;28535:7;:11;;:34;;;;:::i;:::-;28525:44;;28594:34;28606:7;:21;28614:9;28624:1;28614:12;;;;;;;;;;;;;;;;;;;;;;;;;28606:21;;;;;;;;;;;;;;;;28594:7;:11;;:34;;;;:::i;:::-;28584:44;;28393:3;;;;;;;28351:289;;;;28664:20;28676:7;;28664;;:11;;:20;;;;:::i;:::-;28654:7;:30;28650:61;;;28694:7;;28703;;28686:25;;;;;;;;28650:61;28730:7;28739;28722:25;;;;;;28194:561;;;:::o;9505:278::-;9591:7;9623:1;9619;:5;9626:12;9611:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9611:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9650:9;9666:1;9662;:5;;;;;;9650:17;;9774:1;9767:8;;;9505:278;;;;;:::o;27247:351::-;27340:7;27349;27358;27378:12;27393:28;27417:3;27393:19;27405:6;27393:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;27378:43;;27432:13;27448:29;27473:3;27448:20;27460:7;27448;:11;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;27432:45;;27488:23;27514:28;27536:5;27514:17;27526:4;27514:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;27488:54;;27561:15;27578:4;27584:5;27553:37;;;;;;;;;27247:351;;;;;;;:::o;27606:409::-;27716:7;27725;27734;27754:15;27772:24;27784:11;27772:7;:11;;:24;;;;:::i;:::-;27754:42;;27807:12;27822:21;27831:11;27822:4;:8;;:21;;;;:::i;:::-;27807:36;;27854:13;27870:22;27880:11;27870:5;:9;;:22;;;;:::i;:::-;27854:38;;27903:23;27929:28;27951:5;27929:17;27941:4;27929:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;27903:54;;27976:7;27985:15;28002:4;27968:39;;;;;;;;;;27606:409;;;;;;;;:::o;7930:471::-;7988:7;8238:1;8233;:6;8229:47;;;8263:1;8256:8;;;;8229:47;8288:9;8304:1;8300;:5;8288:17;;8333:1;8328;8324;:5;;;;;;:10;8316:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8392:1;8385:8;;;7930:471;;;;;:::o;26489:274::-;26597:28;26619:5;26597:17;26609:4;26597:7;;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;26587:7;:38;;;;26649:20;26664:4;26649:10;;:14;;:20;;;;:::i;:::-;26636:10;:33;;;;26694:22;26710:5;26694:11;;:15;;:22;;;;:::i;:::-;26680:11;:36;;;;26737:18;26749:5;26737:7;;:11;;:18;;;;:::i;:::-;26727:7;:28;;;;26489:274;;;;:::o

Swarm Source

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