Source Code
Overview
ETH Balance
ETH Value
$0.00Latest 17 from a total of 17 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Set Oracles | 23703718 | 124 days ago | IN | 0 ETH | 0.00000617 | ||||
| Set Oracles | 23176383 | 137 days ago | IN | 0 ETH | 0.00002316 | ||||
| Set Oracles | 22493857 | 153 days ago | IN | 0 ETH | 0.00002775 | ||||
| Set Oracles | 22493804 | 153 days ago | IN | 0 ETH | 0.00002617 | ||||
| Set Oracles | 21747135 | 171 days ago | IN | 0 ETH | 0.00004289 | ||||
| Set Oracle | 11029632 | 461 days ago | IN | 0 ETH | 0.0000056 | ||||
| Set Oracle | 7607645 | 541 days ago | IN | 0 ETH | 0.00001607 | ||||
| Get Fresh Price | 7607525 | 541 days ago | IN | 0 ETH | 0.00001582 | ||||
| Set Oracles | 7605872 | 541 days ago | IN | 0 ETH | 0.0000388 | ||||
| Set Oracle | 7131773 | 552 days ago | IN | 0 ETH | 0.00003063 | ||||
| Set Oracle | 6221131 | 573 days ago | IN | 0 ETH | 0.00003141 | ||||
| Set Oracle | 6220827 | 573 days ago | IN | 0 ETH | 0.00003152 | ||||
| Set Oracle | 6220702 | 573 days ago | IN | 0 ETH | 0.00003135 | ||||
| Transfer Ownersh... | 5441318 | 591 days ago | IN | 0 ETH | 0.000002 | ||||
| Set Oracles | 5394659 | 592 days ago | IN | 0 ETH | 0.00012344 | ||||
| Set Oracles | 5393594 | 592 days ago | IN | 0 ETH | 0.00007676 | ||||
| Initialize | 5393295 | 592 days ago | IN | 0 ETH | 0.00000552 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314732 | 7 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH | ||||
| 28314132 | 8 hrs ago | 0 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BeefyOracle
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at lineascan.build/ on 2024-06-12
*/
// File contracts/BIFI/interfaces/oracle/ISubOracle.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface ISubOracle {
function getPrice(bytes calldata data) external returns (uint256 price, bool success);
function validateData(bytes calldata data) external view;
}
// File @openzeppelin/contracts-upgradeable/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library AddressUpgradeable {
/**
* @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
*
* Furthermore, `isContract` will also return true if the target contract within
* the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
* which only has an effect at the end of a transaction.
* ====
*
* [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://consensys.net/diligence/blog/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.8.0/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-upgradeable/proxy/utils/[email protected]
// OpenZeppelin Contracts (last updated v4.9.0) (proxy/utils/Initializable.sol)
pragma solidity ^0.8.2;
/**
* @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed
* behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an
* external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer
* function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.
*
* The initialization functions use a version number. Once a version number is used, it is consumed and cannot be
* reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in
* case an upgrade adds a module that needs to be initialized.
*
* For example:
*
* [.hljs-theme-light.nopadding]
* ```solidity
* contract MyToken is ERC20Upgradeable {
* function initialize() initializer public {
* __ERC20_init("MyToken", "MTK");
* }
* }
*
* contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {
* function initializeV2() reinitializer(2) public {
* __ERC20Permit_init("MyToken");
* }
* }
* ```
*
* TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as
* possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.
*
* CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure
* that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.
*
* [CAUTION]
* ====
* Avoid leaving a contract uninitialized.
*
* An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation
* contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke
* the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:
*
* [.hljs-theme-light.nopadding]
* ```
* /// @custom:oz-upgrades-unsafe-allow constructor
* constructor() {
* _disableInitializers();
* }
* ```
* ====
*/
abstract contract Initializable {
/**
* @dev Indicates that the contract has been initialized.
* @custom:oz-retyped-from bool
*/
uint8 private _initialized;
/**
* @dev Indicates that the contract is in the process of being initialized.
*/
bool private _initializing;
/**
* @dev Triggered when the contract has been initialized or reinitialized.
*/
event Initialized(uint8 version);
/**
* @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,
* `onlyInitializing` functions can be used to initialize parent contracts.
*
* Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a
* constructor.
*
* Emits an {Initialized} event.
*/
modifier initializer() {
bool isTopLevelCall = !_initializing;
require(
(isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),
"Initializable: contract is already initialized"
);
_initialized = 1;
if (isTopLevelCall) {
_initializing = true;
}
_;
if (isTopLevelCall) {
_initializing = false;
emit Initialized(1);
}
}
/**
* @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the
* contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be
* used to initialize parent contracts.
*
* A reinitializer may be used after the original initialization step. This is essential to configure modules that
* are added through upgrades and that require initialization.
*
* When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`
* cannot be nested. If one is invoked in the context of another, execution will revert.
*
* Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in
* a contract, executing them in the right order is up to the developer or operator.
*
* WARNING: setting the version to 255 will prevent any future reinitialization.
*
* Emits an {Initialized} event.
*/
modifier reinitializer(uint8 version) {
require(!_initializing && _initialized < version, "Initializable: contract is already initialized");
_initialized = version;
_initializing = true;
_;
_initializing = false;
emit Initialized(version);
}
/**
* @dev Modifier to protect an initialization function so that it can only be invoked by functions with the
* {initializer} and {reinitializer} modifiers, directly or indirectly.
*/
modifier onlyInitializing() {
require(_initializing, "Initializable: contract is not initializing");
_;
}
/**
* @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.
* Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized
* to any version. It is recommended to use this to lock implementation contracts that are designed to be called
* through proxies.
*
* Emits an {Initialized} event the first time it is successfully executed.
*/
function _disableInitializers() internal virtual {
require(!_initializing, "Initializable: contract is initializing");
if (_initialized != type(uint8).max) {
_initialized = type(uint8).max;
emit Initialized(type(uint8).max);
}
}
/**
* @dev Returns the highest version that has been initialized. See {reinitializer}.
*/
function _getInitializedVersion() internal view returns (uint8) {
return _initialized;
}
/**
* @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.
*/
function _isInitializing() internal view returns (bool) {
return _initializing;
}
}
// File @openzeppelin/contracts-upgradeable/utils/[email protected]
// 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 ContextUpgradeable is Initializable {
function __Context_init() internal onlyInitializing {
}
function __Context_init_unchained() internal onlyInitializing {
}
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
/**
* @dev This empty reserved space is put in place to allow future versions to add new
* variables without shifting down storage in the inheritance chain.
* See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
*/
uint256[50] private __gap;
}
// File @openzeppelin/contracts-upgradeable/access/[email protected]
// OpenZeppelin Contracts (last updated v4.9.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 OwnableUpgradeable is Initializable, ContextUpgradeable {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
function __Ownable_init() internal onlyInitializing {
__Ownable_init_unchained();
}
function __Ownable_init_unchained() internal onlyInitializing {
_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. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby disabling 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);
}
/**
* @dev This empty reserved space is put in place to allow future versions to add new
* variables without shifting down storage in the inheritance chain.
* See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
*/
uint256[49] private __gap;
}
// File contracts/BIFI/infra/BeefyOracle/BeefyOracle.sol
pragma solidity ^0.8.0;
/// @title Beefy Oracle
/// @author Beefy, @kexley
/// @notice On-chain oracle using various sources
contract BeefyOracle is OwnableUpgradeable {
/// @dev Struct for the latest price of a token with the timestamp
/// @param price Stored price
/// @param timestamp Last update timestamp
struct LatestPrice {
uint256 price;
uint256 timestamp;
}
/// @dev Struct for delegating the price calculation to a library using stored data
/// @param oracle Address of the library for a particular oracle type
/// @param data Stored data for calculating the price of a specific token using the library
struct SubOracle {
address oracle;
bytes data;
}
/// @notice Latest price of a token with a timestamp
mapping(address => LatestPrice) public latestPrice;
/// @notice Oracle library address and payload for delegating the price calculation of a token
mapping(address => SubOracle) public subOracle;
/// @notice Length of time in seconds before a price goes stale
uint256 public staleness;
/// @notice Price of a token has been updated
/// @param token Token address
/// @param price New price
/// @param timestamp Timestamp of price fetch
event PriceUpdated(address indexed token, uint256 price, uint256 timestamp);
/// @notice New oracle has been set
/// @param token Token address
/// @param oracle Library address for price fetch
/// @param data Data to pass to library to calculate the price for that token
event SetOracle(address indexed token, address oracle, bytes data);
/// @notice New staleness has been set
/// @param staleness Length of time a price stays fresh for
event SetStaleness(uint256 staleness);
/// @notice Initialize the contract
/// @dev Ownership is transferred to msg.sender
function initialize() external initializer {
__Ownable_init();
}
/// @notice Fetch the most recent stored price for a token
/// @param _token Address of the token being fetched
/// @return price Price of the token
function getPrice(address _token) external view returns (uint256 price) {
price = latestPrice[_token].price;
}
/// @notice Fetch an updated price for a token
/// @param _token Address of the token being fetched
/// @return price Updated price of the token
/// @return success Price update was success or not
function getFreshPrice(address _token) external returns (uint256 price, bool success) {
(price, success) = _getFreshPrice(_token);
}
/// @dev If the price is stale then calculate a new price by delegating to the sub oracle
/// @param _token Address of the token being fetched
/// @return price Updated price of the token
/// @return success Price update was success or not
function _getFreshPrice(address _token) private returns (uint256 price, bool success) {
if (latestPrice[_token].timestamp + staleness > block.timestamp) {
price = latestPrice[_token].price;
success = true;
} else {
(price, success) = ISubOracle(subOracle[_token].oracle).getPrice(subOracle[_token].data);
if (success) {
latestPrice[_token] = LatestPrice({price: price, timestamp: block.timestamp});
emit PriceUpdated(_token, price, block.timestamp);
}
}
}
/* ----------------------------------- OWNER FUNCTIONS ----------------------------------- */
/// @notice Owner function to set a sub oracle and data for a token
/// @dev The payload will be validated against the library
/// @param _token Address of the token being fetched
/// @param _oracle Address of the library used to calculate the price
/// @param _data Payload specific to the token that will be used by the library
function setOracle(address _token, address _oracle, bytes calldata _data) external onlyOwner {
_setOracle(_token, _oracle, _data);
}
/// @notice Owner function to set a sub oracle and data for an array of tokens
/// @dev The payloads will be validated against the libraries
/// @param _tokens Addresses of the tokens being fetched
/// @param _oracles Addresses of the libraries used to calculate the price
/// @param _datas Payloads specific to the tokens that will be used by the libraries
function setOracles(
address[] calldata _tokens,
address[] calldata _oracles,
bytes[] calldata _datas
) external onlyOwner {
uint256 tokenLength = _tokens.length;
for (uint i; i < tokenLength;) {
_setOracle(_tokens[i], _oracles[i], _datas[i]);
unchecked { ++i; }
}
}
/// @dev Set the sub oracle and data for a token, it also validates that the data is correct
/// @param _token Address of the token being fetched
/// @param _oracle Address of the library used to calculate the price
/// @param _data Payload specific to the token that will be used by the library
function _setOracle(address _token, address _oracle, bytes calldata _data) private {
ISubOracle(_oracle).validateData(_data);
subOracle[_token] = SubOracle({oracle: _oracle, data: _data});
_getFreshPrice(_token);
emit SetOracle(_token, _oracle, _data);
}
/// @notice Owner function to set the staleness
/// @param _staleness Length of time in seconds before a price becomes stale
function setStaleness(uint256 _staleness) external onlyOwner {
staleness = _staleness;
emit SetStaleness(_staleness);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","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":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PriceUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"oracle","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"SetOracle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"staleness","type":"uint256"}],"name":"SetStaleness","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getFreshPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"latestPrice","outputs":[{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_oracle","type":"address"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address[]","name":"_oracles","type":"address[]"},{"internalType":"bytes[]","name":"_datas","type":"bytes[]"}],"name":"setOracles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_staleness","type":"uint256"}],"name":"setStaleness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staleness","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"subOracle","outputs":[{"internalType":"address","name":"oracle","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405234801561001057600080fd5b50611a89806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c8063715018a611610071578063715018a61461018c5780637eb0324e146101965780638129fc1c146101c75780638da5cb5b146101d1578063baeb325b146101ef578063f2fde38b14610220576100b4565b80630cc44887146100b957806341976e09146100d757806352749a391461010757806353084eff14610123578063644a2f9e146101545780636d64a42014610170575b600080fd5b6100c161023c565b6040516100ce9190610d5a565b60405180910390f35b6100f160048036038101906100ec9190610ddd565b610242565b6040516100fe9190610d5a565b60405180910390f35b610121600480360381019061011c9190610ec5565b61028e565b005b61013d60048036038101906101389190610ddd565b61033b565b60405161014b929190610f79565b60405180910390f35b61016e60048036038101906101699190610fce565b61035f565b005b61018a60048036038101906101859190611051565b6103a8565b005b6101946103c2565b005b6101b060048036038101906101ab9190610ddd565b6103d6565b6040516101be929190611164565b60405180910390f35b6101cf6104a2565b005b6101d96105e0565b6040516101e69190611194565b60405180910390f35b61020960048036038101906102049190610ddd565b61060a565b6040516102179291906111ca565b60405180910390f35b61023a60048036038101906102359190610ddd565b610623565b005b60675481565b6000606560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6102966106a6565b600086869050905060005b81811015610331576103268888838181106102bf576102be6111f3565b5b90506020020160208101906102d49190610ddd565b8787848181106102e7576102e66111f3565b5b90506020020160208101906102fc9190610ddd565b86868581811061030f5761030e6111f3565b5b90506020028101906103219190611231565b610724565b8060010190506102a1565b5050505050505050565b60656020528060005260406000206000915090508060000154908060010154905082565b6103676106a6565b806067819055507f779814184804e11dd965da17b223942318b12cddc906fd8b3801caac5e235d318160405161039d9190610d5a565b60405180910390a150565b6103b06106a6565b6103bc84848484610724565b50505050565b6103ca6106a6565b6103d46000610900565b565b60666020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461041f906112c3565b80601f016020809104026020016040519081016040528092919081815260200182805461044b906112c3565b80156104985780601f1061046d57610100808354040283529160200191610498565b820191906000526020600020905b81548152906001019060200180831161047b57829003601f168201915b5050505050905082565b60008060019054906101000a900460ff161590508080156104d35750600160008054906101000a900460ff1660ff16105b8061050057506104e2306109c6565b1580156104ff5750600160008054906101000a900460ff1660ff16145b5b61053f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053690611377565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561057c576001600060016101000a81548160ff0219169083151502179055505b6105846109e9565b80156105dd5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516105d491906113e9565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008061061683610a42565b8092508193505050915091565b61062b6106a6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069190611476565b60405180910390fd5b6106a381610900565b50565b6106ae610cd8565b73ffffffffffffffffffffffffffffffffffffffff166106cc6105e0565b73ffffffffffffffffffffffffffffffffffffffff1614610722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610719906114e2565b60405180910390fd5b565b8273ffffffffffffffffffffffffffffffffffffffff1663a6ffa36c83836040518363ffffffff1660e01b815260040161075f92919061153e565b60006040518083038186803b15801561077757600080fd5b505afa15801561078b573d6000803e3d6000fd5b5050505060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815250606660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816108999190611733565b509050506108a684610a42565b50508373ffffffffffffffffffffffffffffffffffffffff167f7c6299bd41834a522ee9008a6594b4a4e41dcb09d7b903f6c1287189dfa75e6f8484846040516108f293929190611805565b60405180910390a250505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906118a9565b60405180910390fd5b610a40610ce0565b565b60008042606754606560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610a9691906118f8565b1115610aea57606560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915060019050610cd3565b606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b4dd158606660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016040518263ffffffff1660e01b8152600401610bc691906119b0565b60408051808303816000875af1158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c089190611a13565b80925081935050508015610cd257604051806040016040528083815260200142815250606560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff167fb556fac599c3c70efb9ab1fa725ecace6c81cc48d1455f886607def065f3e0c08342604051610cc9929190610f79565b60405180910390a25b5b915091565b600033905090565b600060019054906101000a900460ff16610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906118a9565b60405180910390fd5b610d3f610d3a610cd8565b610900565b565b6000819050919050565b610d5481610d41565b82525050565b6000602082019050610d6f6000830184610d4b565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610daa82610d7f565b9050919050565b610dba81610d9f565b8114610dc557600080fd5b50565b600081359050610dd781610db1565b92915050565b600060208284031215610df357610df2610d75565b5b6000610e0184828501610dc8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610e2f57610e2e610e0a565b5b8235905067ffffffffffffffff811115610e4c57610e4b610e0f565b5b602083019150836020820283011115610e6857610e67610e14565b5b9250929050565b60008083601f840112610e8557610e84610e0a565b5b8235905067ffffffffffffffff811115610ea257610ea1610e0f565b5b602083019150836020820283011115610ebe57610ebd610e14565b5b9250929050565b60008060008060008060608789031215610ee257610ee1610d75565b5b600087013567ffffffffffffffff811115610f0057610eff610d7a565b5b610f0c89828a01610e19565b9650965050602087013567ffffffffffffffff811115610f2f57610f2e610d7a565b5b610f3b89828a01610e19565b9450945050604087013567ffffffffffffffff811115610f5e57610f5d610d7a565b5b610f6a89828a01610e6f565b92509250509295509295509295565b6000604082019050610f8e6000830185610d4b565b610f9b6020830184610d4b565b9392505050565b610fab81610d41565b8114610fb657600080fd5b50565b600081359050610fc881610fa2565b92915050565b600060208284031215610fe457610fe3610d75565b5b6000610ff284828501610fb9565b91505092915050565b60008083601f84011261101157611010610e0a565b5b8235905067ffffffffffffffff81111561102e5761102d610e0f565b5b60208301915083600182028301111561104a57611049610e14565b5b9250929050565b6000806000806060858703121561106b5761106a610d75565b5b600061107987828801610dc8565b945050602061108a87828801610dc8565b935050604085013567ffffffffffffffff8111156110ab576110aa610d7a565b5b6110b787828801610ffb565b925092505092959194509250565b6110ce81610d9f565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561110e5780820151818401526020810190506110f3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611136826110d4565b61114081856110df565b93506111508185602086016110f0565b6111598161111a565b840191505092915050565b600060408201905061117960008301856110c5565b818103602083015261118b818461112b565b90509392505050565b60006020820190506111a960008301846110c5565b92915050565b60008115159050919050565b6111c4816111af565b82525050565b60006040820190506111df6000830185610d4b565b6111ec60208301846111bb565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261124e5761124d611222565b5b80840192508235915067ffffffffffffffff8211156112705761126f611227565b5b60208301925060018202360383131561128c5761128b61122c565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806112db57607f821691505b6020821081036112ee576112ed611294565b5b50919050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000611361602e836112f4565b915061136c82611305565b604082019050919050565b6000602082019050818103600083015261139081611354565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b60006113d36113ce6113c984611397565b6113ae565b6113a1565b9050919050565b6113e3816113b8565b82525050565b60006020820190506113fe60008301846113da565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006114606026836112f4565b915061146b82611404565b604082019050919050565b6000602082019050818103600083015261148f81611453565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006114cc6020836112f4565b91506114d782611496565b602082019050919050565b600060208201905081810360008301526114fb816114bf565b9050919050565b82818337600083830152505050565b600061151d83856110df565b935061152a838584611502565b6115338361111a565b840190509392505050565b60006020820190508181036000830152611559818486611511565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026115f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826115b6565b6115fd86836115b6565b95508019841693508086168417925050509392505050565b600061163061162b61162684610d41565b6113ae565b610d41565b9050919050565b6000819050919050565b61164a83611615565b61165e61165682611637565b8484546115c3565b825550505050565b600090565b611673611666565b61167e818484611641565b505050565b5b818110156116a25761169760008261166b565b600181019050611684565b5050565b601f8211156116e7576116b881611591565b6116c1846115a6565b810160208510156116d0578190505b6116e46116dc856115a6565b830182611683565b50505b505050565b600082821c905092915050565b600061170a600019846008026116ec565b1980831691505092915050565b600061172383836116f9565b9150826002028217905092915050565b61173c826110d4565b67ffffffffffffffff81111561175557611754611562565b5b61175f82546112c3565b61176a8282856116a6565b600060209050601f83116001811461179d576000841561178b578287015190505b6117958582611717565b8655506117fd565b601f1984166117ab86611591565b60005b828110156117d3578489015182556001820191506020850194506020810190506117ae565b868310156117f057848901516117ec601f8916826116f9565b8355505b6001600288020188555050505b505050505050565b600060408201905061181a60008301866110c5565b818103602083015261182d818486611511565b9050949350505050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000611893602b836112f4565b915061189e82611837565b604082019050919050565b600060208201905081810360008301526118c281611886565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061190382610d41565b915061190e83610d41565b9250828201905080821115611926576119256118c9565b5b92915050565b60008154611939816112c3565b61194381866110df565b9450600182166000811461195e5760018114611974576119a7565b60ff1983168652811515602002860193506119a7565b61197d85611591565b60005b8381101561199f57815481890152600182019150602081019050611980565b808801955050505b50505092915050565b600060208201905081810360008301526119ca818461192c565b905092915050565b6000815190506119e181610fa2565b92915050565b6119f0816111af565b81146119fb57600080fd5b50565b600081519050611a0d816119e7565b92915050565b60008060408385031215611a2a57611a29610d75565b5b6000611a38858286016119d2565b9250506020611a49858286016119fe565b915050925092905056fea26469706673582212202f7e7087ca044cf9f685e277bf4848f3e44bc75980a03ddd5741ba1d8c5bc45264736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100b45760003560e01c8063715018a611610071578063715018a61461018c5780637eb0324e146101965780638129fc1c146101c75780638da5cb5b146101d1578063baeb325b146101ef578063f2fde38b14610220576100b4565b80630cc44887146100b957806341976e09146100d757806352749a391461010757806353084eff14610123578063644a2f9e146101545780636d64a42014610170575b600080fd5b6100c161023c565b6040516100ce9190610d5a565b60405180910390f35b6100f160048036038101906100ec9190610ddd565b610242565b6040516100fe9190610d5a565b60405180910390f35b610121600480360381019061011c9190610ec5565b61028e565b005b61013d60048036038101906101389190610ddd565b61033b565b60405161014b929190610f79565b60405180910390f35b61016e60048036038101906101699190610fce565b61035f565b005b61018a60048036038101906101859190611051565b6103a8565b005b6101946103c2565b005b6101b060048036038101906101ab9190610ddd565b6103d6565b6040516101be929190611164565b60405180910390f35b6101cf6104a2565b005b6101d96105e0565b6040516101e69190611194565b60405180910390f35b61020960048036038101906102049190610ddd565b61060a565b6040516102179291906111ca565b60405180910390f35b61023a60048036038101906102359190610ddd565b610623565b005b60675481565b6000606560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001549050919050565b6102966106a6565b600086869050905060005b81811015610331576103268888838181106102bf576102be6111f3565b5b90506020020160208101906102d49190610ddd565b8787848181106102e7576102e66111f3565b5b90506020020160208101906102fc9190610ddd565b86868581811061030f5761030e6111f3565b5b90506020028101906103219190611231565b610724565b8060010190506102a1565b5050505050505050565b60656020528060005260406000206000915090508060000154908060010154905082565b6103676106a6565b806067819055507f779814184804e11dd965da17b223942318b12cddc906fd8b3801caac5e235d318160405161039d9190610d5a565b60405180910390a150565b6103b06106a6565b6103bc84848484610724565b50505050565b6103ca6106a6565b6103d46000610900565b565b60666020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101805461041f906112c3565b80601f016020809104026020016040519081016040528092919081815260200182805461044b906112c3565b80156104985780601f1061046d57610100808354040283529160200191610498565b820191906000526020600020905b81548152906001019060200180831161047b57829003601f168201915b5050505050905082565b60008060019054906101000a900460ff161590508080156104d35750600160008054906101000a900460ff1660ff16105b8061050057506104e2306109c6565b1580156104ff5750600160008054906101000a900460ff1660ff16145b5b61053f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053690611377565b60405180910390fd5b60016000806101000a81548160ff021916908360ff160217905550801561057c576001600060016101000a81548160ff0219169083151502179055505b6105846109e9565b80156105dd5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516105d491906113e9565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008061061683610a42565b8092508193505050915091565b61062b6106a6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361069a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161069190611476565b60405180910390fd5b6106a381610900565b50565b6106ae610cd8565b73ffffffffffffffffffffffffffffffffffffffff166106cc6105e0565b73ffffffffffffffffffffffffffffffffffffffff1614610722576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610719906114e2565b60405180910390fd5b565b8273ffffffffffffffffffffffffffffffffffffffff1663a6ffa36c83836040518363ffffffff1660e01b815260040161075f92919061153e565b60006040518083038186803b15801561077757600080fd5b505afa15801561078b573d6000803e3d6000fd5b5050505060405180604001604052808473ffffffffffffffffffffffffffffffffffffffff16815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815250606660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190816108999190611733565b509050506108a684610a42565b50508373ffffffffffffffffffffffffffffffffffffffff167f7c6299bd41834a522ee9008a6594b4a4e41dcb09d7b903f6c1287189dfa75e6f8484846040516108f293929190611805565b60405180910390a250505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16610a38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2f906118a9565b60405180910390fd5b610a40610ce0565b565b60008042606754606560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154610a9691906118f8565b1115610aea57606560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154915060019050610cd3565b606660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636b4dd158606660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016040518263ffffffff1660e01b8152600401610bc691906119b0565b60408051808303816000875af1158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c089190611a13565b80925081935050508015610cd257604051806040016040528083815260200142815250606560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050508273ffffffffffffffffffffffffffffffffffffffff167fb556fac599c3c70efb9ab1fa725ecace6c81cc48d1455f886607def065f3e0c08342604051610cc9929190610f79565b60405180910390a25b5b915091565b600033905090565b600060019054906101000a900460ff16610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906118a9565b60405180910390fd5b610d3f610d3a610cd8565b610900565b565b6000819050919050565b610d5481610d41565b82525050565b6000602082019050610d6f6000830184610d4b565b92915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610daa82610d7f565b9050919050565b610dba81610d9f565b8114610dc557600080fd5b50565b600081359050610dd781610db1565b92915050565b600060208284031215610df357610df2610d75565b5b6000610e0184828501610dc8565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610e2f57610e2e610e0a565b5b8235905067ffffffffffffffff811115610e4c57610e4b610e0f565b5b602083019150836020820283011115610e6857610e67610e14565b5b9250929050565b60008083601f840112610e8557610e84610e0a565b5b8235905067ffffffffffffffff811115610ea257610ea1610e0f565b5b602083019150836020820283011115610ebe57610ebd610e14565b5b9250929050565b60008060008060008060608789031215610ee257610ee1610d75565b5b600087013567ffffffffffffffff811115610f0057610eff610d7a565b5b610f0c89828a01610e19565b9650965050602087013567ffffffffffffffff811115610f2f57610f2e610d7a565b5b610f3b89828a01610e19565b9450945050604087013567ffffffffffffffff811115610f5e57610f5d610d7a565b5b610f6a89828a01610e6f565b92509250509295509295509295565b6000604082019050610f8e6000830185610d4b565b610f9b6020830184610d4b565b9392505050565b610fab81610d41565b8114610fb657600080fd5b50565b600081359050610fc881610fa2565b92915050565b600060208284031215610fe457610fe3610d75565b5b6000610ff284828501610fb9565b91505092915050565b60008083601f84011261101157611010610e0a565b5b8235905067ffffffffffffffff81111561102e5761102d610e0f565b5b60208301915083600182028301111561104a57611049610e14565b5b9250929050565b6000806000806060858703121561106b5761106a610d75565b5b600061107987828801610dc8565b945050602061108a87828801610dc8565b935050604085013567ffffffffffffffff8111156110ab576110aa610d7a565b5b6110b787828801610ffb565b925092505092959194509250565b6110ce81610d9f565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561110e5780820151818401526020810190506110f3565b60008484015250505050565b6000601f19601f8301169050919050565b6000611136826110d4565b61114081856110df565b93506111508185602086016110f0565b6111598161111a565b840191505092915050565b600060408201905061117960008301856110c5565b818103602083015261118b818461112b565b90509392505050565b60006020820190506111a960008301846110c5565b92915050565b60008115159050919050565b6111c4816111af565b82525050565b60006040820190506111df6000830185610d4b565b6111ec60208301846111bb565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261124e5761124d611222565b5b80840192508235915067ffffffffffffffff8211156112705761126f611227565b5b60208301925060018202360383131561128c5761128b61122c565b5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806112db57607f821691505b6020821081036112ee576112ed611294565b5b50919050565b600082825260208201905092915050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000611361602e836112f4565b915061136c82611305565b604082019050919050565b6000602082019050818103600083015261139081611354565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b60006113d36113ce6113c984611397565b6113ae565b6113a1565b9050919050565b6113e3816113b8565b82525050565b60006020820190506113fe60008301846113da565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006114606026836112f4565b915061146b82611404565b604082019050919050565b6000602082019050818103600083015261148f81611453565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006114cc6020836112f4565b91506114d782611496565b602082019050919050565b600060208201905081810360008301526114fb816114bf565b9050919050565b82818337600083830152505050565b600061151d83856110df565b935061152a838584611502565b6115338361111a565b840190509392505050565b60006020820190508181036000830152611559818486611511565b90509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026115f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826115b6565b6115fd86836115b6565b95508019841693508086168417925050509392505050565b600061163061162b61162684610d41565b6113ae565b610d41565b9050919050565b6000819050919050565b61164a83611615565b61165e61165682611637565b8484546115c3565b825550505050565b600090565b611673611666565b61167e818484611641565b505050565b5b818110156116a25761169760008261166b565b600181019050611684565b5050565b601f8211156116e7576116b881611591565b6116c1846115a6565b810160208510156116d0578190505b6116e46116dc856115a6565b830182611683565b50505b505050565b600082821c905092915050565b600061170a600019846008026116ec565b1980831691505092915050565b600061172383836116f9565b9150826002028217905092915050565b61173c826110d4565b67ffffffffffffffff81111561175557611754611562565b5b61175f82546112c3565b61176a8282856116a6565b600060209050601f83116001811461179d576000841561178b578287015190505b6117958582611717565b8655506117fd565b601f1984166117ab86611591565b60005b828110156117d3578489015182556001820191506020850194506020810190506117ae565b868310156117f057848901516117ec601f8916826116f9565b8355505b6001600288020188555050505b505050505050565b600060408201905061181a60008301866110c5565b818103602083015261182d818486611511565b9050949350505050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000611893602b836112f4565b915061189e82611837565b604082019050919050565b600060208201905081810360008301526118c281611886565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061190382610d41565b915061190e83610d41565b9250828201905080821115611926576119256118c9565b5b92915050565b60008154611939816112c3565b61194381866110df565b9450600182166000811461195e5760018114611974576119a7565b60ff1983168652811515602002860193506119a7565b61197d85611591565b60005b8381101561199f57815481890152600182019150602081019050611980565b808801955050505b50505092915050565b600060208201905081810360008301526119ca818461192c565b905092915050565b6000815190506119e181610fa2565b92915050565b6119f0816111af565b81146119fb57600080fd5b50565b600081519050611a0d816119e7565b92915050565b60008060408385031215611a2a57611a29610d75565b5b6000611a38858286016119d2565b9250506020611a49858286016119fe565b915050925092905056fea26469706673582212202f7e7087ca044cf9f685e277bf4848f3e44bc75980a03ddd5741ba1d8c5bc45264736f6c63430008130033
Deployed Bytecode Sourcemap
21599:5664:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22574:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23650:124;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26000:356;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22291:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;27118:142;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25463:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20287:103;;;:::i;:::-;;22450:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;23400:78;;;:::i;:::-;;19646:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23999:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;20545:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22574:24;;;;:::o;23650:124::-;23707:13;23741:11;:19;23753:6;23741:19;;;;;;;;;;;;;;;:25;;;23733:33;;23650:124;;;:::o;26000:356::-;19532:13;:11;:13::i;:::-;26166:19:::1;26188:7;;:14;;26166:36;;26218:6;26213:136;26230:11;26226:1;:15;26213:136;;;26259:46;26270:7;;26278:1;26270:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26282:8;;26291:1;26282:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26295:6;;26302:1;26295:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;26259:10;:46::i;:::-;26332:3;;;;;26213:136;;;;26155:201;26000:356:::0;;;;;;:::o;22291:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27118:142::-;19532:13;:11;:13::i;:::-;27202:10:::1;27190:9;:22;;;;27228:24;27241:10;27228:24;;;;;;:::i;:::-;;;;;;;;27118:142:::0;:::o;25463:146::-;19532:13;:11;:13::i;:::-;25567:34:::1;25578:6;25586:7;25595:5;;25567:10;:34::i;:::-;25463:146:::0;;;;:::o;20287:103::-;19532:13;:11;:13::i;:::-;20352:30:::1;20379:1;20352:18;:30::i;:::-;20287:103::o:0;22450:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23400:78::-;13350:19;13373:13;;;;;;;;;;;13372:14;13350:36;;13420:14;:34;;;;;13453:1;13438:12;;;;;;;;;;:16;;;13420:34;13419:108;;;;13461:44;13499:4;13461:29;:44::i;:::-;13460:45;:66;;;;;13525:1;13509:12;;;;;;;;;;:17;;;13460:66;13419:108;13397:204;;;;;;;;;;;;:::i;:::-;;;;;;;;;13627:1;13612:12;;:16;;;;;;;;;;;;;;;;;;13643:14;13639:67;;;13690:4;13674:13;;:20;;;;;;;;;;;;;;;;;;13639:67;23454:16:::1;:14;:16::i;:::-;13732:14:::0;13728:102;;;13779:5;13763:13;;:21;;;;;;;;;;;;;;;;;;13804:14;13816:1;13804:14;;;;;;:::i;:::-;;;;;;;;13728:102;13339:498;23400:78::o;19646:87::-;19692:7;19719:6;;;;;;;;;;;19712:13;;19646:87;:::o;23999:146::-;24056:13;24071:12;24115:22;24130:6;24115:14;:22::i;:::-;24096:41;;;;;;;;23999:146;;;:::o;20545:201::-;19532:13;:11;:13::i;:::-;20654:1:::1;20634:22;;:8;:22;;::::0;20626:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20710:28;20729:8;20710:18;:28::i;:::-;20545:201:::0;:::o;19811:132::-;19886:12;:10;:12::i;:::-;19875:23;;:7;:5;:7::i;:::-;:23;;;19867:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19811:132::o;26680:295::-;26785:7;26774:32;;;26807:5;;26774:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26844:41;;;;;;;;26863:7;26844:41;;;;;;26878:5;;26844:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26824:9;:17;26834:6;26824:17;;;;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;26896:22;26911:6;26896:14;:22::i;:::-;;;26944:6;26934:33;;;26952:7;26961:5;;26934:33;;;;;;;;:::i;:::-;;;;;;;;26680:295;;;;:::o;20906:191::-;20980:16;20999:6;;;;;;;;;;;20980:25;;21025:8;21016:6;;:17;;;;;;;;;;;;;;;;;;21080:8;21049:40;;21070:8;21049:40;;;;;;;;;;;;20969:128;20906:191;:::o;1821:326::-;1881:4;2138:1;2116:7;:19;;;:23;2109:30;;1821:326;;;:::o;19189:97::-;15493:13;;;;;;;;;;;15485:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;19252:26:::1;:24;:26::i;:::-;19189:97::o:0;24413:586::-;24470:13;24485:12;24558:15;24546:9;;24514:11;:19;24526:6;24514:19;;;;;;;;;;;;;;;:29;;;:41;;;;:::i;:::-;:59;24510:482;;;24598:11;:19;24610:6;24598:19;;;;;;;;;;;;;;;:25;;;24590:33;;24648:4;24638:14;;24510:482;;;24715:9;:17;24725:6;24715:17;;;;;;;;;;;;;;;:24;;;;;;;;;;;;24704:45;;;24750:9;:17;24760:6;24750:17;;;;;;;;;;;;;;;:22;;24704:69;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24685:88;;;;;;;;24792:7;24788:193;;;24842:55;;;;;;;;24862:5;24842:55;;;;24880:15;24842:55;;;24820:11;:19;24832:6;24820:19;;;;;;;;;;;;;;;:77;;;;;;;;;;;;;;;;;;;24934:6;24921:44;;;24942:5;24949:15;24921:44;;;;;;;:::i;:::-;;;;;;;;24788:193;24510:482;24413:586;;;:::o;17678:98::-;17731:7;17758:10;17751:17;;17678:98;:::o;19294:113::-;15493:13;;;;;;;;;;;15485:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;19367:32:::1;19386:12;:10;:12::i;:::-;19367:18;:32::i;:::-;19294:113::o:0;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;523:117::-;632:1;629;622:12;646:117;755:1;752;745:12;769:126;806:7;846:42;839:5;835:54;824:65;;769:126;;;:::o;901:96::-;938:7;967:24;985:5;967:24;:::i;:::-;956:35;;901:96;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:117::-;1720:1;1717;1710:12;1734:117;1843:1;1840;1833:12;1857:117;1966:1;1963;1956:12;1997:568;2070:8;2080:6;2130:3;2123:4;2115:6;2111:17;2107:27;2097:122;;2138:79;;:::i;:::-;2097:122;2251:6;2238:20;2228:30;;2281:18;2273:6;2270:30;2267:117;;;2303:79;;:::i;:::-;2267:117;2417:4;2409:6;2405:17;2393:29;;2471:3;2463:4;2455:6;2451:17;2441:8;2437:32;2434:41;2431:128;;;2478:79;;:::i;:::-;2431:128;1997:568;;;;;:::o;2586:579::-;2670:8;2680:6;2730:3;2723:4;2715:6;2711:17;2707:27;2697:122;;2738:79;;:::i;:::-;2697:122;2851:6;2838:20;2828:30;;2881:18;2873:6;2870:30;2867:117;;;2903:79;;:::i;:::-;2867:117;3017:4;3009:6;3005:17;2993:29;;3071:3;3063:4;3055:6;3051:17;3041:8;3037:32;3034:41;3031:128;;;3078:79;;:::i;:::-;3031:128;2586:579;;;;;:::o;3171:1331::-;3340:6;3348;3356;3364;3372;3380;3429:2;3417:9;3408:7;3404:23;3400:32;3397:119;;;3435:79;;:::i;:::-;3397:119;3583:1;3572:9;3568:17;3555:31;3613:18;3605:6;3602:30;3599:117;;;3635:79;;:::i;:::-;3599:117;3748:80;3820:7;3811:6;3800:9;3796:22;3748:80;:::i;:::-;3730:98;;;;3526:312;3905:2;3894:9;3890:18;3877:32;3936:18;3928:6;3925:30;3922:117;;;3958:79;;:::i;:::-;3922:117;4071:80;4143:7;4134:6;4123:9;4119:22;4071:80;:::i;:::-;4053:98;;;;3848:313;4228:2;4217:9;4213:18;4200:32;4259:18;4251:6;4248:30;4245:117;;;4281:79;;:::i;:::-;4245:117;4394:91;4477:7;4468:6;4457:9;4453:22;4394:91;:::i;:::-;4376:109;;;;4171:324;3171:1331;;;;;;;;:::o;4508:332::-;4629:4;4667:2;4656:9;4652:18;4644:26;;4680:71;4748:1;4737:9;4733:17;4724:6;4680:71;:::i;:::-;4761:72;4829:2;4818:9;4814:18;4805:6;4761:72;:::i;:::-;4508:332;;;;;:::o;4846:122::-;4919:24;4937:5;4919:24;:::i;:::-;4912:5;4909:35;4899:63;;4958:1;4955;4948:12;4899:63;4846:122;:::o;4974:139::-;5020:5;5058:6;5045:20;5036:29;;5074:33;5101:5;5074:33;:::i;:::-;4974:139;;;;:::o;5119:329::-;5178:6;5227:2;5215:9;5206:7;5202:23;5198:32;5195:119;;;5233:79;;:::i;:::-;5195:119;5353:1;5378:53;5423:7;5414:6;5403:9;5399:22;5378:53;:::i;:::-;5368:63;;5324:117;5119:329;;;;:::o;5467:552::-;5524:8;5534:6;5584:3;5577:4;5569:6;5565:17;5561:27;5551:122;;5592:79;;:::i;:::-;5551:122;5705:6;5692:20;5682:30;;5735:18;5727:6;5724:30;5721:117;;;5757:79;;:::i;:::-;5721:117;5871:4;5863:6;5859:17;5847:29;;5925:3;5917:4;5909:6;5905:17;5895:8;5891:32;5888:41;5885:128;;;5932:79;;:::i;:::-;5885:128;5467:552;;;;;:::o;6025:817::-;6113:6;6121;6129;6137;6186:2;6174:9;6165:7;6161:23;6157:32;6154:119;;;6192:79;;:::i;:::-;6154:119;6312:1;6337:53;6382:7;6373:6;6362:9;6358:22;6337:53;:::i;:::-;6327:63;;6283:117;6439:2;6465:53;6510:7;6501:6;6490:9;6486:22;6465:53;:::i;:::-;6455:63;;6410:118;6595:2;6584:9;6580:18;6567:32;6626:18;6618:6;6615:30;6612:117;;;6648:79;;:::i;:::-;6612:117;6761:64;6817:7;6808:6;6797:9;6793:22;6761:64;:::i;:::-;6743:82;;;;6538:297;6025:817;;;;;;;:::o;6848:118::-;6935:24;6953:5;6935:24;:::i;:::-;6930:3;6923:37;6848:118;;:::o;6972:98::-;7023:6;7057:5;7051:12;7041:22;;6972:98;;;:::o;7076:168::-;7159:11;7193:6;7188:3;7181:19;7233:4;7228:3;7224:14;7209:29;;7076:168;;;;:::o;7250:246::-;7331:1;7341:113;7355:6;7352:1;7349:13;7341:113;;;7440:1;7435:3;7431:11;7425:18;7421:1;7416:3;7412:11;7405:39;7377:2;7374:1;7370:10;7365:15;;7341:113;;;7488:1;7479:6;7474:3;7470:16;7463:27;7312:184;7250:246;;;:::o;7502:102::-;7543:6;7594:2;7590:7;7585:2;7578:5;7574:14;7570:28;7560:38;;7502:102;;;:::o;7610:373::-;7696:3;7724:38;7756:5;7724:38;:::i;:::-;7778:70;7841:6;7836:3;7778:70;:::i;:::-;7771:77;;7857:65;7915:6;7910:3;7903:4;7896:5;7892:16;7857:65;:::i;:::-;7947:29;7969:6;7947:29;:::i;:::-;7942:3;7938:39;7931:46;;7700:283;7610:373;;;;:::o;7989:419::-;8128:4;8166:2;8155:9;8151:18;8143:26;;8179:71;8247:1;8236:9;8232:17;8223:6;8179:71;:::i;:::-;8297:9;8291:4;8287:20;8282:2;8271:9;8267:18;8260:48;8325:76;8396:4;8387:6;8325:76;:::i;:::-;8317:84;;7989:419;;;;;:::o;8414:222::-;8507:4;8545:2;8534:9;8530:18;8522:26;;8558:71;8626:1;8615:9;8611:17;8602:6;8558:71;:::i;:::-;8414:222;;;;:::o;8642:90::-;8676:7;8719:5;8712:13;8705:21;8694:32;;8642:90;;;:::o;8738:109::-;8819:21;8834:5;8819:21;:::i;:::-;8814:3;8807:34;8738:109;;:::o;8853:320::-;8968:4;9006:2;8995:9;8991:18;8983:26;;9019:71;9087:1;9076:9;9072:17;9063:6;9019:71;:::i;:::-;9100:66;9162:2;9151:9;9147:18;9138:6;9100:66;:::i;:::-;8853:320;;;;;:::o;9179:180::-;9227:77;9224:1;9217:88;9324:4;9321:1;9314:15;9348:4;9345:1;9338:15;9365:117;9474:1;9471;9464:12;9488:117;9597:1;9594;9587:12;9611:117;9720:1;9717;9710:12;9734:724;9811:4;9817:6;9873:11;9860:25;9973:1;9967:4;9963:12;9952:8;9936:14;9932:29;9928:48;9908:18;9904:73;9894:168;;9981:79;;:::i;:::-;9894:168;10093:18;10083:8;10079:33;10071:41;;10145:4;10132:18;10122:28;;10173:18;10165:6;10162:30;10159:117;;;10195:79;;:::i;:::-;10159:117;10303:2;10297:4;10293:13;10285:21;;10360:4;10352:6;10348:17;10332:14;10328:38;10322:4;10318:49;10315:136;;;10370:79;;:::i;:::-;10315:136;9824:634;9734:724;;;;;:::o;10464:180::-;10512:77;10509:1;10502:88;10609:4;10606:1;10599:15;10633:4;10630:1;10623:15;10650:320;10694:6;10731:1;10725:4;10721:12;10711:22;;10778:1;10772:4;10768:12;10799:18;10789:81;;10855:4;10847:6;10843:17;10833:27;;10789:81;10917:2;10909:6;10906:14;10886:18;10883:38;10880:84;;10936:18;;:::i;:::-;10880:84;10701:269;10650:320;;;:::o;10976:169::-;11060:11;11094:6;11089:3;11082:19;11134:4;11129:3;11125:14;11110:29;;10976:169;;;;:::o;11151:233::-;11291:34;11287:1;11279:6;11275:14;11268:58;11360:16;11355:2;11347:6;11343:15;11336:41;11151:233;:::o;11390:366::-;11532:3;11553:67;11617:2;11612:3;11553:67;:::i;:::-;11546:74;;11629:93;11718:3;11629:93;:::i;:::-;11747:2;11742:3;11738:12;11731:19;;11390:366;;;:::o;11762:419::-;11928:4;11966:2;11955:9;11951:18;11943:26;;12015:9;12009:4;12005:20;12001:1;11990:9;11986:17;11979:47;12043:131;12169:4;12043:131;:::i;:::-;12035:139;;11762:419;;;:::o;12187:85::-;12232:7;12261:5;12250:16;;12187:85;;;:::o;12278:86::-;12313:7;12353:4;12346:5;12342:16;12331:27;;12278:86;;;:::o;12370:60::-;12398:3;12419:5;12412:12;;12370:60;;;:::o;12436:154::-;12492:9;12525:59;12541:42;12550:32;12576:5;12550:32;:::i;:::-;12541:42;:::i;:::-;12525:59;:::i;:::-;12512:72;;12436:154;;;:::o;12596:143::-;12689:43;12726:5;12689:43;:::i;:::-;12684:3;12677:56;12596:143;;:::o;12745:234::-;12844:4;12882:2;12871:9;12867:18;12859:26;;12895:77;12969:1;12958:9;12954:17;12945:6;12895:77;:::i;:::-;12745:234;;;;:::o;12985:225::-;13125:34;13121:1;13113:6;13109:14;13102:58;13194:8;13189:2;13181:6;13177:15;13170:33;12985:225;:::o;13216:366::-;13358:3;13379:67;13443:2;13438:3;13379:67;:::i;:::-;13372:74;;13455:93;13544:3;13455:93;:::i;:::-;13573:2;13568:3;13564:12;13557:19;;13216:366;;;:::o;13588:419::-;13754:4;13792:2;13781:9;13777:18;13769:26;;13841:9;13835:4;13831:20;13827:1;13816:9;13812:17;13805:47;13869:131;13995:4;13869:131;:::i;:::-;13861:139;;13588:419;;;:::o;14013:182::-;14153:34;14149:1;14141:6;14137:14;14130:58;14013:182;:::o;14201:366::-;14343:3;14364:67;14428:2;14423:3;14364:67;:::i;:::-;14357:74;;14440:93;14529:3;14440:93;:::i;:::-;14558:2;14553:3;14549:12;14542:19;;14201:366;;;:::o;14573:419::-;14739:4;14777:2;14766:9;14762:18;14754:26;;14826:9;14820:4;14816:20;14812:1;14801:9;14797:17;14790:47;14854:131;14980:4;14854:131;:::i;:::-;14846:139;;14573:419;;;:::o;14998:146::-;15095:6;15090:3;15085;15072:30;15136:1;15127:6;15122:3;15118:16;15111:27;14998:146;;;:::o;15172:314::-;15268:3;15289:70;15352:6;15347:3;15289:70;:::i;:::-;15282:77;;15369:56;15418:6;15413:3;15406:5;15369:56;:::i;:::-;15450:29;15472:6;15450:29;:::i;:::-;15445:3;15441:39;15434:46;;15172:314;;;;;:::o;15492:329::-;15613:4;15651:2;15640:9;15636:18;15628:26;;15700:9;15694:4;15690:20;15686:1;15675:9;15671:17;15664:47;15728:86;15809:4;15800:6;15792;15728:86;:::i;:::-;15720:94;;15492:329;;;;;:::o;15827:180::-;15875:77;15872:1;15865:88;15972:4;15969:1;15962:15;15996:4;15993:1;15986:15;16013:140;16061:4;16084:3;16076:11;;16107:3;16104:1;16097:14;16141:4;16138:1;16128:18;16120:26;;16013:140;;;:::o;16159:93::-;16196:6;16243:2;16238;16231:5;16227:14;16223:23;16213:33;;16159:93;;;:::o;16258:107::-;16302:8;16352:5;16346:4;16342:16;16321:37;;16258:107;;;;:::o;16371:393::-;16440:6;16490:1;16478:10;16474:18;16513:97;16543:66;16532:9;16513:97;:::i;:::-;16631:39;16661:8;16650:9;16631:39;:::i;:::-;16619:51;;16703:4;16699:9;16692:5;16688:21;16679:30;;16752:4;16742:8;16738:19;16731:5;16728:30;16718:40;;16447:317;;16371:393;;;;;:::o;16770:142::-;16820:9;16853:53;16871:34;16880:24;16898:5;16880:24;:::i;:::-;16871:34;:::i;:::-;16853:53;:::i;:::-;16840:66;;16770:142;;;:::o;16918:75::-;16961:3;16982:5;16975:12;;16918:75;;;:::o;16999:269::-;17109:39;17140:7;17109:39;:::i;:::-;17170:91;17219:41;17243:16;17219:41;:::i;:::-;17211:6;17204:4;17198:11;17170:91;:::i;:::-;17164:4;17157:105;17075:193;16999:269;;;:::o;17274:73::-;17319:3;17274:73;:::o;17353:189::-;17430:32;;:::i;:::-;17471:65;17529:6;17521;17515:4;17471:65;:::i;:::-;17406:136;17353:189;;:::o;17548:186::-;17608:120;17625:3;17618:5;17615:14;17608:120;;;17679:39;17716:1;17709:5;17679:39;:::i;:::-;17652:1;17645:5;17641:13;17632:22;;17608:120;;;17548:186;;:::o;17740:541::-;17840:2;17835:3;17832:11;17829:445;;;17874:37;17905:5;17874:37;:::i;:::-;17957:29;17975:10;17957:29;:::i;:::-;17947:8;17943:44;18140:2;18128:10;18125:18;18122:49;;;18161:8;18146:23;;18122:49;18184:80;18240:22;18258:3;18240:22;:::i;:::-;18230:8;18226:37;18213:11;18184:80;:::i;:::-;17844:430;;17829:445;17740:541;;;:::o;18287:117::-;18341:8;18391:5;18385:4;18381:16;18360:37;;18287:117;;;;:::o;18410:169::-;18454:6;18487:51;18535:1;18531:6;18523:5;18520:1;18516:13;18487:51;:::i;:::-;18483:56;18568:4;18562;18558:15;18548:25;;18461:118;18410:169;;;;:::o;18584:295::-;18660:4;18806:29;18831:3;18825:4;18806:29;:::i;:::-;18798:37;;18868:3;18865:1;18861:11;18855:4;18852:21;18844:29;;18584:295;;;;:::o;18884:1390::-;18999:36;19031:3;18999:36;:::i;:::-;19100:18;19092:6;19089:30;19086:56;;;19122:18;;:::i;:::-;19086:56;19166:38;19198:4;19192:11;19166:38;:::i;:::-;19251:66;19310:6;19302;19296:4;19251:66;:::i;:::-;19344:1;19368:4;19355:17;;19400:2;19392:6;19389:14;19417:1;19412:617;;;;20073:1;20090:6;20087:77;;;20139:9;20134:3;20130:19;20124:26;20115:35;;20087:77;20190:67;20250:6;20243:5;20190:67;:::i;:::-;20184:4;20177:81;20046:222;19382:886;;19412:617;19464:4;19460:9;19452:6;19448:22;19498:36;19529:4;19498:36;:::i;:::-;19556:1;19570:208;19584:7;19581:1;19578:14;19570:208;;;19663:9;19658:3;19654:19;19648:26;19640:6;19633:42;19714:1;19706:6;19702:14;19692:24;;19761:2;19750:9;19746:18;19733:31;;19607:4;19604:1;19600:12;19595:17;;19570:208;;;19806:6;19797:7;19794:19;19791:179;;;19864:9;19859:3;19855:19;19849:26;19907:48;19949:4;19941:6;19937:17;19926:9;19907:48;:::i;:::-;19899:6;19892:64;19814:156;19791:179;20016:1;20012;20004:6;20000:14;19996:22;19990:4;19983:36;19419:610;;;19382:886;;18974:1300;;;18884:1390;;:::o;20280:439::-;20429:4;20467:2;20456:9;20452:18;20444:26;;20480:71;20548:1;20537:9;20533:17;20524:6;20480:71;:::i;:::-;20598:9;20592:4;20588:20;20583:2;20572:9;20568:18;20561:48;20626:86;20707:4;20698:6;20690;20626:86;:::i;:::-;20618:94;;20280:439;;;;;;:::o;20725:230::-;20865:34;20861:1;20853:6;20849:14;20842:58;20934:13;20929:2;20921:6;20917:15;20910:38;20725:230;:::o;20961:366::-;21103:3;21124:67;21188:2;21183:3;21124:67;:::i;:::-;21117:74;;21200:93;21289:3;21200:93;:::i;:::-;21318:2;21313:3;21309:12;21302:19;;20961:366;;;:::o;21333:419::-;21499:4;21537:2;21526:9;21522:18;21514:26;;21586:9;21580:4;21576:20;21572:1;21561:9;21557:17;21550:47;21614:131;21740:4;21614:131;:::i;:::-;21606:139;;21333:419;;;:::o;21758:180::-;21806:77;21803:1;21796:88;21903:4;21900:1;21893:15;21927:4;21924:1;21917:15;21944:191;21984:3;22003:20;22021:1;22003:20;:::i;:::-;21998:25;;22037:20;22055:1;22037:20;:::i;:::-;22032:25;;22080:1;22077;22073:9;22066:16;;22101:3;22098:1;22095:10;22092:36;;;22108:18;;:::i;:::-;22092:36;21944:191;;;;:::o;22163:827::-;22246:3;22283:5;22277:12;22312:36;22338:9;22312:36;:::i;:::-;22364:70;22427:6;22422:3;22364:70;:::i;:::-;22357:77;;22465:1;22454:9;22450:17;22481:1;22476:164;;;;22654:1;22649:335;;;;22443:541;;22476:164;22560:4;22556:9;22545;22541:25;22536:3;22529:38;22620:6;22613:14;22606:22;22600:4;22596:33;22591:3;22587:43;22580:50;;22476:164;;22649:335;22716:37;22747:5;22716:37;:::i;:::-;22775:1;22789:154;22803:6;22800:1;22797:13;22789:154;;;22877:7;22871:14;22867:1;22862:3;22858:11;22851:35;22927:1;22918:7;22914:15;22903:26;;22825:4;22822:1;22818:12;22813:17;;22789:154;;;22972:1;22967:3;22963:11;22956:18;;22656:328;;22443:541;;22250:740;;22163:827;;;;:::o;22996:303::-;23104:4;23142:2;23131:9;23127:18;23119:26;;23191:9;23185:4;23181:20;23177:1;23166:9;23162:17;23155:47;23219:73;23287:4;23278:6;23219:73;:::i;:::-;23211:81;;22996:303;;;;:::o;23305:143::-;23362:5;23393:6;23387:13;23378:22;;23409:33;23436:5;23409:33;:::i;:::-;23305:143;;;;:::o;23454:116::-;23524:21;23539:5;23524:21;:::i;:::-;23517:5;23514:32;23504:60;;23560:1;23557;23550:12;23504:60;23454:116;:::o;23576:137::-;23630:5;23661:6;23655:13;23646:22;;23677:30;23701:5;23677:30;:::i;:::-;23576:137;;;;:::o;23719:501::-;23795:6;23803;23852:2;23840:9;23831:7;23827:23;23823:32;23820:119;;;23858:79;;:::i;:::-;23820:119;23978:1;24003:64;24059:7;24050:6;24039:9;24035:22;24003:64;:::i;:::-;23993:74;;23949:128;24116:2;24142:61;24195:7;24186:6;24175:9;24171:22;24142:61;:::i;:::-;24132:71;;24087:126;23719:501;;;;;:::o
Swarm Source
ipfs://2f7e7087ca044cf9f685e277bf4848f3e44bc75980a03ddd5741ba1d8c5bc452
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.