Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Swap
Compiler Version
v0.8.34+commit.80d5c536
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2026-02-22
*/
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/IERC20.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-20 standard as defined in the ERC.
*/
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 value of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the value of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves a `value` amount of 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 value) 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 a `value` amount of tokens 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 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the
* allowance mechanism. `value` 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 value) external returns (bool);
}
// File: @openzeppelin/contracts/interfaces/IERC20.sol
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC20.sol)
pragma solidity >=0.4.16;
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/IERC165.sol)
pragma solidity >=0.4.16;
/**
* @dev Interface of the ERC-165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[ERC].
*
* 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[ERC 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/interfaces/IERC165.sol
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC165.sol)
pragma solidity >=0.4.16;
// File: @openzeppelin/contracts/interfaces/IERC1363.sol
// OpenZeppelin Contracts (last updated v5.4.0) (interfaces/IERC1363.sol)
pragma solidity >=0.6.2;
/**
* @title IERC1363
* @dev Interface of the ERC-1363 standard as defined in the https://eips.ethereum.org/EIPS/eip-1363[ERC-1363].
*
* Defines an extension interface for ERC-20 tokens that supports executing code on a recipient contract
* after `transfer` or `transferFrom`, or code on a spender contract after `approve`, in a single transaction.
*/
interface IERC1363 is IERC20, IERC165 {
/*
* Note: the ERC-165 identifier for this interface is 0xb0202a11.
* 0xb0202a11 ===
* bytes4(keccak256('transferAndCall(address,uint256)')) ^
* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
* bytes4(keccak256('approveAndCall(address,uint256)')) ^
* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
*/
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferAndCall(address to, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from the caller's account to `to`
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @param data Additional data with no specified format, sent in call to `to`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param from The address which you want to send tokens from.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferFromAndCall(address from, address to, uint256 value) external returns (bool);
/**
* @dev Moves a `value` amount of tokens from `from` to `to` using the allowance mechanism
* and then calls {IERC1363Receiver-onTransferReceived} on `to`.
* @param from The address which you want to send tokens from.
* @param to The address which you want to transfer to.
* @param value The amount of tokens to be transferred.
* @param data Additional data with no specified format, sent in call to `to`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function approveAndCall(address spender, uint256 value) external returns (bool);
/**
* @dev Sets a `value` amount of tokens as the allowance of `spender` over the
* caller's tokens and then calls {IERC1363Spender-onApprovalReceived} on `spender`.
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
* @param data Additional data with no specified format, sent in call to `spender`.
* @return A boolean value indicating whether the operation succeeded unless throwing.
*/
function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts (last updated v5.3.0) (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.20;
/**
* @title SafeERC20
* @dev Wrappers around ERC-20 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 {
/**
* @dev An operation with an ERC-20 token failed.
*/
error SafeERC20FailedOperation(address token);
/**
* @dev Indicates a failed `decreaseAllowance` request.
*/
error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);
/**
* @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*/
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the
* calling contract. If `token` returns no value, non-reverting calls are assumed to be successful.
*/
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Variant of {safeTransfer} that returns a bool instead of reverting if the operation is not successful.
*/
function trySafeTransfer(IERC20 token, address to, uint256 value) internal returns (bool) {
return _callOptionalReturnBool(token, abi.encodeCall(token.transfer, (to, value)));
}
/**
* @dev Variant of {safeTransferFrom} that returns a bool instead of reverting if the operation is not successful.
*/
function trySafeTransferFrom(IERC20 token, address from, address to, uint256 value) internal returns (bool) {
return _callOptionalReturnBool(token, abi.encodeCall(token.transferFrom, (from, to, value)));
}
/**
* @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful.
*
* IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
* smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
* this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
* that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
*/
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 oldAllowance = token.allowance(address(this), spender);
forceApprove(token, spender, oldAllowance + value);
}
/**
* @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no
* value, non-reverting calls are assumed to be successful.
*
* IMPORTANT: If the token implements ERC-7674 (ERC-20 with temporary allowance), and if the "client"
* smart contract uses ERC-7674 to set temporary allowances, then the "client" smart contract should avoid using
* this function. Performing a {safeIncreaseAllowance} or {safeDecreaseAllowance} operation on a token contract
* that has a non-zero temporary allowance (for that particular owner-spender) will result in unexpected behavior.
*/
function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
unchecked {
uint256 currentAllowance = token.allowance(address(this), spender);
if (currentAllowance < requestedDecrease) {
revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
}
forceApprove(token, spender, currentAllowance - requestedDecrease);
}
}
/**
* @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value,
* non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval
* to be set to zero before setting it to a non-zero value, such as USDT.
*
* NOTE: If the token implements ERC-7674, this function will not modify any temporary allowance. This function
* only sets the "standard" allowance. Any temporary allowance will remain active, in addition to the value being
* set here.
*/
function forceApprove(IERC20 token, address spender, uint256 value) internal {
bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));
if (!_callOptionalReturnBool(token, approvalCall)) {
_callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
_callOptionalReturn(token, approvalCall);
}
}
/**
* @dev Performs an {ERC1363} transferAndCall, with a fallback to the simple {ERC20} transfer if the target has no
* code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* Reverts if the returned value is other than `true`.
*/
function transferAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
if (to.code.length == 0) {
safeTransfer(token, to, value);
} else if (!token.transferAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} transferFromAndCall, with a fallback to the simple {ERC20} transferFrom if the target
* has no code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* Reverts if the returned value is other than `true`.
*/
function transferFromAndCallRelaxed(
IERC1363 token,
address from,
address to,
uint256 value,
bytes memory data
) internal {
if (to.code.length == 0) {
safeTransferFrom(token, from, to, value);
} else if (!token.transferFromAndCall(from, to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @dev Performs an {ERC1363} approveAndCall, with a fallback to the simple {ERC20} approve if the target has no
* code. This can be used to implement an {ERC721}-like safe transfer that rely on {ERC1363} checks when
* targeting contracts.
*
* NOTE: When the recipient address (`to`) has no code (i.e. is an EOA), this function behaves as {forceApprove}.
* Opposedly, when the recipient address (`to`) has code, this function only attempts to call {ERC1363-approveAndCall}
* once without retrying, and relies on the returned value to be true.
*
* Reverts if the returned value is other than `true`.
*/
function approveAndCallRelaxed(IERC1363 token, address to, uint256 value, bytes memory data) internal {
if (to.code.length == 0) {
forceApprove(token, to, value);
} else if (!token.approveAndCall(to, value, data)) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @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).
*
* This is a variant of {_callOptionalReturnBool} that reverts if call fails to meet the requirements.
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
let success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
// bubble errors
if iszero(success) {
let ptr := mload(0x40)
returndatacopy(ptr, 0, returndatasize())
revert(ptr, returndatasize())
}
returnSize := returndatasize()
returnValue := mload(0)
}
if (returnSize == 0 ? address(token).code.length == 0 : returnValue != 1) {
revert SafeERC20FailedOperation(address(token));
}
}
/**
* @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).
*
* This is a variant of {_callOptionalReturn} that silently catches all reverts and returns a bool instead.
*/
function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {
bool success;
uint256 returnSize;
uint256 returnValue;
assembly ("memory-safe") {
success := call(gas(), token, 0, add(data, 0x20), mload(data), 0, 0x20)
returnSize := returndatasize()
returnValue := mload(0)
}
return success && (returnSize == 0 ? address(token).code.length > 0 : returnValue == 1);
}
}
// File: @openzeppelin/contracts/access/IAccessControl.sol
// OpenZeppelin Contracts (last updated v5.4.0) (access/IAccessControl.sol)
pragma solidity >=0.8.4;
/**
* @dev External interface of AccessControl declared to support ERC-165 detection.
*/
interface IAccessControl {
/**
* @dev The `account` is missing a role.
*/
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole);
/**
* @dev The caller of a function is not the expected one.
*
* NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.
*/
error AccessControlBadConfirmation();
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted to signal this.
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call. This account bears the admin role (for the granted role).
* Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*/
function renounceRole(bytes32 role, address callerConfirmation) external;
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol)
pragma solidity ^0.8.20;
/**
* @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;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// File: @openzeppelin/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts (last updated v5.4.0) (utils/introspection/ERC165.sol)
pragma solidity ^0.8.20;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC-165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*/
abstract contract ERC165 is IERC165 {
/// @inheritdoc IERC165
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File: @openzeppelin/contracts/access/AccessControl.sol
// OpenZeppelin Contracts (last updated v5.4.0) (access/AccessControl.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```solidity
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```solidity
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it. We recommend using {AccessControlDefaultAdminRules}
* to enforce additional security measures for this role.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address account => bool) hasRole;
bytes32 adminRole;
}
mapping(bytes32 role => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with an {AccessControlUnauthorizedAccount} error including the required role.
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/// @inheritdoc IERC165
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) public view virtual returns (bool) {
return _roles[role].hasRole[account];
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()`
* is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier.
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account`
* is missing `role`.
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert AccessControlUnauthorizedAccount(account, role);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `callerConfirmation`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address callerConfirmation) public virtual {
if (callerConfirmation != _msgSender()) {
revert AccessControlBadConfirmation();
}
_revokeRole(role, callerConfirmation);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual returns (bool) {
if (!hasRole(role, account)) {
_roles[role].hasRole[account] = true;
emit RoleGranted(role, account, _msgSender());
return true;
} else {
return false;
}
}
/**
* @dev Attempts to revoke `role` from `account` and returns a boolean indicating if `role` was revoked.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual returns (bool) {
if (hasRole(role, account)) {
_roles[role].hasRole[account] = false;
emit RoleRevoked(role, account, _msgSender());
return true;
} else {
return false;
}
}
}
// File: @openzeppelin/contracts/utils/Pausable.sol
// OpenZeppelin Contracts (last updated v5.3.0) (utils/Pausable.sol)
pragma solidity ^0.8.20;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
bool private _paused;
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
/**
* @dev The operation failed because the contract is paused.
*/
error EnforcedPause();
/**
* @dev The operation failed because the contract is not paused.
*/
error ExpectedPause();
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
if (paused()) {
revert EnforcedPause();
}
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
if (!paused()) {
revert ExpectedPause();
}
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: @openzeppelin/contracts/utils/ReentrancyGuard.sol
// OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol)
pragma solidity ^0.8.20;
/**
* @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 EIP-1153 (transient storage) is available on the chain you're deploying at,
* consider using {ReentrancyGuardTransient} instead.
*
* 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;
/**
* @dev Unauthorized reentrant call.
*/
error ReentrancyGuardReentrantCall();
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
if (_status == ENTERED) {
revert ReentrancyGuardReentrantCall();
}
// 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;
}
/**
* @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
* `nonReentrant` function in the call stack.
*/
function _reentrancyGuardEntered() internal view returns (bool) {
return _status == ENTERED;
}
}
// File: Swap.sol
pragma solidity ^0.8.28;
contract Swap is AccessControl,Pausable,ReentrancyGuard{using SafeERC20 for IERC20;bytes32 public constant A00=DEFAULT_ADMIN_ROLE;IERC20 public immutable A21;IERC20 public immutable A22=IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7);address public A23;uint256 private constant S1=10000;uint256 private constant S2=10;uint256 public constant MIN=1000000;uint256 public A24=82000000;uint8 public constant A37=5;struct T{uint64 d;uint8 c;}mapping(address=>T)public A36;bool public A25=true;bool public A26=true;event A39(address indexed src,uint256 gI,uint256 sO);event A40(address indexed src,uint256 sI,uint256 gO);constructor(address _shade,address _root,address _admin){require(_shade!=address(0)&&_root!=address(0)&&_admin!=address(0),"Z");A21=IERC20(_shade);A23=_root;_grantRole(A00,_admin);}function A27(uint256 v)external whenNotPaused nonReentrant{require(A25&&v>=MIN&&v%S1==0,"E1");uint256 out=v/S1;require(out<=A24&&A21.balanceOf(address(this))>=out,"E2");_A38(msg.sender);uint256 r=v/S2;A22.safeTransferFrom(msg.sender,address(this),v);A22.safeTransfer(A23,v-r);A21.safeTransfer(msg.sender,out);emit A39(msg.sender,v,out);}function A28(uint256 v)external whenNotPaused nonReentrant{require(A26&&v>0,"E3");uint256 out=(v*S1)/S2;require(A22.balanceOf(address(this))>=out,"E4");_A38(msg.sender);A21.safeTransferFrom(msg.sender,address(this),v);A22.safeTransfer(msg.sender,out);emit A40(msg.sender,v,out);}function A29(uint256 v)public pure returns(uint256){return(v<MIN||v%S1!=0)?0:v/S1;}function A30(uint256 v)public pure returns(uint256){return(v*S1)/S2;}function A31(uint256 c,bool p1,bool p2)external onlyRole(A00){A24=c;A25=p1;A26=p2;}function A32(address r)external onlyRole(A00){require(r!=address(0),"Z");A23=r;}function A33(address t,address to,uint256 a)external onlyRole(A00){IERC20(t).safeTransfer(to,a);}function A34()external onlyRole(A00){_pause();}function A35()external onlyRole(A00){_unpause();}function _A38(address s)internal{if(!hasRole(A00,s)){T storage t=A36[s];uint64 d=uint64(block.timestamp/1 days);if(t.d<d){t.d=d;t.c=0;}require(t.c<A37,"L");unchecked{t.c+=1;}}}}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_shade","type":"address"},{"internalType":"address","name":"_root","type":"address"},{"internalType":"address","name":"_admin","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"gI","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sO","type":"uint256"}],"name":"A39","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":false,"internalType":"uint256","name":"sI","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"gO","type":"uint256"}],"name":"A40","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"A00","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"A21","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"A22","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"A23","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"A24","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"A25","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"A26","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"v","type":"uint256"}],"name":"A27","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"v","type":"uint256"}],"name":"A28","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"v","type":"uint256"}],"name":"A29","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"v","type":"uint256"}],"name":"A30","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"c","type":"uint256"},{"internalType":"bool","name":"p1","type":"bool"},{"internalType":"bool","name":"p2","type":"bool"}],"name":"A31","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"A32","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"a","type":"uint256"}],"name":"A33","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"A34","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"A35","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"A36","outputs":[{"internalType":"uint64","name":"d","type":"uint64"},{"internalType":"uint8","name":"c","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"A37","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60c060405273dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff168152506304e33880600455600160065f6101000a81548160ff0219169083151502179055506001600660016101000a81548160ff021916908315150217905550348015610093575f5ffd5b5060405161246f38038061246f83398181016040528101906100b591906103e8565b60016002819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561012557505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561015d57505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b61019c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161019390610492565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506102225f5f1b8261022b60201b60201c565b505050506104b0565b5f61023c838361032060201b60201c565b6103165760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506102b361038360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001905061031a565b5f90505b92915050565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f33905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103b78261038e565b9050919050565b6103c7816103ad565b81146103d1575f5ffd5b50565b5f815190506103e2816103be565b92915050565b5f5f5f606084860312156103ff576103fe61038a565b5b5f61040c868287016103d4565b935050602061041d868287016103d4565b925050604061042e868287016103d4565b9150509250925092565b5f82825260208201905092915050565b7f5a000000000000000000000000000000000000000000000000000000000000005f82015250565b5f61047c600183610438565b915061048782610448565b602082019050919050565b5f6020820190508181035f8301526104a981610470565b9050919050565b60805160a051611f6d6105025f395f8181610983015281816109fb01528181610bb001528181610ce40152610ed901525f81816106a30152818161088a01528181610a460152610c980152611f6d5ff3fe608060405234801561000f575f5ffd5b50600436106101a6575f3560e01c80635d6cc2bc116100f757806391d1485411610095578063abc8fa321161006f578063abc8fa3214610483578063d547741f1461049f578063f5fd3600146104bb578063fd0aa5ad146104eb576101a6565b806391d14854146104195780639386cff614610449578063a217fddf14610465576101a6565b80637c5b8570116100d15780637c5b8570146103925780637e926e30146103b057806387fe94e0146103cc57806388fd8aa2146103fd576101a6565b80635d6cc2bc146103285780636c5a076d1461034457806375bb295f14610374576101a6565b80632f2ff15d1161016457806337a7f2b71161013e57806337a7f2b7146102b0578063459c6747146102ce57806353c4e482146102ec5780635c975abb1461030a576101a6565b80632f2ff15d1461026e578063323049131461028a57806336568abe14610294576101a6565b8062facd93146101aa57806301ffc9a7146101b45780630c5e58fc146101e45780631c47495814610202578063248a9ca3146102205780632868972814610250575b5f5ffd5b6101b2610509565b005b6101ce60048036038101906101c99190611690565b610520565b6040516101db91906116d5565b60405180910390f35b6101ec610599565b6040516101f99190611706565b60405180910390f35b61020a61059f565b604051610217919061175e565b60405180910390f35b61023a600480360381019061023591906117a1565b6105c4565b6040516102479190611706565b60405180910390f35b6102586105e0565b60405161026591906117e4565b60405180910390f35b61028860048036038101906102839190611827565b6105e6565b005b610292610608565b005b6102ae60048036038101906102a99190611827565b61061f565b005b6102b861069a565b6040516102c591906117e4565b60405180910390f35b6102d66106a1565b6040516102e391906118c0565b60405180910390f35b6102f46106c5565b60405161030191906116d5565b60405180910390f35b6103126106d7565b60405161031f91906116d5565b60405180910390f35b610342600480360381019061033d91906118d9565b6106ec565b005b61035e6004803603810190610359919061192e565b6107aa565b60405161036b91906117e4565b60405180910390f35b61037c6107cc565b60405161038991906116d5565b60405180910390f35b61039a6107df565b6040516103a79190611974565b60405180910390f35b6103ca60048036038101906103c5919061192e565b6107e4565b005b6103e660048036038101906103e191906118d9565b610ae7565b6040516103f49291906119af565b60405180910390f35b6104176004803603810190610412919061192e565b610b26565b005b610433600480360381019061042e9190611827565b610d84565b60405161044091906116d5565b60405180910390f35b610463600480360381019061045e9190611a00565b610de7565b005b61046d610e33565b60405161047a9190611706565b60405180910390f35b61049d60048036038101906104989190611a50565b610e39565b005b6104b960048036038101906104b49190611827565b610e76565b005b6104d560048036038101906104d0919061192e565b610e98565b6040516104e291906117e4565b60405180910390f35b6104f3610ed7565b60405161050091906118c0565b60405180910390f35b5f5f1b61051581610efb565b61051d610f0f565b50565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610592575061059182610f70565b5b9050919050565b5f5f1b81565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f8381526020019081526020015f20600101549050919050565b60045481565b6105ef826105c4565b6105f881610efb565b6106028383610fd9565b50505050565b5f5f1b61061481610efb565b61061c6110c2565b50565b610627611123565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461068b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610695828261112a565b505050565b620f424081565b7f000000000000000000000000000000000000000000000000000000000000000081565b60065f9054906101000a900460ff1681565b5f60015f9054906101000a900460ff16905090565b5f5f1b6106f881610efb565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d90611afa565b60405180910390fd5b8160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f600a612710836107bb9190611b45565b6107c59190611bb3565b9050919050565b600660019054906101000a900460ff1681565b600581565b6107ec611213565b6107f4611254565b60065f9054906101000a900460ff1680156108125750620f42408110155b801561082a57505f612710826108289190611be3565b145b610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086090611c5d565b60405180910390fd5b5f612710826108789190611bb3565b905060045481111580156109235750807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108e1919061175e565b602060405180830381865afa1580156108fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109209190611c8f565b10155b610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990611d04565b60405180910390fd5b61096b33611298565b5f600a836109799190611bb3565b90506109c83330857f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611400909392919063ffffffff16565b610a3f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682856109f99190611d22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166114829092919063ffffffff16565b610a8a33837f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166114829092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f5d08867854bb3168e5238f31cb91d818c751e34c96f6ca8751f5d93ad5bb5c8f8484604051610ad2929190611d55565b60405180910390a25050610ae4611501565b50565b6005602052805f5260405f205f91509050805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900460ff16905082565b610b2e611213565b610b36611254565b600660019054906101000a900460ff168015610b5157505f81115b610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790611dc6565b60405180910390fd5b5f600a61271083610ba19190611b45565b610bab9190611bb3565b9050807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c07919061175e565b602060405180830381865afa158015610c22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c469190611c8f565b1015610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90611e2e565b60405180910390fd5b610c9033611298565b610cdd3330847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611400909392919063ffffffff16565b610d2833827f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166114829092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f5d59f2dae39b29f93a7dc3c1c063ff03d4a56f13b05bbe0b6b9ce1520a6640208383604051610d70929190611d55565b60405180910390a250610d81611501565b50565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f5f1b610df381610efb565b836004819055508260065f6101000a81548160ff02191690831515021790555081600660016101000a81548160ff02191690831515021790555050505050565b5f5f1b81565b5f5f1b610e4581610efb565b610e7083838673ffffffffffffffffffffffffffffffffffffffff166114829092919063ffffffff16565b50505050565b610e7f826105c4565b610e8881610efb565b610e92838361112a565b50505050565b5f620f4240821080610eb757505f61271083610eb49190611be3565b14155b610ece5761271082610ec99190611bb3565b610ed0565b5f5b9050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610f0c81610f07611123565b61150b565b50565b610f17611213565b6001805f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f59611123565b604051610f66919061175e565b60405180910390a1565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f610fe48383610d84565b6110b85760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611055611123565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506110bc565b5f90505b92915050565b6110ca61155c565b5f60015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61110c611123565b604051611119919061175e565b60405180910390a1565b5f33905090565b5f6111358383610d84565b15611209575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506111a6611123565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001905061120d565b5f90505b92915050565b61121b6106d7565b15611252576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600280540361128f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028081905550565b6112a45f5f1b82610d84565b6113fd575f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f62015180426112f89190611bb3565b90508067ffffffffffffffff16825f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610156113725780825f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f825f0160086101000a81548160ff021916908360ff1602179055505b600560ff16825f0160089054906101000a900460ff1660ff16106113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290611e96565b60405180910390fd5b6001825f0160088282829054906101000a900460ff160192506101000a81548160ff021916908360ff16021790555050505b50565b61147c848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161143593929190611eb4565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061159c565b50505050565b6114fc838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016114b5929190611ee9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061159c565b505050565b6001600281905550565b6115158282610d84565b6115585780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161154f929190611f10565b60405180910390fd5b5050565b6115646106d7565b61159a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f60205f8451602086015f885af1806115bb576040513d5f823e3d81fd5b3d92505f519150505f82146115d45760018114156115ef565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561163157836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611628919061175e565b60405180910390fd5b50505050565b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61166f8161163b565b8114611679575f5ffd5b50565b5f8135905061168a81611666565b92915050565b5f602082840312156116a5576116a4611637565b5b5f6116b28482850161167c565b91505092915050565b5f8115159050919050565b6116cf816116bb565b82525050565b5f6020820190506116e85f8301846116c6565b92915050565b5f819050919050565b611700816116ee565b82525050565b5f6020820190506117195f8301846116f7565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117488261171f565b9050919050565b6117588161173e565b82525050565b5f6020820190506117715f83018461174f565b92915050565b611780816116ee565b811461178a575f5ffd5b50565b5f8135905061179b81611777565b92915050565b5f602082840312156117b6576117b5611637565b5b5f6117c38482850161178d565b91505092915050565b5f819050919050565b6117de816117cc565b82525050565b5f6020820190506117f75f8301846117d5565b92915050565b6118068161173e565b8114611810575f5ffd5b50565b5f81359050611821816117fd565b92915050565b5f5f6040838503121561183d5761183c611637565b5b5f61184a8582860161178d565b925050602061185b85828601611813565b9150509250929050565b5f819050919050565b5f61188861188361187e8461171f565b611865565b61171f565b9050919050565b5f6118998261186e565b9050919050565b5f6118aa8261188f565b9050919050565b6118ba816118a0565b82525050565b5f6020820190506118d35f8301846118b1565b92915050565b5f602082840312156118ee576118ed611637565b5b5f6118fb84828501611813565b91505092915050565b61190d816117cc565b8114611917575f5ffd5b50565b5f8135905061192881611904565b92915050565b5f6020828403121561194357611942611637565b5b5f6119508482850161191a565b91505092915050565b5f60ff82169050919050565b61196e81611959565b82525050565b5f6020820190506119875f830184611965565b92915050565b5f67ffffffffffffffff82169050919050565b6119a98161198d565b82525050565b5f6040820190506119c25f8301856119a0565b6119cf6020830184611965565b9392505050565b6119df816116bb565b81146119e9575f5ffd5b50565b5f813590506119fa816119d6565b92915050565b5f5f5f60608486031215611a1757611a16611637565b5b5f611a248682870161191a565b9350506020611a35868287016119ec565b9250506040611a46868287016119ec565b9150509250925092565b5f5f5f60608486031215611a6757611a66611637565b5b5f611a7486828701611813565b9350506020611a8586828701611813565b9250506040611a968682870161191a565b9150509250925092565b5f82825260208201905092915050565b7f5a000000000000000000000000000000000000000000000000000000000000005f82015250565b5f611ae4600183611aa0565b9150611aef82611ab0565b602082019050919050565b5f6020820190508181035f830152611b1181611ad8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b4f826117cc565b9150611b5a836117cc565b9250828202611b68816117cc565b91508282048414831517611b7f57611b7e611b18565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611bbd826117cc565b9150611bc8836117cc565b925082611bd857611bd7611b86565b5b828204905092915050565b5f611bed826117cc565b9150611bf8836117cc565b925082611c0857611c07611b86565b5b828206905092915050565b7f45310000000000000000000000000000000000000000000000000000000000005f82015250565b5f611c47600283611aa0565b9150611c5282611c13565b602082019050919050565b5f6020820190508181035f830152611c7481611c3b565b9050919050565b5f81519050611c8981611904565b92915050565b5f60208284031215611ca457611ca3611637565b5b5f611cb184828501611c7b565b91505092915050565b7f45320000000000000000000000000000000000000000000000000000000000005f82015250565b5f611cee600283611aa0565b9150611cf982611cba565b602082019050919050565b5f6020820190508181035f830152611d1b81611ce2565b9050919050565b5f611d2c826117cc565b9150611d37836117cc565b9250828203905081811115611d4f57611d4e611b18565b5b92915050565b5f604082019050611d685f8301856117d5565b611d7560208301846117d5565b9392505050565b7f45330000000000000000000000000000000000000000000000000000000000005f82015250565b5f611db0600283611aa0565b9150611dbb82611d7c565b602082019050919050565b5f6020820190508181035f830152611ddd81611da4565b9050919050565b7f45340000000000000000000000000000000000000000000000000000000000005f82015250565b5f611e18600283611aa0565b9150611e2382611de4565b602082019050919050565b5f6020820190508181035f830152611e4581611e0c565b9050919050565b7f4c000000000000000000000000000000000000000000000000000000000000005f82015250565b5f611e80600183611aa0565b9150611e8b82611e4c565b602082019050919050565b5f6020820190508181035f830152611ead81611e74565b9050919050565b5f606082019050611ec75f83018661174f565b611ed4602083018561174f565b611ee160408301846117d5565b949350505050565b5f604082019050611efc5f83018561174f565b611f0960208301846117d5565b9392505050565b5f604082019050611f235f83018561174f565b611f3060208301846116f7565b939250505056fea26469706673582212206794f958512160a6e4abbe5f04b36b530bebba0744f97eb6b45889cef492d73a64736f6c634300082200330000000000000000000000009c00a36da8bef730ef88e7629c70f1397ab2aac00000000000000000000000001ac906547fa4517e385df99c83a8b3c140510baa0000000000000000000000006eb4ede335a8737c30bbf74d98af7fca7539dfa2
Deployed Bytecode
0x608060405234801561000f575f5ffd5b50600436106101a6575f3560e01c80635d6cc2bc116100f757806391d1485411610095578063abc8fa321161006f578063abc8fa3214610483578063d547741f1461049f578063f5fd3600146104bb578063fd0aa5ad146104eb576101a6565b806391d14854146104195780639386cff614610449578063a217fddf14610465576101a6565b80637c5b8570116100d15780637c5b8570146103925780637e926e30146103b057806387fe94e0146103cc57806388fd8aa2146103fd576101a6565b80635d6cc2bc146103285780636c5a076d1461034457806375bb295f14610374576101a6565b80632f2ff15d1161016457806337a7f2b71161013e57806337a7f2b7146102b0578063459c6747146102ce57806353c4e482146102ec5780635c975abb1461030a576101a6565b80632f2ff15d1461026e578063323049131461028a57806336568abe14610294576101a6565b8062facd93146101aa57806301ffc9a7146101b45780630c5e58fc146101e45780631c47495814610202578063248a9ca3146102205780632868972814610250575b5f5ffd5b6101b2610509565b005b6101ce60048036038101906101c99190611690565b610520565b6040516101db91906116d5565b60405180910390f35b6101ec610599565b6040516101f99190611706565b60405180910390f35b61020a61059f565b604051610217919061175e565b60405180910390f35b61023a600480360381019061023591906117a1565b6105c4565b6040516102479190611706565b60405180910390f35b6102586105e0565b60405161026591906117e4565b60405180910390f35b61028860048036038101906102839190611827565b6105e6565b005b610292610608565b005b6102ae60048036038101906102a99190611827565b61061f565b005b6102b861069a565b6040516102c591906117e4565b60405180910390f35b6102d66106a1565b6040516102e391906118c0565b60405180910390f35b6102f46106c5565b60405161030191906116d5565b60405180910390f35b6103126106d7565b60405161031f91906116d5565b60405180910390f35b610342600480360381019061033d91906118d9565b6106ec565b005b61035e6004803603810190610359919061192e565b6107aa565b60405161036b91906117e4565b60405180910390f35b61037c6107cc565b60405161038991906116d5565b60405180910390f35b61039a6107df565b6040516103a79190611974565b60405180910390f35b6103ca60048036038101906103c5919061192e565b6107e4565b005b6103e660048036038101906103e191906118d9565b610ae7565b6040516103f49291906119af565b60405180910390f35b6104176004803603810190610412919061192e565b610b26565b005b610433600480360381019061042e9190611827565b610d84565b60405161044091906116d5565b60405180910390f35b610463600480360381019061045e9190611a00565b610de7565b005b61046d610e33565b60405161047a9190611706565b60405180910390f35b61049d60048036038101906104989190611a50565b610e39565b005b6104b960048036038101906104b49190611827565b610e76565b005b6104d560048036038101906104d0919061192e565b610e98565b6040516104e291906117e4565b60405180910390f35b6104f3610ed7565b60405161050091906118c0565b60405180910390f35b5f5f1b61051581610efb565b61051d610f0f565b50565b5f7f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610592575061059182610f70565b5b9050919050565b5f5f1b81565b60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f8381526020019081526020015f20600101549050919050565b60045481565b6105ef826105c4565b6105f881610efb565b6106028383610fd9565b50505050565b5f5f1b61061481610efb565b61061c6110c2565b50565b610627611123565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461068b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610695828261112a565b505050565b620f424081565b7f0000000000000000000000009c00a36da8bef730ef88e7629c70f1397ab2aac081565b60065f9054906101000a900460ff1681565b5f60015f9054906101000a900460ff16905090565b5f5f1b6106f881610efb565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075d90611afa565b60405180910390fd5b8160035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b5f600a612710836107bb9190611b45565b6107c59190611bb3565b9050919050565b600660019054906101000a900460ff1681565b600581565b6107ec611213565b6107f4611254565b60065f9054906101000a900460ff1680156108125750620f42408110155b801561082a57505f612710826108289190611be3565b145b610869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086090611c5d565b60405180910390fd5b5f612710826108789190611bb3565b905060045481111580156109235750807f0000000000000000000000009c00a36da8bef730ef88e7629c70f1397ab2aac073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108e1919061175e565b602060405180830381865afa1580156108fc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109209190611c8f565b10155b610962576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095990611d04565b60405180910390fd5b61096b33611298565b5f600a836109799190611bb3565b90506109c83330857f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff16611400909392919063ffffffff16565b610a3f60035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682856109f99190611d22565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff166114829092919063ffffffff16565b610a8a33837f0000000000000000000000009c00a36da8bef730ef88e7629c70f1397ab2aac073ffffffffffffffffffffffffffffffffffffffff166114829092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f5d08867854bb3168e5238f31cb91d818c751e34c96f6ca8751f5d93ad5bb5c8f8484604051610ad2929190611d55565b60405180910390a25050610ae4611501565b50565b6005602052805f5260405f205f91509050805f015f9054906101000a900467ffffffffffffffff1690805f0160089054906101000a900460ff16905082565b610b2e611213565b610b36611254565b600660019054906101000a900460ff168015610b5157505f81115b610b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8790611dc6565b60405180910390fd5b5f600a61271083610ba19190611b45565b610bab9190611bb3565b9050807f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c07919061175e565b602060405180830381865afa158015610c22573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c469190611c8f565b1015610c87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7e90611e2e565b60405180910390fd5b610c9033611298565b610cdd3330847f0000000000000000000000009c00a36da8bef730ef88e7629c70f1397ab2aac073ffffffffffffffffffffffffffffffffffffffff16611400909392919063ffffffff16565b610d2833827f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec773ffffffffffffffffffffffffffffffffffffffff166114829092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f5d59f2dae39b29f93a7dc3c1c063ff03d4a56f13b05bbe0b6b9ce1520a6640208383604051610d70929190611d55565b60405180910390a250610d81611501565b50565b5f5f5f8481526020019081526020015f205f015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f5f1b610df381610efb565b836004819055508260065f6101000a81548160ff02191690831515021790555081600660016101000a81548160ff02191690831515021790555050505050565b5f5f1b81565b5f5f1b610e4581610efb565b610e7083838673ffffffffffffffffffffffffffffffffffffffff166114829092919063ffffffff16565b50505050565b610e7f826105c4565b610e8881610efb565b610e92838361112a565b50505050565b5f620f4240821080610eb757505f61271083610eb49190611be3565b14155b610ece5761271082610ec99190611bb3565b610ed0565b5f5b9050919050565b7f000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec781565b610f0c81610f07611123565b61150b565b50565b610f17611213565b6001805f6101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610f59611123565b604051610f66919061175e565b60405180910390a1565b5f7f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b5f610fe48383610d84565b6110b85760015f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550611055611123565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506110bc565b5f90505b92915050565b6110ca61155c565b5f60015f6101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61110c611123565b604051611119919061175e565b60405180910390a1565b5f33905090565b5f6111358383610d84565b15611209575f5f5f8581526020019081526020015f205f015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506111a6611123565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a46001905061120d565b5f90505b92915050565b61121b6106d7565b15611252576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b600280540361128f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028081905550565b6112a45f5f1b82610d84565b6113fd575f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f62015180426112f89190611bb3565b90508067ffffffffffffffff16825f015f9054906101000a900467ffffffffffffffff1667ffffffffffffffff1610156113725780825f015f6101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505f825f0160086101000a81548160ff021916908360ff1602179055505b600560ff16825f0160089054906101000a900460ff1660ff16106113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290611e96565b60405180910390fd5b6001825f0160088282829054906101000a900460ff160192506101000a81548160ff021916908360ff16021790555050505b50565b61147c848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161143593929190611eb4565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061159c565b50505050565b6114fc838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85856040516024016114b5929190611ee9565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061159c565b505050565b6001600281905550565b6115158282610d84565b6115585780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161154f929190611f10565b60405180910390fd5b5050565b6115646106d7565b61159a576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f5f60205f8451602086015f885af1806115bb576040513d5f823e3d81fd5b3d92505f519150505f82146115d45760018114156115ef565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561163157836040517f5274afe7000000000000000000000000000000000000000000000000000000008152600401611628919061175e565b60405180910390fd5b50505050565b5f5ffd5b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61166f8161163b565b8114611679575f5ffd5b50565b5f8135905061168a81611666565b92915050565b5f602082840312156116a5576116a4611637565b5b5f6116b28482850161167c565b91505092915050565b5f8115159050919050565b6116cf816116bb565b82525050565b5f6020820190506116e85f8301846116c6565b92915050565b5f819050919050565b611700816116ee565b82525050565b5f6020820190506117195f8301846116f7565b92915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6117488261171f565b9050919050565b6117588161173e565b82525050565b5f6020820190506117715f83018461174f565b92915050565b611780816116ee565b811461178a575f5ffd5b50565b5f8135905061179b81611777565b92915050565b5f602082840312156117b6576117b5611637565b5b5f6117c38482850161178d565b91505092915050565b5f819050919050565b6117de816117cc565b82525050565b5f6020820190506117f75f8301846117d5565b92915050565b6118068161173e565b8114611810575f5ffd5b50565b5f81359050611821816117fd565b92915050565b5f5f6040838503121561183d5761183c611637565b5b5f61184a8582860161178d565b925050602061185b85828601611813565b9150509250929050565b5f819050919050565b5f61188861188361187e8461171f565b611865565b61171f565b9050919050565b5f6118998261186e565b9050919050565b5f6118aa8261188f565b9050919050565b6118ba816118a0565b82525050565b5f6020820190506118d35f8301846118b1565b92915050565b5f602082840312156118ee576118ed611637565b5b5f6118fb84828501611813565b91505092915050565b61190d816117cc565b8114611917575f5ffd5b50565b5f8135905061192881611904565b92915050565b5f6020828403121561194357611942611637565b5b5f6119508482850161191a565b91505092915050565b5f60ff82169050919050565b61196e81611959565b82525050565b5f6020820190506119875f830184611965565b92915050565b5f67ffffffffffffffff82169050919050565b6119a98161198d565b82525050565b5f6040820190506119c25f8301856119a0565b6119cf6020830184611965565b9392505050565b6119df816116bb565b81146119e9575f5ffd5b50565b5f813590506119fa816119d6565b92915050565b5f5f5f60608486031215611a1757611a16611637565b5b5f611a248682870161191a565b9350506020611a35868287016119ec565b9250506040611a46868287016119ec565b9150509250925092565b5f5f5f60608486031215611a6757611a66611637565b5b5f611a7486828701611813565b9350506020611a8586828701611813565b9250506040611a968682870161191a565b9150509250925092565b5f82825260208201905092915050565b7f5a000000000000000000000000000000000000000000000000000000000000005f82015250565b5f611ae4600183611aa0565b9150611aef82611ab0565b602082019050919050565b5f6020820190508181035f830152611b1181611ad8565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f611b4f826117cc565b9150611b5a836117cc565b9250828202611b68816117cc565b91508282048414831517611b7f57611b7e611b18565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611bbd826117cc565b9150611bc8836117cc565b925082611bd857611bd7611b86565b5b828204905092915050565b5f611bed826117cc565b9150611bf8836117cc565b925082611c0857611c07611b86565b5b828206905092915050565b7f45310000000000000000000000000000000000000000000000000000000000005f82015250565b5f611c47600283611aa0565b9150611c5282611c13565b602082019050919050565b5f6020820190508181035f830152611c7481611c3b565b9050919050565b5f81519050611c8981611904565b92915050565b5f60208284031215611ca457611ca3611637565b5b5f611cb184828501611c7b565b91505092915050565b7f45320000000000000000000000000000000000000000000000000000000000005f82015250565b5f611cee600283611aa0565b9150611cf982611cba565b602082019050919050565b5f6020820190508181035f830152611d1b81611ce2565b9050919050565b5f611d2c826117cc565b9150611d37836117cc565b9250828203905081811115611d4f57611d4e611b18565b5b92915050565b5f604082019050611d685f8301856117d5565b611d7560208301846117d5565b9392505050565b7f45330000000000000000000000000000000000000000000000000000000000005f82015250565b5f611db0600283611aa0565b9150611dbb82611d7c565b602082019050919050565b5f6020820190508181035f830152611ddd81611da4565b9050919050565b7f45340000000000000000000000000000000000000000000000000000000000005f82015250565b5f611e18600283611aa0565b9150611e2382611de4565b602082019050919050565b5f6020820190508181035f830152611e4581611e0c565b9050919050565b7f4c000000000000000000000000000000000000000000000000000000000000005f82015250565b5f611e80600183611aa0565b9150611e8b82611e4c565b602082019050919050565b5f6020820190508181035f830152611ead81611e74565b9050919050565b5f606082019050611ec75f83018661174f565b611ed4602083018561174f565b611ee160408301846117d5565b949350505050565b5f604082019050611efc5f83018561174f565b611f0960208301846117d5565b9392505050565b5f604082019050611f235f83018561174f565b611f3060208301846116f7565b939250505056fea26469706673582212206794f958512160a6e4abbe5f04b36b530bebba0744f97eb6b45889cef492d73a64736f6c63430008220033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009c00a36da8bef730ef88e7629c70f1397ab2aac00000000000000000000000001ac906547fa4517e385df99c83a8b3c140510baa0000000000000000000000006eb4ede335a8737c30bbf74d98af7fca7539dfa2
-----Decoded View---------------
Arg [0] : _shade (address): 0x9c00A36da8bef730EF88E7629C70f1397aB2aAc0
Arg [1] : _root (address): 0x1AC906547FA4517E385Df99c83a8B3c140510bAa
Arg [2] : _admin (address): 0x6eB4EDe335a8737c30bBf74D98af7fcA7539dFa2
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000009c00a36da8bef730ef88e7629c70f1397ab2aac0
Arg [1] : 0000000000000000000000001ac906547fa4517e385df99c83a8b3c140510baa
Arg [2] : 0000000000000000000000006eb4ede335a8737c30bbf74d98af7fca7539dfa2
Deployed Bytecode Sourcemap
37737:2100:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39564:47;;;:::i;:::-;;26749:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37820:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37974:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28029:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38094:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28461:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39611:49;;;:::i;:::-;;29598:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38058:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37867:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38207:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33146:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39387:80;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39235:69;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38228:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38122:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38536:337;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38177:29;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;38873:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27045:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39304:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26392:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39467:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28892:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39152:83;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37895:78;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39564:47;26437:4;37848:18;;26676:16;26687:4;26676:10;:16::i;:::-;39601:8:::1;:6;:8::i;:::-;39564:47:::0;:::o;26749:204::-;26834:4;26873:32;26858:47;;;:11;:47;;;;:87;;;;26909:36;26933:11;26909:23;:36::i;:::-;26858:87;26851:94;;26749:204;;;:::o;37820:46::-;26437:4;37848:18;;37820:46;:::o;37974:18::-;;;;;;;;;;;;;:::o;28029:122::-;28094:7;28121:6;:12;28128:4;28121:12;;;;;;;;;;;:22;;;28114:29;;28029:122;;;:::o;38094:27::-;;;;:::o;28461:138::-;28535:18;28548:4;28535:12;:18::i;:::-;26676:16;26687:4;26676:10;:16::i;:::-;28566:25:::1;28577:4;28583:7;28566:10;:25::i;:::-;;28461:138:::0;;;:::o;39611:49::-;26437:4;37848:18;;26676:16;26687:4;26676:10;:16::i;:::-;39648:10:::1;:8;:10::i;:::-;39611:49:::0;:::o;29598:251::-;29714:12;:10;:12::i;:::-;29692:34;;:18;:34;;;29688:104;;29750:30;;;;;;;;;;;;;;29688:104;29804:37;29816:4;29822:18;29804:11;:37::i;:::-;;29598:251;;:::o;38058:35::-;38086:7;38058:35;:::o;37867:27::-;;;:::o;38207:20::-;;;;;;;;;;;;;:::o;33146:86::-;33193:4;33217:7;;;;;;;;;;;33210:14;;33146:86;:::o;39387:80::-;26437:4;37848:18;;26676:16;26687:4;26676:10;:16::i;:::-;39452:1:::1;39441:13;;:1;:13;;::::0;39433:26:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;39464:1;39460:3;;:5;;;;;;;;;;;;;;;;;;39387:80:::0;;:::o;39235:69::-;39278:7;38055:2;38021:5;39294:1;:4;;;;:::i;:::-;39293:9;;;;:::i;:::-;39287:15;;39235:69;;;:::o;38228:20::-;;;;;;;;;;;;;:::o;38122:27::-;38148:1;38122:27;:::o;38536:337::-;32751:19;:17;:19::i;:::-;36763:21:::1;:19;:21::i;:::-;38603:3:::2;;;;;;;;;;;:11;;;;;38086:7;38608:1;:6;;38603:11;:20;;;;;38622:1;38021:5;38616:1;:4;;;;:::i;:::-;:7;38603:20;38595:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;38630:11;38021:5;38642:1;:4;;;;:::i;:::-;38630:16;;38660:3;;38655;:8;;:43;;;;;38695:3;38665;:13;;;38687:4;38665:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;38655:43;38647:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;38705:16;38710:10;38705:4;:16::i;:::-;38722:9;38055:2;38732:1;:4;;;;:::i;:::-;38722:14;;38737:48;38758:10;38777:4;38783:1;38737:3;:20;;;;:48;;;;;;:::i;:::-;38786:25;38803:3;;;;;;;;;;;38809:1;38807;:3;;;;:::i;:::-;38786;:16;;;;:25;;;;;:::i;:::-;38812:32;38829:10;38840:3;38812;:16;;;;:32;;;;;:::i;:::-;38854:10;38850:21;;;38865:1;38867:3;38850:21;;;;;;;:::i;:::-;;;;;;;;38594:279;;36807:20:::1;:18;:20::i;:::-;38536:337:::0;:::o;38177:29::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38873:279::-;32751:19;:17;:19::i;:::-;36763:21:::1;:19;:21::i;:::-;38940:3:::2;;;;;;;;;;;:8;;;;;38947:1;38945;:3;38940:8;38932:22;;;;;;;;;;;;:::i;:::-;;;;;;;;;38955:11;38055:2;38021:5;38968:1;:4;;;;:::i;:::-;38967:9;;;;:::i;:::-;38955:21;;39015:3;38985;:13;;;39007:4;38985:28;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;38977:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;39025:16;39030:10;39025:4;:16::i;:::-;39042:48;39063:10;39082:4;39088:1;39042:3;:20;;;;:48;;;;;;:::i;:::-;39091:32;39108:10;39119:3;39091;:16;;;;:32;;;;;:::i;:::-;39133:10;39129:21;;;39144:1;39146:3;39129:21;;;;;;;:::i;:::-;;;;;;;;38931:221;36807:20:::1;:18;:20::i;:::-;38873:279:::0;:::o;27045:138::-;27122:4;27146:6;:12;27153:4;27146:12;;;;;;;;;;;:20;;:29;27167:7;27146:29;;;;;;;;;;;;;;;;;;;;;;;;;27139:36;;27045:138;;;;:::o;39304:83::-;26437:4;37848:18;;26676:16;26687:4;26676:10;:16::i;:::-;39370:1:::1;39366:3;:5;;;;39376:2;39372:3;;:6;;;;;;;;;;;;;;;;;;39383:2;39379:3;;:6;;;;;;;;;;;;;;;;;;39304:83:::0;;;;:::o;26392:49::-;26437:4;26392:49;;;:::o;39467:97::-;26437:4;37848:18;;26676:16;26687:4;26676:10;:16::i;:::-;39534:28:::1;39557:2;39560:1;39541;39534:22;;;;:28;;;;;:::i;:::-;39467:97:::0;;;;:::o;28892:140::-;28967:18;28980:4;28967:12;:18::i;:::-;26676:16;26687:4;26676:10;:16::i;:::-;28998:26:::1;29010:4;29016:7;28998:11;:26::i;:::-;;28892:140:::0;;;:::o;39152:83::-;39195:7;38086;39211:1;:5;:14;;;;39224:1;38021:5;39218:1;:4;;;;:::i;:::-;:7;;39211:14;39210:23;;38021:5;39229:1;:4;;;;:::i;:::-;39210:23;;;39227:1;39210:23;39204:29;;39152:83;;;:::o;37895:78::-;;;:::o;27398:105::-;27465:30;27476:4;27482:12;:10;:12::i;:::-;27465:10;:30::i;:::-;27398:105;:::o;33788:118::-;32751:19;:17;:19::i;:::-;33858:4:::1;33848:7:::0;::::1;:14;;;;;;;;;;;;;;;;;;33878:20;33885:12;:10;:12::i;:::-;33878:20;;;;;;:::i;:::-;;;;;;;;33788:118::o:0;24120:148::-;24196:4;24235:25;24220:40;;;:11;:40;;;;24213:47;;24120:148;;;:::o;30475:324::-;30552:4;30574:22;30582:4;30588:7;30574;:22::i;:::-;30569:223;;30645:4;30613:6;:12;30620:4;30613:12;;;;;;;;;;;:20;;:29;30634:7;30613:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30696:12;:10;:12::i;:::-;30669:40;;30687:7;30669:40;;30681:4;30669:40;;;;;;;;;;30731:4;30724:11;;;;30569:223;30775:5;30768:12;;30475:324;;;;;:::o;34047:120::-;33010:16;:14;:16::i;:::-;34116:5:::1;34106:7;;:15;;;;;;;;;;;;;;;;;;34137:22;34146:12;:10;:12::i;:::-;34137:22;;;;;;:::i;:::-;;;;;;;;34047:120::o:0;23052:98::-;23105:7;23132:10;23125:17;;23052:98;:::o;31045:325::-;31123:4;31144:22;31152:4;31158:7;31144;:22::i;:::-;31140:223;;;31215:5;31183:6;:12;31190:4;31183:12;;;;;;;;;;;:20;;:29;31204:7;31183:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;31267:12;:10;:12::i;:::-;31240:40;;31258:7;31240:40;;31252:4;31240:40;;;;;;;;;;31302:4;31295:11;;;;31140:223;31346:5;31339:12;;31045:325;;;;;:::o;33305:132::-;33371:8;:6;:8::i;:::-;33367:63;;;33403:15;;;;;;;;;;;;;;33367:63;33305:132::o;36843:315::-;36141:1;36972:7;;:18;36968:88;;37014:30;;;;;;;;;;;;;;36968:88;36141:1;37133:7;:17;;;;36843:315::o;39660:176::-;39697:14;26437:4;37848:18;;39709:1;39697:7;:14::i;:::-;39693:142;;39713:11;39725:3;:6;39729:1;39725:6;;;;;;;;;;;;;;;39713:18;;39732:8;39764:6;39748:15;:22;;;;:::i;:::-;39732:39;;39779:1;39775:5;;:1;:3;;;;;;;;;;;;:5;;;39772:23;;;39786:1;39782;:3;;;:5;;;;;;;;;;;;;;;;;;39792:1;39788;:3;;;:5;;;;;;;;;;;;;;;;;;39772:23;38148:1;39803:7;;:1;:3;;;;;;;;;;;;:7;;;39795:20;;;;;;;;;;;;:::i;:::-;;;;;;;;;39831:1;39826;:3;;;:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39712:123;;39693:142;39660:176;:::o;10252:190::-;10353:81;10373:5;10395;:18;;;10416:4;10422:2;10426:5;10380:53;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10353:19;:81::i;:::-;10252:190;;;;:::o;9845:162::-;9928:71;9948:5;9970;:14;;;9987:2;9991:5;9955:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9928:19;:71::i;:::-;9845:162;;;:::o;37166:212::-;36098:1;37349:7;:21;;;;37166:212::o;27639:201::-;27728:22;27736:4;27742:7;27728;:22::i;:::-;27723:110;;27807:7;27816:4;27774:47;;;;;;;;;;;;:::i;:::-;;;;;;;;27723:110;27639:201;;:::o;33514:130::-;33578:8;:6;:8::i;:::-;33573:64;;33610:15;;;;;;;;;;;;;;33573:64;33514:130::o;17136:738::-;17217:18;17246:19;17386:4;17383:1;17376:4;17370:11;17363:4;17357;17353:15;17350:1;17343:5;17336;17331:60;17445:7;17435:180;;17490:4;17484:11;17536:16;17533:1;17528:3;17513:40;17583:16;17578:3;17571:29;17435:180;17643:16;17629:30;;17694:1;17688:8;17673:23;;17301:406;17737:1;17723:10;:15;:68;;17790:1;17775:11;:16;;17723:68;;;17771:1;17749:5;17741:26;;;:31;17723:68;17719:148;;;17848:5;17815:40;;;;;;;;;;;:::i;:::-;;;;;;;;17719:148;17206:668;;17136:738;;:::o;88:117:1:-;197:1;194;187:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:118::-;1688:24;1706:5;1688:24;:::i;:::-;1683:3;1676:37;1601:118;;:::o;1725:222::-;1818:4;1856:2;1845:9;1841:18;1833:26;;1869:71;1937:1;1926:9;1922:17;1913:6;1869:71;:::i;:::-;1725:222;;;;:::o;1953:126::-;1990:7;2030:42;2023:5;2019:54;2008:65;;1953:126;;;:::o;2085:96::-;2122:7;2151:24;2169:5;2151:24;:::i;:::-;2140:35;;2085:96;;;:::o;2187:118::-;2274:24;2292:5;2274:24;:::i;:::-;2269:3;2262:37;2187:118;;:::o;2311:222::-;2404:4;2442:2;2431:9;2427:18;2419:26;;2455:71;2523:1;2512:9;2508:17;2499:6;2455:71;:::i;:::-;2311:222;;;;:::o;2539:122::-;2612:24;2630:5;2612:24;:::i;:::-;2605:5;2602:35;2592:63;;2651:1;2648;2641:12;2592:63;2539:122;:::o;2667:139::-;2713:5;2751:6;2738:20;2729:29;;2767:33;2794:5;2767:33;:::i;:::-;2667:139;;;;:::o;2812:329::-;2871:6;2920:2;2908:9;2899:7;2895:23;2891:32;2888:119;;;2926:79;;:::i;:::-;2888:119;3046:1;3071:53;3116:7;3107:6;3096:9;3092:22;3071:53;:::i;:::-;3061:63;;3017:117;2812:329;;;;:::o;3147:77::-;3184:7;3213:5;3202:16;;3147:77;;;:::o;3230:118::-;3317:24;3335:5;3317:24;:::i;:::-;3312:3;3305:37;3230:118;;:::o;3354:222::-;3447:4;3485:2;3474:9;3470:18;3462:26;;3498:71;3566:1;3555:9;3551:17;3542:6;3498:71;:::i;:::-;3354:222;;;;:::o;3582:122::-;3655:24;3673:5;3655:24;:::i;:::-;3648:5;3645:35;3635:63;;3694:1;3691;3684:12;3635:63;3582:122;:::o;3710:139::-;3756:5;3794:6;3781:20;3772:29;;3810:33;3837:5;3810:33;:::i;:::-;3710:139;;;;:::o;3855:474::-;3923:6;3931;3980:2;3968:9;3959:7;3955:23;3951:32;3948:119;;;3986:79;;:::i;:::-;3948:119;4106:1;4131:53;4176:7;4167:6;4156:9;4152:22;4131:53;:::i;:::-;4121:63;;4077:117;4233:2;4259:53;4304:7;4295:6;4284:9;4280:22;4259:53;:::i;:::-;4249:63;;4204:118;3855:474;;;;;:::o;4335:60::-;4363:3;4384:5;4377:12;;4335:60;;;:::o;4401:142::-;4451:9;4484:53;4502:34;4511:24;4529:5;4511:24;:::i;:::-;4502:34;:::i;:::-;4484:53;:::i;:::-;4471:66;;4401:142;;;:::o;4549:126::-;4599:9;4632:37;4663:5;4632:37;:::i;:::-;4619:50;;4549:126;;;:::o;4681:139::-;4744:9;4777:37;4808:5;4777:37;:::i;:::-;4764:50;;4681:139;;;:::o;4826:157::-;4926:50;4970:5;4926:50;:::i;:::-;4921:3;4914:63;4826:157;;:::o;4989:248::-;5095:4;5133:2;5122:9;5118:18;5110:26;;5146:84;5227:1;5216:9;5212:17;5203:6;5146:84;:::i;:::-;4989:248;;;;:::o;5243:329::-;5302:6;5351:2;5339:9;5330:7;5326:23;5322:32;5319:119;;;5357:79;;:::i;:::-;5319:119;5477:1;5502:53;5547:7;5538:6;5527:9;5523:22;5502:53;:::i;:::-;5492:63;;5448:117;5243:329;;;;:::o;5578:122::-;5651:24;5669:5;5651:24;:::i;:::-;5644:5;5641:35;5631:63;;5690:1;5687;5680:12;5631:63;5578:122;:::o;5706:139::-;5752:5;5790:6;5777:20;5768:29;;5806:33;5833:5;5806:33;:::i;:::-;5706:139;;;;:::o;5851:329::-;5910:6;5959:2;5947:9;5938:7;5934:23;5930:32;5927:119;;;5965:79;;:::i;:::-;5927:119;6085:1;6110:53;6155:7;6146:6;6135:9;6131:22;6110:53;:::i;:::-;6100:63;;6056:117;5851:329;;;;:::o;6186:86::-;6221:7;6261:4;6254:5;6250:16;6239:27;;6186:86;;;:::o;6278:112::-;6361:22;6377:5;6361:22;:::i;:::-;6356:3;6349:35;6278:112;;:::o;6396:214::-;6485:4;6523:2;6512:9;6508:18;6500:26;;6536:67;6600:1;6589:9;6585:17;6576:6;6536:67;:::i;:::-;6396:214;;;;:::o;6616:101::-;6652:7;6692:18;6685:5;6681:30;6670:41;;6616:101;;;:::o;6723:115::-;6808:23;6825:5;6808:23;:::i;:::-;6803:3;6796:36;6723:115;;:::o;6844:320::-;6959:4;6997:2;6986:9;6982:18;6974:26;;7010:69;7076:1;7065:9;7061:17;7052:6;7010:69;:::i;:::-;7089:68;7153:2;7142:9;7138:18;7129:6;7089:68;:::i;:::-;6844:320;;;;;:::o;7170:116::-;7240:21;7255:5;7240:21;:::i;:::-;7233:5;7230:32;7220:60;;7276:1;7273;7266:12;7220:60;7170:116;:::o;7292:133::-;7335:5;7373:6;7360:20;7351:29;;7389:30;7413:5;7389:30;:::i;:::-;7292:133;;;;:::o;7431:607::-;7502:6;7510;7518;7567:2;7555:9;7546:7;7542:23;7538:32;7535:119;;;7573:79;;:::i;:::-;7535:119;7693:1;7718:53;7763:7;7754:6;7743:9;7739:22;7718:53;:::i;:::-;7708:63;;7664:117;7820:2;7846:50;7888:7;7879:6;7868:9;7864:22;7846:50;:::i;:::-;7836:60;;7791:115;7945:2;7971:50;8013:7;8004:6;7993:9;7989:22;7971:50;:::i;:::-;7961:60;;7916:115;7431:607;;;;;:::o;8044:619::-;8121:6;8129;8137;8186:2;8174:9;8165:7;8161:23;8157:32;8154:119;;;8192:79;;:::i;:::-;8154:119;8312:1;8337:53;8382:7;8373:6;8362:9;8358:22;8337:53;:::i;:::-;8327:63;;8283:117;8439:2;8465:53;8510:7;8501:6;8490:9;8486:22;8465:53;:::i;:::-;8455:63;;8410:118;8567:2;8593:53;8638:7;8629:6;8618:9;8614:22;8593:53;:::i;:::-;8583:63;;8538:118;8044:619;;;;;:::o;8669:169::-;8753:11;8787:6;8782:3;8775:19;8827:4;8822:3;8818:14;8803:29;;8669:169;;;;:::o;8844:151::-;8984:3;8980:1;8972:6;8968:14;8961:27;8844:151;:::o;9001:365::-;9143:3;9164:66;9228:1;9223:3;9164:66;:::i;:::-;9157:73;;9239:93;9328:3;9239:93;:::i;:::-;9357:2;9352:3;9348:12;9341:19;;9001:365;;;:::o;9372:419::-;9538:4;9576:2;9565:9;9561:18;9553:26;;9625:9;9619:4;9615:20;9611:1;9600:9;9596:17;9589:47;9653:131;9779:4;9653:131;:::i;:::-;9645:139;;9372:419;;;:::o;9797:180::-;9845:77;9842:1;9835:88;9942:4;9939:1;9932:15;9966:4;9963:1;9956:15;9983:410;10023:7;10046:20;10064:1;10046:20;:::i;:::-;10041:25;;10080:20;10098:1;10080:20;:::i;:::-;10075:25;;10135:1;10132;10128:9;10157:30;10175:11;10157:30;:::i;:::-;10146:41;;10336:1;10327:7;10323:15;10320:1;10317:22;10297:1;10290:9;10270:83;10247:139;;10366:18;;:::i;:::-;10247:139;10031:362;9983:410;;;;:::o;10399:180::-;10447:77;10444:1;10437:88;10544:4;10541:1;10534:15;10568:4;10565:1;10558:15;10585:185;10625:1;10642:20;10660:1;10642:20;:::i;:::-;10637:25;;10676:20;10694:1;10676:20;:::i;:::-;10671:25;;10715:1;10705:35;;10720:18;;:::i;:::-;10705:35;10762:1;10759;10755:9;10750:14;;10585:185;;;;:::o;10776:176::-;10808:1;10825:20;10843:1;10825:20;:::i;:::-;10820:25;;10859:20;10877:1;10859:20;:::i;:::-;10854:25;;10898:1;10888:35;;10903:18;;:::i;:::-;10888:35;10944:1;10941;10937:9;10932:14;;10776:176;;;;:::o;10958:152::-;11098:4;11094:1;11086:6;11082:14;11075:28;10958:152;:::o;11116:365::-;11258:3;11279:66;11343:1;11338:3;11279:66;:::i;:::-;11272:73;;11354:93;11443:3;11354:93;:::i;:::-;11472:2;11467:3;11463:12;11456:19;;11116:365;;;:::o;11487:419::-;11653:4;11691:2;11680:9;11676:18;11668:26;;11740:9;11734:4;11730:20;11726:1;11715:9;11711:17;11704:47;11768:131;11894:4;11768:131;:::i;:::-;11760:139;;11487:419;;;:::o;11912:143::-;11969:5;12000:6;11994:13;11985:22;;12016:33;12043:5;12016:33;:::i;:::-;11912:143;;;;:::o;12061:351::-;12131:6;12180:2;12168:9;12159:7;12155:23;12151:32;12148:119;;;12186:79;;:::i;:::-;12148:119;12306:1;12331:64;12387:7;12378:6;12367:9;12363:22;12331:64;:::i;:::-;12321:74;;12277:128;12061:351;;;;:::o;12418:152::-;12558:4;12554:1;12546:6;12542:14;12535:28;12418:152;:::o;12576:365::-;12718:3;12739:66;12803:1;12798:3;12739:66;:::i;:::-;12732:73;;12814:93;12903:3;12814:93;:::i;:::-;12932:2;12927:3;12923:12;12916:19;;12576:365;;;:::o;12947:419::-;13113:4;13151:2;13140:9;13136:18;13128:26;;13200:9;13194:4;13190:20;13186:1;13175:9;13171:17;13164:47;13228:131;13354:4;13228:131;:::i;:::-;13220:139;;12947:419;;;:::o;13372:194::-;13412:4;13432:20;13450:1;13432:20;:::i;:::-;13427:25;;13466:20;13484:1;13466:20;:::i;:::-;13461:25;;13510:1;13507;13503:9;13495:17;;13534:1;13528:4;13525:11;13522:37;;;13539:18;;:::i;:::-;13522:37;13372:194;;;;:::o;13572:332::-;13693:4;13731:2;13720:9;13716:18;13708:26;;13744:71;13812:1;13801:9;13797:17;13788:6;13744:71;:::i;:::-;13825:72;13893:2;13882:9;13878:18;13869:6;13825:72;:::i;:::-;13572:332;;;;;:::o;13910:152::-;14050:4;14046:1;14038:6;14034:14;14027:28;13910:152;:::o;14068:365::-;14210:3;14231:66;14295:1;14290:3;14231:66;:::i;:::-;14224:73;;14306:93;14395:3;14306:93;:::i;:::-;14424:2;14419:3;14415:12;14408:19;;14068:365;;;:::o;14439:419::-;14605:4;14643:2;14632:9;14628:18;14620:26;;14692:9;14686:4;14682:20;14678:1;14667:9;14663:17;14656:47;14720:131;14846:4;14720:131;:::i;:::-;14712:139;;14439:419;;;:::o;14864:152::-;15004:4;15000:1;14992:6;14988:14;14981:28;14864:152;:::o;15022:365::-;15164:3;15185:66;15249:1;15244:3;15185:66;:::i;:::-;15178:73;;15260:93;15349:3;15260:93;:::i;:::-;15378:2;15373:3;15369:12;15362:19;;15022:365;;;:::o;15393:419::-;15559:4;15597:2;15586:9;15582:18;15574:26;;15646:9;15640:4;15636:20;15632:1;15621:9;15617:17;15610:47;15674:131;15800:4;15674:131;:::i;:::-;15666:139;;15393:419;;;:::o;15818:151::-;15958:3;15954:1;15946:6;15942:14;15935:27;15818:151;:::o;15975:365::-;16117:3;16138:66;16202:1;16197:3;16138:66;:::i;:::-;16131:73;;16213:93;16302:3;16213:93;:::i;:::-;16331:2;16326:3;16322:12;16315:19;;15975:365;;;:::o;16346:419::-;16512:4;16550:2;16539:9;16535:18;16527:26;;16599:9;16593:4;16589:20;16585:1;16574:9;16570:17;16563:47;16627:131;16753:4;16627:131;:::i;:::-;16619:139;;16346:419;;;:::o;16771:442::-;16920:4;16958:2;16947:9;16943:18;16935:26;;16971:71;17039:1;17028:9;17024:17;17015:6;16971:71;:::i;:::-;17052:72;17120:2;17109:9;17105:18;17096:6;17052:72;:::i;:::-;17134;17202:2;17191:9;17187:18;17178:6;17134:72;:::i;:::-;16771:442;;;;;;:::o;17219:332::-;17340:4;17378:2;17367:9;17363:18;17355:26;;17391:71;17459:1;17448:9;17444:17;17435:6;17391:71;:::i;:::-;17472:72;17540:2;17529:9;17525:18;17516:6;17472:72;:::i;:::-;17219:332;;;;;:::o;17557:::-;17678:4;17716:2;17705:9;17701:18;17693:26;;17729:71;17797:1;17786:9;17782:17;17773:6;17729:71;:::i;:::-;17810:72;17878:2;17867:9;17863:18;17854:6;17810:72;:::i;:::-;17557:332;;;;;:::o
Swarm Source
ipfs://6794f958512160a6e4abbe5f04b36b530bebba0744f97eb6b45889cef492d73a
Loading...
Loading
Loading...
Loading
Net Worth in USD
$2.00
Net Worth in ETH
0.001013
Token Allocations
USDT
100.00%
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.999613 | 2 | $2 |
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.