More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 282 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw | 16342507 | 752 days ago | IN | 0 ETH | 0.00301972 | ||||
Withdraw | 16269884 | 763 days ago | IN | 0 ETH | 0.00242312 | ||||
Withdraw | 16269836 | 763 days ago | IN | 0 ETH | 0.00688869 | ||||
Withdraw | 16251618 | 765 days ago | IN | 0 ETH | 0.00555302 | ||||
Withdraw | 16251093 | 765 days ago | IN | 0 ETH | 0.0019435 | ||||
Withdraw | 16251090 | 765 days ago | IN | 0 ETH | 0.00209074 | ||||
Withdraw | 16250648 | 765 days ago | IN | 0 ETH | 0.00157839 | ||||
Withdraw | 16250516 | 765 days ago | IN | 0 ETH | 0.00710628 | ||||
Withdraw | 16250079 | 765 days ago | IN | 0 ETH | 0.00232607 | ||||
Withdraw | 16249961 | 765 days ago | IN | 0 ETH | 0.00205325 | ||||
Withdraw | 16249826 | 765 days ago | IN | 0 ETH | 0.00216624 | ||||
Withdraw | 16249776 | 765 days ago | IN | 0 ETH | 0.0023957 | ||||
Withdraw | 16249762 | 765 days ago | IN | 0 ETH | 0.00192015 | ||||
Withdraw | 16249150 | 765 days ago | IN | 0 ETH | 0.00478688 | ||||
Withdraw | 16248869 | 765 days ago | IN | 0 ETH | 0.00354296 | ||||
Withdraw | 16248835 | 765 days ago | IN | 0 ETH | 0.00386609 | ||||
Withdraw | 16248701 | 765 days ago | IN | 0 ETH | 0.00194362 | ||||
Withdraw | 16248700 | 765 days ago | IN | 0 ETH | 0.00229048 | ||||
Withdraw | 16248684 | 765 days ago | IN | 0 ETH | 0.00211946 | ||||
Withdraw | 16248670 | 765 days ago | IN | 0 ETH | 0.002444 | ||||
Withdraw | 16248659 | 765 days ago | IN | 0 ETH | 0.00402404 | ||||
Withdraw | 16248646 | 765 days ago | IN | 0 ETH | 0.00300528 | ||||
Withdraw | 16248623 | 765 days ago | IN | 0 ETH | 0.00221171 | ||||
Withdraw | 16248601 | 765 days ago | IN | 0 ETH | 0.00331232 | ||||
Withdraw | 16248598 | 765 days ago | IN | 0 ETH | 0.00261796 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BullRunStaking
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-12-22 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @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"); (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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { 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' 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) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @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 require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: nftstaking.sol pragma solidity ^0.8.9; error InsufficientBalance(uint256 availableBRL, uint256 requiredBRL, uint256 availableNFTs, uint256 requiredNFTs); error NotYetStarted(); error AlreadyStarted(); error AlreadyFinished(); contract BullRunStaking is Ownable { using SafeERC20 for IERC20; struct UserInfo { uint256 amount; uint256 nftBalance; uint256 rewardDebt; uint256 startTime; uint256 totalRewards; } //Pool Info IERC20 public brl; //staking token IERC1155 public nft; //nft to stake uint256 public lastRewardTimestamp; uint256 public accUSDCPerShare; uint256 public usdcPerSecond; uint256 public rewardSupply; mapping(address => UserInfo) public userInfo; address public constant usdc = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; uint256 public startTime; bool public started; bool public finished; event DepositBRL(address indexed user, uint256 amount); event WithdrawBRL(address indexed user, uint256 amount); event DepositNFT(address indexed user, uint256 amount); event WithdrawNFT(address indexed user, uint256 amount); constructor(IERC20 _brl, IERC1155 _nft, uint256 _usdcPerSecond) { brl = _brl; nft = _nft; usdcPerSecond = _usdcPerSecond; } function pendingUSDC(address _user) external view returns (uint256) { UserInfo storage user = userInfo[_user]; uint256 _accUSDCPerShare = accUSDCPerShare; uint256 balance = brl.balanceOf(address(this)); if (block.timestamp > lastRewardTimestamp && balance != 0) { uint256 usdcReward = (block.timestamp - lastRewardTimestamp) * usdcPerSecond; _accUSDCPerShare += (usdcReward * 1e12 / balance); } uint256 nftBalance = user.nftBalance; uint256 multiplier = nftBalance < 5 ? 70 + (nftBalance * 6) : 100; return ((user.amount * _accUSDCPerShare / 1e12) - user.rewardDebt) * multiplier / 100; } function updatePool() public { uint256 timestamp = block.timestamp; if (!started) { revert NotYetStarted(); } if (timestamp <= lastRewardTimestamp) { return; } uint256 balance = brl.balanceOf(address(this)); if (balance == 0) { lastRewardTimestamp = timestamp; return; } uint256 usdcReward = (timestamp - lastRewardTimestamp) * usdcPerSecond; accUSDCPerShare += (usdcReward * 1e12 / balance); lastRewardTimestamp = timestamp; rewardSupply += usdcReward; } function _claimRewards(uint256 nftBalance, uint256 amount, uint256 rewardDebt) internal returns (uint256 amountToSend) { uint256 multiplier = nftBalance < 5 ? 70 + (nftBalance * 6) : 100; uint256 totalRewards = (amount * accUSDCPerShare / 1e12) - rewardDebt; uint256 pending = totalRewards * multiplier / 100; uint256 usdcBalance = IERC20(usdc).balanceOf(address(this)); amountToSend = pending > usdcBalance ? usdcBalance : pending; IERC20(usdc).transfer(msg.sender, amountToSend); rewardSupply -= totalRewards; } function deposit(uint256 _brlAmount, uint256 _nftAmount) external { UserInfo storage user = userInfo[msg.sender]; updatePool(); if (user.amount > 0) { uint256 amountTransferred = _claimRewards(user.nftBalance, user.amount, user.rewardDebt); user.totalRewards += amountTransferred; } if (_brlAmount > 0) { brl.safeTransferFrom(address(msg.sender), address(this), _brlAmount); //for apy calculations if (user.amount == 0) { user.startTime = block.timestamp; user.totalRewards = 0; } //update balances user.amount += _brlAmount; emit DepositBRL(msg.sender, _brlAmount); } if (_nftAmount > 0) { user.nftBalance += _nftAmount; nft.safeTransferFrom(msg.sender, address(this), 0, _nftAmount, ""); emit DepositNFT(msg.sender, _nftAmount); } user.rewardDebt = user.amount * accUSDCPerShare / 1e12; } function withdraw(uint256 _brlAmount, uint256 _nftAmount) external { UserInfo storage user = userInfo[msg.sender]; if (_brlAmount > user.amount || _nftAmount > user.nftBalance) { revert InsufficientBalance(user.amount, _brlAmount, user.nftBalance, _nftAmount); } updatePool(); if (user.amount > 0) { uint256 amountTransferred = _claimRewards(user.nftBalance, user.amount, user.rewardDebt); user.totalRewards += amountTransferred; } if (_brlAmount > 0) { user.amount -= _brlAmount; brl.safeTransfer(address(msg.sender), _brlAmount); emit WithdrawBRL(msg.sender, _brlAmount); } user.rewardDebt = user.amount * accUSDCPerShare / 1e12; if (_nftAmount > 0) { user.nftBalance -= _nftAmount; nft.safeTransferFrom(address(this), msg.sender, 0, _nftAmount, ""); emit WithdrawNFT(msg.sender, _nftAmount); } } function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual returns (bytes4) { return this.onERC1155Received.selector; } function setRewardRate(uint256 _usdcPerSecond) external onlyOwner { if (finished) { revert AlreadyFinished(); } usdcPerSecond = _usdcPerSecond; } function startPool(uint256 _startTime) external onlyOwner { if (started) { revert AlreadyStarted(); } started = true; startTime = _startTime; lastRewardTimestamp = _startTime; } function finishPool() external onlyOwner { if (finished) { revert AlreadyFinished(); } finished = true; updatePool(); usdcPerSecond = 0; uint256 usdcBalance = IERC20(usdc).balanceOf(address(this)); if (usdcBalance > rewardSupply) { IERC20(usdc).transfer(owner(), usdcBalance - rewardSupply); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IERC20","name":"_brl","type":"address"},{"internalType":"contract IERC1155","name":"_nft","type":"address"},{"internalType":"uint256","name":"_usdcPerSecond","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyFinished","type":"error"},{"inputs":[],"name":"AlreadyStarted","type":"error"},{"inputs":[{"internalType":"uint256","name":"availableBRL","type":"uint256"},{"internalType":"uint256","name":"requiredBRL","type":"uint256"},{"internalType":"uint256","name":"availableNFTs","type":"uint256"},{"internalType":"uint256","name":"requiredNFTs","type":"uint256"}],"name":"InsufficientBalance","type":"error"},{"inputs":[],"name":"NotYetStarted","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositBRL","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawBRL","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawNFT","type":"event"},{"inputs":[],"name":"accUSDCPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"brl","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_brlAmount","type":"uint256"},{"internalType":"uint256","name":"_nftAmount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finishPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"finished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRewardTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nft","outputs":[{"internalType":"contract IERC1155","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"pendingUSDC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_usdcPerSecond","type":"uint256"}],"name":"setRewardRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"startPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"started","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdc","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdcPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nftBalance","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"totalRewards","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_brlAmount","type":"uint256"},{"internalType":"uint256","name":"_nftAmount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002739380380620027398339818101604052810190620000379190620002b3565b620000576200004b620000e960201b60201c565b620000f160201b60201c565b82600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806005819055505050506200030f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001e782620001ba565b9050919050565b6000620001fb82620001da565b9050919050565b6200020d81620001ee565b81146200021957600080fd5b50565b6000815190506200022d8162000202565b92915050565b60006200024082620001da565b9050919050565b620002528162000233565b81146200025e57600080fd5b50565b600081519050620002728162000247565b92915050565b6000819050919050565b6200028d8162000278565b81146200029957600080fd5b50565b600081519050620002ad8162000282565b92915050565b600080600060608486031215620002cf57620002ce620001b5565b5b6000620002df868287016200021c565b9350506020620002f28682870162000261565b925050604062000305868287016200029c565b9150509250925092565b61241a806200031f6000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063e2bbb1581161007c578063e2bbb15814610321578063e3161ddd1461033d578063e87220d114610347578063f23a6e6114610365578063f2fde38b14610395578063f8077fae146103b157610142565b80638da5cb5b1461028f578063961b083b146102ad5780639e447fc6146102cb578063a901d15c146102e7578063bef4876b1461030357610142565b80635a8596511161010a5780635a859651146101f15780636b0c341b1461020f578063715018a61461022d57806375aa15771461023757806378e9792514610267578063821e04181461028557610142565b80631959a002146101475780631f2698ab1461017b5780633e413bee14610199578063441a3e70146101b757806347ccca02146101d3575b600080fd5b610161600480360381019061015c919061183b565b6103cf565b604051610172959493929190611881565b60405180910390f35b610183610405565b60405161019091906118ef565b60405180910390f35b6101a1610418565b6040516101ae9190611919565b60405180910390f35b6101d160048036038101906101cc9190611960565b610430565b005b6101db61071b565b6040516101e891906119ff565b60405180910390f35b6101f9610741565b6040516102069190611a3b565b60405180910390f35b610217610767565b6040516102249190611a56565b60405180910390f35b61023561076d565b005b610251600480360381019061024c919061183b565b610781565b60405161025e9190611a56565b60405180910390f35b61026f610955565b60405161027c9190611a56565b60405180910390f35b61028d61095b565b005b610297610b1c565b6040516102a49190611919565b60405180910390f35b6102b5610b45565b6040516102c29190611a56565b60405180910390f35b6102e560048036038101906102e09190611a71565b610b4b565b005b61030160048036038101906102fc9190611a71565b610ba4565b005b61030b610c1f565b60405161031891906118ef565b60405180910390f35b61033b60048036038101906103369190611960565b610c32565b005b610345610edb565b005b61034f611065565b60405161035c9190611a56565b60405180910390f35b61037f600480360381019061037a9190611be4565b61106b565b60405161038c9190611cb6565b60405180910390f35b6103af60048036038101906103aa919061183b565b611080565b005b6103b9611104565b6040516103c69190611a56565b60405180910390f35b60076020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b600960009054906101000a900460ff1681565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001548311806104885750806001015482115b156104d8578060000154838260010154846040517f1b07dbd70000000000000000000000000000000000000000000000000000000081526004016104cf9493929190611cd1565b60405180910390fd5b6104e0610edb565b60008160000154111561052557600061050682600101548360000154846002015461110a565b90508082600401600082825461051c9190611d45565b92505081905550505b60008311156105e557828160000160008282546105429190611d9b565b925050819055506105963384600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112db9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f857a34e305ae4b16080c21c158b902dcd6d4ab95bf7fce5d00132a9161720280846040516105dc9190611a56565b60405180910390a25b64e8d4a5100060045482600001546105fd9190611dcf565b6106079190611e58565b81600201819055506000821115610716578181600101600082825461062c9190611d9b565b92505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30336000866040518563ffffffff1660e01b81526004016106959493929190611efb565b600060405180830381600087803b1580156106af57600080fd5b505af11580156106c3573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f3a1474f7e987c73586ba37f580025eac82a1456e87b9eace40768b8518a4b3758360405161070d9190611a56565b60405180910390a25b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b610775611361565b61077f60006113df565b565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060045490506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108299190611919565b602060405180830381865afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190611f68565b90506003544211801561087e575060008114155b156108cd576000600554600354426108969190611d9b565b6108a09190611dcf565b90508164e8d4a51000826108b49190611dcf565b6108be9190611e58565b836108c99190611d45565b9250505b6000836001015490506000600582106108e7576064610901565b6006826108f49190611dcf565b60466109009190611d45565b5b9050606481866002015464e8d4a510008789600001546109219190611dcf565b61092b9190611e58565b6109359190611d9b565b61093f9190611dcf565b6109499190611e58565b95505050505050919050565b60085481565b610963611361565b600960019054906101000a900460ff16156109aa576040517f36a683ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600960016101000a81548160ff0219169083151502179055506109cd610edb565b6000600581905550600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a249190611919565b602060405180830381865afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190611f68565b9050600654811115610b195773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610aa9610b1c565b60065484610ab79190611d9b565b6040518363ffffffff1660e01b8152600401610ad4929190611f95565b6020604051808303816000875af1158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b179190611fea565b505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055481565b610b53611361565b600960019054906101000a900460ff1615610b9a576040517f36a683ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060058190555050565b610bac611361565b600960009054906101000a900460ff1615610bf3576040517f1fbde44500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600960006101000a81548160ff021916908315150217905550806008819055508060038190555050565b600960019054906101000a900460ff1681565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610c7d610edb565b600081600001541115610cc2576000610ca382600101548360000154846002015461110a565b905080826004016000828254610cb99190611d45565b92505081905550505b6000831115610da557610d1a333085600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114a3909392919063ffffffff16565b600081600001541415610d3b57428160030181905550600081600401819055505b82816000016000828254610d4f9190611d45565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fa590458b91b688d40da5e616ab851c3cd2be1f151c41755266055eb43059a8d384604051610d9c9190611a56565b60405180910390a25b6000821115610eac5781816001016000828254610dc29190611d45565b92505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a33306000866040518563ffffffff1660e01b8152600401610e2b9493929190611efb565b600060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f92870ae08c3555517c02835983340c2b7a7cd081d53eda12eb28e69a28924cb683604051610ea39190611a56565b60405180910390a25b64e8d4a510006004548260000154610ec49190611dcf565b610ece9190611e58565b8160020181905550505050565b6000429050600960009054906101000a900460ff16610f26576040517fef6e77c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003548111610f355750611063565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f929190611919565b602060405180830381865afa158015610faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd39190611f68565b90506000811415610fec57816003819055505050611063565b600060055460035484610fff9190611d9b565b6110099190611dcf565b90508164e8d4a510008261101d9190611dcf565b6110279190611e58565b600460008282546110389190611d45565b925050819055508260038190555080600660008282546110589190611d45565b925050819055505050505b565b60045481565b600063f23a6e6160e01b905095945050505050565b611088611361565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef9061209a565b60405180910390fd5b611101816113df565b50565b60035481565b6000806005851061111c576064611136565b6006856111299190611dcf565b60466111359190611d45565b5b905060008364e8d4a510006004548761114f9190611dcf565b6111599190611e58565b6111639190611d9b565b90506000606483836111759190611dcf565b61117f9190611e58565b9050600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111d09190611919565b602060405180830381865afa1580156111ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112119190611f68565b90508082116112205781611222565b805b945073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33876040518363ffffffff1660e01b8152600401611273929190611f95565b6020604051808303816000875af1158015611292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b69190611fea565b5082600660008282546112c99190611d9b565b92505081905550505050509392505050565b61135c8363a9059cbb60e01b84846040516024016112fa929190611f95565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061152c565b505050565b6113696115f3565b73ffffffffffffffffffffffffffffffffffffffff16611387610b1c565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490612106565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611526846323b872dd60e01b8585856040516024016114c493929190612126565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061152c565b50505050565b600061158e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166115fb9092919063ffffffff16565b90506000815111156115ee57808060200190518101906115ae9190611fea565b6115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e4906121cf565b60405180910390fd5b5b505050565b600033905090565b606061160a8484600085611613565b90509392505050565b606082471015611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90612261565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161168191906122fb565b60006040518083038185875af1925050503d80600081146116be576040519150601f19603f3d011682016040523d82523d6000602084013e6116c3565b606091505b50915091506116d4878383876116e0565b92505050949350505050565b606083156117435760008351141561173b576116fb85611756565b61173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061235e565b60405180910390fd5b5b82905061174e565b61174d8383611779565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561178c5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c091906123c2565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611808826117dd565b9050919050565b611818816117fd565b811461182357600080fd5b50565b6000813590506118358161180f565b92915050565b600060208284031215611851576118506117d3565b5b600061185f84828501611826565b91505092915050565b6000819050919050565b61187b81611868565b82525050565b600060a0820190506118966000830188611872565b6118a36020830187611872565b6118b06040830186611872565b6118bd6060830185611872565b6118ca6080830184611872565b9695505050505050565b60008115159050919050565b6118e9816118d4565b82525050565b600060208201905061190460008301846118e0565b92915050565b611913816117fd565b82525050565b600060208201905061192e600083018461190a565b92915050565b61193d81611868565b811461194857600080fd5b50565b60008135905061195a81611934565b92915050565b60008060408385031215611977576119766117d3565b5b60006119858582860161194b565b92505060206119968582860161194b565b9150509250929050565b6000819050919050565b60006119c56119c06119bb846117dd565b6119a0565b6117dd565b9050919050565b60006119d7826119aa565b9050919050565b60006119e9826119cc565b9050919050565b6119f9816119de565b82525050565b6000602082019050611a1460008301846119f0565b92915050565b6000611a25826119cc565b9050919050565b611a3581611a1a565b82525050565b6000602082019050611a506000830184611a2c565b92915050565b6000602082019050611a6b6000830184611872565b92915050565b600060208284031215611a8757611a866117d3565b5b6000611a958482850161194b565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611af182611aa8565b810181811067ffffffffffffffff82111715611b1057611b0f611ab9565b5b80604052505050565b6000611b236117c9565b9050611b2f8282611ae8565b919050565b600067ffffffffffffffff821115611b4f57611b4e611ab9565b5b611b5882611aa8565b9050602081019050919050565b82818337600083830152505050565b6000611b87611b8284611b34565b611b19565b905082815260208101848484011115611ba357611ba2611aa3565b5b611bae848285611b65565b509392505050565b600082601f830112611bcb57611bca611a9e565b5b8135611bdb848260208601611b74565b91505092915050565b600080600080600060a08688031215611c0057611bff6117d3565b5b6000611c0e88828901611826565b9550506020611c1f88828901611826565b9450506040611c308882890161194b565b9350506060611c418882890161194b565b925050608086013567ffffffffffffffff811115611c6257611c616117d8565b5b611c6e88828901611bb6565b9150509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611cb081611c7b565b82525050565b6000602082019050611ccb6000830184611ca7565b92915050565b6000608082019050611ce66000830187611872565b611cf36020830186611872565b611d006040830185611872565b611d0d6060830184611872565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d5082611868565b9150611d5b83611868565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d9057611d8f611d16565b5b828201905092915050565b6000611da682611868565b9150611db183611868565b925082821015611dc457611dc3611d16565b5b828203905092915050565b6000611dda82611868565b9150611de583611868565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e1e57611e1d611d16565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e6382611868565b9150611e6e83611868565b925082611e7e57611e7d611e29565b5b828204905092915050565b6000819050919050565b6000611eae611ea9611ea484611e89565b6119a0565b611868565b9050919050565b611ebe81611e93565b82525050565b600082825260208201905092915050565b50565b6000611ee5600083611ec4565b9150611ef082611ed5565b600082019050919050565b600060a082019050611f10600083018761190a565b611f1d602083018661190a565b611f2a6040830185611eb5565b611f376060830184611872565b8181036080830152611f4881611ed8565b905095945050505050565b600081519050611f6281611934565b92915050565b600060208284031215611f7e57611f7d6117d3565b5b6000611f8c84828501611f53565b91505092915050565b6000604082019050611faa600083018561190a565b611fb76020830184611872565b9392505050565b611fc7816118d4565b8114611fd257600080fd5b50565b600081519050611fe481611fbe565b92915050565b60006020828403121561200057611fff6117d3565b5b600061200e84828501611fd5565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612084602683612017565b915061208f82612028565b604082019050919050565b600060208201905081810360008301526120b381612077565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120f0602083612017565b91506120fb826120ba565b602082019050919050565b6000602082019050818103600083015261211f816120e3565b9050919050565b600060608201905061213b600083018661190a565b612148602083018561190a565b6121556040830184611872565b949350505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006121b9602a83612017565b91506121c48261215d565b604082019050919050565b600060208201905081810360008301526121e8816121ac565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061224b602683612017565b9150612256826121ef565b604082019050919050565b6000602082019050818103600083015261227a8161223e565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156122b557808201518184015260208101905061229a565b838111156122c4576000848401525b50505050565b60006122d582612281565b6122df818561228c565b93506122ef818560208601612297565b80840191505092915050565b600061230782846122ca565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612348601d83612017565b915061235382612312565b602082019050919050565b600060208201905081810360008301526123778161233b565b9050919050565b600081519050919050565b60006123948261237e565b61239e8185612017565b93506123ae818560208601612297565b6123b781611aa8565b840191505092915050565b600060208201905081810360008301526123dc8184612389565b90509291505056fea264697066735822122060fd7e4a3875e243a49f1494dac26f10ed792afbdb951bf47f1de79eff0a2cdf64736f6c634300080a00330000000000000000000000006291d951c5d68f47ed346042e2f86a94c253bec400000000000000000000000080d76e70ae8120d5fcaf0416e8fe33f21ce7bcd5000000000000000000000000000000000000000000000000000000000000169b
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638da5cb5b116100b8578063e2bbb1581161007c578063e2bbb15814610321578063e3161ddd1461033d578063e87220d114610347578063f23a6e6114610365578063f2fde38b14610395578063f8077fae146103b157610142565b80638da5cb5b1461028f578063961b083b146102ad5780639e447fc6146102cb578063a901d15c146102e7578063bef4876b1461030357610142565b80635a8596511161010a5780635a859651146101f15780636b0c341b1461020f578063715018a61461022d57806375aa15771461023757806378e9792514610267578063821e04181461028557610142565b80631959a002146101475780631f2698ab1461017b5780633e413bee14610199578063441a3e70146101b757806347ccca02146101d3575b600080fd5b610161600480360381019061015c919061183b565b6103cf565b604051610172959493929190611881565b60405180910390f35b610183610405565b60405161019091906118ef565b60405180910390f35b6101a1610418565b6040516101ae9190611919565b60405180910390f35b6101d160048036038101906101cc9190611960565b610430565b005b6101db61071b565b6040516101e891906119ff565b60405180910390f35b6101f9610741565b6040516102069190611a3b565b60405180910390f35b610217610767565b6040516102249190611a56565b60405180910390f35b61023561076d565b005b610251600480360381019061024c919061183b565b610781565b60405161025e9190611a56565b60405180910390f35b61026f610955565b60405161027c9190611a56565b60405180910390f35b61028d61095b565b005b610297610b1c565b6040516102a49190611919565b60405180910390f35b6102b5610b45565b6040516102c29190611a56565b60405180910390f35b6102e560048036038101906102e09190611a71565b610b4b565b005b61030160048036038101906102fc9190611a71565b610ba4565b005b61030b610c1f565b60405161031891906118ef565b60405180910390f35b61033b60048036038101906103369190611960565b610c32565b005b610345610edb565b005b61034f611065565b60405161035c9190611a56565b60405180910390f35b61037f600480360381019061037a9190611be4565b61106b565b60405161038c9190611cb6565b60405180910390f35b6103af60048036038101906103aa919061183b565b611080565b005b6103b9611104565b6040516103c69190611a56565b60405180910390f35b60076020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154905085565b600960009054906101000a900460ff1681565b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001548311806104885750806001015482115b156104d8578060000154838260010154846040517f1b07dbd70000000000000000000000000000000000000000000000000000000081526004016104cf9493929190611cd1565b60405180910390fd5b6104e0610edb565b60008160000154111561052557600061050682600101548360000154846002015461110a565b90508082600401600082825461051c9190611d45565b92505081905550505b60008311156105e557828160000160008282546105429190611d9b565b925050819055506105963384600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112db9092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f857a34e305ae4b16080c21c158b902dcd6d4ab95bf7fce5d00132a9161720280846040516105dc9190611a56565b60405180910390a25b64e8d4a5100060045482600001546105fd9190611dcf565b6106079190611e58565b81600201819055506000821115610716578181600101600082825461062c9190611d9b565b92505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a30336000866040518563ffffffff1660e01b81526004016106959493929190611efb565b600060405180830381600087803b1580156106af57600080fd5b505af11580156106c3573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f3a1474f7e987c73586ba37f580025eac82a1456e87b9eace40768b8518a4b3758360405161070d9190611a56565b60405180910390a25b505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b610775611361565b61077f60006113df565b565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600060045490506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108299190611919565b602060405180830381865afa158015610846573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086a9190611f68565b90506003544211801561087e575060008114155b156108cd576000600554600354426108969190611d9b565b6108a09190611dcf565b90508164e8d4a51000826108b49190611dcf565b6108be9190611e58565b836108c99190611d45565b9250505b6000836001015490506000600582106108e7576064610901565b6006826108f49190611dcf565b60466109009190611d45565b5b9050606481866002015464e8d4a510008789600001546109219190611dcf565b61092b9190611e58565b6109359190611d9b565b61093f9190611dcf565b6109499190611e58565b95505050505050919050565b60085481565b610963611361565b600960019054906101000a900460ff16156109aa576040517f36a683ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600960016101000a81548160ff0219169083151502179055506109cd610edb565b6000600581905550600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a249190611919565b602060405180830381865afa158015610a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a659190611f68565b9050600654811115610b195773a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610aa9610b1c565b60065484610ab79190611d9b565b6040518363ffffffff1660e01b8152600401610ad4929190611f95565b6020604051808303816000875af1158015610af3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b179190611fea565b505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60055481565b610b53611361565b600960019054906101000a900460ff1615610b9a576040517f36a683ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060058190555050565b610bac611361565b600960009054906101000a900460ff1615610bf3576040517f1fbde44500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600960006101000a81548160ff021916908315150217905550806008819055508060038190555050565b600960019054906101000a900460ff1681565b6000600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050610c7d610edb565b600081600001541115610cc2576000610ca382600101548360000154846002015461110a565b905080826004016000828254610cb99190611d45565b92505081905550505b6000831115610da557610d1a333085600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166114a3909392919063ffffffff16565b600081600001541415610d3b57428160030181905550600081600401819055505b82816000016000828254610d4f9190611d45565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167fa590458b91b688d40da5e616ab851c3cd2be1f151c41755266055eb43059a8d384604051610d9c9190611a56565b60405180910390a25b6000821115610eac5781816001016000828254610dc29190611d45565b92505081905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f242432a33306000866040518563ffffffff1660e01b8152600401610e2b9493929190611efb565b600060405180830381600087803b158015610e4557600080fd5b505af1158015610e59573d6000803e3d6000fd5b505050503373ffffffffffffffffffffffffffffffffffffffff167f92870ae08c3555517c02835983340c2b7a7cd081d53eda12eb28e69a28924cb683604051610ea39190611a56565b60405180910390a25b64e8d4a510006004548260000154610ec49190611dcf565b610ece9190611e58565b8160020181905550505050565b6000429050600960009054906101000a900460ff16610f26576040517fef6e77c000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003548111610f355750611063565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f929190611919565b602060405180830381865afa158015610faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fd39190611f68565b90506000811415610fec57816003819055505050611063565b600060055460035484610fff9190611d9b565b6110099190611dcf565b90508164e8d4a510008261101d9190611dcf565b6110279190611e58565b600460008282546110389190611d45565b925050819055508260038190555080600660008282546110589190611d45565b925050819055505050505b565b60045481565b600063f23a6e6160e01b905095945050505050565b611088611361565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ef9061209a565b60405180910390fd5b611101816113df565b50565b60035481565b6000806005851061111c576064611136565b6006856111299190611dcf565b60466111359190611d45565b5b905060008364e8d4a510006004548761114f9190611dcf565b6111599190611e58565b6111639190611d9b565b90506000606483836111759190611dcf565b61117f9190611e58565b9050600073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016111d09190611919565b602060405180830381865afa1580156111ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112119190611f68565b90508082116112205781611222565b805b945073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33876040518363ffffffff1660e01b8152600401611273929190611f95565b6020604051808303816000875af1158015611292573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b69190611fea565b5082600660008282546112c99190611d9b565b92505081905550505050509392505050565b61135c8363a9059cbb60e01b84846040516024016112fa929190611f95565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061152c565b505050565b6113696115f3565b73ffffffffffffffffffffffffffffffffffffffff16611387610b1c565b73ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d490612106565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611526846323b872dd60e01b8585856040516024016114c493929190612126565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061152c565b50505050565b600061158e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166115fb9092919063ffffffff16565b90506000815111156115ee57808060200190518101906115ae9190611fea565b6115ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e4906121cf565b60405180910390fd5b5b505050565b600033905090565b606061160a8484600085611613565b90509392505050565b606082471015611658576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164f90612261565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161168191906122fb565b60006040518083038185875af1925050503d80600081146116be576040519150601f19603f3d011682016040523d82523d6000602084013e6116c3565b606091505b50915091506116d4878383876116e0565b92505050949350505050565b606083156117435760008351141561173b576116fb85611756565b61173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061235e565b60405180910390fd5b5b82905061174e565b61174d8383611779565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561178c5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c091906123c2565b60405180910390fd5b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611808826117dd565b9050919050565b611818816117fd565b811461182357600080fd5b50565b6000813590506118358161180f565b92915050565b600060208284031215611851576118506117d3565b5b600061185f84828501611826565b91505092915050565b6000819050919050565b61187b81611868565b82525050565b600060a0820190506118966000830188611872565b6118a36020830187611872565b6118b06040830186611872565b6118bd6060830185611872565b6118ca6080830184611872565b9695505050505050565b60008115159050919050565b6118e9816118d4565b82525050565b600060208201905061190460008301846118e0565b92915050565b611913816117fd565b82525050565b600060208201905061192e600083018461190a565b92915050565b61193d81611868565b811461194857600080fd5b50565b60008135905061195a81611934565b92915050565b60008060408385031215611977576119766117d3565b5b60006119858582860161194b565b92505060206119968582860161194b565b9150509250929050565b6000819050919050565b60006119c56119c06119bb846117dd565b6119a0565b6117dd565b9050919050565b60006119d7826119aa565b9050919050565b60006119e9826119cc565b9050919050565b6119f9816119de565b82525050565b6000602082019050611a1460008301846119f0565b92915050565b6000611a25826119cc565b9050919050565b611a3581611a1a565b82525050565b6000602082019050611a506000830184611a2c565b92915050565b6000602082019050611a6b6000830184611872565b92915050565b600060208284031215611a8757611a866117d3565b5b6000611a958482850161194b565b91505092915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611af182611aa8565b810181811067ffffffffffffffff82111715611b1057611b0f611ab9565b5b80604052505050565b6000611b236117c9565b9050611b2f8282611ae8565b919050565b600067ffffffffffffffff821115611b4f57611b4e611ab9565b5b611b5882611aa8565b9050602081019050919050565b82818337600083830152505050565b6000611b87611b8284611b34565b611b19565b905082815260208101848484011115611ba357611ba2611aa3565b5b611bae848285611b65565b509392505050565b600082601f830112611bcb57611bca611a9e565b5b8135611bdb848260208601611b74565b91505092915050565b600080600080600060a08688031215611c0057611bff6117d3565b5b6000611c0e88828901611826565b9550506020611c1f88828901611826565b9450506040611c308882890161194b565b9350506060611c418882890161194b565b925050608086013567ffffffffffffffff811115611c6257611c616117d8565b5b611c6e88828901611bb6565b9150509295509295909350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611cb081611c7b565b82525050565b6000602082019050611ccb6000830184611ca7565b92915050565b6000608082019050611ce66000830187611872565b611cf36020830186611872565b611d006040830185611872565b611d0d6060830184611872565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611d5082611868565b9150611d5b83611868565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611d9057611d8f611d16565b5b828201905092915050565b6000611da682611868565b9150611db183611868565b925082821015611dc457611dc3611d16565b5b828203905092915050565b6000611dda82611868565b9150611de583611868565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e1e57611e1d611d16565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611e6382611868565b9150611e6e83611868565b925082611e7e57611e7d611e29565b5b828204905092915050565b6000819050919050565b6000611eae611ea9611ea484611e89565b6119a0565b611868565b9050919050565b611ebe81611e93565b82525050565b600082825260208201905092915050565b50565b6000611ee5600083611ec4565b9150611ef082611ed5565b600082019050919050565b600060a082019050611f10600083018761190a565b611f1d602083018661190a565b611f2a6040830185611eb5565b611f376060830184611872565b8181036080830152611f4881611ed8565b905095945050505050565b600081519050611f6281611934565b92915050565b600060208284031215611f7e57611f7d6117d3565b5b6000611f8c84828501611f53565b91505092915050565b6000604082019050611faa600083018561190a565b611fb76020830184611872565b9392505050565b611fc7816118d4565b8114611fd257600080fd5b50565b600081519050611fe481611fbe565b92915050565b60006020828403121561200057611fff6117d3565b5b600061200e84828501611fd5565b91505092915050565b600082825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612084602683612017565b915061208f82612028565b604082019050919050565b600060208201905081810360008301526120b381612077565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006120f0602083612017565b91506120fb826120ba565b602082019050919050565b6000602082019050818103600083015261211f816120e3565b9050919050565b600060608201905061213b600083018661190a565b612148602083018561190a565b6121556040830184611872565b949350505050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006121b9602a83612017565b91506121c48261215d565b604082019050919050565b600060208201905081810360008301526121e8816121ac565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061224b602683612017565b9150612256826121ef565b604082019050919050565b6000602082019050818103600083015261227a8161223e565b9050919050565b600081519050919050565b600081905092915050565b60005b838110156122b557808201518184015260208101905061229a565b838111156122c4576000848401525b50505050565b60006122d582612281565b6122df818561228c565b93506122ef818560208601612297565b80840191505092915050565b600061230782846122ca565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612348601d83612017565b915061235382612312565b602082019050919050565b600060208201905081810360008301526123778161233b565b9050919050565b600081519050919050565b60006123948261237e565b61239e8185612017565b93506123ae818560208601612297565b6123b781611aa8565b840191505092915050565b600060208201905081810360008301526123dc8184612389565b90509291505056fea264697066735822122060fd7e4a3875e243a49f1494dac26f10ed792afbdb951bf47f1de79eff0a2cdf64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006291d951c5d68f47ed346042e2f86a94c253bec400000000000000000000000080d76e70ae8120d5fcaf0416e8fe33f21ce7bcd5000000000000000000000000000000000000000000000000000000000000169b
-----Decoded View---------------
Arg [0] : _brl (address): 0x6291d951c5d68f47eD346042E2f86A94c253Bec4
Arg [1] : _nft (address): 0x80D76e70Ae8120d5FCaf0416E8Fe33F21Ce7BcD5
Arg [2] : _usdcPerSecond (uint256): 5787
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000006291d951c5d68f47ed346042e2f86a94c253bec4
Arg [1] : 00000000000000000000000080d76e70ae8120d5fcaf0416e8fe33f21ce7bcd5
Arg [2] : 000000000000000000000000000000000000000000000000000000000000169b
Deployed Bytecode Sourcemap
28123:6175:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28621:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;28787:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28674:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32248:1019;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28431:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28391:17;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28585:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2776:103;;;:::i;:::-;;29253:696;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28756:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33895:398;;;:::i;:::-;;2128:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28550:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33449:190;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33647:240;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28813:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31174:1066;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29957:620;;;:::i;:::-;;28513:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33275:166;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3034:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28472:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28621:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28787:19::-;;;;;;;;;;;;;:::o;28674:73::-;28705:42;28674:73;:::o;32248:1019::-;32326:21;32350:8;:20;32359:10;32350:20;;;;;;;;;;;;;;;32326:44;;32398:4;:11;;;32385:10;:24;:56;;;;32426:4;:15;;;32413:10;:28;32385:56;32381:169;;;32485:4;:11;;;32498:10;32510:4;:15;;;32527:10;32465:73;;;;;;;;;;;;;;:::i;:::-;;;;;;;;32381:169;32560:12;:10;:12::i;:::-;32601:1;32587:4;:11;;;:15;32583:189;;;32619:25;32647:60;32661:4;:15;;;32678:4;:11;;;32691:4;:15;;;32647:13;:60::i;:::-;32619:88;;32743:17;32722:4;:17;;;:38;;;;;;;:::i;:::-;;;;;;;;32604:168;32583:189;32799:1;32786:10;:14;32782:191;;;32832:10;32817:4;:11;;;:25;;;;;;;:::i;:::-;;;;;;;;32857:49;32882:10;32895;32857:3;;;;;;;;;;;:16;;;;:49;;;;;:::i;:::-;32938:10;32926:35;;;32950:10;32926:35;;;;;;:::i;:::-;;;;;;;;32782:191;33033:4;33015:15;;33001:4;:11;;;:29;;;;:::i;:::-;:36;;;;:::i;:::-;32983:4;:15;;:54;;;;33065:1;33052:10;:14;33048:212;;;33102:10;33083:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;33127:3;;;;;;;;;;;:20;;;33156:4;33163:10;33175:1;33178:10;33127:66;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33225:10;33213:35;;;33237:10;33213:35;;;;;;:::i;:::-;;;;;;;;33048:212;32315:952;32248:1019;;:::o;28431:19::-;;;;;;;;;;;;;:::o;28391:17::-;;;;;;;;;;;;;:::o;28585:27::-;;;;:::o;2776:103::-;2014:13;:11;:13::i;:::-;2841:30:::1;2868:1;2841:18;:30::i;:::-;2776:103::o:0;29253:696::-;29312:7;29337:21;29361:8;:15;29370:5;29361:15;;;;;;;;;;;;;;;29337:39;;29387:24;29414:15;;29387:42;;29440:15;29458:3;;;;;;;;;;;:13;;;29480:4;29458:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29440:46;;29519:19;;29501:15;:37;:53;;;;;29553:1;29542:7;:12;;29501:53;29497:226;;;29571:18;29634:13;;29611:19;;29593:15;:37;;;;:::i;:::-;29592:55;;;;:::i;:::-;29571:76;;29703:7;29696:4;29683:10;:17;;;;:::i;:::-;:27;;;;:::i;:::-;29662:49;;;;;:::i;:::-;;;29556:167;29497:226;29733:18;29754:4;:15;;;29733:36;;29780:18;29814:1;29801:10;:14;:44;;29842:3;29801:44;;;29837:1;29824:10;:14;;;;:::i;:::-;29818:2;:21;;;;:::i;:::-;29801:44;29780:65;;29938:3;29925:10;29906:4;:15;;;29898:4;29879:16;29865:4;:11;;;:30;;;;:::i;:::-;:37;;;;:::i;:::-;29864:57;;;;:::i;:::-;29863:72;;;;:::i;:::-;:78;;;;:::i;:::-;29856:85;;;;;;;29253:696;;;:::o;28756:24::-;;;;:::o;33895:398::-;2014:13;:11;:13::i;:::-;33951:8:::1;;;;;;;;;;;33947:65;;;33983:17;;;;;;;;;;;;;;33947:65;34033:4;34022:8;;:15;;;;;;;;;;;;;;;;;;34048:12;:10;:12::i;:::-;34087:1;34071:13;:17;;;;34099:19;28705:42;34121:22;;;34152:4;34121:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34099:59;;34187:12;;34173:11;:26;34169:117;;;28705:42;34216:21;;;34238:7;:5;:7::i;:::-;34261:12;;34247:11;:26;;;;:::i;:::-;34216:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34169:117;33936:357;33895:398::o:0;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;28550:28::-;;;;:::o;33449:190::-;2014:13;:11;:13::i;:::-;33530:8:::1;;;;;;;;;;;33526:65;;;33562:17;;;;;;;;;;;;;;33526:65;33617:14;33601:13;:30;;;;33449:190:::0;:::o;33647:240::-;2014:13;:11;:13::i;:::-;33720:7:::1;;;;;;;;;;;33716:63;;;33751:16;;;;;;;;;;;;;;33716:63;33799:4;33789:7;;:14;;;;;;;;;;;;;;;;;;33826:10;33814:9;:22;;;;33869:10;33847:19;:32;;;;33647:240:::0;:::o;28813:20::-;;;;;;;;;;;;;:::o;31174:1066::-;31251:21;31275:8;:20;31284:10;31275:20;;;;;;;;;;;;;;;31251:44;;31306:12;:10;:12::i;:::-;31347:1;31333:4;:11;;;:15;31329:189;;;31365:25;31393:60;31407:4;:15;;;31424:4;:11;;;31437:4;:15;;;31393:13;:60::i;:::-;31365:88;;31489:17;31468:4;:17;;;:38;;;;;;;:::i;:::-;;;;;;;;31350:168;31329:189;31545:1;31532:10;:14;31528:419;;;31563:68;31592:10;31613:4;31620:10;31563:3;;;;;;;;;;;:20;;;;:68;;;;;;:::i;:::-;31701:1;31686:4;:11;;;:16;31682:129;;;31740:15;31723:4;:14;;:32;;;;31794:1;31774:4;:17;;:21;;;;31682:129;31871:10;31856:4;:11;;;:25;;;;;;;:::i;:::-;;;;;;;;31912:10;31901:34;;;31924:10;31901:34;;;;;;:::i;:::-;;;;;;;;31528:419;31974:1;31961:10;:14;31957:211;;;32011:10;31992:4;:15;;;:29;;;;;;;:::i;:::-;;;;;;;;32036:3;;;;;;;;;;;:20;;;32057:10;32077:4;32084:1;32087:10;32036:66;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32133:10;32122:34;;;32145:10;32122:34;;;;;;:::i;:::-;;;;;;;;31957:211;32228:4;32210:15;;32196:4;:11;;;:29;;;;:::i;:::-;:36;;;;:::i;:::-;32178:4;:15;;:54;;;;31240:1000;31174:1066;;:::o;29957:620::-;29997:17;30017:15;29997:35;;30048:7;;;;;;;;;;;30043:63;;30079:15;;;;;;;;;;;;;;30043:63;30133:19;;30120:9;:32;30116:71;;30169:7;;;30116:71;30197:15;30215:3;;;;;;;;;;;:13;;;30237:4;30215:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30197:46;;30269:1;30258:7;:12;30254:97;;;30309:9;30287:19;:31;;;;30333:7;;;;30254:97;30361:18;30418:13;;30395:19;;30383:9;:31;;;;:::i;:::-;30382:49;;;;:::i;:::-;30361:70;;30482:7;30475:4;30462:10;:17;;;;:::i;:::-;:27;;;;:::i;:::-;30442:15;;:48;;;;;;;:::i;:::-;;;;;;;;30523:9;30501:19;:31;;;;30559:10;30543:12;;:26;;;;;;;:::i;:::-;;;;;;;;29986:591;;;29957:620;:::o;28513:30::-;;;;:::o;33275:166::-;33376:6;33402:31;;;33395:38;;33275:166;;;;;;;:::o;3034:201::-;2014:13;:11;:13::i;:::-;3143:1:::1;3123:22;;:8;:22;;;;3115:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3199:28;3218:8;3199:18;:28::i;:::-;3034:201:::0;:::o;28472:34::-;;;;:::o;30585:581::-;30682:20;30715:18;30749:1;30736:10;:14;:44;;30777:3;30736:44;;;30772:1;30759:10;:14;;;;:::i;:::-;30753:2;:21;;;;:::i;:::-;30736:44;30715:65;;30791:20;30850:10;30842:4;30824:15;;30815:6;:24;;;;:::i;:::-;:31;;;;:::i;:::-;30814:46;;;;:::i;:::-;30791:69;;30871:15;30917:3;30904:10;30889:12;:25;;;;:::i;:::-;:31;;;;:::i;:::-;30871:49;;30931:19;28705:42;30953:22;;;30984:4;30953:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30931:59;;31026:11;31016:7;:21;:45;;31054:7;31016:45;;;31040:11;31016:45;31001:60;;28705:42;31072:21;;;31094:10;31106:12;31072:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31146:12;31130;;:28;;;;;;;:::i;:::-;;;;;;;;30704:462;;;;30585:581;;;;;:::o;18979:211::-;19096:86;19116:5;19146:23;;;19171:2;19175:5;19123:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19096:19;:86::i;:::-;18979:211;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;3395:191::-;3469:16;3488:6;;;;;;;;;;;3469:25;;3514:8;3505:6;;:17;;;;;;;;;;;;;;;;;;3569:8;3538:40;;3559:8;3538:40;;;;;;;;;;;;3458:128;3395:191;:::o;19198:248::-;19342:96;19362:5;19392:27;;;19421:4;19427:2;19431:5;19369:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19342:19;:96::i;:::-;19198:248;;;;:::o;22046:716::-;22470:23;22496:69;22524:4;22496:69;;;;;;;;;;;;;;;;;22504:5;22496:27;;;;:69;;;;;:::i;:::-;22470:95;;22600:1;22580:10;:17;:21;22576:179;;;22677:10;22666:30;;;;;;;;;;;;:::i;:::-;22658:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;22576:179;22116:646;22046:716;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;7583:229::-;7720:12;7752:52;7774:6;7782:4;7788:1;7791:12;7752:21;:52::i;:::-;7745:59;;7583:229;;;;;:::o;8703:455::-;8873:12;8931:5;8906:21;:30;;8898:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;8991:12;9005:23;9032:6;:11;;9051:5;9058:4;9032:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8990:73;;;;9081:69;9108:6;9116:7;9125:10;9137:12;9081:26;:69::i;:::-;9074:76;;;;8703:455;;;;;;:::o;11276:644::-;11461:12;11490:7;11486:427;;;11539:1;11518:10;:17;:22;11514:290;;;11736:18;11747:6;11736:10;:18::i;:::-;11728:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11514:290;11825:10;11818:17;;;;11486:427;11868:33;11876:10;11888:12;11868:7;:33::i;:::-;11276:644;;;;;;;:::o;4826:326::-;4886:4;5143:1;5121:7;:19;;;:23;5114:30;;4826:326;;;:::o;12462:552::-;12643:1;12623:10;:17;:21;12619:388;;;12855:10;12849:17;12912:15;12899:10;12895:2;12891:19;12884:44;12619:388;12982:12;12975:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:75:1;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:77::-;1213:7;1242:5;1231:16;;1176:77;;;:::o;1259:118::-;1346:24;1364:5;1346:24;:::i;:::-;1341:3;1334:37;1259:118;;:::o;1383:664::-;1588:4;1626:3;1615:9;1611:19;1603:27;;1640:71;1708:1;1697:9;1693:17;1684:6;1640:71;:::i;:::-;1721:72;1789:2;1778:9;1774:18;1765:6;1721:72;:::i;:::-;1803;1871:2;1860:9;1856:18;1847:6;1803:72;:::i;:::-;1885;1953:2;1942:9;1938:18;1929:6;1885:72;:::i;:::-;1967:73;2035:3;2024:9;2020:19;2011:6;1967:73;:::i;:::-;1383:664;;;;;;;;:::o;2053:90::-;2087:7;2130:5;2123:13;2116:21;2105:32;;2053:90;;;:::o;2149:109::-;2230:21;2245:5;2230:21;:::i;:::-;2225:3;2218:34;2149:109;;:::o;2264:210::-;2351:4;2389:2;2378:9;2374:18;2366:26;;2402:65;2464:1;2453:9;2449:17;2440:6;2402:65;:::i;:::-;2264:210;;;;:::o;2480:118::-;2567:24;2585:5;2567:24;:::i;:::-;2562:3;2555:37;2480:118;;:::o;2604:222::-;2697:4;2735:2;2724:9;2720:18;2712:26;;2748:71;2816:1;2805:9;2801:17;2792:6;2748:71;:::i;:::-;2604:222;;;;:::o;2832:122::-;2905:24;2923:5;2905:24;:::i;:::-;2898:5;2895:35;2885:63;;2944:1;2941;2934:12;2885:63;2832:122;:::o;2960:139::-;3006:5;3044:6;3031:20;3022:29;;3060:33;3087:5;3060:33;:::i;:::-;2960:139;;;;:::o;3105:474::-;3173:6;3181;3230:2;3218:9;3209:7;3205:23;3201:32;3198:119;;;3236:79;;:::i;:::-;3198:119;3356:1;3381:53;3426:7;3417:6;3406:9;3402:22;3381:53;:::i;:::-;3371:63;;3327:117;3483:2;3509:53;3554:7;3545:6;3534:9;3530:22;3509:53;:::i;:::-;3499:63;;3454:118;3105:474;;;;;:::o;3585:60::-;3613:3;3634:5;3627:12;;3585:60;;;:::o;3651:142::-;3701:9;3734:53;3752:34;3761:24;3779:5;3761:24;:::i;:::-;3752:34;:::i;:::-;3734:53;:::i;:::-;3721:66;;3651:142;;;:::o;3799:126::-;3849:9;3882:37;3913:5;3882:37;:::i;:::-;3869:50;;3799:126;;;:::o;3931:142::-;3997:9;4030:37;4061:5;4030:37;:::i;:::-;4017:50;;3931:142;;;:::o;4079:163::-;4182:53;4229:5;4182:53;:::i;:::-;4177:3;4170:66;4079:163;;:::o;4248:254::-;4357:4;4395:2;4384:9;4380:18;4372:26;;4408:87;4492:1;4481:9;4477:17;4468:6;4408:87;:::i;:::-;4248:254;;;;:::o;4508:140::-;4572:9;4605:37;4636:5;4605:37;:::i;:::-;4592:50;;4508:140;;;:::o;4654:159::-;4755:51;4800:5;4755:51;:::i;:::-;4750:3;4743:64;4654:159;;:::o;4819:250::-;4926:4;4964:2;4953:9;4949:18;4941:26;;4977:85;5059:1;5048:9;5044:17;5035:6;4977:85;:::i;:::-;4819:250;;;;:::o;5075:222::-;5168:4;5206:2;5195:9;5191:18;5183:26;;5219:71;5287:1;5276:9;5272:17;5263:6;5219:71;:::i;:::-;5075:222;;;;:::o;5303:329::-;5362:6;5411:2;5399:9;5390:7;5386:23;5382:32;5379:119;;;5417:79;;:::i;:::-;5379:119;5537:1;5562:53;5607:7;5598:6;5587:9;5583:22;5562:53;:::i;:::-;5552:63;;5508:117;5303:329;;;;:::o;5638:117::-;5747:1;5744;5737:12;5761:117;5870:1;5867;5860:12;5884:102;5925:6;5976:2;5972:7;5967:2;5960:5;5956:14;5952:28;5942:38;;5884:102;;;:::o;5992:180::-;6040:77;6037:1;6030:88;6137:4;6134:1;6127:15;6161:4;6158:1;6151:15;6178:281;6261:27;6283:4;6261:27;:::i;:::-;6253:6;6249:40;6391:6;6379:10;6376:22;6355:18;6343:10;6340:34;6337:62;6334:88;;;6402:18;;:::i;:::-;6334:88;6442:10;6438:2;6431:22;6221:238;6178:281;;:::o;6465:129::-;6499:6;6526:20;;:::i;:::-;6516:30;;6555:33;6583:4;6575:6;6555:33;:::i;:::-;6465:129;;;:::o;6600:307::-;6661:4;6751:18;6743:6;6740:30;6737:56;;;6773:18;;:::i;:::-;6737:56;6811:29;6833:6;6811:29;:::i;:::-;6803:37;;6895:4;6889;6885:15;6877:23;;6600:307;;;:::o;6913:154::-;6997:6;6992:3;6987;6974:30;7059:1;7050:6;7045:3;7041:16;7034:27;6913:154;;;:::o;7073:410::-;7150:5;7175:65;7191:48;7232:6;7191:48;:::i;:::-;7175:65;:::i;:::-;7166:74;;7263:6;7256:5;7249:21;7301:4;7294:5;7290:16;7339:3;7330:6;7325:3;7321:16;7318:25;7315:112;;;7346:79;;:::i;:::-;7315:112;7436:41;7470:6;7465:3;7460;7436:41;:::i;:::-;7156:327;7073:410;;;;;:::o;7502:338::-;7557:5;7606:3;7599:4;7591:6;7587:17;7583:27;7573:122;;7614:79;;:::i;:::-;7573:122;7731:6;7718:20;7756:78;7830:3;7822:6;7815:4;7807:6;7803:17;7756:78;:::i;:::-;7747:87;;7563:277;7502:338;;;;:::o;7846:1089::-;7950:6;7958;7966;7974;7982;8031:3;8019:9;8010:7;8006:23;8002:33;7999:120;;;8038:79;;:::i;:::-;7999:120;8158:1;8183:53;8228:7;8219:6;8208:9;8204:22;8183:53;:::i;:::-;8173:63;;8129:117;8285:2;8311:53;8356:7;8347:6;8336:9;8332:22;8311:53;:::i;:::-;8301:63;;8256:118;8413:2;8439:53;8484:7;8475:6;8464:9;8460:22;8439:53;:::i;:::-;8429:63;;8384:118;8541:2;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8512:118;8697:3;8686:9;8682:19;8669:33;8729:18;8721:6;8718:30;8715:117;;;8751:79;;:::i;:::-;8715:117;8856:62;8910:7;8901:6;8890:9;8886:22;8856:62;:::i;:::-;8846:72;;8640:288;7846:1089;;;;;;;;:::o;8941:149::-;8977:7;9017:66;9010:5;9006:78;8995:89;;8941:149;;;:::o;9096:115::-;9181:23;9198:5;9181:23;:::i;:::-;9176:3;9169:36;9096:115;;:::o;9217:218::-;9308:4;9346:2;9335:9;9331:18;9323:26;;9359:69;9425:1;9414:9;9410:17;9401:6;9359:69;:::i;:::-;9217:218;;;;:::o;9441:553::-;9618:4;9656:3;9645:9;9641:19;9633:27;;9670:71;9738:1;9727:9;9723:17;9714:6;9670:71;:::i;:::-;9751:72;9819:2;9808:9;9804:18;9795:6;9751:72;:::i;:::-;9833;9901:2;9890:9;9886:18;9877:6;9833:72;:::i;:::-;9915;9983:2;9972:9;9968:18;9959:6;9915:72;:::i;:::-;9441:553;;;;;;;:::o;10000:180::-;10048:77;10045:1;10038:88;10145:4;10142:1;10135:15;10169:4;10166:1;10159:15;10186:305;10226:3;10245:20;10263:1;10245:20;:::i;:::-;10240:25;;10279:20;10297:1;10279:20;:::i;:::-;10274:25;;10433:1;10365:66;10361:74;10358:1;10355:81;10352:107;;;10439:18;;:::i;:::-;10352:107;10483:1;10480;10476:9;10469:16;;10186:305;;;;:::o;10497:191::-;10537:4;10557:20;10575:1;10557:20;:::i;:::-;10552:25;;10591:20;10609:1;10591:20;:::i;:::-;10586:25;;10630:1;10627;10624:8;10621:34;;;10635:18;;:::i;:::-;10621:34;10680:1;10677;10673:9;10665:17;;10497:191;;;;:::o;10694:348::-;10734:7;10757:20;10775:1;10757:20;:::i;:::-;10752:25;;10791:20;10809:1;10791:20;:::i;:::-;10786:25;;10979:1;10911:66;10907:74;10904:1;10901:81;10896:1;10889:9;10882:17;10878:105;10875:131;;;10986:18;;:::i;:::-;10875:131;11034:1;11031;11027:9;11016:20;;10694:348;;;;:::o;11048:180::-;11096:77;11093:1;11086:88;11193:4;11190:1;11183:15;11217:4;11214:1;11207:15;11234:185;11274:1;11291:20;11309:1;11291:20;:::i;:::-;11286:25;;11325:20;11343:1;11325:20;:::i;:::-;11320:25;;11364:1;11354:35;;11369:18;;:::i;:::-;11354:35;11411:1;11408;11404:9;11399:14;;11234:185;;;;:::o;11425:85::-;11470:7;11499:5;11488:16;;11425:85;;;:::o;11516:158::-;11574:9;11607:61;11625:42;11634:32;11660:5;11634:32;:::i;:::-;11625:42;:::i;:::-;11607:61;:::i;:::-;11594:74;;11516:158;;;:::o;11680:147::-;11775:45;11814:5;11775:45;:::i;:::-;11770:3;11763:58;11680:147;;:::o;11833:168::-;11916:11;11950:6;11945:3;11938:19;11990:4;11985:3;11981:14;11966:29;;11833:168;;;;:::o;12007:114::-;;:::o;12127:362::-;12268:3;12289:65;12352:1;12347:3;12289:65;:::i;:::-;12282:72;;12363:93;12452:3;12363:93;:::i;:::-;12481:1;12476:3;12472:11;12465:18;;12127:362;;;:::o;12495:875::-;12780:4;12818:3;12807:9;12803:19;12795:27;;12832:71;12900:1;12889:9;12885:17;12876:6;12832:71;:::i;:::-;12913:72;12981:2;12970:9;12966:18;12957:6;12913:72;:::i;:::-;12995:80;13071:2;13060:9;13056:18;13047:6;12995:80;:::i;:::-;13085:72;13153:2;13142:9;13138:18;13129:6;13085:72;:::i;:::-;13205:9;13199:4;13195:20;13189:3;13178:9;13174:19;13167:49;13233:130;13358:4;13233:130;:::i;:::-;13225:138;;12495:875;;;;;;;:::o;13376:143::-;13433:5;13464:6;13458:13;13449:22;;13480:33;13507:5;13480:33;:::i;:::-;13376:143;;;;:::o;13525:351::-;13595:6;13644:2;13632:9;13623:7;13619:23;13615:32;13612:119;;;13650:79;;:::i;:::-;13612:119;13770:1;13795:64;13851:7;13842:6;13831:9;13827:22;13795:64;:::i;:::-;13785:74;;13741:128;13525:351;;;;:::o;13882:332::-;14003:4;14041:2;14030:9;14026:18;14018:26;;14054:71;14122:1;14111:9;14107:17;14098:6;14054:71;:::i;:::-;14135:72;14203:2;14192:9;14188:18;14179:6;14135:72;:::i;:::-;13882:332;;;;;:::o;14220:116::-;14290:21;14305:5;14290:21;:::i;:::-;14283:5;14280:32;14270:60;;14326:1;14323;14316:12;14270:60;14220:116;:::o;14342:137::-;14396:5;14427:6;14421:13;14412:22;;14443:30;14467:5;14443:30;:::i;:::-;14342:137;;;;:::o;14485:345::-;14552:6;14601:2;14589:9;14580:7;14576:23;14572:32;14569:119;;;14607:79;;:::i;:::-;14569:119;14727:1;14752:61;14805:7;14796:6;14785:9;14781:22;14752:61;:::i;:::-;14742:71;;14698:125;14485:345;;;;:::o;14836:169::-;14920:11;14954:6;14949:3;14942:19;14994:4;14989:3;14985:14;14970:29;;14836:169;;;;:::o;15011:225::-;15151:34;15147:1;15139:6;15135:14;15128:58;15220:8;15215:2;15207:6;15203:15;15196:33;15011:225;:::o;15242:366::-;15384:3;15405:67;15469:2;15464:3;15405:67;:::i;:::-;15398:74;;15481:93;15570:3;15481:93;:::i;:::-;15599:2;15594:3;15590:12;15583:19;;15242:366;;;:::o;15614:419::-;15780:4;15818:2;15807:9;15803:18;15795:26;;15867:9;15861:4;15857:20;15853:1;15842:9;15838:17;15831:47;15895:131;16021:4;15895:131;:::i;:::-;15887:139;;15614:419;;;:::o;16039:182::-;16179:34;16175:1;16167:6;16163:14;16156:58;16039:182;:::o;16227:366::-;16369:3;16390:67;16454:2;16449:3;16390:67;:::i;:::-;16383:74;;16466:93;16555:3;16466:93;:::i;:::-;16584:2;16579:3;16575:12;16568:19;;16227:366;;;:::o;16599:419::-;16765:4;16803:2;16792:9;16788:18;16780:26;;16852:9;16846:4;16842:20;16838:1;16827:9;16823:17;16816:47;16880:131;17006:4;16880:131;:::i;:::-;16872:139;;16599:419;;;:::o;17024:442::-;17173:4;17211:2;17200:9;17196:18;17188:26;;17224:71;17292:1;17281:9;17277:17;17268:6;17224:71;:::i;:::-;17305:72;17373:2;17362:9;17358:18;17349:6;17305:72;:::i;:::-;17387;17455:2;17444:9;17440:18;17431:6;17387:72;:::i;:::-;17024:442;;;;;;:::o;17472:229::-;17612:34;17608:1;17600:6;17596:14;17589:58;17681:12;17676:2;17668:6;17664:15;17657:37;17472:229;:::o;17707:366::-;17849:3;17870:67;17934:2;17929:3;17870:67;:::i;:::-;17863:74;;17946:93;18035:3;17946:93;:::i;:::-;18064:2;18059:3;18055:12;18048:19;;17707:366;;;:::o;18079:419::-;18245:4;18283:2;18272:9;18268:18;18260:26;;18332:9;18326:4;18322:20;18318:1;18307:9;18303:17;18296:47;18360:131;18486:4;18360:131;:::i;:::-;18352:139;;18079:419;;;:::o;18504:225::-;18644:34;18640:1;18632:6;18628:14;18621:58;18713:8;18708:2;18700:6;18696:15;18689:33;18504:225;:::o;18735:366::-;18877:3;18898:67;18962:2;18957:3;18898:67;:::i;:::-;18891:74;;18974:93;19063:3;18974:93;:::i;:::-;19092:2;19087:3;19083:12;19076:19;;18735:366;;;:::o;19107:419::-;19273:4;19311:2;19300:9;19296:18;19288:26;;19360:9;19354:4;19350:20;19346:1;19335:9;19331:17;19324:47;19388:131;19514:4;19388:131;:::i;:::-;19380:139;;19107:419;;;:::o;19532:98::-;19583:6;19617:5;19611:12;19601:22;;19532:98;;;:::o;19636:147::-;19737:11;19774:3;19759:18;;19636:147;;;;:::o;19789:307::-;19857:1;19867:113;19881:6;19878:1;19875:13;19867:113;;;19966:1;19961:3;19957:11;19951:18;19947:1;19942:3;19938:11;19931:39;19903:2;19900:1;19896:10;19891:15;;19867:113;;;19998:6;19995:1;19992:13;19989:101;;;20078:1;20069:6;20064:3;20060:16;20053:27;19989:101;19838:258;19789:307;;;:::o;20102:373::-;20206:3;20234:38;20266:5;20234:38;:::i;:::-;20288:88;20369:6;20364:3;20288:88;:::i;:::-;20281:95;;20385:52;20430:6;20425:3;20418:4;20411:5;20407:16;20385:52;:::i;:::-;20462:6;20457:3;20453:16;20446:23;;20210:265;20102:373;;;;:::o;20481:271::-;20611:3;20633:93;20722:3;20713:6;20633:93;:::i;:::-;20626:100;;20743:3;20736:10;;20481:271;;;;:::o;20758:179::-;20898:31;20894:1;20886:6;20882:14;20875:55;20758:179;:::o;20943:366::-;21085:3;21106:67;21170:2;21165:3;21106:67;:::i;:::-;21099:74;;21182:93;21271:3;21182:93;:::i;:::-;21300:2;21295:3;21291:12;21284:19;;20943:366;;;:::o;21315:419::-;21481:4;21519:2;21508:9;21504:18;21496:26;;21568:9;21562:4;21558:20;21554:1;21543:9;21539:17;21532:47;21596:131;21722:4;21596:131;:::i;:::-;21588:139;;21315:419;;;:::o;21740:99::-;21792:6;21826:5;21820:12;21810:22;;21740:99;;;:::o;21845:364::-;21933:3;21961:39;21994:5;21961:39;:::i;:::-;22016:71;22080:6;22075:3;22016:71;:::i;:::-;22009:78;;22096:52;22141:6;22136:3;22129:4;22122:5;22118:16;22096:52;:::i;:::-;22173:29;22195:6;22173:29;:::i;:::-;22168:3;22164:39;22157:46;;21937:272;21845:364;;;;:::o;22215:313::-;22328:4;22366:2;22355:9;22351:18;22343:26;;22415:9;22409:4;22405:20;22401:1;22390:9;22386:17;22379:47;22443:78;22516:4;22507:6;22443:78;:::i;:::-;22435:86;;22215:313;;;;:::o
Swarm Source
ipfs://60fd7e4a3875e243a49f1494dac26f10ed792afbdb951bf47f1de79eff0a2cdf
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 100.00% | $0.999902 | 51.7358 | $51.73 |
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.