ETH Price: $2,417.84 (+3.42%)

Token

ERC20 ***
 

Overview

Max Total Supply

2,849.926791 ERC20 ***

Holders

0

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 6 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
fUSDC

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.4;

library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}
    
    abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor () {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {

        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}


// File: openzeppelin-solidity\contracts\token\ERC20\IERC20.sol

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

interface ERC20 {
    function totalSupply() external returns (uint);
    function balanceOf(address who) external returns (uint);
    function transferFrom(address from, address to, uint value) external;
    function transfer(address to, uint value) external;
    event Transfer(address indexed from, address indexed to, uint value);
}


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

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;
    }
    
    function ceil(uint a, uint m) internal pure returns (uint r) {
        return (a + m - 1) / m * m;
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /*
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /*
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract fUSDC is IERC20, ReentrancyGuard {
    using Address for address;
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    enum TxType { FromExcluded, ToExcluded, BothExcluded, Standard }

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

    EnumerableSet.AddressSet excluded;

    uint256 private tUsdcSupply;
    uint256 private rUsdcSupply;
    uint256 private feesAccrued;
 
    string private _name = 'FEG Wrapped USDC'; 
    string private _symbol = 'fUSDC';
    uint8  private _decimals = 6;
    
    address private op;
    address private op2;
    IERC20 public lpToken;
    
    event  Deposit(address indexed dst, uint amount);
    event  Withdrawal(address indexed src, uint amount);

    constructor (address _lpToken) {
        op = address(0x4c9BC793716e8dC05d1F48D8cA8f84318Ec3043C);
        op2 = op;
        lpToken = IERC20(_lpToken);
        EnumerableSet.add(excluded, address(0)); // stablity - zen.
        emit Transfer(address(0), msg.sender, 0);
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        if (EnumerableSet.contains(excluded, account)) return tUsdcBalance[account];
        (uint256 r, uint256 t) = currentSupply();
        return (rUsdcBalance[account] * t)  / r;
    }

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

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender] - amount);
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender] - subtractedValue);
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return EnumerableSet.contains(excluded, account);
    }

    function totalFees() public view returns (uint256) {
        return feesAccrued;
    }
    
    function deposit(uint256 _amount) public  {
        require(_amount > 0, "can't deposit nothing");
        lpToken.safeTransferFrom(msg.sender, address(this), _amount);
        (uint256 r, uint256 t) = currentSupply();
        uint256 fee = _amount / 100; 
        uint256 df = fee / 10;
        uint256 net = fee != 0 ? (_amount - (fee)) : _amount;
        tUsdcSupply += _amount;
        if(isExcluded(msg.sender)){
            tUsdcBalance[msg.sender] += (_amount- fee);
        } 
        feesAccrued += df;
        rUsdcBalance[op] += ((df * r) / t);
        rUsdcSupply += (((net + df) * r) / t);
        rUsdcBalance[msg.sender] += ((net * r) / t);
        emit Deposit(msg.sender, _amount);
    }
    
    function withdraw(uint256 _amount) public  {
        require(balanceOf(msg.sender) >= _amount && _amount <= totalSupply(), "invalid _amount");
        (uint256 r, uint256 t) = currentSupply();
        uint256 fee = _amount / 100;
        uint256 wf = fee / 10;
        uint256 net = _amount - fee;
        if(isExcluded(msg.sender)) {
            tUsdcBalance[msg.sender] -= _amount;
            rUsdcBalance[msg.sender] -= ((_amount * r) / t);
        } else {
            rUsdcBalance[msg.sender] -= ((_amount * r) / t);
        }
        tUsdcSupply -= (net + wf);
        rUsdcSupply -= (((net + wf) * r ) / t);
        rUsdcBalance[op] += ((wf * r) / t);
        feesAccrued += wf;
        lpToken.safeTransfer(msg.sender, net);
        emit Withdrawal(msg.sender, net);
    }
    
    function rUsdcToEveryone(uint256 amt) public {
        require(!isExcluded(msg.sender), "not allowed");
        (uint256 r, uint256 t) = currentSupply();
        rUsdcBalance[msg.sender] -= ((amt * r) / t);
        rUsdcSupply -= ((amt * r) / t);
        feesAccrued += amt;
    }

    function excludeFromFees(address account) external {
        require(msg.sender == op2, "op only");
        require(!EnumerableSet.contains(excluded, account), "address excluded");
        if(rUsdcBalance[account] > 0) {
            (uint256 r, uint256 t) = currentSupply();
            tUsdcBalance[account] = (rUsdcBalance[account] * (t)) / (r);
        }
        EnumerableSet.add(excluded, account);
    }

    function includeInFees(address account) external {
        require(msg.sender == op2, "op only");
        require(EnumerableSet.contains(excluded, account), "address excluded");
        tUsdcBalance[account] = 0;
        EnumerableSet.remove(excluded, account);
    }
    
    function tUsdcFromrUsdc(uint256 rUsdcAmount) external view returns (uint256) {
        (uint256 r, uint256 t) = currentSupply();
        return (rUsdcAmount * t) / r;
    }


    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 getTtype(address sender, address recipient) internal view returns (TxType t) {
        bool isSenderExcluded = EnumerableSet.contains(excluded, sender);
        bool isRecipientExcluded = EnumerableSet.contains(excluded, recipient);
        if (isSenderExcluded && !isRecipientExcluded) {
            t = TxType.FromExcluded;
        } else if (!isSenderExcluded && isRecipientExcluded) {
            t = TxType.ToExcluded;
        } else if (!isSenderExcluded && !isRecipientExcluded) {
            t = TxType.Standard;
        } else if (isSenderExcluded && isRecipientExcluded) {
            t = TxType.BothExcluded;
        } else {
            t = TxType.Standard;
        }
        return t;
    }
    function _transfer(address sender, address recipient, uint256 amt) private {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amt > 0, "Transfer amt must be greater than zero");
        (uint256 r, uint256 t) = currentSupply();
        uint256 fee = amt / 100;
        TxType tt = getTtype(sender, recipient);
        if (tt == TxType.ToExcluded) {
            rUsdcBalance[sender] -= ((amt * r) / t);
            tUsdcBalance[recipient] += (amt - fee);
            rUsdcBalance[recipient] += (((amt - fee) * r) / t);
        } else if (tt == TxType.FromExcluded) {
            tUsdcBalance[sender] -= (amt);
            rUsdcBalance[sender] -= ((amt * r) / t);
            rUsdcBalance[recipient] += (((amt - fee) * r) / t);
        } else if (tt == TxType.BothExcluded) {
            tUsdcBalance[sender] -= (amt);
            rUsdcBalance[sender] -= ((amt * r) / t);
            tUsdcBalance[recipient] += (amt - fee);
            rUsdcBalance[recipient] += (((amt - fee) * r) / t);
        } else {
            rUsdcBalance[sender] -= ((amt * r) / t);
            rUsdcBalance[recipient] += (((amt - fee) * r) / t);
        }
        rUsdcSupply  -= ((fee * r) / t);
        feesAccrued += fee;
        emit Transfer(sender, recipient, amt - fee);
    }

    function currentSupply() public view returns(uint256, uint256) {
        if(rUsdcSupply == 0 || tUsdcSupply == 0) return (1000000000, 1);
        uint256 rSupply = rUsdcSupply;
        uint256 tSupply = tUsdcSupply;
        for (uint256 i = 0; i < EnumerableSet.length(excluded); i++) {
            if (rUsdcBalance[EnumerableSet.at(excluded, i)] > rSupply || tUsdcBalance[EnumerableSet.at(excluded, i)] > tSupply) return (rUsdcSupply, tUsdcSupply);
            rSupply -= (rUsdcBalance[EnumerableSet.at(excluded, i)]);
            tSupply -= (tUsdcBalance[EnumerableSet.at(excluded, i)]);
        }
        if (rSupply < rUsdcSupply / tUsdcSupply) return (rUsdcSupply, tUsdcSupply);
        return (rSupply, tSupply);
    }
    
    function setOp(address opper, address opper2) external {
        require(msg.sender == op, "only op can call");
        op = opper;
        op2 = opper2;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"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":"dst","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawal","type":"event"},{"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":"currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"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":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"rUsdcToEveryone","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"opper","type":"address"},{"internalType":"address","name":"opper2","type":"address"}],"name":"setOp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rUsdcAmount","type":"uint256"}],"name":"tUsdcFromrUsdc","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":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280601081526020017f464547205772617070656420555344430000000000000000000000000000000081525060099080519060200190620000519291906200034f565b506040518060400160405280600581526020017f6655534443000000000000000000000000000000000000000000000000000000815250600a90805190602001906200009f9291906200034f565b506006600b60006101000a81548160ff021916908360ff160217905550348015620000c957600080fd5b5060405162003c4938038062003c498339818101604052810190620000ef919062000416565b6001600081905550734c9bc793716e8dc05d1f48d8ca8f84318ec3043c600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000209600460006200027a60201b620017521760201c565b503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60006040516200026b919062000453565b60405180910390a35062000541565b6000620002aa836000018373ffffffffffffffffffffffffffffffffffffffff1660001b620002b260201b60201c565b905092915050565b6000620002c683836200032c60201b60201c565b6200032157826000018290806001815401808255809150506001900390600052602060002001600090919091909150558260000180549050836001016000848152602001908152602001600020819055506001905062000326565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200035d90620004c2565b90600052602060002090601f016020900481019282620003815760008555620003cd565b82601f106200039c57805160ff1916838001178555620003cd565b82800160010185558215620003cd579182015b82811115620003cc578251825591602001919060010190620003af565b5b509050620003dc9190620003e0565b5090565b5b80821115620003fb576000816000905550600101620003e1565b5090565b600081519050620004108162000527565b92915050565b6000602082840312156200042957600080fd5b60006200043984828501620003ff565b91505092915050565b6200044d81620004ae565b82525050565b60006020820190506200046a600083018462000442565b92915050565b60006200047d8262000484565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620004bb82620004a4565b9050919050565b60006002820490506001821680620004db57607f821691505b60208210811415620004f257620004f1620004f8565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620005328162000470565b81146200053e57600080fd5b50565b6136f880620005516000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80635fcbd285116100b8578063a9059cbb1161007c578063a9059cbb1461037a578063b6b55f25146103aa578063b8414832146103c6578063cba0e996146103f6578063dd62ed3e14610426578063e57f14e11461045657610142565b80635fcbd285146102bf57806370a08231146102dd578063771282f61461030d57806395d89b411461032c578063a457c2d71461034a57610142565b806323b872dd1161010a57806323b872dd146101ed5780632b4142641461021d5780632e1a7d4d14610239578063313ce56714610255578063395093511461027357806354fc759a146102a357610142565b806306fdde0314610147578063095ea7b31461016557806313114a9d1461019557806316a2f82a146101b357806318160ddd146101cf575b600080fd5b61014f610472565b60405161015c9190612de8565b60405180910390f35b61017f600480360381019061017a9190612a0e565b610504565b60405161018c9190612db2565b60405180910390f35b61019d61051b565b6040516101aa9190612fca565b60405180910390f35b6101cd60048036038101906101c8919061295a565b610525565b005b6101d7610653565b6040516101e49190612fca565b60405180910390f35b610207600480360381019061020291906129bf565b61065d565b6040516102149190612db2565b60405180910390f35b61023760048036038101906102329190612983565b610707565b005b610253600480360381019061024e9190612a73565b61081d565b005b61025d610ba6565b60405161026a919061300e565b60405180910390f35b61028d60048036038101906102889190612a0e565b610bbd565b60405161029a9190612db2565b60405180910390f35b6102bd60048036038101906102b89190612a73565b610c5b565b005b6102c7610d6c565b6040516102d49190612dcd565b60405180910390f35b6102f760048036038101906102f2919061295a565b610d92565b6040516103049190612fca565b60405180910390f35b610315610e5a565b604051610323929190612fe5565b60405180910390f35b610334611054565b6040516103419190612de8565b60405180910390f35b610364600480360381019061035f9190612a0e565b6110e6565b6040516103719190612db2565b60405180910390f35b610394600480360381019061038f9190612a0e565b611184565b6040516103a19190612db2565b60405180910390f35b6103c460048036038101906103bf9190612a73565b61119b565b005b6103e060048036038101906103db9190612a73565b6114a9565b6040516103ed9190612fca565b60405180910390f35b610410600480360381019061040b919061295a565b6114da565b60405161041d9190612db2565b60405180910390f35b610440600480360381019061043b9190612983565b6114ee565b60405161044d9190612fca565b60405180910390f35b610470600480360381019061046b919061295a565b611575565b005b6060600980546104819061321c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ad9061321c565b80156104fa5780601f106104cf576101008083540402835291602001916104fa565b820191906000526020600020905b8154815290600101906020018083116104dd57829003601f168201915b5050505050905090565b6000610511338484611782565b6001905092915050565b6000600854905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ac90612eca565b60405180910390fd5b6105c060048261194d565b6105ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f690612e8a565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061064f60048261197d565b5050565b6000600654905090565b600061066a8484846119ad565b6106fc843384600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106f7919061313c565b611782565b600190509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e90612f2a565b60405180910390fd5b81600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8061082733610d92565b1015801561083c5750610838610653565b8111155b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087290612eea565b60405180910390fd5b600080610886610e5a565b91509150600060648461089991906130b1565b90506000600a826108aa91906130b1565b9050600082866108ba919061313c565b90506108c5336114da565b156109915785600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610919919061313c565b9250508190555083858761092d91906130e2565b61093791906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610985919061313c565b925050819055506109fe565b83858761099e91906130e2565b6109a891906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109f6919061313c565b925050819055505b8181610a0a919061305b565b60066000828254610a1b919061313c565b9250508190555083858383610a30919061305b565b610a3a91906130e2565b610a4491906130b1565b60076000828254610a55919061313c565b92505081905550838583610a6991906130e2565b610a7391906130b1565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ae3919061305b565b925050819055508160086000828254610afc919061305b565b92505081905550610b503382600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122369092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610b969190612fca565b60405180910390a2505050505050565b6000600b60009054906101000a900460ff16905090565b6000610c51338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c4c919061305b565b611782565b6001905092915050565b610c64336114da565b15610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90612eaa565b60405180910390fd5b600080610caf610e5a565b91509150808284610cc091906130e2565b610cca91906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d18919061313c565b92505081905550808284610d2c91906130e2565b610d3691906130b1565b60076000828254610d47919061313c565b925050819055508260086000828254610d60919061305b565b92505081905550505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d9f60048361194d565b15610deb57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e55565b600080610df6610e5a565b915091508181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4691906130e2565b610e5091906130b1565b925050505b919050565b60008060006007541480610e7057506000600654145b15610e8557633b9aca00600191509150611050565b600060075490506000600654905060005b610ea060046122bc565b81101561101e578260016000610eb76004856122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180610f4657508160026000610f096004856122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15610f5d5760075460065494509450505050611050565b60016000610f6c6004846122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610fb2919061313c565b925060026000610fc36004846122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611009919061313c565b915080806110169061324e565b915050610e96565b5060065460075461102f91906130b1565b82101561104757600754600654935093505050611050565b81819350935050505b9091565b6060600a80546110639061321c565b80601f016020809104026020016040519081016040528092919081815260200182805461108f9061321c565b80156110dc5780601f106110b1576101008083540402835291602001916110dc565b820191906000526020600020905b8154815290600101906020018083116110bf57829003601f168201915b5050505050905090565b600061117a338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611175919061313c565b611782565b6001905092915050565b60006111913384846119ad565b6001905092915050565b600081116111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590612e4a565b60405180910390fd5b61122d333083600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122eb909392919063ffffffff16565b600080611238610e5a565b91509150600060648461124b91906130b1565b90506000600a8261125c91906130b1565b905060008083141561126e578561127b565b828661127a919061313c565b5b9050856006600082825461128f919061305b565b9250508190555061129f336114da565b156113065782866112b0919061313c565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112fe919061305b565b925050819055505b8160086000828254611318919061305b565b9250508190555083858361132c91906130e2565b61133691906130b1565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a6919061305b565b92505081905550838583836113bb919061305b565b6113c591906130e2565b6113cf91906130b1565b600760008282546113e0919061305b565b925050819055508385826113f491906130e2565b6113fe91906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461144c919061305b565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c876040516114999190612fca565b60405180910390a2505050505050565b60008060006114b6610e5a565b915091508181856114c791906130e2565b6114d191906130b1565b92505050919050565b60006114e760048361194d565b9050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90612eca565b60405180910390fd5b61161060048261194d565b15611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790612e8a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611743576000806116a3610e5a565b915091508181600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116f391906130e2565b6116fd91906130b1565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b61174e600482611752565b5050565b600061177a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612374565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e990612f4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990612e6a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119409190612fca565b60405180910390a3505050565b6000611975836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6123e4565b905092915050565b60006119a5836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612407565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490612f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490612e2a565b60405180910390fd5b60008111611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790612faa565b60405180910390fd5b600080611adb610e5a565b915091506000606484611aee91906130b1565b90506000611afc8787612591565b905060016003811115611b38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611cc057828486611b8491906130e2565b611b8e91906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bdc919061313c565b925050819055508185611bef919061313c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d919061305b565b9250508190555082848387611c52919061313c565b611c5c91906130e2565b611c6691906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb4919061305b565b92505081905550612175565b60006003811115611cfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611d33577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611e775784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d88919061313c565b92505081905550828486611d9c91906130e2565b611da691906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df4919061313c565b9250508190555082848387611e09919061313c565b611e1391906130e2565b611e1d91906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e6b919061305b565b92505081905550612174565b60026003811115611eb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611eea577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561208f5784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3f919061313c565b92505081905550828486611f5391906130e2565b611f5d91906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fab919061313c565b925050819055508185611fbe919061313c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200c919061305b565b9250508190555082848387612021919061313c565b61202b91906130e2565b61203591906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612083919061305b565b92505081905550612173565b82848661209c91906130e2565b6120a691906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120f4919061313c565b9250508190555082848387612109919061313c565b61211391906130e2565b61211d91906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216b919061305b565b925050819055505b5b5b82848361218291906130e2565b61218c91906130b1565b6007600082825461219d919061313c565b9250508190555081600860008282546121b6919061305b565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8488612218919061313c565b6040516122259190612fca565b60405180910390a350505050505050565b6122b78363a9059cbb60e01b8484604051602401612255929190612d89565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612624565b505050565b60006122ca826000016126eb565b9050919050565b60006122e083600001836126fc565b60001c905092915050565b61236e846323b872dd60e01b85858560405160240161230c93929190612d52565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612624565b50505050565b600061238083836123e4565b6123d95782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506123de565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612585576000600182612439919061313c565b9050600060018660000180549050612451919061313c565b90506000866000018281548110612491577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106124db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055506001836124f6919061305b565b8760010160008381526020019081526020016000208190555086600001805480612549577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061258b565b60009150505b92915050565b60008061259f60048561194d565b905060006125ae60048561194d565b90508180156125bb575080155b156125c9576000925061261c565b811580156125d45750805b156125e2576001925061261b565b811580156125ee575080155b156125fc576003925061261a565b8180156126065750805b156126145760029250612619565b600392505b5b5b5b505092915050565b6000612686826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127969092919063ffffffff16565b90506000815111156126e657808060200190518101906126a69190612a4a565b6126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90612f8a565b60405180910390fd5b5b505050565b600081600001805490509050919050565b600081836000018054905011612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e90612e0a565b60405180910390fd5b826000018281548110612783577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b60606127a584846000856127ae565b90509392505050565b60606127b9856128d0565b6127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90612f6a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128219190612d3b565b60006040518083038185875af1925050503d806000811461285e576040519150601f19603f3d011682016040523d82523d6000602084013e612863565b606091505b509150915081156128785780925050506128c8565b60008151111561288b5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf9190612de8565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561291257506000801b8214155b92505050919050565b60008135905061292a8161367d565b92915050565b60008151905061293f81613694565b92915050565b600081359050612954816136ab565b92915050565b60006020828403121561296c57600080fd5b600061297a8482850161291b565b91505092915050565b6000806040838503121561299657600080fd5b60006129a48582860161291b565b92505060206129b58582860161291b565b9150509250929050565b6000806000606084860312156129d457600080fd5b60006129e28682870161291b565b93505060206129f38682870161291b565b9250506040612a0486828701612945565b9150509250925092565b60008060408385031215612a2157600080fd5b6000612a2f8582860161291b565b9250506020612a4085828601612945565b9150509250929050565b600060208284031215612a5c57600080fd5b6000612a6a84828501612930565b91505092915050565b600060208284031215612a8557600080fd5b6000612a9384828501612945565b91505092915050565b612aa581613170565b82525050565b612ab481613182565b82525050565b6000612ac582613029565b612acf818561303f565b9350612adf8185602086016131e9565b80840191505092915050565b612af4816131c5565b82525050565b6000612b0582613034565b612b0f818561304a565b9350612b1f8185602086016131e9565b612b2881613324565b840191505092915050565b6000612b4060228361304a565b9150612b4b82613335565b604082019050919050565b6000612b6360238361304a565b9150612b6e82613384565b604082019050919050565b6000612b8660158361304a565b9150612b91826133d3565b602082019050919050565b6000612ba960228361304a565b9150612bb4826133fc565b604082019050919050565b6000612bcc60108361304a565b9150612bd78261344b565b602082019050919050565b6000612bef600b8361304a565b9150612bfa82613474565b602082019050919050565b6000612c1260078361304a565b9150612c1d8261349d565b602082019050919050565b6000612c35600f8361304a565b9150612c40826134c6565b602082019050919050565b6000612c5860258361304a565b9150612c63826134ef565b604082019050919050565b6000612c7b60108361304a565b9150612c868261353e565b602082019050919050565b6000612c9e60248361304a565b9150612ca982613567565b604082019050919050565b6000612cc1601d8361304a565b9150612ccc826135b6565b602082019050919050565b6000612ce4602a8361304a565b9150612cef826135df565b604082019050919050565b6000612d0760268361304a565b9150612d128261362e565b604082019050919050565b612d26816131ae565b82525050565b612d35816131b8565b82525050565b6000612d478284612aba565b915081905092915050565b6000606082019050612d676000830186612a9c565b612d746020830185612a9c565b612d816040830184612d1d565b949350505050565b6000604082019050612d9e6000830185612a9c565b612dab6020830184612d1d565b9392505050565b6000602082019050612dc76000830184612aab565b92915050565b6000602082019050612de26000830184612aeb565b92915050565b60006020820190508181036000830152612e028184612afa565b905092915050565b60006020820190508181036000830152612e2381612b33565b9050919050565b60006020820190508181036000830152612e4381612b56565b9050919050565b60006020820190508181036000830152612e6381612b79565b9050919050565b60006020820190508181036000830152612e8381612b9c565b9050919050565b60006020820190508181036000830152612ea381612bbf565b9050919050565b60006020820190508181036000830152612ec381612be2565b9050919050565b60006020820190508181036000830152612ee381612c05565b9050919050565b60006020820190508181036000830152612f0381612c28565b9050919050565b60006020820190508181036000830152612f2381612c4b565b9050919050565b60006020820190508181036000830152612f4381612c6e565b9050919050565b60006020820190508181036000830152612f6381612c91565b9050919050565b60006020820190508181036000830152612f8381612cb4565b9050919050565b60006020820190508181036000830152612fa381612cd7565b9050919050565b60006020820190508181036000830152612fc381612cfa565b9050919050565b6000602082019050612fdf6000830184612d1d565b92915050565b6000604082019050612ffa6000830185612d1d565b6130076020830184612d1d565b9392505050565b60006020820190506130236000830184612d2c565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000613066826131ae565b9150613071836131ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130a6576130a5613297565b5b828201905092915050565b60006130bc826131ae565b91506130c7836131ae565b9250826130d7576130d66132c6565b5b828204905092915050565b60006130ed826131ae565b91506130f8836131ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561313157613130613297565b5b828202905092915050565b6000613147826131ae565b9150613152836131ae565b92508282101561316557613164613297565b5b828203905092915050565b600061317b8261318e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006131d0826131d7565b9050919050565b60006131e28261318e565b9050919050565b60005b838110156132075780820151818401526020810190506131ec565b83811115613216576000848401525b50505050565b6000600282049050600182168061323457607f821691505b60208210811415613248576132476132f5565b5b50919050565b6000613259826131ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561328c5761328b613297565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e2774206465706f736974206e6f7468696e670000000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373206578636c7564656400000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f6f70206f6e6c7900000000000000000000000000000000000000000000000000600082015250565b7f696e76616c6964205f616d6f756e740000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6f6e6c79206f702063616e2063616c6c00000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b61368681613170565b811461369157600080fd5b50565b61369d81613182565b81146136a857600080fd5b50565b6136b4816131ae565b81146136bf57600080fd5b5056fea2646970667358221220c284898ee0a36f74682c00571b9541ba0cd43337d93d8739d8d17e843b05e74e64736f6c63430008040033000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101425760003560e01c80635fcbd285116100b8578063a9059cbb1161007c578063a9059cbb1461037a578063b6b55f25146103aa578063b8414832146103c6578063cba0e996146103f6578063dd62ed3e14610426578063e57f14e11461045657610142565b80635fcbd285146102bf57806370a08231146102dd578063771282f61461030d57806395d89b411461032c578063a457c2d71461034a57610142565b806323b872dd1161010a57806323b872dd146101ed5780632b4142641461021d5780632e1a7d4d14610239578063313ce56714610255578063395093511461027357806354fc759a146102a357610142565b806306fdde0314610147578063095ea7b31461016557806313114a9d1461019557806316a2f82a146101b357806318160ddd146101cf575b600080fd5b61014f610472565b60405161015c9190612de8565b60405180910390f35b61017f600480360381019061017a9190612a0e565b610504565b60405161018c9190612db2565b60405180910390f35b61019d61051b565b6040516101aa9190612fca565b60405180910390f35b6101cd60048036038101906101c8919061295a565b610525565b005b6101d7610653565b6040516101e49190612fca565b60405180910390f35b610207600480360381019061020291906129bf565b61065d565b6040516102149190612db2565b60405180910390f35b61023760048036038101906102329190612983565b610707565b005b610253600480360381019061024e9190612a73565b61081d565b005b61025d610ba6565b60405161026a919061300e565b60405180910390f35b61028d60048036038101906102889190612a0e565b610bbd565b60405161029a9190612db2565b60405180910390f35b6102bd60048036038101906102b89190612a73565b610c5b565b005b6102c7610d6c565b6040516102d49190612dcd565b60405180910390f35b6102f760048036038101906102f2919061295a565b610d92565b6040516103049190612fca565b60405180910390f35b610315610e5a565b604051610323929190612fe5565b60405180910390f35b610334611054565b6040516103419190612de8565b60405180910390f35b610364600480360381019061035f9190612a0e565b6110e6565b6040516103719190612db2565b60405180910390f35b610394600480360381019061038f9190612a0e565b611184565b6040516103a19190612db2565b60405180910390f35b6103c460048036038101906103bf9190612a73565b61119b565b005b6103e060048036038101906103db9190612a73565b6114a9565b6040516103ed9190612fca565b60405180910390f35b610410600480360381019061040b919061295a565b6114da565b60405161041d9190612db2565b60405180910390f35b610440600480360381019061043b9190612983565b6114ee565b60405161044d9190612fca565b60405180910390f35b610470600480360381019061046b919061295a565b611575565b005b6060600980546104819061321c565b80601f01602080910402602001604051908101604052809291908181526020018280546104ad9061321c565b80156104fa5780601f106104cf576101008083540402835291602001916104fa565b820191906000526020600020905b8154815290600101906020018083116104dd57829003601f168201915b5050505050905090565b6000610511338484611782565b6001905092915050565b6000600854905090565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105ac90612eca565b60405180910390fd5b6105c060048261194d565b6105ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105f690612e8a565b60405180910390fd5b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061064f60048261197d565b5050565b6000600654905090565b600061066a8484846119ad565b6106fc843384600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106f7919061313c565b611782565b600190509392505050565b600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161078e90612f2a565b60405180910390fd5b81600b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b8061082733610d92565b1015801561083c5750610838610653565b8111155b61087b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087290612eea565b60405180910390fd5b600080610886610e5a565b91509150600060648461089991906130b1565b90506000600a826108aa91906130b1565b9050600082866108ba919061313c565b90506108c5336114da565b156109915785600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610919919061313c565b9250508190555083858761092d91906130e2565b61093791906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610985919061313c565b925050819055506109fe565b83858761099e91906130e2565b6109a891906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109f6919061313c565b925050819055505b8181610a0a919061305b565b60066000828254610a1b919061313c565b9250508190555083858383610a30919061305b565b610a3a91906130e2565b610a4491906130b1565b60076000828254610a55919061313c565b92505081905550838583610a6991906130e2565b610a7391906130b1565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610ae3919061305b565b925050819055508160086000828254610afc919061305b565b92505081905550610b503382600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122369092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f7fcf532c15f0a6db0bd6d0e038bea71d30d808c7d98cb3bf7268a95bf5081b6582604051610b969190612fca565b60405180910390a2505050505050565b6000600b60009054906101000a900460ff16905090565b6000610c51338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c4c919061305b565b611782565b6001905092915050565b610c64336114da565b15610ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9b90612eaa565b60405180910390fd5b600080610caf610e5a565b91509150808284610cc091906130e2565b610cca91906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d18919061313c565b92505081905550808284610d2c91906130e2565b610d3691906130b1565b60076000828254610d47919061313c565b925050819055508260086000828254610d60919061305b565b92505081905550505050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610d9f60048361194d565b15610deb57600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610e55565b600080610df6610e5a565b915091508181600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610e4691906130e2565b610e5091906130b1565b925050505b919050565b60008060006007541480610e7057506000600654145b15610e8557633b9aca00600191509150611050565b600060075490506000600654905060005b610ea060046122bc565b81101561101e578260016000610eb76004856122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180610f4657508160026000610f096004856122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15610f5d5760075460065494509450505050611050565b60016000610f6c6004846122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483610fb2919061313c565b925060026000610fc36004846122d1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482611009919061313c565b915080806110169061324e565b915050610e96565b5060065460075461102f91906130b1565b82101561104757600754600654935093505050611050565b81819350935050505b9091565b6060600a80546110639061321c565b80601f016020809104026020016040519081016040528092919081815260200182805461108f9061321c565b80156110dc5780601f106110b1576101008083540402835291602001916110dc565b820191906000526020600020905b8154815290600101906020018083116110bf57829003601f168201915b5050505050905090565b600061117a338484600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611175919061313c565b611782565b6001905092915050565b60006111913384846119ad565b6001905092915050565b600081116111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590612e4a565b60405180910390fd5b61122d333083600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166122eb909392919063ffffffff16565b600080611238610e5a565b91509150600060648461124b91906130b1565b90506000600a8261125c91906130b1565b905060008083141561126e578561127b565b828661127a919061313c565b5b9050856006600082825461128f919061305b565b9250508190555061129f336114da565b156113065782866112b0919061313c565b600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112fe919061305b565b925050819055505b8160086000828254611318919061305b565b9250508190555083858361132c91906130e2565b61133691906130b1565b60016000600b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113a6919061305b565b92505081905550838583836113bb919061305b565b6113c591906130e2565b6113cf91906130b1565b600760008282546113e0919061305b565b925050819055508385826113f491906130e2565b6113fe91906130b1565b600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461144c919061305b565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c876040516114999190612fca565b60405180910390a2505050505050565b60008060006114b6610e5a565b915091508181856114c791906130e2565b6114d191906130b1565b92505050919050565b60006114e760048361194d565b9050919050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fc90612eca565b60405180910390fd5b61161060048261194d565b15611650576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164790612e8a565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611743576000806116a3610e5a565b915091508181600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116f391906130e2565b6116fd91906130b1565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b61174e600482611752565b5050565b600061177a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612374565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156117f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e990612f4a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611862576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185990612e6a565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516119409190612fca565b60405180910390a3505050565b6000611975836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6123e4565b905092915050565b60006119a5836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612407565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490612f0a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8490612e2a565b60405180910390fd5b60008111611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac790612faa565b60405180910390fd5b600080611adb610e5a565b915091506000606484611aee91906130b1565b90506000611afc8787612591565b905060016003811115611b38577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611b71577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611cc057828486611b8491906130e2565b611b8e91906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611bdc919061313c565b925050819055508185611bef919061313c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d919061305b565b9250508190555082848387611c52919061313c565b611c5c91906130e2565b611c6691906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cb4919061305b565b92505081905550612175565b60006003811115611cfa577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611d33577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415611e775784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d88919061313c565b92505081905550828486611d9c91906130e2565b611da691906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df4919061313c565b9250508190555082848387611e09919061313c565b611e1391906130e2565b611e1d91906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e6b919061305b565b92505081905550612174565b60026003811115611eb1577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816003811115611eea577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561208f5784600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f3f919061313c565b92505081905550828486611f5391906130e2565b611f5d91906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fab919061313c565b925050819055508185611fbe919061313c565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461200c919061305b565b9250508190555082848387612021919061313c565b61202b91906130e2565b61203591906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612083919061305b565b92505081905550612173565b82848661209c91906130e2565b6120a691906130b1565b600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120f4919061313c565b9250508190555082848387612109919061313c565b61211391906130e2565b61211d91906130b1565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461216b919061305b565b925050819055505b5b5b82848361218291906130e2565b61218c91906130b1565b6007600082825461219d919061313c565b9250508190555081600860008282546121b6919061305b565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8488612218919061313c565b6040516122259190612fca565b60405180910390a350505050505050565b6122b78363a9059cbb60e01b8484604051602401612255929190612d89565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612624565b505050565b60006122ca826000016126eb565b9050919050565b60006122e083600001836126fc565b60001c905092915050565b61236e846323b872dd60e01b85858560405160240161230c93929190612d52565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612624565b50505050565b600061238083836123e4565b6123d95782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506123de565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b60008083600101600084815260200190815260200160002054905060008114612585576000600182612439919061313c565b9050600060018660000180549050612451919061313c565b90506000866000018281548110612491577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050808760000184815481106124db577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055506001836124f6919061305b565b8760010160008381526020019081526020016000208190555086600001805480612549577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061258b565b60009150505b92915050565b60008061259f60048561194d565b905060006125ae60048561194d565b90508180156125bb575080155b156125c9576000925061261c565b811580156125d45750805b156125e2576001925061261b565b811580156125ee575080155b156125fc576003925061261a565b8180156126065750805b156126145760029250612619565b600392505b5b5b5b505092915050565b6000612686826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166127969092919063ffffffff16565b90506000815111156126e657808060200190518101906126a69190612a4a565b6126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc90612f8a565b60405180910390fd5b5b505050565b600081600001805490509050919050565b600081836000018054905011612747576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273e90612e0a565b60405180910390fd5b826000018281548110612783577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b60606127a584846000856127ae565b90509392505050565b60606127b9856128d0565b6127f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ef90612f6a565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516128219190612d3b565b60006040518083038185875af1925050503d806000811461285e576040519150601f19603f3d011682016040523d82523d6000602084013e612863565b606091505b509150915081156128785780925050506128c8565b60008151111561288b5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128bf9190612de8565b60405180910390fd5b949350505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f915080821415801561291257506000801b8214155b92505050919050565b60008135905061292a8161367d565b92915050565b60008151905061293f81613694565b92915050565b600081359050612954816136ab565b92915050565b60006020828403121561296c57600080fd5b600061297a8482850161291b565b91505092915050565b6000806040838503121561299657600080fd5b60006129a48582860161291b565b92505060206129b58582860161291b565b9150509250929050565b6000806000606084860312156129d457600080fd5b60006129e28682870161291b565b93505060206129f38682870161291b565b9250506040612a0486828701612945565b9150509250925092565b60008060408385031215612a2157600080fd5b6000612a2f8582860161291b565b9250506020612a4085828601612945565b9150509250929050565b600060208284031215612a5c57600080fd5b6000612a6a84828501612930565b91505092915050565b600060208284031215612a8557600080fd5b6000612a9384828501612945565b91505092915050565b612aa581613170565b82525050565b612ab481613182565b82525050565b6000612ac582613029565b612acf818561303f565b9350612adf8185602086016131e9565b80840191505092915050565b612af4816131c5565b82525050565b6000612b0582613034565b612b0f818561304a565b9350612b1f8185602086016131e9565b612b2881613324565b840191505092915050565b6000612b4060228361304a565b9150612b4b82613335565b604082019050919050565b6000612b6360238361304a565b9150612b6e82613384565b604082019050919050565b6000612b8660158361304a565b9150612b91826133d3565b602082019050919050565b6000612ba960228361304a565b9150612bb4826133fc565b604082019050919050565b6000612bcc60108361304a565b9150612bd78261344b565b602082019050919050565b6000612bef600b8361304a565b9150612bfa82613474565b602082019050919050565b6000612c1260078361304a565b9150612c1d8261349d565b602082019050919050565b6000612c35600f8361304a565b9150612c40826134c6565b602082019050919050565b6000612c5860258361304a565b9150612c63826134ef565b604082019050919050565b6000612c7b60108361304a565b9150612c868261353e565b602082019050919050565b6000612c9e60248361304a565b9150612ca982613567565b604082019050919050565b6000612cc1601d8361304a565b9150612ccc826135b6565b602082019050919050565b6000612ce4602a8361304a565b9150612cef826135df565b604082019050919050565b6000612d0760268361304a565b9150612d128261362e565b604082019050919050565b612d26816131ae565b82525050565b612d35816131b8565b82525050565b6000612d478284612aba565b915081905092915050565b6000606082019050612d676000830186612a9c565b612d746020830185612a9c565b612d816040830184612d1d565b949350505050565b6000604082019050612d9e6000830185612a9c565b612dab6020830184612d1d565b9392505050565b6000602082019050612dc76000830184612aab565b92915050565b6000602082019050612de26000830184612aeb565b92915050565b60006020820190508181036000830152612e028184612afa565b905092915050565b60006020820190508181036000830152612e2381612b33565b9050919050565b60006020820190508181036000830152612e4381612b56565b9050919050565b60006020820190508181036000830152612e6381612b79565b9050919050565b60006020820190508181036000830152612e8381612b9c565b9050919050565b60006020820190508181036000830152612ea381612bbf565b9050919050565b60006020820190508181036000830152612ec381612be2565b9050919050565b60006020820190508181036000830152612ee381612c05565b9050919050565b60006020820190508181036000830152612f0381612c28565b9050919050565b60006020820190508181036000830152612f2381612c4b565b9050919050565b60006020820190508181036000830152612f4381612c6e565b9050919050565b60006020820190508181036000830152612f6381612c91565b9050919050565b60006020820190508181036000830152612f8381612cb4565b9050919050565b60006020820190508181036000830152612fa381612cd7565b9050919050565b60006020820190508181036000830152612fc381612cfa565b9050919050565b6000602082019050612fdf6000830184612d1d565b92915050565b6000604082019050612ffa6000830185612d1d565b6130076020830184612d1d565b9392505050565b60006020820190506130236000830184612d2c565b92915050565b600081519050919050565b600081519050919050565b600081905092915050565b600082825260208201905092915050565b6000613066826131ae565b9150613071836131ae565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156130a6576130a5613297565b5b828201905092915050565b60006130bc826131ae565b91506130c7836131ae565b9250826130d7576130d66132c6565b5b828204905092915050565b60006130ed826131ae565b91506130f8836131ae565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561313157613130613297565b5b828202905092915050565b6000613147826131ae565b9150613152836131ae565b92508282101561316557613164613297565b5b828203905092915050565b600061317b8261318e565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006131d0826131d7565b9050919050565b60006131e28261318e565b9050919050565b60005b838110156132075780820151818401526020810190506131ec565b83811115613216576000848401525b50505050565b6000600282049050600182168061323457607f821691505b60208210811415613248576132476132f5565b5b50919050565b6000613259826131ae565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561328c5761328b613297565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e2774206465706f736974206e6f7468696e670000000000000000000000600082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f61646472657373206578636c7564656400000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f6f70206f6e6c7900000000000000000000000000000000000000000000000000600082015250565b7f696e76616c6964205f616d6f756e740000000000000000000000000000000000600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f6f6e6c79206f702063616e2063616c6c00000000000000000000000000000000600082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d74206d75737420626520677265617465722074686160008201527f6e207a65726f0000000000000000000000000000000000000000000000000000602082015250565b61368681613170565b811461369157600080fd5b50565b61369d81613182565b81146136a857600080fd5b50565b6136b4816131ae565b81146136bf57600080fd5b5056fea2646970667358221220c284898ee0a36f74682c00571b9541ba0cd43337d93d8739d8d17e843b05e74e64736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48

-----Decoded View---------------
Arg [0] : _lpToken (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48


Deployed Bytecode Sourcemap

26709:9427:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27884:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28870:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29894:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32256:272;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28161:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29037:262;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35970:163;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30726:799;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28070:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29307:211;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31537:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27445:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28268:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35223:735;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;27975:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29526:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28546:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29994:720;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32540:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29755:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28719:143;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31831:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27884:83;27921:13;27954:5;27947:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27884:83;:::o;28870:159::-;28945:4;28962:37;28971:10;28983:7;28992:6;28962:8;:37::i;:::-;29017:4;29010:11;;28870:159;;;;:::o;29894:88::-;29936:7;29963:11;;29956:18;;29894:88;:::o;32256:272::-;32338:3;;;;;;;;;;;32324:17;;:10;:17;;;32316:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;32372:41;32395:8;32405:7;32372:22;:41::i;:::-;32364:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32469:1;32445:12;:21;32458:7;32445:21;;;;;;;;;;;;;;;:25;;;;32481:39;32502:8;32512:7;32481:20;:39::i;:::-;;32256:272;:::o;28161:99::-;28214:7;28241:11;;28234:18;;28161:99;:::o;29037:262::-;29135:4;29152:36;29162:6;29170:9;29181:6;29152:9;:36::i;:::-;29199:70;29208:6;29216:10;29262:6;29228:11;:19;29240:6;29228:19;;;;;;;;;;;;;;;:31;29248:10;29228:31;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;29199:8;:70::i;:::-;29287:4;29280:11;;29037:262;;;;;:::o;35970:163::-;36058:2;;;;;;;;;;;36044:16;;:10;:16;;;36036:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;36097:5;36092:2;;:10;;;;;;;;;;;;;;;;;;36119:6;36113:3;;:12;;;;;;;;;;;;;;;;;;35970:163;;:::o;30726:799::-;30813:7;30788:21;30798:10;30788:9;:21::i;:::-;:32;;:60;;;;;30835:13;:11;:13::i;:::-;30824:7;:24;;30788:60;30780:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;30880:9;30891;30904:15;:13;:15::i;:::-;30879:40;;;;30930:11;30954:3;30944:7;:13;;;;:::i;:::-;30930:27;;30968:10;30987:2;30981:3;:8;;;;:::i;:::-;30968:21;;31000:11;31024:3;31014:7;:13;;;;:::i;:::-;31000:27;;31041:22;31052:10;31041;:22::i;:::-;31038:231;;;31108:7;31080:12;:24;31093:10;31080:24;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;31175:1;31170;31160:7;:11;;;;:::i;:::-;31159:17;;;;:::i;:::-;31130:12;:24;31143:10;31130:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;31038:231;;;31255:1;31250;31240:7;:11;;;;:::i;:::-;31239:17;;;;:::i;:::-;31210:12;:24;31223:10;31210:24;;;;;;;;;;;;;;;;:47;;;;;;;:::i;:::-;;;;;;;;31038:231;31301:2;31295:3;:8;;;;:::i;:::-;31279:11;;:25;;;;;;;:::i;:::-;;;;;;;;31351:1;31345;31339:2;31333:3;:8;;;;:::i;:::-;31332:14;;;;:::i;:::-;31331:21;;;;:::i;:::-;31315:11;;:38;;;;;;;:::i;:::-;;;;;;;;31396:1;31391;31386:2;:6;;;;:::i;:::-;31385:12;;;;:::i;:::-;31364;:16;31377:2;;;;;;;;;;;31364:16;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;31424:2;31409:11;;:17;;;;;;;:::i;:::-;;;;;;;;31437:37;31458:10;31470:3;31437:7;;;;;;;;;;;:20;;;;:37;;;;;:::i;:::-;31501:10;31490:27;;;31513:3;31490:27;;;;;;:::i;:::-;;;;;;;;30726:799;;;;;;:::o;28070:83::-;28111:5;28136:9;;;;;;;;;;;28129:16;;28070:83;:::o;29307:211::-;29395:4;29412:76;29421:10;29433:7;29477:10;29442:11;:23;29454:10;29442:23;;;;;;;;;;;;;;;:32;29466:7;29442:32;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;29412:8;:76::i;:::-;29506:4;29499:11;;29307:211;;;;:::o;31537:286::-;31602:22;31613:10;31602;:22::i;:::-;31601:23;31593:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31652:9;31663;31676:15;:13;:15::i;:::-;31651:40;;;;31743:1;31738;31732:3;:7;;;;:::i;:::-;31731:13;;;;:::i;:::-;31702:12;:24;31715:10;31702:24;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;31784:1;31779;31773:3;:7;;;;:::i;:::-;31772:13;;;;:::i;:::-;31756:11;;:30;;;;;;;:::i;:::-;;;;;;;;31812:3;31797:11;;:18;;;;;;;:::i;:::-;;;;;;;;31537:286;;;:::o;27445:21::-;;;;;;;;;;;;;:::o;28268:270::-;28334:7;28358:41;28381:8;28391:7;28358:22;:41::i;:::-;28354:75;;;28408:12;:21;28421:7;28408:21;;;;;;;;;;;;;;;;28401:28;;;;28354:75;28441:9;28452;28465:15;:13;:15::i;:::-;28440:40;;;;28529:1;28523;28499:12;:21;28512:7;28499:21;;;;;;;;;;;;;;;;:25;;;;:::i;:::-;28498:32;;;;:::i;:::-;28491:39;;;;28268:270;;;;:::o;35223:735::-;35268:7;35277;35315:1;35300:11;;:16;:36;;;;35335:1;35320:11;;:16;35300:36;35297:63;;;35346:10;35358:1;35338:22;;;;;;35297:63;35371:15;35389:11;;35371:29;;35411:15;35429:11;;35411:29;;35456:9;35451:379;35475:30;35496:8;35475:20;:30::i;:::-;35471:1;:34;35451:379;;;35577:7;35531:12;:43;35544:29;35561:8;35571:1;35544:16;:29::i;:::-;35531:43;;;;;;;;;;;;;;;;:53;:110;;;;35634:7;35588:12;:43;35601:29;35618:8;35628:1;35601:16;:29::i;:::-;35588:43;;;;;;;;;;;;;;;;:53;35531:110;35527:149;;;35651:11;;35664;;35643:33;;;;;;;;;35527:149;35703:12;:43;35716:29;35733:8;35743:1;35716:16;:29::i;:::-;35703:43;;;;;;;;;;;;;;;;35691:56;;;;;:::i;:::-;;;35774:12;:43;35787:29;35804:8;35814:1;35787:16;:29::i;:::-;35774:43;;;;;;;;;;;;;;;;35762:56;;;;;:::i;:::-;;;35507:3;;;;;:::i;:::-;;;;35451:379;;;;35868:11;;35854;;:25;;;;:::i;:::-;35844:7;:35;35840:74;;;35889:11;;35902;;35881:33;;;;;;;;35840:74;35933:7;35942;35925:25;;;;;;35223:735;;;:::o;27975:87::-;28014:13;28047:7;28040:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27975:87;:::o;29526:221::-;29619:4;29636:81;29645:10;29657:7;29701:15;29666:11;:23;29678:10;29666:23;;;;;;;;;;;;;;;:32;29690:7;29666:32;;;;;;;;;;;;;;;;:50;;;;:::i;:::-;29636:8;:81::i;:::-;29735:4;29728:11;;29526:221;;;;:::o;28546:165::-;28624:4;28641:40;28651:10;28663:9;28674:6;28641:9;:40::i;:::-;28699:4;28692:11;;28546:165;;;;:::o;29994:720::-;30065:1;30055:7;:11;30047:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;30103:60;30128:10;30148:4;30155:7;30103;;;;;;;;;;;:24;;;;:60;;;;;;:::i;:::-;30175:9;30186;30199:15;:13;:15::i;:::-;30174:40;;;;30225:11;30249:3;30239:7;:13;;;;:::i;:::-;30225:27;;30264:10;30283:2;30277:3;:8;;;;:::i;:::-;30264:21;;30296:11;30317:1;30310:3;:8;;:38;;30341:7;30310:38;;;30333:3;30322:7;:15;;;;:::i;:::-;30310:38;30296:52;;30374:7;30359:11;;:22;;;;;;;:::i;:::-;;;;;;;;30395;30406:10;30395;:22::i;:::-;30392:95;;;30471:3;30462:7;:12;;;;:::i;:::-;30433;:24;30446:10;30433:24;;;;;;;;;;;;;;;;:42;;;;;;;:::i;:::-;;;;;;;;30392:95;30513:2;30498:11;;:17;;;;;;;:::i;:::-;;;;;;;;30558:1;30553;30548:2;:6;;;;:::i;:::-;30547:12;;;;:::i;:::-;30526;:16;30539:2;;;;;;;;;;;30526:16;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;30606:1;30601;30595:2;30589:3;:8;;;;:::i;:::-;30588:14;;;;:::i;:::-;30587:20;;;;:::i;:::-;30571:11;;:37;;;;;;;:::i;:::-;;;;;;;;30660:1;30655;30649:3;:7;;;;:::i;:::-;30648:13;;;;:::i;:::-;30619:12;:24;30632:10;30619:24;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;30686:10;30678:28;;;30698:7;30678:28;;;;;;:::i;:::-;;;;;;;;29994:720;;;;;;:::o;32540:175::-;32608:7;32629:9;32640;32653:15;:13;:15::i;:::-;32628:40;;;;32706:1;32701;32687:11;:15;;;;:::i;:::-;32686:21;;;;:::i;:::-;32679:28;;;;32540:175;;;:::o;29755:131::-;29813:4;29837:41;29860:8;29870:7;29837:22;:41::i;:::-;29830:48;;29755:131;;;:::o;28719:143::-;28800:7;28827:11;:18;28839:5;28827:18;;;;;;;;;;;;;;;:27;28846:7;28827:27;;;;;;;;;;;;;;;;28820:34;;28719:143;;;;:::o;31831:417::-;31915:3;;;;;;;;;;;31901:17;;:10;:17;;;31893:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;31950:41;31973:8;31983:7;31950:22;:41::i;:::-;31949:42;31941:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32050:1;32026:12;:21;32039:7;32026:21;;;;;;;;;;;;;;;;:25;32023:171;;;32069:9;32080;32093:15;:13;:15::i;:::-;32068:40;;;;32180:1;32173;32148:12;:21;32161:7;32148:21;;;;;;;;;;;;;;;;:27;;;;:::i;:::-;32147:35;;;;:::i;:::-;32123:12;:21;32136:7;32123:21;;;;;;;;;;;;;;;:59;;;;32023:171;;;32204:36;32222:8;32232:7;32204:17;:36::i;:::-;;31831:417;:::o;5912:152::-;5982:4;6006:50;6011:3;:10;;6047:5;6031:23;;6023:32;;6006:4;:50::i;:::-;5999:57;;5912:152;;;;:::o;32725:337::-;32835:1;32818:19;;:5;:19;;;;32810:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32916:1;32897:21;;:7;:21;;;;32889:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33000:6;32970:11;:18;32982:5;32970:18;;;;;;;;;;;;;;;:27;32989:7;32970:27;;;;;;;;;;;;;;;:36;;;;33038:7;33022:32;;33031:5;33022:32;;;33047:6;33022:32;;;;;;:::i;:::-;;;;;;;;32725:337;;;:::o;6484:167::-;6564:4;6588:55;6598:3;:10;;6634:5;6618:23;;6610:32;;6588:9;:55::i;:::-;6581:62;;6484:167;;;;:::o;6240:158::-;6313:4;6337:53;6345:3;:10;;6381:5;6365:23;;6357:32;;6337:7;:53::i;:::-;6330:60;;6240:158;;;;:::o;33803:1412::-;33915:1;33897:20;;:6;:20;;;;33889:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;33999:1;33978:23;;:9;:23;;;;33970:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34066:1;34060:3;:7;34052:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34122:9;34133;34146:15;:13;:15::i;:::-;34121:40;;;;34172:11;34192:3;34186;:9;;;;:::i;:::-;34172:23;;34206:9;34218:27;34227:6;34235:9;34218:8;:27::i;:::-;34206:39;;34266:17;34260:23;;;;;;;;;;;;;;;;:2;:23;;;;;;;;;;;;;;;;;34256:827;;;34337:1;34332;34326:3;:7;;;;:::i;:::-;34325:13;;;;:::i;:::-;34300:12;:20;34313:6;34300:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34388:3;34382;:9;;;;:::i;:::-;34354:12;:23;34367:9;34354:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;34455:1;34450;34443:3;34437;:9;;;;:::i;:::-;34436:15;;;;:::i;:::-;34435:21;;;;:::i;:::-;34407:12;:23;34420:9;34407:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;34256:827;;;34485:19;34479:25;;;;;;;;;;;;;;;;:2;:25;;;;;;;;;;;;;;;;;34475:608;;;34546:3;34521:12;:20;34534:6;34521:20;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;34602:1;34597;34591:3;:7;;;;:::i;:::-;34590:13;;;;:::i;:::-;34565:12;:20;34578:6;34565:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34667:1;34662;34655:3;34649;:9;;;;:::i;:::-;34648:15;;;;:::i;:::-;34647:21;;;;:::i;:::-;34619:12;:23;34632:9;34619:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;34475:608;;;34697:19;34691:25;;;;;;;;;;;;;;;;:2;:25;;;;;;;;;;;;;;;;;34687:396;;;34758:3;34733:12;:20;34746:6;34733:20;;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;;;;;;;34814:1;34809;34803:3;:7;;;;:::i;:::-;34802:13;;;;:::i;:::-;34777:12;:20;34790:6;34777:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;34865:3;34859;:9;;;;:::i;:::-;34831:12;:23;34844:9;34831:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;34932:1;34927;34920:3;34914;:9;;;;:::i;:::-;34913:15;;;;:::i;:::-;34912:21;;;;:::i;:::-;34884:12;:23;34897:9;34884:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;34687:396;;;35004:1;34999;34993:3;:7;;;;:::i;:::-;34992:13;;;;:::i;:::-;34967:12;:20;34980:6;34967:20;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;35069:1;35064;35057:3;35051;:9;;;;:::i;:::-;35050:15;;;;:::i;:::-;35049:21;;;;:::i;:::-;35021:12;:23;35034:9;35021:23;;;;;;;;;;;;;;;;:50;;;;;;;:::i;:::-;;;;;;;;34687:396;34475:608;34256:827;35122:1;35117;35111:3;:7;;;;:::i;:::-;35110:13;;;;:::i;:::-;35093:11;;:31;;;;;;;:::i;:::-;;;;;;;;35150:3;35135:11;;:18;;;;;;;:::i;:::-;;;;;;;;35186:9;35169:38;;35178:6;35169:38;;;35203:3;35197;:9;;;;:::i;:::-;35169:38;;;;;;:::i;:::-;;;;;;;;33803:1412;;;;;;;:::o;23638:177::-;23721:86;23741:5;23771:23;;;23796:2;23800:5;23748:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23721:19;:86::i;:::-;23638:177;;;:::o;6737:117::-;6800:7;6827:19;6835:3;:10;;6827:7;:19::i;:::-;6820:26;;6737:117;;;:::o;7198:158::-;7272:7;7323:22;7327:3;:10;;7339:5;7323:3;:22::i;:::-;7315:31;;7292:56;;7198:158;;;;:::o;23823:205::-;23924:96;23944:5;23974:27;;;24003:4;24009:2;24013:5;23951:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23924:19;:96::i;:::-;23823:205;;;;:::o;976:414::-;1039:4;1061:21;1071:3;1076:5;1061:9;:21::i;:::-;1056:327;;1099:3;:11;;1116:5;1099:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1282:3;:11;;:18;;;;1260:3;:12;;:19;1273:5;1260:19;;;;;;;;;;;:40;;;;1322:4;1315:11;;;;1056:327;1366:5;1359:12;;976:414;;;;;:::o;3196:129::-;3269:4;3316:1;3293:3;:12;;:19;3306:5;3293:19;;;;;;;;;;;;:24;;3286:31;;3196:129;;;;:::o;1566:1544::-;1632:4;1750:18;1771:3;:12;;:19;1784:5;1771:19;;;;;;;;;;;;1750:40;;1821:1;1807:10;:15;1803:1300;;2169:21;2206:1;2193:10;:14;;;;:::i;:::-;2169:38;;2222:17;2263:1;2242:3;:11;;:18;;;;:22;;;;:::i;:::-;2222:42;;2509:17;2529:3;:11;;2541:9;2529:22;;;;;;;;;;;;;;;;;;;;;;;;2509:42;;2675:9;2646:3;:11;;2658:13;2646:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;2794:1;2778:13;:17;;;;:::i;:::-;2752:3;:12;;:23;2765:9;2752:23;;;;;;;;;;;:43;;;;2904:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2999:3;:12;;:19;3012:5;2999:19;;;;;;;;;;;2992:26;;;3042:4;3035:11;;;;;;;;1803:1300;3086:5;3079:12;;;1566:1544;;;;;:::o;33070:727::-;33146:8;33167:21;33191:40;33214:8;33224:6;33191:22;:40::i;:::-;33167:64;;33242:24;33269:43;33292:8;33302:9;33269:22;:43::i;:::-;33242:70;;33327:16;:40;;;;;33348:19;33347:20;33327:40;33323:448;;;33388:19;33384:23;;33323:448;;;33430:16;33429:17;:40;;;;;33450:19;33429:40;33425:346;;;33490:17;33486:21;;33425:346;;;33530:16;33529:17;:41;;;;;33551:19;33550:20;33529:41;33525:246;;;33591:15;33587:19;;33525:246;;;33628:16;:39;;;;;33648:19;33628:39;33624:147;;;33688:19;33684:23;;33624:147;;;33744:15;33740:19;;33624:147;33525:246;33425:346;33323:448;33781:8;;33070:727;;;;:::o;25941:761::-;26365:23;26391:69;26419:4;26391:69;;;;;;;;;;;;;;;;;26399:5;26391:27;;;;:69;;;;;:::i;:::-;26365:95;;26495:1;26475:10;:17;:21;26471:224;;;26617:10;26606:30;;;;;;;;;;;;:::i;:::-;26598:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;26471:224;25941:761;;;:::o;3411:109::-;3467:7;3494:3;:11;;:18;;;;3487:25;;3411:109;;;:::o;3864:204::-;3931:7;3980:5;3959:3;:11;;:18;;;;:26;3951:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4042:3;:11;;4054:5;4042:18;;;;;;;;;;;;;;;;;;;;;;;;4035:25;;3864:204;;;;:::o;16342:196::-;16445:12;16477:53;16500:6;16508:4;16514:1;16517:12;16477:22;:53::i;:::-;16470:60;;16342:196;;;;;:::o;17719:979::-;17849:12;17882:18;17893:6;17882:10;:18::i;:::-;17874:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18008:12;18022:23;18049:6;:11;;18069:8;18080:4;18049:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18007:78;;;;18100:7;18096:595;;;18131:10;18124:17;;;;;;18096:595;18265:1;18245:10;:17;:21;18241:439;;;18508:10;18502:17;18569:15;18556:10;18552:2;18548:19;18541:44;18456:148;18651:12;18644:20;;;;;;;;;;;:::i;:::-;;;;;;;;17719:979;;;;;;;:::o;13217:619::-;13277:4;13539:16;13566:19;13588:66;13566:88;;;;13757:7;13745:20;13733:32;;13797:11;13785:8;:23;;:42;;;;;13824:3;13812:15;;:8;:15;;13785:42;13777:51;;;;13217:619;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:137::-;206:5;237:6;231:13;222:22;;253:30;277:5;253:30;:::i;:::-;212:77;;;;:::o;295:139::-;341:5;379:6;366:20;357:29;;395:33;422:5;395:33;:::i;:::-;347:87;;;;:::o;440:262::-;499:6;548:2;536:9;527:7;523:23;519:32;516:2;;;564:1;561;554:12;516:2;607:1;632:53;677:7;668:6;657:9;653:22;632:53;:::i;:::-;622:63;;578:117;506:196;;;;:::o;708:407::-;776:6;784;833:2;821:9;812:7;808:23;804:32;801:2;;;849:1;846;839:12;801:2;892:1;917:53;962:7;953:6;942:9;938:22;917:53;:::i;:::-;907:63;;863:117;1019:2;1045:53;1090:7;1081:6;1070:9;1066:22;1045:53;:::i;:::-;1035:63;;990:118;791:324;;;;;:::o;1121:552::-;1198:6;1206;1214;1263:2;1251:9;1242:7;1238:23;1234:32;1231:2;;;1279:1;1276;1269:12;1231:2;1322:1;1347:53;1392:7;1383:6;1372:9;1368:22;1347:53;:::i;:::-;1337:63;;1293:117;1449:2;1475:53;1520:7;1511:6;1500:9;1496:22;1475:53;:::i;:::-;1465:63;;1420:118;1577:2;1603:53;1648:7;1639:6;1628:9;1624:22;1603:53;:::i;:::-;1593:63;;1548:118;1221:452;;;;;:::o;1679:407::-;1747:6;1755;1804:2;1792:9;1783:7;1779:23;1775:32;1772:2;;;1820:1;1817;1810:12;1772:2;1863:1;1888:53;1933:7;1924:6;1913:9;1909:22;1888:53;:::i;:::-;1878:63;;1834:117;1990:2;2016:53;2061:7;2052:6;2041:9;2037:22;2016:53;:::i;:::-;2006:63;;1961:118;1762:324;;;;;:::o;2092:278::-;2159:6;2208:2;2196:9;2187:7;2183:23;2179:32;2176:2;;;2224:1;2221;2214:12;2176:2;2267:1;2292:61;2345:7;2336:6;2325:9;2321:22;2292:61;:::i;:::-;2282:71;;2238:125;2166:204;;;;:::o;2376:262::-;2435:6;2484:2;2472:9;2463:7;2459:23;2455:32;2452:2;;;2500:1;2497;2490:12;2452:2;2543:1;2568:53;2613:7;2604:6;2593:9;2589:22;2568:53;:::i;:::-;2558:63;;2514:117;2442:196;;;;:::o;2644:118::-;2731:24;2749:5;2731:24;:::i;:::-;2726:3;2719:37;2709:53;;:::o;2768:109::-;2849:21;2864:5;2849:21;:::i;:::-;2844:3;2837:34;2827:50;;:::o;2883:373::-;2987:3;3015:38;3047:5;3015:38;:::i;:::-;3069:88;3150:6;3145:3;3069:88;:::i;:::-;3062:95;;3166:52;3211:6;3206:3;3199:4;3192:5;3188:16;3166:52;:::i;:::-;3243:6;3238:3;3234:16;3227:23;;2991:265;;;;;:::o;3262:159::-;3363:51;3408:5;3363:51;:::i;:::-;3358:3;3351:64;3341:80;;:::o;3427:364::-;3515:3;3543:39;3576:5;3543:39;:::i;:::-;3598:71;3662:6;3657:3;3598:71;:::i;:::-;3591:78;;3678:52;3723:6;3718:3;3711:4;3704:5;3700:16;3678:52;:::i;:::-;3755:29;3777:6;3755:29;:::i;:::-;3750:3;3746:39;3739:46;;3519:272;;;;;:::o;3797:366::-;3939:3;3960:67;4024:2;4019:3;3960:67;:::i;:::-;3953:74;;4036:93;4125:3;4036:93;:::i;:::-;4154:2;4149:3;4145:12;4138:19;;3943:220;;;:::o;4169:366::-;4311:3;4332:67;4396:2;4391:3;4332:67;:::i;:::-;4325:74;;4408:93;4497:3;4408:93;:::i;:::-;4526:2;4521:3;4517:12;4510:19;;4315:220;;;:::o;4541:366::-;4683:3;4704:67;4768:2;4763:3;4704:67;:::i;:::-;4697:74;;4780:93;4869:3;4780:93;:::i;:::-;4898:2;4893:3;4889:12;4882:19;;4687:220;;;:::o;4913:366::-;5055:3;5076:67;5140:2;5135:3;5076:67;:::i;:::-;5069:74;;5152:93;5241:3;5152:93;:::i;:::-;5270:2;5265:3;5261:12;5254:19;;5059:220;;;:::o;5285:366::-;5427:3;5448:67;5512:2;5507:3;5448:67;:::i;:::-;5441:74;;5524:93;5613:3;5524:93;:::i;:::-;5642:2;5637:3;5633:12;5626:19;;5431:220;;;:::o;5657:366::-;5799:3;5820:67;5884:2;5879:3;5820:67;:::i;:::-;5813:74;;5896:93;5985:3;5896:93;:::i;:::-;6014:2;6009:3;6005:12;5998:19;;5803:220;;;:::o;6029:365::-;6171:3;6192:66;6256:1;6251:3;6192:66;:::i;:::-;6185:73;;6267:93;6356:3;6267:93;:::i;:::-;6385:2;6380:3;6376:12;6369:19;;6175:219;;;:::o;6400:366::-;6542:3;6563:67;6627:2;6622:3;6563:67;:::i;:::-;6556:74;;6639:93;6728:3;6639:93;:::i;:::-;6757:2;6752:3;6748:12;6741:19;;6546:220;;;:::o;6772:366::-;6914:3;6935:67;6999:2;6994:3;6935:67;:::i;:::-;6928:74;;7011:93;7100:3;7011:93;:::i;:::-;7129:2;7124:3;7120:12;7113:19;;6918:220;;;:::o;7144:366::-;7286:3;7307:67;7371:2;7366:3;7307:67;:::i;:::-;7300:74;;7383:93;7472:3;7383:93;:::i;:::-;7501:2;7496:3;7492:12;7485:19;;7290:220;;;:::o;7516:366::-;7658:3;7679:67;7743:2;7738:3;7679:67;:::i;:::-;7672:74;;7755:93;7844:3;7755:93;:::i;:::-;7873:2;7868:3;7864:12;7857:19;;7662:220;;;:::o;7888:366::-;8030:3;8051:67;8115:2;8110:3;8051:67;:::i;:::-;8044:74;;8127:93;8216:3;8127:93;:::i;:::-;8245:2;8240:3;8236:12;8229:19;;8034:220;;;:::o;8260:366::-;8402:3;8423:67;8487:2;8482:3;8423:67;:::i;:::-;8416:74;;8499:93;8588:3;8499:93;:::i;:::-;8617:2;8612:3;8608:12;8601:19;;8406:220;;;:::o;8632:366::-;8774:3;8795:67;8859:2;8854:3;8795:67;:::i;:::-;8788:74;;8871:93;8960:3;8871:93;:::i;:::-;8989:2;8984:3;8980:12;8973:19;;8778:220;;;:::o;9004:118::-;9091:24;9109:5;9091:24;:::i;:::-;9086:3;9079:37;9069:53;;:::o;9128:112::-;9211:22;9227:5;9211:22;:::i;:::-;9206:3;9199:35;9189:51;;:::o;9246:271::-;9376:3;9398:93;9487:3;9478:6;9398:93;:::i;:::-;9391:100;;9508:3;9501:10;;9380:137;;;;:::o;9523:442::-;9672:4;9710:2;9699:9;9695:18;9687:26;;9723:71;9791:1;9780:9;9776:17;9767:6;9723:71;:::i;:::-;9804:72;9872:2;9861:9;9857:18;9848:6;9804:72;:::i;:::-;9886;9954:2;9943:9;9939:18;9930:6;9886:72;:::i;:::-;9677:288;;;;;;:::o;9971:332::-;10092:4;10130:2;10119:9;10115:18;10107:26;;10143:71;10211:1;10200:9;10196:17;10187:6;10143:71;:::i;:::-;10224:72;10292:2;10281:9;10277:18;10268:6;10224:72;:::i;:::-;10097:206;;;;;:::o;10309:210::-;10396:4;10434:2;10423:9;10419:18;10411:26;;10447:65;10509:1;10498:9;10494:17;10485:6;10447:65;:::i;:::-;10401:118;;;;:::o;10525:250::-;10632:4;10670:2;10659:9;10655:18;10647:26;;10683:85;10765:1;10754:9;10750:17;10741:6;10683:85;:::i;:::-;10637:138;;;;:::o;10781:313::-;10894:4;10932:2;10921:9;10917:18;10909:26;;10981:9;10975:4;10971:20;10967:1;10956:9;10952:17;10945:47;11009:78;11082:4;11073:6;11009:78;:::i;:::-;11001:86;;10899:195;;;;:::o;11100:419::-;11266:4;11304:2;11293:9;11289:18;11281:26;;11353:9;11347:4;11343:20;11339:1;11328:9;11324:17;11317:47;11381:131;11507:4;11381:131;:::i;:::-;11373:139;;11271:248;;;:::o;11525:419::-;11691:4;11729:2;11718:9;11714:18;11706:26;;11778:9;11772:4;11768:20;11764:1;11753:9;11749:17;11742:47;11806:131;11932:4;11806:131;:::i;:::-;11798:139;;11696:248;;;:::o;11950:419::-;12116:4;12154:2;12143:9;12139:18;12131:26;;12203:9;12197:4;12193:20;12189:1;12178:9;12174:17;12167:47;12231:131;12357:4;12231:131;:::i;:::-;12223:139;;12121:248;;;:::o;12375:419::-;12541:4;12579:2;12568:9;12564:18;12556:26;;12628:9;12622:4;12618:20;12614:1;12603:9;12599:17;12592:47;12656:131;12782:4;12656:131;:::i;:::-;12648:139;;12546:248;;;:::o;12800:419::-;12966:4;13004:2;12993:9;12989:18;12981:26;;13053:9;13047:4;13043:20;13039:1;13028:9;13024:17;13017:47;13081:131;13207:4;13081:131;:::i;:::-;13073:139;;12971:248;;;:::o;13225:419::-;13391:4;13429:2;13418:9;13414:18;13406:26;;13478:9;13472:4;13468:20;13464:1;13453:9;13449:17;13442:47;13506:131;13632:4;13506:131;:::i;:::-;13498:139;;13396:248;;;:::o;13650:419::-;13816:4;13854:2;13843:9;13839:18;13831:26;;13903:9;13897:4;13893:20;13889:1;13878:9;13874:17;13867:47;13931:131;14057:4;13931:131;:::i;:::-;13923:139;;13821:248;;;:::o;14075:419::-;14241:4;14279:2;14268:9;14264:18;14256:26;;14328:9;14322:4;14318:20;14314:1;14303:9;14299:17;14292:47;14356:131;14482:4;14356:131;:::i;:::-;14348:139;;14246:248;;;:::o;14500:419::-;14666:4;14704:2;14693:9;14689:18;14681:26;;14753:9;14747:4;14743:20;14739:1;14728:9;14724:17;14717:47;14781:131;14907:4;14781:131;:::i;:::-;14773:139;;14671:248;;;:::o;14925:419::-;15091:4;15129:2;15118:9;15114:18;15106:26;;15178:9;15172:4;15168:20;15164:1;15153:9;15149:17;15142:47;15206:131;15332:4;15206:131;:::i;:::-;15198:139;;15096:248;;;:::o;15350:419::-;15516:4;15554:2;15543:9;15539:18;15531:26;;15603:9;15597:4;15593:20;15589:1;15578:9;15574:17;15567:47;15631:131;15757:4;15631:131;:::i;:::-;15623:139;;15521:248;;;:::o;15775:419::-;15941:4;15979:2;15968:9;15964:18;15956:26;;16028:9;16022:4;16018:20;16014:1;16003:9;15999:17;15992:47;16056:131;16182:4;16056:131;:::i;:::-;16048:139;;15946:248;;;:::o;16200:419::-;16366:4;16404:2;16393:9;16389:18;16381:26;;16453:9;16447:4;16443:20;16439:1;16428:9;16424:17;16417:47;16481:131;16607:4;16481:131;:::i;:::-;16473:139;;16371:248;;;:::o;16625:419::-;16791:4;16829:2;16818:9;16814:18;16806:26;;16878:9;16872:4;16868:20;16864:1;16853:9;16849:17;16842:47;16906:131;17032:4;16906:131;:::i;:::-;16898:139;;16796:248;;;:::o;17050:222::-;17143:4;17181:2;17170:9;17166:18;17158:26;;17194:71;17262:1;17251:9;17247:17;17238:6;17194:71;:::i;:::-;17148:124;;;;:::o;17278:332::-;17399:4;17437:2;17426:9;17422:18;17414:26;;17450:71;17518:1;17507:9;17503:17;17494:6;17450:71;:::i;:::-;17531:72;17599:2;17588:9;17584:18;17575:6;17531:72;:::i;:::-;17404:206;;;;;:::o;17616:214::-;17705:4;17743:2;17732:9;17728:18;17720:26;;17756:67;17820:1;17809:9;17805:17;17796:6;17756:67;:::i;:::-;17710:120;;;;:::o;17836:98::-;17887:6;17921:5;17915:12;17905:22;;17894:40;;;:::o;17940:99::-;17992:6;18026:5;18020:12;18010:22;;17999:40;;;:::o;18045:147::-;18146:11;18183:3;18168:18;;18158:34;;;;:::o;18198:169::-;18282:11;18316:6;18311:3;18304:19;18356:4;18351:3;18347:14;18332:29;;18294:73;;;;:::o;18373:305::-;18413:3;18432:20;18450:1;18432:20;:::i;:::-;18427:25;;18466:20;18484:1;18466:20;:::i;:::-;18461:25;;18620:1;18552:66;18548:74;18545:1;18542:81;18539:2;;;18626:18;;:::i;:::-;18539:2;18670:1;18667;18663:9;18656:16;;18417:261;;;;:::o;18684:185::-;18724:1;18741:20;18759:1;18741:20;:::i;:::-;18736:25;;18775:20;18793:1;18775:20;:::i;:::-;18770:25;;18814:1;18804:2;;18819:18;;:::i;:::-;18804:2;18861:1;18858;18854:9;18849:14;;18726:143;;;;:::o;18875:348::-;18915:7;18938:20;18956:1;18938:20;:::i;:::-;18933:25;;18972:20;18990:1;18972:20;:::i;:::-;18967:25;;19160:1;19092:66;19088:74;19085:1;19082:81;19077:1;19070:9;19063:17;19059:105;19056:2;;;19167:18;;:::i;:::-;19056:2;19215:1;19212;19208:9;19197:20;;18923:300;;;;:::o;19229:191::-;19269:4;19289:20;19307:1;19289:20;:::i;:::-;19284:25;;19323:20;19341:1;19323:20;:::i;:::-;19318:25;;19362:1;19359;19356:8;19353:2;;;19367:18;;:::i;:::-;19353:2;19412:1;19409;19405:9;19397:17;;19274:146;;;;:::o;19426:96::-;19463:7;19492:24;19510:5;19492:24;:::i;:::-;19481:35;;19471:51;;;:::o;19528:90::-;19562:7;19605:5;19598:13;19591:21;19580:32;;19570:48;;;:::o;19624:126::-;19661:7;19701:42;19694:5;19690:54;19679:65;;19669:81;;;:::o;19756:77::-;19793:7;19822:5;19811:16;;19801:32;;;:::o;19839:86::-;19874:7;19914:4;19907:5;19903:16;19892:27;;19882:43;;;:::o;19931:154::-;19995:9;20028:51;20073:5;20028:51;:::i;:::-;20015:64;;20005:80;;;:::o;20091:127::-;20155:9;20188:24;20206:5;20188:24;:::i;:::-;20175:37;;20165:53;;;:::o;20224:307::-;20292:1;20302:113;20316:6;20313:1;20310:13;20302:113;;;20401:1;20396:3;20392:11;20386:18;20382:1;20377:3;20373:11;20366:39;20338:2;20335:1;20331:10;20326:15;;20302:113;;;20433:6;20430:1;20427:13;20424:2;;;20513:1;20504:6;20499:3;20495:16;20488:27;20424:2;20273:258;;;;:::o;20537:320::-;20581:6;20618:1;20612:4;20608:12;20598:22;;20665:1;20659:4;20655:12;20686:18;20676:2;;20742:4;20734:6;20730:17;20720:27;;20676:2;20804;20796:6;20793:14;20773:18;20770:38;20767:2;;;20823:18;;:::i;:::-;20767:2;20588:269;;;;:::o;20863:233::-;20902:3;20925:24;20943:5;20925:24;:::i;:::-;20916:33;;20971:66;20964:5;20961:77;20958:2;;;21041:18;;:::i;:::-;20958:2;21088:1;21081:5;21077:13;21070:20;;20906:190;;;:::o;21102:180::-;21150:77;21147:1;21140:88;21247:4;21244:1;21237:15;21271:4;21268:1;21261:15;21288:180;21336:77;21333:1;21326:88;21433:4;21430:1;21423:15;21457:4;21454:1;21447:15;21474:180;21522:77;21519:1;21512:88;21619:4;21616:1;21609:15;21643:4;21640:1;21633:15;21660:102;21701:6;21752:2;21748:7;21743:2;21736:5;21732:14;21728:28;21718:38;;21708:54;;;:::o;21768:221::-;21908:34;21904:1;21896:6;21892:14;21885:58;21977:4;21972:2;21964:6;21960:15;21953:29;21874:115;:::o;21995:222::-;22135:34;22131:1;22123:6;22119:14;22112:58;22204:5;22199:2;22191:6;22187:15;22180:30;22101:116;:::o;22223:171::-;22363:23;22359:1;22351:6;22347:14;22340:47;22329:65;:::o;22400:221::-;22540:34;22536:1;22528:6;22524:14;22517:58;22609:4;22604:2;22596:6;22592:15;22585:29;22506:115;:::o;22627:166::-;22767:18;22763:1;22755:6;22751:14;22744:42;22733:60;:::o;22799:161::-;22939:13;22935:1;22927:6;22923:14;22916:37;22905:55;:::o;22966:157::-;23106:9;23102:1;23094:6;23090:14;23083:33;23072:51;:::o;23129:165::-;23269:17;23265:1;23257:6;23253:14;23246:41;23235:59;:::o;23300:224::-;23440:34;23436:1;23428:6;23424:14;23417:58;23509:7;23504:2;23496:6;23492:15;23485:32;23406:118;:::o;23530:166::-;23670:18;23666:1;23658:6;23654:14;23647:42;23636:60;:::o;23702:223::-;23842:34;23838:1;23830:6;23826:14;23819:58;23911:6;23906:2;23898:6;23894:15;23887:31;23808:117;:::o;23931:179::-;24071:31;24067:1;24059:6;24055:14;24048:55;24037:73;:::o;24116:229::-;24256:34;24252:1;24244:6;24240:14;24233:58;24325:12;24320:2;24312:6;24308:15;24301:37;24222:123;:::o;24351:225::-;24491:34;24487:1;24479:6;24475:14;24468:58;24560:8;24555:2;24547:6;24543:15;24536:33;24457:119;:::o;24582:122::-;24655:24;24673:5;24655:24;:::i;:::-;24648:5;24645:35;24635:2;;24694:1;24691;24684:12;24635:2;24625:79;:::o;24710:116::-;24780:21;24795:5;24780:21;:::i;:::-;24773:5;24770:32;24760:2;;24816:1;24813;24806:12;24760:2;24750:76;:::o;24832:122::-;24905:24;24923:5;24905:24;:::i;:::-;24898:5;24895:35;24885:2;;24944:1;24941;24934:12;24885:2;24875:79;:::o

Swarm Source

ipfs://c284898ee0a36f74682c00571b9541ba0cd43337d93d8739d8d17e843b05e74e
Loading...
Loading
Loading...
Loading
[ 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.