More Info
Private Name Tags
ContractCreator
Multichain Info
Latest 25 from a total of 170 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Unstake By Ids | 16412091 | 593 days ago | IN | 0 ETH | 0.00344243 | ||||
Unstake By Ids | 16404587 | 594 days ago | IN | 0 ETH | 0.00223926 | ||||
Unstake By Ids | 16296702 | 609 days ago | IN | 0 ETH | 0.00221441 | ||||
Unstake By Ids | 16284457 | 611 days ago | IN | 0 ETH | 0.00642313 | ||||
Unstake By Ids | 16257327 | 615 days ago | IN | 0 ETH | 0.00333236 | ||||
Unstake By Ids | 16256214 | 615 days ago | IN | 0 ETH | 0.00164979 | ||||
Unstake By Ids | 16254277 | 615 days ago | IN | 0 ETH | 0.00236123 | ||||
Unstake By Ids | 16253416 | 615 days ago | IN | 0 ETH | 0.00794713 | ||||
Unstake By Ids | 16253400 | 615 days ago | IN | 0 ETH | 0.00163064 | ||||
Unstake By Ids | 16253386 | 615 days ago | IN | 0 ETH | 0.00166076 | ||||
Unstake By Ids | 16250791 | 616 days ago | IN | 0 ETH | 0.00153707 | ||||
Unstake By Ids | 16250688 | 616 days ago | IN | 0 ETH | 0.0030706 | ||||
Unstake By Ids | 16250107 | 616 days ago | IN | 0 ETH | 0.00163648 | ||||
Unstake By Ids | 16249662 | 616 days ago | IN | 0 ETH | 0.00173413 | ||||
Unstake By Ids | 16248219 | 616 days ago | IN | 0 ETH | 0.0021537 | ||||
Unstake By Ids | 16247232 | 616 days ago | IN | 0 ETH | 0.0017034 | ||||
Unstake By Ids | 16247223 | 616 days ago | IN | 0 ETH | 0.00165186 | ||||
Unstake By Ids | 16247216 | 616 days ago | IN | 0 ETH | 0.0016421 | ||||
Unstake By Ids | 16247105 | 616 days ago | IN | 0 ETH | 0.00169194 | ||||
Unstake By Ids | 16246482 | 616 days ago | IN | 0 ETH | 0.00150165 | ||||
Unstake By Ids | 16246407 | 616 days ago | IN | 0 ETH | 0.00385357 | ||||
Unstake By Ids | 16246161 | 616 days ago | IN | 0 ETH | 0.01174242 | ||||
Unstake By Ids | 16246142 | 616 days ago | IN | 0 ETH | 0.00191425 | ||||
Unstake By Ids | 16246084 | 616 days ago | IN | 0 ETH | 0.00422895 | ||||
Unstake By Ids | 16245988 | 616 days ago | IN | 0 ETH | 0.00525745 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
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
[{"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
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.