Source Code
Latest 25 from a total of 170 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Unstake By Ids | 16412091 | 1072 days ago | IN | 0 ETH | 0.00344243 | ||||
| Unstake By Ids | 16404587 | 1073 days ago | IN | 0 ETH | 0.00223926 | ||||
| Unstake By Ids | 16296702 | 1088 days ago | IN | 0 ETH | 0.00221441 | ||||
| Unstake By Ids | 16284457 | 1089 days ago | IN | 0 ETH | 0.00642313 | ||||
| Unstake By Ids | 16257327 | 1093 days ago | IN | 0 ETH | 0.00333236 | ||||
| Unstake By Ids | 16256214 | 1093 days ago | IN | 0 ETH | 0.00164979 | ||||
| Unstake By Ids | 16254277 | 1094 days ago | IN | 0 ETH | 0.00236123 | ||||
| Unstake By Ids | 16253416 | 1094 days ago | IN | 0 ETH | 0.00794713 | ||||
| Unstake By Ids | 16253400 | 1094 days ago | IN | 0 ETH | 0.00163064 | ||||
| Unstake By Ids | 16253386 | 1094 days ago | IN | 0 ETH | 0.00166076 | ||||
| Unstake By Ids | 16250791 | 1094 days ago | IN | 0 ETH | 0.00153707 | ||||
| Unstake By Ids | 16250688 | 1094 days ago | IN | 0 ETH | 0.0030706 | ||||
| Unstake By Ids | 16250107 | 1094 days ago | IN | 0 ETH | 0.00163648 | ||||
| Unstake By Ids | 16249662 | 1094 days ago | IN | 0 ETH | 0.00173413 | ||||
| Unstake By Ids | 16248219 | 1095 days ago | IN | 0 ETH | 0.0021537 | ||||
| Unstake By Ids | 16247232 | 1095 days ago | IN | 0 ETH | 0.0017034 | ||||
| Unstake By Ids | 16247223 | 1095 days ago | IN | 0 ETH | 0.00165186 | ||||
| Unstake By Ids | 16247216 | 1095 days ago | IN | 0 ETH | 0.0016421 | ||||
| Unstake By Ids | 16247105 | 1095 days ago | IN | 0 ETH | 0.00169194 | ||||
| Unstake By Ids | 16246482 | 1095 days ago | IN | 0 ETH | 0.00150165 | ||||
| Unstake By Ids | 16246407 | 1095 days ago | IN | 0 ETH | 0.00385357 | ||||
| Unstake By Ids | 16246161 | 1095 days ago | IN | 0 ETH | 0.01174242 | ||||
| Unstake By Ids | 16246142 | 1095 days ago | IN | 0 ETH | 0.00191425 | ||||
| Unstake By Ids | 16246084 | 1095 days ago | IN | 0 ETH | 0.00422895 | ||||
| Unstake By Ids | 16245988 | 1095 days ago | IN | 0 ETH | 0.00525745 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
WCAMundialStaking
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-12-20
*/
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.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 functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(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) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(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) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason 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 {
// 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/security/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// 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/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// 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/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: contracts/WCAMundialStaking.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract WCAMundialStaking is ReentrancyGuard, Ownable {
using SafeERC20 for IERC20;
// Interfaces for ERC721 and ERC20
IERC721 public immutable nftCollection;
IERC20 public immutable rewardsToken;
// Constructor function to set the rewards token and the NFT collection addresses
constructor(IERC721 _nftCollection, IERC20 _rewardsToken) {
nftCollection = _nftCollection;
rewardsToken = _rewardsToken;
}
address public manager;
uint256 public startClaimTimestamp = 1685570400; // Jun 01 2023
uint256 public startUnstakeTimestamp = 1671577200; // Dec 21 2022
uint256 public endRewardsTimestamp = 1676761200; // Feb 19 2023
// Almost 20 Token rewards per day => 0.00023149 * 10**18
uint256 public rewardsPerSeconds = 231490000000000;
uint256 public rewardExponent = 10**10;
// Rewards have vesting of 0.13% per day => 0.00000154% per second => 1.54 * 10^-8 => 154 * 10^-10
uint256 public rewardsLockSeconds = 154;
bool public _stakingLive = false;
mapping(uint256 => uint256) public tokenIdTimeStaked;
mapping(uint256 => address) public tokenIdToStaker;
mapping(address => uint256[]) public stakerToTokenIds;
mapping(address => uint256) public stakerRewards;
mapping(address => uint256) public stakerRewardsClaimed;
// Modifiers
modifier onlyOwnerOrManager() {
require(owner() == msg.sender || manager == msg.sender, "Unauthorized");
_;
}
modifier canClaim() {
require(block.timestamp >= startClaimTimestamp, "You can't already claim your rewards");
_;
}
modifier canUnstake() {
require(block.timestamp >= startUnstakeTimestamp, "You can't already unstake your NFTs");
_;
}
modifier stakingIsLive() {
require(_stakingLive, "Staking isn't live");
_;
}
// SETTER
function setManager(address _manager) external onlyOwner {
manager = _manager;
}
function setRewardsPerSecond(uint256 _rewardsPerSeconds) external onlyOwnerOrManager {
rewardsPerSeconds = _rewardsPerSeconds;
}
function setRewardExponent(uint256 _rewardExponent) external onlyOwnerOrManager {
rewardExponent = _rewardExponent;
}
function setStartClaimTimestamp(uint256 _timestamp) external onlyOwnerOrManager {
require(_timestamp >= endRewardsTimestamp, "Start claim timestamp must be after end rewards timestamp");
startClaimTimestamp = _timestamp;
}
function setEndRewardsTimestamp(uint256 _timestamp) external onlyOwnerOrManager {
endRewardsTimestamp = _timestamp;
}
function setStartUnstakeTimestamp(uint256 _timestamp) external onlyOwnerOrManager {
startUnstakeTimestamp = _timestamp;
}
function toggleStakingLive() external onlyOwnerOrManager {
_stakingLive = !_stakingLive;
}
function getTotalRewards(address staker) public view returns (uint256) {
return getAvailableRewards(staker) + stakerRewardsClaimed[staker];
}
function getStakedCount(address staker) external view returns (uint256) {
return stakerToTokenIds[staker].length;
}
function getStakedTokens(address staker) external view returns (uint256[] memory) {
return stakerToTokenIds[staker];
}
function stakeByIds(uint256[] calldata tokenIds) external stakingIsLive {
for (uint256 i = 0; i < tokenIds.length; i++) {
uint256 tokenId = tokenIds[i];
require(nftCollection.ownerOf(tokenId) == msg.sender && tokenIdToStaker[tokenId] == address(0), "You don't own this token!");
nftCollection.transferFrom(msg.sender, address(this), tokenId);
stakerToTokenIds[msg.sender].push(tokenId);
tokenIdTimeStaked[tokenId] = block.timestamp;
tokenIdToStaker[tokenId] = msg.sender;
}
}
function unstakeByIds(uint256[] calldata tokenIds) public canUnstake nonReentrant {
for (uint256 i = 0; i < tokenIds.length; i++) {
uint256 tokenId = tokenIds[i];
require(tokenIdToStaker[tokenId] == msg.sender, "You don't own this token!");
stakerRewards[msg.sender] += getRewardsByTokenId(tokenId);
stakerToTokenIds[msg.sender].pop();
tokenIdToStaker[tokenId] = address(0);
nftCollection.transferFrom(address(this), msg.sender, tokenId);
}
}
function getRewardsByTokenId(uint256 _tokenId) public view returns (uint256) {
require(tokenIdToStaker[_tokenId] != address(0), "NFT is not in stake");
uint256 timestamp = block.timestamp;
if (tokenIdTimeStaked[_tokenId] > endRewardsTimestamp) {
return 0;
}
if (timestamp > endRewardsTimestamp) {
timestamp = endRewardsTimestamp;
}
return ((timestamp - tokenIdTimeStaked[_tokenId]) * rewardsPerSeconds);
}
function getAvailableRewards(address _staker) public view returns (uint256) {
uint256 tokenRewards = 0;
for (uint256 i = stakerToTokenIds[_staker].length; i > 0; i--) {
uint256 tokenId = stakerToTokenIds[msg.sender][i - 1];
tokenRewards += getRewardsByTokenId(tokenId);
}
if (tokenRewards == 0 && stakerRewards[_staker] == 0) {
return 0;
}
uint256 availableRewards = stakerRewards[_staker] + tokenRewards - stakerRewardsClaimed[_staker];
require(availableRewards >= 0, "Available rewards can't be negative");
require(availableRewards <= stakerRewards[_staker] + tokenRewards, "Available rewards can't be more than the total rewards");
return availableRewards;
}
function getClaimableRewards(address _staker) public view returns (uint256) {
// Calculate the percentage of rewards to unlock based on the time passed since the start of the claim
if (block.timestamp < startClaimTimestamp) {
return 0;
}
uint256 totalRewards = getTotalRewards(_staker);
uint256 secondsFromClaimStart = block.timestamp - startClaimTimestamp;
uint256 rewardsToUnlock = ((totalRewards / rewardExponent) * secondsFromClaimStart * rewardsLockSeconds) - stakerRewardsClaimed[_staker];
// If the rewards to unlock are more than the total rewards, return the total rewards
if (rewardsToUnlock > totalRewards) {
return totalRewards;
}
require(rewardsToUnlock <= totalRewards, "You can't claim more than you have");
// Else return the rewards to unlock
return rewardsToUnlock;
}
function claimRewards() external canClaim nonReentrant {
uint256 rewardsToUnlock = getClaimableRewards(msg.sender);
// Require that the sender has claimed in the past
require(rewardsToUnlock > 0, "You have no rewards to claim");
stakerRewardsClaimed[msg.sender] += rewardsToUnlock;
// Send token from owner to staker
rewardsToken.transferFrom(owner(), msg.sender, rewardsToUnlock);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"contract IERC721","name":"_nftCollection","type":"address"},{"internalType":"contract IERC20","name":"_rewardsToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_stakingLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endRewardsTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"getAvailableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_staker","type":"address"}],"name":"getClaimableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getRewardsByTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStakedTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getTotalRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftCollection","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"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":[],"name":"rewardExponent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsLockSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsPerSeconds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setEndRewardsTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardExponent","type":"uint256"}],"name":"setRewardExponent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rewardsPerSeconds","type":"uint256"}],"name":"setRewardsPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setStartClaimTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_timestamp","type":"uint256"}],"name":"setStartUnstakeTimestamp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"stakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerRewardsClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"stakerToTokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startClaimTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startUnstakeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleStakingLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdTimeStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToStaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"unstakeByIds","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60c0604052636477c3606003556363a23e706004556363f1587060055565d289f73814006006556402540be400600755609a6008556000600960006101000a81548160ff0219169083151502179055503480156200005c57600080fd5b5060405162002f4e38038062002f4e8339818101604052810190620000829190620002ab565b6001600081905550620000aa6200009e6200011a60201b60201c565b6200012260201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050620002f2565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021a82620001ed565b9050919050565b60006200022e826200020d565b9050919050565b620002408162000221565b81146200024c57600080fd5b50565b600081519050620002608162000235565b92915050565b600062000273826200020d565b9050919050565b620002858162000266565b81146200029157600080fd5b50565b600081519050620002a5816200027a565b92915050565b60008060408385031215620002c557620002c4620001e8565b5b6000620002d5858286016200024f565b9250506020620002e88582860162000294565b9150509250929050565b60805160a051612c1a62000334600039600081816109cf015261174d015260008181610df4015281816110550152818161180f015261196a0152612c1a6000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063d0ebdbe7116100ad578063d9ffad471161007c578063d9ffad47146105dd578063f0f0b228146105f9578063f1c9939014610629578063f2fde38b14610647578063fb5d82d01461066357610206565b8063d0ebdbe714610567578063d1af0c7d14610583578063d1e5587e146105a1578063d780cbb2146105bf57610206565b8063b4b4ca77116100e9578063b4b4ca77146104cd578063bd87f577146104eb578063c4c0e04c1461051b578063cbeb09aa1461054b57610206565b80638da5cb5b1461046b578063966d7e47146104895780639903303f146104a5578063a1993211146104af57610206565b806348aa19361161019d5780636588103b1161016c5780636588103b146103b357806370f8f9d9146103d1578063715018a61461040157806383c13db21461040b578063873e31fa1461043b57610206565b806348aa193614610319578063515ec105146103355780635c1e645a1461036557806363c28db11461038357610206565b806336ed62eb116101d957806336ed62eb146102b9578063372500ab146102d55780634661c404146102df578063481c6a75146102fb57610206565b8063058803161461020b57806326a73fc71461023b5780632bcf161c14610259578063308e401e14610289575b600080fd5b61022560048036038101906102209190611e3d565b61067f565b6040516102329190611e79565b60405180910390f35b610243610697565b6040516102509190611e79565b60405180910390f35b610273600480360381019061026e9190611ef2565b61069d565b6040516102809190611e79565b60405180910390f35b6102a3600480360381019061029e9190611ef2565b6106f9565b6040516102b09190611e79565b60405180910390f35b6102d360048036038101906102ce9190611e3d565b610803565b005b6102dd6108da565b005b6102f960048036038101906102f49190611e3d565b610a80565b005b610303610b9c565b6040516103109190611f2e565b60405180910390f35b610333600480360381019061032e9190611fae565b610bc2565b005b61034f600480360381019061034a9190611e3d565b610ea2565b60405161035c9190611e79565b60405180910390f35b61036d610fb6565b60405161037a9190611e79565b60405180910390f35b61039d60048036038101906103989190611ef2565b610fbc565b6040516103aa91906120b9565b60405180910390f35b6103bb611053565b6040516103c8919061213a565b60405180910390f35b6103eb60048036038101906103e69190611e3d565b611077565b6040516103f89190611f2e565b60405180910390f35b6104096110aa565b005b61042560048036038101906104209190611ef2565b6110be565b6040516104329190611e79565b60405180910390f35b61045560048036038101906104509190611ef2565b61110a565b6040516104629190611e79565b60405180910390f35b6104736113cc565b6040516104809190611f2e565b60405180910390f35b6104a3600480360381019061049e9190611e3d565b6113f6565b005b6104ad6114cd565b005b6104b76115c6565b6040516104c49190611e79565b60405180910390f35b6104d56115cc565b6040516104e29190612170565b60405180910390f35b6105056004803603810190610500919061218b565b6115df565b6040516105129190611e79565b60405180910390f35b61053560048036038101906105309190611ef2565b611610565b6040516105429190611e79565b60405180910390f35b61056560048036038101906105609190611e3d565b611628565b005b610581600480360381019061057c9190611ef2565b6116ff565b005b61058b61174b565b60405161059891906121ec565b60405180910390f35b6105a961176f565b6040516105b69190611e79565b60405180910390f35b6105c7611775565b6040516105d49190611e79565b60405180910390f35b6105f760048036038101906105f29190611fae565b61177b565b005b610613600480360381019061060e9190611ef2565b611ae0565b6040516106209190611e79565b60405180910390f35b610631611af8565b60405161063e9190611e79565b60405180910390f35b610661600480360381019061065c9190611ef2565b611afe565b005b61067d60048036038101906106789190611e3d565b611b81565b005b600a6020528060005260406000206000915090505481565b60085481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106e88361110a565b6106f29190612236565b9050919050565b600060035442101561070e57600090506107fe565b60006107198361069d565b905060006003544261072b919061226a565b90506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600854836007548661078191906122cd565b61078b91906122fe565b61079591906122fe565b61079f919061226a565b9050828111156107b4578293505050506107fe565b828111156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee906123c3565b60405180910390fd5b8093505050505b919050565b3373ffffffffffffffffffffffffffffffffffffffff166108226113cc565b73ffffffffffffffffffffffffffffffffffffffff16148061089157503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c79061242f565b60405180910390fd5b8060048190555050565b60035442101561091f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610916906124c1565b60405180910390fd5b610927611c58565b6000610932336106f9565b905060008111610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e9061252d565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109c69190612236565b925050819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd610a116113cc565b33846040518463ffffffff1660e01b8152600401610a319392919061254d565b6020604051808303816000875af1158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7491906125b0565b5050610a7e611ca7565b565b3373ffffffffffffffffffffffffffffffffffffffff16610a9f6113cc565b73ffffffffffffffffffffffffffffffffffffffff161480610b0e57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b449061242f565b60405180910390fd5b600554811015610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b899061264f565b60405180910390fd5b8060038190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600454421015610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe906126e1565b60405180910390fd5b610c0f611c58565b60005b82829050811015610e95576000838383818110610c3257610c31612701565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd39061277c565b60405180910390fd5b610ce581610ea2565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d339190612236565b92505081905550600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610d8957610d8861279c565b5b600190038181906000526020600020016000905590556000600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610e4f9392919061254d565b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b50505050508080610e8d906127cb565b915050610c12565b50610e9e611ca7565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c9061285f565b60405180910390fd5b6000429050600554600a6000858152602001908152602001600020541115610f71576000915050610fb1565b600554811115610f815760055490505b600654600a60008581526020019081526020016000205482610fa3919061226a565b610fad91906122fe565b9150505b919050565b60045481565b6060600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110b2611cb1565b6110bc6000611d2f565b565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600080600090506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b60008111156111f8576000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836111b0919061226a565b815481106111c1576111c0612701565b5b906000526020600020015490506111d781610ea2565b836111e29190612236565b92505080806111f09061287f565b915050611159565b5060008114801561124857506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156112575760009150506113c7565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112e49190612236565b6112ee919061226a565b90506000811015611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b9061291a565b60405180910390fd5b81600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461137f9190612236565b8111156113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b8906129ac565b60405180910390fd5b80925050505b919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff166114156113cc565b73ffffffffffffffffffffffffffffffffffffffff16148061148457503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba9061242f565b60405180910390fd5b8060058190555050565b3373ffffffffffffffffffffffffffffffffffffffff166114ec6113cc565b73ffffffffffffffffffffffffffffffffffffffff16148061155b57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61159a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115919061242f565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b60055481565b600960009054906101000a900460ff1681565b600c60205281600052604060002081815481106115fb57600080fd5b90600052602060002001600091509150505481565b600e6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff166116476113cc565b73ffffffffffffffffffffffffffffffffffffffff1614806116b657503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec9061242f565b60405180910390fd5b8060068190555050565b611707611cb1565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60035481565b60065481565b600960009054906101000a900460ff166117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190612a18565b60405180910390fd5b60005b82829050811015611adb5760008383838181106117ed576117ec612701565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016118669190611e79565b602060405180830381865afa158015611883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a79190612a4d565b73ffffffffffffffffffffffffffffffffffffffff161480156119295750600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f9061277c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016119c59392919061254d565b600060405180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b50505050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505542600a60008381526020019081526020016000208190555033600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080611ad3906127cb565b9150506117cd565b505050565b600d6020528060005260406000206000915090505481565b60075481565b611b06611cb1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90612aec565b60405180910390fd5b611b7e81611d2f565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611ba06113cc565b73ffffffffffffffffffffffffffffffffffffffff161480611c0f57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c459061242f565b60405180910390fd5b8060078190555050565b600260005403611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490612b58565b60405180910390fd5b6002600081905550565b6001600081905550565b611cb9611df5565b73ffffffffffffffffffffffffffffffffffffffff16611cd76113cc565b73ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490612bc4565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b6000819050919050565b611e1a81611e07565b8114611e2557600080fd5b50565b600081359050611e3781611e11565b92915050565b600060208284031215611e5357611e52611dfd565b5b6000611e6184828501611e28565b91505092915050565b611e7381611e07565b82525050565b6000602082019050611e8e6000830184611e6a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ebf82611e94565b9050919050565b611ecf81611eb4565b8114611eda57600080fd5b50565b600081359050611eec81611ec6565b92915050565b600060208284031215611f0857611f07611dfd565b5b6000611f1684828501611edd565b91505092915050565b611f2881611eb4565b82525050565b6000602082019050611f436000830184611f1f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f6e57611f6d611f49565b5b8235905067ffffffffffffffff811115611f8b57611f8a611f4e565b5b602083019150836020820283011115611fa757611fa6611f53565b5b9250929050565b60008060208385031215611fc557611fc4611dfd565b5b600083013567ffffffffffffffff811115611fe357611fe2611e02565b5b611fef85828601611f58565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61203081611e07565b82525050565b60006120428383612027565b60208301905092915050565b6000602082019050919050565b600061206682611ffb565b6120708185612006565b935061207b83612017565b8060005b838110156120ac5781516120938882612036565b975061209e8361204e565b92505060018101905061207f565b5085935050505092915050565b600060208201905081810360008301526120d3818461205b565b905092915050565b6000819050919050565b60006121006120fb6120f684611e94565b6120db565b611e94565b9050919050565b6000612112826120e5565b9050919050565b600061212482612107565b9050919050565b61213481612119565b82525050565b600060208201905061214f600083018461212b565b92915050565b60008115159050919050565b61216a81612155565b82525050565b60006020820190506121856000830184612161565b92915050565b600080604083850312156121a2576121a1611dfd565b5b60006121b085828601611edd565b92505060206121c185828601611e28565b9150509250929050565b60006121d682612107565b9050919050565b6121e6816121cb565b82525050565b600060208201905061220160008301846121dd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061224182611e07565b915061224c83611e07565b925082820190508082111561226457612263612207565b5b92915050565b600061227582611e07565b915061228083611e07565b925082820390508181111561229857612297612207565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122d882611e07565b91506122e383611e07565b9250826122f3576122f261229e565b5b828204905092915050565b600061230982611e07565b915061231483611e07565b925082820261232281611e07565b9150828204841483151761233957612338612207565b5b5092915050565b600082825260208201905092915050565b7f596f752063616e277420636c61696d206d6f7265207468616e20796f7520686160008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b60006123ad602283612340565b91506123b882612351565b604082019050919050565b600060208201905081810360008301526123dc816123a0565b9050919050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b6000612419600c83612340565b9150612424826123e3565b602082019050919050565b600060208201905081810360008301526124488161240c565b9050919050565b7f596f752063616e277420616c726561647920636c61696d20796f75722072657760008201527f6172647300000000000000000000000000000000000000000000000000000000602082015250565b60006124ab602483612340565b91506124b68261244f565b604082019050919050565b600060208201905081810360008301526124da8161249e565b9050919050565b7f596f752068617665206e6f207265776172647320746f20636c61696d00000000600082015250565b6000612517601c83612340565b9150612522826124e1565b602082019050919050565b600060208201905081810360008301526125468161250a565b9050919050565b60006060820190506125626000830186611f1f565b61256f6020830185611f1f565b61257c6040830184611e6a565b949350505050565b61258d81612155565b811461259857600080fd5b50565b6000815190506125aa81612584565b92915050565b6000602082840312156125c6576125c5611dfd565b5b60006125d48482850161259b565b91505092915050565b7f537461727420636c61696d2074696d657374616d70206d75737420626520616660008201527f74657220656e6420726577617264732074696d657374616d7000000000000000602082015250565b6000612639603983612340565b9150612644826125dd565b604082019050919050565b600060208201905081810360008301526126688161262c565b9050919050565b7f596f752063616e277420616c726561647920756e7374616b6520796f7572204e60008201527f4654730000000000000000000000000000000000000000000000000000000000602082015250565b60006126cb602383612340565b91506126d68261266f565b604082019050919050565b600060208201905081810360008301526126fa816126be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f7520646f6e2774206f776e207468697320746f6b656e2100000000000000600082015250565b6000612766601983612340565b915061277182612730565b602082019050919050565b6000602082019050818103600083015261279581612759565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006127d682611e07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361280857612807612207565b5b600182019050919050565b7f4e4654206973206e6f7420696e207374616b6500000000000000000000000000600082015250565b6000612849601383612340565b915061285482612813565b602082019050919050565b600060208201905081810360008301526128788161283c565b9050919050565b600061288a82611e07565b91506000820361289d5761289c612207565b5b600182039050919050565b7f417661696c61626c6520726577617264732063616e2774206265206e6567617460008201527f6976650000000000000000000000000000000000000000000000000000000000602082015250565b6000612904602383612340565b915061290f826128a8565b604082019050919050565b60006020820190508181036000830152612933816128f7565b9050919050565b7f417661696c61626c6520726577617264732063616e2774206265206d6f72652060008201527f7468616e2074686520746f74616c207265776172647300000000000000000000602082015250565b6000612996603683612340565b91506129a18261293a565b604082019050919050565b600060208201905081810360008301526129c581612989565b9050919050565b7f5374616b696e672069736e2774206c6976650000000000000000000000000000600082015250565b6000612a02601283612340565b9150612a0d826129cc565b602082019050919050565b60006020820190508181036000830152612a31816129f5565b9050919050565b600081519050612a4781611ec6565b92915050565b600060208284031215612a6357612a62611dfd565b5b6000612a7184828501612a38565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ad6602683612340565b9150612ae182612a7a565b604082019050919050565b60006020820190508181036000830152612b0581612ac9565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612b42601f83612340565b9150612b4d82612b0c565b602082019050919050565b60006020820190508181036000830152612b7181612b35565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bae602083612340565b9150612bb982612b78565b602082019050919050565b60006020820190508181036000830152612bdd81612ba1565b905091905056fea26469706673582212203d0df0233429f26bdb9c680a5c61adeb834a2cd2243b573028aea34fcfdadcb064736f6c6343000811003300000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b0
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102065760003560e01c80638da5cb5b1161011a578063d0ebdbe7116100ad578063d9ffad471161007c578063d9ffad47146105dd578063f0f0b228146105f9578063f1c9939014610629578063f2fde38b14610647578063fb5d82d01461066357610206565b8063d0ebdbe714610567578063d1af0c7d14610583578063d1e5587e146105a1578063d780cbb2146105bf57610206565b8063b4b4ca77116100e9578063b4b4ca77146104cd578063bd87f577146104eb578063c4c0e04c1461051b578063cbeb09aa1461054b57610206565b80638da5cb5b1461046b578063966d7e47146104895780639903303f146104a5578063a1993211146104af57610206565b806348aa19361161019d5780636588103b1161016c5780636588103b146103b357806370f8f9d9146103d1578063715018a61461040157806383c13db21461040b578063873e31fa1461043b57610206565b806348aa193614610319578063515ec105146103355780635c1e645a1461036557806363c28db11461038357610206565b806336ed62eb116101d957806336ed62eb146102b9578063372500ab146102d55780634661c404146102df578063481c6a75146102fb57610206565b8063058803161461020b57806326a73fc71461023b5780632bcf161c14610259578063308e401e14610289575b600080fd5b61022560048036038101906102209190611e3d565b61067f565b6040516102329190611e79565b60405180910390f35b610243610697565b6040516102509190611e79565b60405180910390f35b610273600480360381019061026e9190611ef2565b61069d565b6040516102809190611e79565b60405180910390f35b6102a3600480360381019061029e9190611ef2565b6106f9565b6040516102b09190611e79565b60405180910390f35b6102d360048036038101906102ce9190611e3d565b610803565b005b6102dd6108da565b005b6102f960048036038101906102f49190611e3d565b610a80565b005b610303610b9c565b6040516103109190611f2e565b60405180910390f35b610333600480360381019061032e9190611fae565b610bc2565b005b61034f600480360381019061034a9190611e3d565b610ea2565b60405161035c9190611e79565b60405180910390f35b61036d610fb6565b60405161037a9190611e79565b60405180910390f35b61039d60048036038101906103989190611ef2565b610fbc565b6040516103aa91906120b9565b60405180910390f35b6103bb611053565b6040516103c8919061213a565b60405180910390f35b6103eb60048036038101906103e69190611e3d565b611077565b6040516103f89190611f2e565b60405180910390f35b6104096110aa565b005b61042560048036038101906104209190611ef2565b6110be565b6040516104329190611e79565b60405180910390f35b61045560048036038101906104509190611ef2565b61110a565b6040516104629190611e79565b60405180910390f35b6104736113cc565b6040516104809190611f2e565b60405180910390f35b6104a3600480360381019061049e9190611e3d565b6113f6565b005b6104ad6114cd565b005b6104b76115c6565b6040516104c49190611e79565b60405180910390f35b6104d56115cc565b6040516104e29190612170565b60405180910390f35b6105056004803603810190610500919061218b565b6115df565b6040516105129190611e79565b60405180910390f35b61053560048036038101906105309190611ef2565b611610565b6040516105429190611e79565b60405180910390f35b61056560048036038101906105609190611e3d565b611628565b005b610581600480360381019061057c9190611ef2565b6116ff565b005b61058b61174b565b60405161059891906121ec565b60405180910390f35b6105a961176f565b6040516105b69190611e79565b60405180910390f35b6105c7611775565b6040516105d49190611e79565b60405180910390f35b6105f760048036038101906105f29190611fae565b61177b565b005b610613600480360381019061060e9190611ef2565b611ae0565b6040516106209190611e79565b60405180910390f35b610631611af8565b60405161063e9190611e79565b60405180910390f35b610661600480360381019061065c9190611ef2565b611afe565b005b61067d60048036038101906106789190611e3d565b611b81565b005b600a6020528060005260406000206000915090505481565b60085481565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106e88361110a565b6106f29190612236565b9050919050565b600060035442101561070e57600090506107fe565b60006107198361069d565b905060006003544261072b919061226a565b90506000600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600854836007548661078191906122cd565b61078b91906122fe565b61079591906122fe565b61079f919061226a565b9050828111156107b4578293505050506107fe565b828111156107f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ee906123c3565b60405180910390fd5b8093505050505b919050565b3373ffffffffffffffffffffffffffffffffffffffff166108226113cc565b73ffffffffffffffffffffffffffffffffffffffff16148061089157503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6108d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c79061242f565b60405180910390fd5b8060048190555050565b60035442101561091f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610916906124c1565b60405180910390fd5b610927611c58565b6000610932336106f9565b905060008111610977576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096e9061252d565b60405180910390fd5b80600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109c69190612236565b925050819055507f000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b073ffffffffffffffffffffffffffffffffffffffff166323b872dd610a116113cc565b33846040518463ffffffff1660e01b8152600401610a319392919061254d565b6020604051808303816000875af1158015610a50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7491906125b0565b5050610a7e611ca7565b565b3373ffffffffffffffffffffffffffffffffffffffff16610a9f6113cc565b73ffffffffffffffffffffffffffffffffffffffff161480610b0e57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b610b4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b449061242f565b60405180910390fd5b600554811015610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b899061264f565b60405180910390fd5b8060038190555050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600454421015610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe906126e1565b60405180910390fd5b610c0f611c58565b60005b82829050811015610e95576000838383818110610c3257610c31612701565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610cdc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd39061277c565b60405180910390fd5b610ce581610ea2565b600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d339190612236565b92505081905550600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480610d8957610d8861279c565b5b600190038181906000526020600020016000905590556000600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a73ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b8152600401610e4f9392919061254d565b600060405180830381600087803b158015610e6957600080fd5b505af1158015610e7d573d6000803e3d6000fd5b50505050508080610e8d906127cb565b915050610c12565b50610e9e611ca7565b5050565b60008073ffffffffffffffffffffffffffffffffffffffff16600b600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c9061285f565b60405180910390fd5b6000429050600554600a6000858152602001908152602001600020541115610f71576000915050610fb1565b600554811115610f815760055490505b600654600a60008581526020019081526020016000205482610fa3919061226a565b610fad91906122fe565b9150505b919050565b60045481565b6060600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561104757602002820191906000526020600020905b815481526020019060010190808311611033575b50505050509050919050565b7f00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a81565b600b6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110b2611cb1565b6110bc6000611d2f565b565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600080600090506000600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090505b60008111156111f8576000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001836111b0919061226a565b815481106111c1576111c0612701565b5b906000526020600020015490506111d781610ea2565b836111e29190612236565b92505080806111f09061287f565b915050611159565b5060008114801561124857506000600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b156112575760009150506113c7565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482600d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112e49190612236565b6112ee919061226a565b90506000811015611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b9061291a565b60405180910390fd5b81600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461137f9190612236565b8111156113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b8906129ac565b60405180910390fd5b80925050505b919050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b3373ffffffffffffffffffffffffffffffffffffffff166114156113cc565b73ffffffffffffffffffffffffffffffffffffffff16148061148457503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba9061242f565b60405180910390fd5b8060058190555050565b3373ffffffffffffffffffffffffffffffffffffffff166114ec6113cc565b73ffffffffffffffffffffffffffffffffffffffff16148061155b57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61159a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115919061242f565b60405180910390fd5b600960009054906101000a900460ff1615600960006101000a81548160ff021916908315150217905550565b60055481565b600960009054906101000a900460ff1681565b600c60205281600052604060002081815481106115fb57600080fd5b90600052602060002001600091509150505481565b600e6020528060005260406000206000915090505481565b3373ffffffffffffffffffffffffffffffffffffffff166116476113cc565b73ffffffffffffffffffffffffffffffffffffffff1614806116b657503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b6116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec9061242f565b60405180910390fd5b8060068190555050565b611707611cb1565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b081565b60035481565b60065481565b600960009054906101000a900460ff166117ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c190612a18565b60405180910390fd5b60005b82829050811015611adb5760008383838181106117ed576117ec612701565b5b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff167f00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a73ffffffffffffffffffffffffffffffffffffffff16636352211e836040518263ffffffff1660e01b81526004016118669190611e79565b602060405180830381865afa158015611883573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a79190612a4d565b73ffffffffffffffffffffffffffffffffffffffff161480156119295750600073ffffffffffffffffffffffffffffffffffffffff16600b600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611968576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195f9061277c565b60405180910390fd5b7f00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a73ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b81526004016119c59392919061254d565b600060405180830381600087803b1580156119df57600080fd5b505af11580156119f3573d6000803e3d6000fd5b50505050600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505542600a60008381526020019081526020016000208190555033600b600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080611ad3906127cb565b9150506117cd565b505050565b600d6020528060005260406000206000915090505481565b60075481565b611b06611cb1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c90612aec565b60405180910390fd5b611b7e81611d2f565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611ba06113cc565b73ffffffffffffffffffffffffffffffffffffffff161480611c0f57503373ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b611c4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c459061242f565b60405180910390fd5b8060078190555050565b600260005403611c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9490612b58565b60405180910390fd5b6002600081905550565b6001600081905550565b611cb9611df5565b73ffffffffffffffffffffffffffffffffffffffff16611cd76113cc565b73ffffffffffffffffffffffffffffffffffffffff1614611d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2490612bc4565b60405180910390fd5b565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600033905090565b600080fd5b600080fd5b6000819050919050565b611e1a81611e07565b8114611e2557600080fd5b50565b600081359050611e3781611e11565b92915050565b600060208284031215611e5357611e52611dfd565b5b6000611e6184828501611e28565b91505092915050565b611e7381611e07565b82525050565b6000602082019050611e8e6000830184611e6a565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ebf82611e94565b9050919050565b611ecf81611eb4565b8114611eda57600080fd5b50565b600081359050611eec81611ec6565b92915050565b600060208284031215611f0857611f07611dfd565b5b6000611f1684828501611edd565b91505092915050565b611f2881611eb4565b82525050565b6000602082019050611f436000830184611f1f565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f6e57611f6d611f49565b5b8235905067ffffffffffffffff811115611f8b57611f8a611f4e565b5b602083019150836020820283011115611fa757611fa6611f53565b5b9250929050565b60008060208385031215611fc557611fc4611dfd565b5b600083013567ffffffffffffffff811115611fe357611fe2611e02565b5b611fef85828601611f58565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61203081611e07565b82525050565b60006120428383612027565b60208301905092915050565b6000602082019050919050565b600061206682611ffb565b6120708185612006565b935061207b83612017565b8060005b838110156120ac5781516120938882612036565b975061209e8361204e565b92505060018101905061207f565b5085935050505092915050565b600060208201905081810360008301526120d3818461205b565b905092915050565b6000819050919050565b60006121006120fb6120f684611e94565b6120db565b611e94565b9050919050565b6000612112826120e5565b9050919050565b600061212482612107565b9050919050565b61213481612119565b82525050565b600060208201905061214f600083018461212b565b92915050565b60008115159050919050565b61216a81612155565b82525050565b60006020820190506121856000830184612161565b92915050565b600080604083850312156121a2576121a1611dfd565b5b60006121b085828601611edd565b92505060206121c185828601611e28565b9150509250929050565b60006121d682612107565b9050919050565b6121e6816121cb565b82525050565b600060208201905061220160008301846121dd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061224182611e07565b915061224c83611e07565b925082820190508082111561226457612263612207565b5b92915050565b600061227582611e07565b915061228083611e07565b925082820390508181111561229857612297612207565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006122d882611e07565b91506122e383611e07565b9250826122f3576122f261229e565b5b828204905092915050565b600061230982611e07565b915061231483611e07565b925082820261232281611e07565b9150828204841483151761233957612338612207565b5b5092915050565b600082825260208201905092915050565b7f596f752063616e277420636c61696d206d6f7265207468616e20796f7520686160008201527f7665000000000000000000000000000000000000000000000000000000000000602082015250565b60006123ad602283612340565b91506123b882612351565b604082019050919050565b600060208201905081810360008301526123dc816123a0565b9050919050565b7f556e617574686f72697a65640000000000000000000000000000000000000000600082015250565b6000612419600c83612340565b9150612424826123e3565b602082019050919050565b600060208201905081810360008301526124488161240c565b9050919050565b7f596f752063616e277420616c726561647920636c61696d20796f75722072657760008201527f6172647300000000000000000000000000000000000000000000000000000000602082015250565b60006124ab602483612340565b91506124b68261244f565b604082019050919050565b600060208201905081810360008301526124da8161249e565b9050919050565b7f596f752068617665206e6f207265776172647320746f20636c61696d00000000600082015250565b6000612517601c83612340565b9150612522826124e1565b602082019050919050565b600060208201905081810360008301526125468161250a565b9050919050565b60006060820190506125626000830186611f1f565b61256f6020830185611f1f565b61257c6040830184611e6a565b949350505050565b61258d81612155565b811461259857600080fd5b50565b6000815190506125aa81612584565b92915050565b6000602082840312156125c6576125c5611dfd565b5b60006125d48482850161259b565b91505092915050565b7f537461727420636c61696d2074696d657374616d70206d75737420626520616660008201527f74657220656e6420726577617264732074696d657374616d7000000000000000602082015250565b6000612639603983612340565b9150612644826125dd565b604082019050919050565b600060208201905081810360008301526126688161262c565b9050919050565b7f596f752063616e277420616c726561647920756e7374616b6520796f7572204e60008201527f4654730000000000000000000000000000000000000000000000000000000000602082015250565b60006126cb602383612340565b91506126d68261266f565b604082019050919050565b600060208201905081810360008301526126fa816126be565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f596f7520646f6e2774206f776e207468697320746f6b656e2100000000000000600082015250565b6000612766601983612340565b915061277182612730565b602082019050919050565b6000602082019050818103600083015261279581612759565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006127d682611e07565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361280857612807612207565b5b600182019050919050565b7f4e4654206973206e6f7420696e207374616b6500000000000000000000000000600082015250565b6000612849601383612340565b915061285482612813565b602082019050919050565b600060208201905081810360008301526128788161283c565b9050919050565b600061288a82611e07565b91506000820361289d5761289c612207565b5b600182039050919050565b7f417661696c61626c6520726577617264732063616e2774206265206e6567617460008201527f6976650000000000000000000000000000000000000000000000000000000000602082015250565b6000612904602383612340565b915061290f826128a8565b604082019050919050565b60006020820190508181036000830152612933816128f7565b9050919050565b7f417661696c61626c6520726577617264732063616e2774206265206d6f72652060008201527f7468616e2074686520746f74616c207265776172647300000000000000000000602082015250565b6000612996603683612340565b91506129a18261293a565b604082019050919050565b600060208201905081810360008301526129c581612989565b9050919050565b7f5374616b696e672069736e2774206c6976650000000000000000000000000000600082015250565b6000612a02601283612340565b9150612a0d826129cc565b602082019050919050565b60006020820190508181036000830152612a31816129f5565b9050919050565b600081519050612a4781611ec6565b92915050565b600060208284031215612a6357612a62611dfd565b5b6000612a7184828501612a38565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612ad6602683612340565b9150612ae182612a7a565b604082019050919050565b60006020820190508181036000830152612b0581612ac9565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612b42601f83612340565b9150612b4d82612b0c565b602082019050919050565b60006020820190508181036000830152612b7181612b35565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bae602083612340565b9150612bb982612b78565b602082019050919050565b60006020820190508181036000830152612bdd81612ba1565b905091905056fea26469706673582212203d0df0233429f26bdb9c680a5c61adeb834a2cd2243b573028aea34fcfdadcb064736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b0
-----Decoded View---------------
Arg [0] : _nftCollection (address): 0x23F0512c871C1435F7B3a32dF5E1616Adc3eEB0A
Arg [1] : _rewardsToken (address): 0x506B8f75BDeF0Edac36B0A6f9CF313485E4341b0
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000023f0512c871c1435f7b3a32df5e1616adc3eeb0a
Arg [1] : 000000000000000000000000506b8f75bdef0edac36b0a6f9cf313485e4341b0
Deployed Bytecode Sourcemap
30745:6506:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31741:52;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31660:39;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33466:146;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36009:831;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33235:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36845:403;;;:::i;:::-;;32873:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31177:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34382:474;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34861:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31269:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33742:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30873:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31797:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29814:103;;;:::i;:::-;;33617:120;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35302:702;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29166:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33108:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33366:95;;;:::i;:::-;;31337:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31703:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31851:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31960:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32608:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32518:85;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30915:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31203:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31463:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33870:507;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31908:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31517:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30072:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32746:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31741:52;;;;;;;;;;;;;;;;;:::o;31660:39::-;;;;:::o;33466:146::-;33528:7;33579:20;:28;33600:6;33579:28;;;;;;;;;;;;;;;;33549:27;33569:6;33549:19;:27::i;:::-;:58;;;;:::i;:::-;33542:65;;33466:146;;;:::o;36009:831::-;36076:7;36218:19;;36200:15;:37;36196:63;;;36252:1;36245:8;;;;36196:63;36263:20;36286:24;36302:7;36286:15;:24::i;:::-;36263:47;;36315:29;36365:19;;36347:15;:37;;;;:::i;:::-;36315:69;;36389:23;36496:20;:29;36517:7;36496:29;;;;;;;;;;;;;;;;36474:18;;36450:21;36432:14;;36417:12;:29;;;;:::i;:::-;36416:55;;;;:::i;:::-;:76;;;;:::i;:::-;36415:110;;;;:::i;:::-;36389:136;;36641:12;36623:15;:30;36619:67;;;36668:12;36661:19;;;;;;;36619:67;36717:12;36698:15;:31;;36690:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;36820:15;36813:22;;;;;36009:831;;;;:::o;33235:126::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33346:10:::1;33322:21;:34;;;;33235:126:::0;:::o;36845:403::-;32210:19;;32191:15;:38;;32183:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;13263:21:::1;:19;:21::i;:::-;36905:23:::2;36931:31;36951:10;36931:19;:31::i;:::-;36905:57;;37047:1;37029:15;:19;37021:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;37122:15;37086:20;:32;37107:10;37086:32;;;;;;;;;;;;;;;;:51;;;;;;;:::i;:::-;;;;;;;;37180:12;:25;;;37206:7;:5;:7::i;:::-;37215:10;37227:15;37180:63;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36900:348;13307:20:::1;:18;:20::i;:::-;36845:403::o:0;32873:230::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32980:19:::1;;32966:10;:33;;32958:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33088:10;33066:19;:32;;;;32873:230:::0;:::o;31177:22::-;;;;;;;;;;;;;:::o;34382:474::-;32340:21;;32321:15;:40;;32313:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;13263:21:::1;:19;:21::i;:::-;34474:9:::2;34469:383;34493:8;;:15;;34489:1;:19;34469:383;;;34521:15;34539:8;;34548:1;34539:11;;;;;;;:::i;:::-;;;;;;;;34521:29;;34592:10;34564:38;;:15;:24;34580:7;34564:24;;;;;;;;;;;;;;;;;;;;;:38;;;34556:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34667:28;34687:7;34667:19;:28::i;:::-;34638:13;:25;34652:10;34638:25;;;;;;;;;;;;;;;;:57;;;;;;;:::i;:::-;;;;;;;;34701:16;:28;34718:10;34701:28;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34776:1;34741:15;:24;34757:7;34741:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;34784:13;:26;;;34819:4;34826:10;34838:7;34784:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;34515:337;34510:3;;;;;:::i;:::-;;;;34469:383;;;;13307:20:::1;:18;:20::i;:::-;34382:474:::0;;:::o;34861:436::-;34929:7;34988:1;34951:39;;:15;:25;34967:8;34951:25;;;;;;;;;;;;;;;;;;;;;:39;;;34943:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35019:17;35039:15;35019:35;;35093:19;;35063:17;:27;35081:8;35063:27;;;;;;;;;;;;:49;35059:75;;;35127:1;35120:8;;;;;35059:75;35154:19;;35142:9;:31;35138:80;;;35193:19;;35181:31;;35138:80;35274:17;;35243;:27;35261:8;35243:27;;;;;;;;;;;;35231:9;:39;;;;:::i;:::-;35230:61;;;;:::i;:::-;35222:70;;;34861:436;;;;:::o;31269:49::-;;;;:::o;33742:123::-;33806:16;33836;:24;33853:6;33836:24;;;;;;;;;;;;;;;33829:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33742:123;;;:::o;30873:38::-;;;:::o;31797:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;29814:103::-;29052:13;:11;:13::i;:::-;29879:30:::1;29906:1;29879:18;:30::i;:::-;29814:103::o:0;33617:120::-;33680:7;33701:16;:24;33718:6;33701:24;;;;;;;;;;;;;;;:31;;;;33694:38;;33617:120;;;:::o;35302:702::-;35369:7;35383:20;35406:1;35383:24;;35417:9;35429:16;:25;35446:7;35429:25;;;;;;;;;;;;;;;:32;;;;35417:44;;35412:178;35467:1;35463;:5;35412:178;;;35481:15;35499:16;:28;35516:10;35499:28;;;;;;;;;;;;;;;35532:1;35528;:5;;;;:::i;:::-;35499:35;;;;;;;;:::i;:::-;;;;;;;;;;35481:53;;35556:28;35576:7;35556:19;:28::i;:::-;35540:44;;;;;:::i;:::-;;;35475:115;35470:3;;;;;:::i;:::-;;;;35412:178;;;;35614:1;35598:12;:17;:48;;;;;35645:1;35619:13;:22;35633:7;35619:22;;;;;;;;;;;;;;;;:27;35598:48;35594:74;;;35661:1;35654:8;;;;;35594:74;35672:24;35739:20;:29;35760:7;35739:29;;;;;;;;;;;;;;;;35724:12;35699:13;:22;35713:7;35699:22;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:69;;;;:::i;:::-;35672:96;;35801:1;35781:16;:21;;35773:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;35900:12;35875:13;:22;35889:7;35875:22;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;35855:16;:57;;35847:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;35983:16;35976:23;;;;35302:702;;;;:::o;29166:87::-;29212:7;29239:6;;;;;;;;;;;29232:13;;29166:87;:::o;33108:122::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33215:10:::1;33193:19;:32;;;;33108:122:::0;:::o;33366:95::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33444:12:::1;;;;;;;;;;;33443:13;33428:12;;:28;;;;;;;;;;;;;;;;;;33366:95::o:0;31337:47::-;;;;:::o;31703:32::-;;;;;;;;;;;;;:::o;31851:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31960:55::-;;;;;;;;;;;;;;;;;:::o;32608:133::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32718:18:::1;32698:17;:38;;;;32608:133:::0;:::o;32518:85::-;29052:13;:11;:13::i;:::-;32590:8:::1;32580:7;;:18;;;;;;;;;;;;;;;;;;32518:85:::0;:::o;30915:36::-;;;:::o;31203:47::-;;;;:::o;31463:50::-;;;;:::o;33870:507::-;32455:12;;;;;;;;;;;32447:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;33952:9:::1;33947:426;33971:8;;:15;;33967:1;:19;33947:426;;;33999:15;34017:8;;34026:1;34017:11;;;;;;;:::i;:::-;;;;;;;;33999:29;;34076:10;34042:44;;:13;:21;;;34064:7;34042:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:44;;;:86;;;;;34126:1;34090:38;;:15;:24;34106:7;34090:24;;;;;;;;;;;;;;;;;;;;;:38;;;34042:86;34034:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;34164:13;:26;;;34191:10;34211:4;34218:7;34164:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34232:16;:28;34249:10;34232:28;;;;;;;;;;;;;;;34266:7;34232:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34309:15;34280:17;:26;34298:7;34280:26;;;;;;;;;;;:44;;;;34357:10;34330:15;:24;34346:7;34330:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;33993:380;33988:3;;;;;:::i;:::-;;;;33947:426;;;;33870:507:::0;;:::o;31908:48::-;;;;;;;;;;;;;;;;;:::o;31517:38::-;;;;:::o;30072:201::-;29052:13;:11;:13::i;:::-;30181:1:::1;30161:22;;:8;:22;;::::0;30153:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30237:28;30256:8;30237:18;:28::i;:::-;30072:201:::0;:::o;32746:122::-;32090:10;32079:21;;:7;:5;:7::i;:::-;:21;;;:46;;;;32115:10;32104:21;;:7;;;;;;;;;;;:21;;;32079:46;32071:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;32848:15:::1;32831:14;:32;;;;32746:122:::0;:::o;13343:293::-;12745:1;13477:7;;:19;13469:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;12745:1;13610:7;:18;;;;13343:293::o;13644:213::-;12701:1;13827:7;:22;;;;13644:213::o;29331:132::-;29406:12;:10;:12::i;:::-;29395:23;;:7;:5;:7::i;:::-;:23;;;29387:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29331:132::o;30433:191::-;30507:16;30526:6;;;;;;;;;;;30507:25;;30552:8;30543:6;;:17;;;;;;;;;;;;;;;;;;30607:8;30576:40;;30597:8;30576:40;;;;;;;;;;;;30496:128;30433:191;:::o;27717:98::-;27770:7;27797:10;27790:17;;27717:98;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:222::-;1242:4;1280:2;1269:9;1265:18;1257:26;;1293:71;1361:1;1350:9;1346:17;1337:6;1293:71;:::i;:::-;1149:222;;;;:::o;1377:126::-;1414:7;1454:42;1447:5;1443:54;1432:65;;1377:126;;;:::o;1509:96::-;1546:7;1575:24;1593:5;1575:24;:::i;:::-;1564:35;;1509:96;;;:::o;1611:122::-;1684:24;1702:5;1684:24;:::i;:::-;1677:5;1674:35;1664:63;;1723:1;1720;1713:12;1664:63;1611:122;:::o;1739:139::-;1785:5;1823:6;1810:20;1801:29;;1839:33;1866:5;1839:33;:::i;:::-;1739:139;;;;:::o;1884:329::-;1943:6;1992:2;1980:9;1971:7;1967:23;1963:32;1960:119;;;1998:79;;:::i;:::-;1960:119;2118:1;2143:53;2188:7;2179:6;2168:9;2164:22;2143:53;:::i;:::-;2133:63;;2089:117;1884:329;;;;:::o;2219:118::-;2306:24;2324:5;2306:24;:::i;:::-;2301:3;2294:37;2219:118;;:::o;2343:222::-;2436:4;2474:2;2463:9;2459:18;2451:26;;2487:71;2555:1;2544:9;2540:17;2531:6;2487:71;:::i;:::-;2343:222;;;;:::o;2571:117::-;2680:1;2677;2670:12;2694:117;2803:1;2800;2793:12;2817:117;2926:1;2923;2916:12;2957:568;3030:8;3040:6;3090:3;3083:4;3075:6;3071:17;3067:27;3057:122;;3098:79;;:::i;:::-;3057:122;3211:6;3198:20;3188:30;;3241:18;3233:6;3230:30;3227:117;;;3263:79;;:::i;:::-;3227:117;3377:4;3369:6;3365:17;3353:29;;3431:3;3423:4;3415:6;3411:17;3401:8;3397:32;3394:41;3391:128;;;3438:79;;:::i;:::-;3391:128;2957:568;;;;;:::o;3531:559::-;3617:6;3625;3674:2;3662:9;3653:7;3649:23;3645:32;3642:119;;;3680:79;;:::i;:::-;3642:119;3828:1;3817:9;3813:17;3800:31;3858:18;3850:6;3847:30;3844:117;;;3880:79;;:::i;:::-;3844:117;3993:80;4065:7;4056:6;4045:9;4041:22;3993:80;:::i;:::-;3975:98;;;;3771:312;3531:559;;;;;:::o;4096:114::-;4163:6;4197:5;4191:12;4181:22;;4096:114;;;:::o;4216:184::-;4315:11;4349:6;4344:3;4337:19;4389:4;4384:3;4380:14;4365:29;;4216:184;;;;:::o;4406:132::-;4473:4;4496:3;4488:11;;4526:4;4521:3;4517:14;4509:22;;4406:132;;;:::o;4544:108::-;4621:24;4639:5;4621:24;:::i;:::-;4616:3;4609:37;4544:108;;:::o;4658:179::-;4727:10;4748:46;4790:3;4782:6;4748:46;:::i;:::-;4826:4;4821:3;4817:14;4803:28;;4658:179;;;;:::o;4843:113::-;4913:4;4945;4940:3;4936:14;4928:22;;4843:113;;;:::o;4992:732::-;5111:3;5140:54;5188:5;5140:54;:::i;:::-;5210:86;5289:6;5284:3;5210:86;:::i;:::-;5203:93;;5320:56;5370:5;5320:56;:::i;:::-;5399:7;5430:1;5415:284;5440:6;5437:1;5434:13;5415:284;;;5516:6;5510:13;5543:63;5602:3;5587:13;5543:63;:::i;:::-;5536:70;;5629:60;5682:6;5629:60;:::i;:::-;5619:70;;5475:224;5462:1;5459;5455:9;5450:14;;5415:284;;;5419:14;5715:3;5708:10;;5116:608;;;4992:732;;;;:::o;5730:373::-;5873:4;5911:2;5900:9;5896:18;5888:26;;5960:9;5954:4;5950:20;5946:1;5935:9;5931:17;5924:47;5988:108;6091:4;6082:6;5988:108;:::i;:::-;5980:116;;5730:373;;;;:::o;6109:60::-;6137:3;6158:5;6151:12;;6109:60;;;:::o;6175:142::-;6225:9;6258:53;6276:34;6285:24;6303:5;6285:24;:::i;:::-;6276:34;:::i;:::-;6258:53;:::i;:::-;6245:66;;6175:142;;;:::o;6323:126::-;6373:9;6406:37;6437:5;6406:37;:::i;:::-;6393:50;;6323:126;;;:::o;6455:141::-;6520:9;6553:37;6584:5;6553:37;:::i;:::-;6540:50;;6455:141;;;:::o;6602:161::-;6704:52;6750:5;6704:52;:::i;:::-;6699:3;6692:65;6602:161;;:::o;6769:252::-;6877:4;6915:2;6904:9;6900:18;6892:26;;6928:86;7011:1;7000:9;6996:17;6987:6;6928:86;:::i;:::-;6769:252;;;;:::o;7027:90::-;7061:7;7104:5;7097:13;7090:21;7079:32;;7027:90;;;:::o;7123:109::-;7204:21;7219:5;7204:21;:::i;:::-;7199:3;7192:34;7123:109;;:::o;7238:210::-;7325:4;7363:2;7352:9;7348:18;7340:26;;7376:65;7438:1;7427:9;7423:17;7414:6;7376:65;:::i;:::-;7238:210;;;;:::o;7454:474::-;7522:6;7530;7579:2;7567:9;7558:7;7554:23;7550:32;7547:119;;;7585:79;;:::i;:::-;7547:119;7705:1;7730:53;7775:7;7766:6;7755:9;7751:22;7730:53;:::i;:::-;7720:63;;7676:117;7832:2;7858:53;7903:7;7894:6;7883:9;7879:22;7858:53;:::i;:::-;7848:63;;7803:118;7454:474;;;;;:::o;7934:140::-;7998:9;8031:37;8062:5;8031:37;:::i;:::-;8018:50;;7934:140;;;:::o;8080:159::-;8181:51;8226:5;8181:51;:::i;:::-;8176:3;8169:64;8080:159;;:::o;8245:250::-;8352:4;8390:2;8379:9;8375:18;8367:26;;8403:85;8485:1;8474:9;8470:17;8461:6;8403:85;:::i;:::-;8245:250;;;;:::o;8501:180::-;8549:77;8546:1;8539:88;8646:4;8643:1;8636:15;8670:4;8667:1;8660:15;8687:191;8727:3;8746:20;8764:1;8746:20;:::i;:::-;8741:25;;8780:20;8798:1;8780:20;:::i;:::-;8775:25;;8823:1;8820;8816:9;8809:16;;8844:3;8841:1;8838:10;8835:36;;;8851:18;;:::i;:::-;8835:36;8687:191;;;;:::o;8884:194::-;8924:4;8944:20;8962:1;8944:20;:::i;:::-;8939:25;;8978:20;8996:1;8978:20;:::i;:::-;8973:25;;9022:1;9019;9015:9;9007:17;;9046:1;9040:4;9037:11;9034:37;;;9051:18;;:::i;:::-;9034:37;8884:194;;;;:::o;9084:180::-;9132:77;9129:1;9122:88;9229:4;9226:1;9219:15;9253:4;9250:1;9243:15;9270:185;9310:1;9327:20;9345:1;9327:20;:::i;:::-;9322:25;;9361:20;9379:1;9361:20;:::i;:::-;9356:25;;9400:1;9390:35;;9405:18;;:::i;:::-;9390:35;9447:1;9444;9440:9;9435:14;;9270:185;;;;:::o;9461:410::-;9501:7;9524:20;9542:1;9524:20;:::i;:::-;9519:25;;9558:20;9576:1;9558:20;:::i;:::-;9553:25;;9613:1;9610;9606:9;9635:30;9653:11;9635:30;:::i;:::-;9624:41;;9814:1;9805:7;9801:15;9798:1;9795:22;9775:1;9768:9;9748:83;9725:139;;9844:18;;:::i;:::-;9725:139;9509:362;9461:410;;;;:::o;9877:169::-;9961:11;9995:6;9990:3;9983:19;10035:4;10030:3;10026:14;10011:29;;9877:169;;;;:::o;10052:221::-;10192:34;10188:1;10180:6;10176:14;10169:58;10261:4;10256:2;10248:6;10244:15;10237:29;10052:221;:::o;10279:366::-;10421:3;10442:67;10506:2;10501:3;10442:67;:::i;:::-;10435:74;;10518:93;10607:3;10518:93;:::i;:::-;10636:2;10631:3;10627:12;10620:19;;10279:366;;;:::o;10651:419::-;10817:4;10855:2;10844:9;10840:18;10832:26;;10904:9;10898:4;10894:20;10890:1;10879:9;10875:17;10868:47;10932:131;11058:4;10932:131;:::i;:::-;10924:139;;10651:419;;;:::o;11076:162::-;11216:14;11212:1;11204:6;11200:14;11193:38;11076:162;:::o;11244:366::-;11386:3;11407:67;11471:2;11466:3;11407:67;:::i;:::-;11400:74;;11483:93;11572:3;11483:93;:::i;:::-;11601:2;11596:3;11592:12;11585:19;;11244:366;;;:::o;11616:419::-;11782:4;11820:2;11809:9;11805:18;11797:26;;11869:9;11863:4;11859:20;11855:1;11844:9;11840:17;11833:47;11897:131;12023:4;11897:131;:::i;:::-;11889:139;;11616:419;;;:::o;12041:223::-;12181:34;12177:1;12169:6;12165:14;12158:58;12250:6;12245:2;12237:6;12233:15;12226:31;12041:223;:::o;12270:366::-;12412:3;12433:67;12497:2;12492:3;12433:67;:::i;:::-;12426:74;;12509:93;12598:3;12509:93;:::i;:::-;12627:2;12622:3;12618:12;12611:19;;12270:366;;;:::o;12642:419::-;12808:4;12846:2;12835:9;12831:18;12823:26;;12895:9;12889:4;12885:20;12881:1;12870:9;12866:17;12859:47;12923:131;13049:4;12923:131;:::i;:::-;12915:139;;12642:419;;;:::o;13067:178::-;13207:30;13203:1;13195:6;13191:14;13184:54;13067:178;:::o;13251:366::-;13393:3;13414:67;13478:2;13473:3;13414:67;:::i;:::-;13407:74;;13490:93;13579:3;13490:93;:::i;:::-;13608:2;13603:3;13599:12;13592:19;;13251:366;;;:::o;13623:419::-;13789:4;13827:2;13816:9;13812:18;13804:26;;13876:9;13870:4;13866:20;13862:1;13851:9;13847:17;13840:47;13904:131;14030:4;13904:131;:::i;:::-;13896:139;;13623:419;;;:::o;14048:442::-;14197:4;14235:2;14224:9;14220:18;14212:26;;14248:71;14316:1;14305:9;14301:17;14292:6;14248:71;:::i;:::-;14329:72;14397:2;14386:9;14382:18;14373:6;14329:72;:::i;:::-;14411;14479:2;14468:9;14464:18;14455:6;14411:72;:::i;:::-;14048:442;;;;;;:::o;14496:116::-;14566:21;14581:5;14566:21;:::i;:::-;14559:5;14556:32;14546:60;;14602:1;14599;14592:12;14546:60;14496:116;:::o;14618:137::-;14672:5;14703:6;14697:13;14688:22;;14719:30;14743:5;14719:30;:::i;:::-;14618:137;;;;:::o;14761:345::-;14828:6;14877:2;14865:9;14856:7;14852:23;14848:32;14845:119;;;14883:79;;:::i;:::-;14845:119;15003:1;15028:61;15081:7;15072:6;15061:9;15057:22;15028:61;:::i;:::-;15018:71;;14974:125;14761:345;;;;:::o;15112:244::-;15252:34;15248:1;15240:6;15236:14;15229:58;15321:27;15316:2;15308:6;15304:15;15297:52;15112:244;:::o;15362:366::-;15504:3;15525:67;15589:2;15584:3;15525:67;:::i;:::-;15518:74;;15601:93;15690:3;15601:93;:::i;:::-;15719:2;15714:3;15710:12;15703:19;;15362:366;;;:::o;15734:419::-;15900:4;15938:2;15927:9;15923:18;15915:26;;15987:9;15981:4;15977:20;15973:1;15962:9;15958:17;15951:47;16015:131;16141:4;16015:131;:::i;:::-;16007:139;;15734:419;;;:::o;16159:222::-;16299:34;16295:1;16287:6;16283:14;16276:58;16368:5;16363:2;16355:6;16351:15;16344:30;16159:222;:::o;16387:366::-;16529:3;16550:67;16614:2;16609:3;16550:67;:::i;:::-;16543:74;;16626:93;16715:3;16626:93;:::i;:::-;16744:2;16739:3;16735:12;16728:19;;16387:366;;;:::o;16759:419::-;16925:4;16963:2;16952:9;16948:18;16940:26;;17012:9;17006:4;17002:20;16998:1;16987:9;16983:17;16976:47;17040:131;17166:4;17040:131;:::i;:::-;17032:139;;16759:419;;;:::o;17184:180::-;17232:77;17229:1;17222:88;17329:4;17326:1;17319:15;17353:4;17350:1;17343:15;17370:175;17510:27;17506:1;17498:6;17494:14;17487:51;17370:175;:::o;17551:366::-;17693:3;17714:67;17778:2;17773:3;17714:67;:::i;:::-;17707:74;;17790:93;17879:3;17790:93;:::i;:::-;17908:2;17903:3;17899:12;17892:19;;17551:366;;;:::o;17923:419::-;18089:4;18127:2;18116:9;18112:18;18104:26;;18176:9;18170:4;18166:20;18162:1;18151:9;18147:17;18140:47;18204:131;18330:4;18204:131;:::i;:::-;18196:139;;17923:419;;;:::o;18348:180::-;18396:77;18393:1;18386:88;18493:4;18490:1;18483:15;18517:4;18514:1;18507:15;18534:233;18573:3;18596:24;18614:5;18596:24;:::i;:::-;18587:33;;18642:66;18635:5;18632:77;18629:103;;18712:18;;:::i;:::-;18629:103;18759:1;18752:5;18748:13;18741:20;;18534:233;;;:::o;18773:169::-;18913:21;18909:1;18901:6;18897:14;18890:45;18773:169;:::o;18948:366::-;19090:3;19111:67;19175:2;19170:3;19111:67;:::i;:::-;19104:74;;19187:93;19276:3;19187:93;:::i;:::-;19305:2;19300:3;19296:12;19289:19;;18948:366;;;:::o;19320:419::-;19486:4;19524:2;19513:9;19509:18;19501:26;;19573:9;19567:4;19563:20;19559:1;19548:9;19544:17;19537:47;19601:131;19727:4;19601:131;:::i;:::-;19593:139;;19320:419;;;:::o;19745:171::-;19784:3;19807:24;19825:5;19807:24;:::i;:::-;19798:33;;19853:4;19846:5;19843:15;19840:41;;19861:18;;:::i;:::-;19840:41;19908:1;19901:5;19897:13;19890:20;;19745:171;;;:::o;19922:222::-;20062:34;20058:1;20050:6;20046:14;20039:58;20131:5;20126:2;20118:6;20114:15;20107:30;19922:222;:::o;20150:366::-;20292:3;20313:67;20377:2;20372:3;20313:67;:::i;:::-;20306:74;;20389:93;20478:3;20389:93;:::i;:::-;20507:2;20502:3;20498:12;20491:19;;20150:366;;;:::o;20522:419::-;20688:4;20726:2;20715:9;20711:18;20703:26;;20775:9;20769:4;20765:20;20761:1;20750:9;20746:17;20739:47;20803:131;20929:4;20803:131;:::i;:::-;20795:139;;20522:419;;;:::o;20947:241::-;21087:34;21083:1;21075:6;21071:14;21064:58;21156:24;21151:2;21143:6;21139:15;21132:49;20947:241;:::o;21194:366::-;21336:3;21357:67;21421:2;21416:3;21357:67;:::i;:::-;21350:74;;21433:93;21522:3;21433:93;:::i;:::-;21551:2;21546:3;21542:12;21535:19;;21194:366;;;:::o;21566:419::-;21732:4;21770:2;21759:9;21755:18;21747:26;;21819:9;21813:4;21809:20;21805:1;21794:9;21790:17;21783:47;21847:131;21973:4;21847:131;:::i;:::-;21839:139;;21566:419;;;:::o;21991:168::-;22131:20;22127:1;22119:6;22115:14;22108:44;21991:168;:::o;22165:366::-;22307:3;22328:67;22392:2;22387:3;22328:67;:::i;:::-;22321:74;;22404:93;22493:3;22404:93;:::i;:::-;22522:2;22517:3;22513:12;22506:19;;22165:366;;;:::o;22537:419::-;22703:4;22741:2;22730:9;22726:18;22718:26;;22790:9;22784:4;22780:20;22776:1;22765:9;22761:17;22754:47;22818:131;22944:4;22818:131;:::i;:::-;22810:139;;22537:419;;;:::o;22962:143::-;23019:5;23050:6;23044:13;23035:22;;23066:33;23093:5;23066:33;:::i;:::-;22962:143;;;;:::o;23111:351::-;23181:6;23230:2;23218:9;23209:7;23205:23;23201:32;23198:119;;;23236:79;;:::i;:::-;23198:119;23356:1;23381:64;23437:7;23428:6;23417:9;23413:22;23381:64;:::i;:::-;23371:74;;23327:128;23111:351;;;;:::o;23468:225::-;23608:34;23604:1;23596:6;23592:14;23585:58;23677:8;23672:2;23664:6;23660:15;23653:33;23468:225;:::o;23699:366::-;23841:3;23862:67;23926:2;23921:3;23862:67;:::i;:::-;23855:74;;23938:93;24027:3;23938:93;:::i;:::-;24056:2;24051:3;24047:12;24040:19;;23699:366;;;:::o;24071:419::-;24237:4;24275:2;24264:9;24260:18;24252:26;;24324:9;24318:4;24314:20;24310:1;24299:9;24295:17;24288:47;24352:131;24478:4;24352:131;:::i;:::-;24344:139;;24071:419;;;:::o;24496:181::-;24636:33;24632:1;24624:6;24620:14;24613:57;24496:181;:::o;24683:366::-;24825:3;24846:67;24910:2;24905:3;24846:67;:::i;:::-;24839:74;;24922:93;25011:3;24922:93;:::i;:::-;25040:2;25035:3;25031:12;25024:19;;24683:366;;;:::o;25055:419::-;25221:4;25259:2;25248:9;25244:18;25236:26;;25308:9;25302:4;25298:20;25294:1;25283:9;25279:17;25272:47;25336:131;25462:4;25336:131;:::i;:::-;25328:139;;25055:419;;;:::o;25480:182::-;25620:34;25616:1;25608:6;25604:14;25597:58;25480:182;:::o;25668:366::-;25810:3;25831:67;25895:2;25890:3;25831:67;:::i;:::-;25824:74;;25907:93;25996:3;25907:93;:::i;:::-;26025:2;26020:3;26016:12;26009:19;;25668:366;;;:::o;26040:419::-;26206:4;26244:2;26233:9;26229:18;26221:26;;26293:9;26287:4;26283:20;26279:1;26268:9;26264:17;26257:47;26321:131;26447:4;26321:131;:::i;:::-;26313:139;;26040:419;;;:::o
Swarm Source
ipfs://3d0df0233429f26bdb9c680a5c61adeb834a2cd2243b573028aea34fcfdadcb0
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
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.