Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 33 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Bet | 11182680 | 1363 days ago | IN | 0.01 ETH | 0.01005192 | ||||
Bet | 11179936 | 1364 days ago | IN | 0.02624104 ETH | 0.00833574 | ||||
Bet | 11177995 | 1364 days ago | IN | 0.1 ETH | 0.0113268 | ||||
Bet | 11177661 | 1364 days ago | IN | 0.17980638 ETH | 0.01702016 | ||||
Bet | 11177652 | 1364 days ago | IN | 0.40501283 ETH | 0.01748647 | ||||
Bet | 11177649 | 1364 days ago | IN | 0.011579 ETH | 0.01468863 | ||||
Bet | 11177646 | 1364 days ago | IN | 2 ETH | 0.01984567 | ||||
Bet | 11177626 | 1364 days ago | IN | 0.0685516 ETH | 0.01422233 | ||||
Bet | 11177605 | 1364 days ago | IN | 0.1 ETH | 0.01777325 | ||||
Bet | 11177571 | 1364 days ago | IN | 0.05 ETH | 0.01515494 | ||||
Bet | 11177470 | 1364 days ago | IN | 0.00345278 ETH | 0.01565247 | ||||
Bet | 11177461 | 1364 days ago | IN | 1 ETH | 0.01614114 | ||||
Bet | 11177460 | 1364 days ago | IN | 0.1 ETH | 0.0149553 | ||||
Bet | 11177442 | 1364 days ago | IN | 0.07009956 ETH | 0.01702016 | ||||
Bet | 11177407 | 1364 days ago | IN | 1 ETH | 0.0127966 | ||||
Bet | 11177403 | 1364 days ago | IN | 0.05 ETH | 0.01655386 | ||||
Bet | 11177389 | 1364 days ago | IN | 0.10677363 ETH | 0.01730721 | ||||
Bet | 11177380 | 1364 days ago | IN | 0.2 ETH | 0.01748647 | ||||
Bet | 11177242 | 1364 days ago | IN | 0.06 ETH | 0.01642632 | ||||
Bet | 11177229 | 1364 days ago | IN | 0.05 ETH | 0.01569081 | ||||
Bet | 11177222 | 1364 days ago | IN | 0.02400649 ETH | 0.01667113 | ||||
Bet | 11177180 | 1364 days ago | IN | 1 ETH | 0.01618115 | ||||
Bet | 11177170 | 1364 days ago | IN | 1 ETH | 0.0233153 | ||||
Bet | 11177105 | 1364 days ago | IN | 0.2 ETH | 0.01618115 | ||||
Bet | 11177072 | 1364 days ago | IN | 0.01 ETH | 0.01562125 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11182680 | 1363 days ago | 0.002 ETH | ||||
11182680 | 1363 days ago | 0.008 ETH | ||||
11179936 | 1364 days ago | 0.0052482 ETH | ||||
11179936 | 1364 days ago | 0.02099283 ETH | ||||
11177995 | 1364 days ago | 0.02 ETH | ||||
11177995 | 1364 days ago | 0.08 ETH | ||||
11177661 | 1364 days ago | 0.03596127 ETH | ||||
11177661 | 1364 days ago | 0.14384511 ETH | ||||
11177652 | 1364 days ago | 0.08100256 ETH | ||||
11177652 | 1364 days ago | 0.32401026 ETH | ||||
11177649 | 1364 days ago | 0.0023158 ETH | ||||
11177649 | 1364 days ago | 0.0092632 ETH | ||||
11177646 | 1364 days ago | 0.4 ETH | ||||
11177646 | 1364 days ago | 1.6 ETH | ||||
11177626 | 1364 days ago | 0.01371032 ETH | ||||
11177626 | 1364 days ago | 0.05484128 ETH | ||||
11177605 | 1364 days ago | 0.02 ETH | ||||
11177605 | 1364 days ago | 0.08 ETH | ||||
11177571 | 1364 days ago | 0.01 ETH | ||||
11177571 | 1364 days ago | 0.04 ETH | ||||
11177470 | 1364 days ago | 0.00276222 ETH | ||||
11177461 | 1364 days ago | 0.2 ETH | ||||
11177461 | 1364 days ago | 0.8 ETH | ||||
11177460 | 1364 days ago | 0.02 ETH | ||||
11177460 | 1364 days ago | 0.08 ETH |
Loading...
Loading
Contract Name:
Auction
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-11-02 */ // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @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); } // File: @openzeppelin/contracts/utils/EnumerableSet.sol pragma solidity ^0.6.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.0.0, only sets of type `address` (`AddressSet`) and `uint256` * (`UintSet`) are supported. */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping (bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement. bytes32 lastvalue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastvalue; // Update the index for the moved value set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { require(set._values.length > index, "EnumerableSet: index out of bounds"); return set._values[index]; } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(value))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(value))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(value))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint256(_at(set._inner, index))); } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/GSN/Context.sol pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/access/AccessControl.sol pragma solidity ^0.6.0; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. * * 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: * * ``` * 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}: * * ``` * 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. */ abstract contract AccessControl is Context { using EnumerableSet for EnumerableSet.AddressSet; using Address for address; struct RoleData { EnumerableSet.AddressSet members; bytes32 adminRole; } mapping (bytes32 => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @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 signaling this. * * _Available since v3.1._ */ 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, an admin role * bearer except when using {_setupRole}. */ 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) public view returns (bool) { return _roles[role].members.contains(account); } /** * @dev Returns the number of accounts that have `role`. Can be used * together with {getRoleMember} to enumerate all bearers of a role. */ function getRoleMemberCount(bytes32 role) public view returns (uint256) { return _roles[role].members.length(); } /** * @dev Returns one of the accounts that have `role`. `index` must be a * value between 0 and {getRoleMemberCount}, non-inclusive. * * Role bearers are not sorted in any particular way, and their ordering may * change at any point. * * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure * you perform all queries on the same block. See the following * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post] * for more information. */ function getRoleMember(bytes32 role, uint256 index) public view returns (address) { return _roles[role].members.at(index); } /** * @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 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. */ function grantRole(bytes32 role, address account) public virtual { require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to grant"); _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. */ function revokeRole(bytes32 role, address account) public virtual { require(hasRole(_roles[role].adminRole, _msgSender()), "AccessControl: sender must be an admin to revoke"); _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 granted `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `account`. */ function renounceRole(bytes32 role, address account) public virtual { require(account == _msgSender(), "AccessControl: can only renounce roles for self"); _revokeRole(role, account); } /** * @dev Grants `role` to `account`. * * If `account` had not been already granted `role`, emits a {RoleGranted} * event. Note that unlike {grantRole}, this function doesn't perform any * checks on the calling account. * * [WARNING] * ==== * This function should only be called from the constructor when setting * up the initial roles for the system. * * Using this function in any other way is effectively circumventing the admin * system imposed by {AccessControl}. * ==== */ function _setupRole(bytes32 role, address account) internal virtual { _grantRole(role, account); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { emit RoleAdminChanged(role, _roles[role].adminRole, adminRole); _roles[role].adminRole = adminRole; } function _grantRole(bytes32 role, address account) private { if (_roles[role].members.add(account)) { emit RoleGranted(role, account, _msgSender()); } } function _revokeRole(bytes32 role, address account) private { if (_roles[role].members.remove(account)) { emit RoleRevoked(role, account, _msgSender()); } } } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: contracts/interfaces/IToken.sol pragma solidity ^0.6.0; interface IToken { function mint(address to, uint256 amount) external; function burn(address from, uint256 amount) external; } // File: contracts/interfaces/IAuction.sol pragma solidity ^0.6.0; interface IAuction { function callIncomeDailyTokensTrigger(uint256 amount) external; function callIncomeWeeklyTokensTrigger(uint256 amount) external; } // File: contracts/interfaces/IStaking.sol pragma solidity ^0.6.0; interface IStaking { function externalStake( uint256 amount, uint256 stakingDays, address staker ) external; } // File: contracts/Auction.sol pragma solidity >=0.4.25 <0.7.0; contract Auction is IAuction, AccessControl { using SafeMath for uint256; event Bet( address indexed account, uint256 value, uint256 indexed auctionId, uint256 indexed time ); event Withdraval( address indexed account, uint256 value, uint256 indexed auctionId, uint256 indexed time ); event AuctionIsOver(uint256 eth, uint256 token, uint256 indexed auctionId); bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE"); bytes32 public constant CALLER_ROLE = keccak256("CALLER_ROLE"); struct AuctionReserves { uint256 eth; uint256 token; uint256 uniswapLastPrice; uint256 uniswapMiddlePrice; } struct UserBet { uint256 eth; address ref; } mapping(uint256 => AuctionReserves) public reservesOf; mapping(address => uint256[]) public auctionsOf; mapping(uint256 => mapping(address => UserBet)) public auctionBetOf; mapping(uint256 => mapping(address => bool)) public existAuctionsOf; uint256 public lastAuctionEventId; uint256 public start; uint256 public stepTimestamp; uint256 public uniswapPercent; address public mainToken; address public staking; address payable public uniswap; address payable public recipient; bool public init_; modifier onlyCaller() { require( hasRole(CALLER_ROLE, _msgSender()), "Caller is not a caller role" ); _; } modifier onlyManager() { require( hasRole(MANAGER_ROLE, _msgSender()), "Caller is not a caller role" ); _; } constructor() public { init_ = false; } function init( uint256 _stepTimestamp, address _manager, address _mainToken, address _staking, address payable _uniswap, address payable _recipient, address _nativeSwap, address _foreignSwap, address _subbalances ) external { require(!init_, "init is active"); _setupRole(MANAGER_ROLE, _manager); _setupRole(CALLER_ROLE, _nativeSwap); _setupRole(CALLER_ROLE, _foreignSwap); _setupRole(CALLER_ROLE, _staking); _setupRole(CALLER_ROLE, _subbalances); start = now; stepTimestamp = _stepTimestamp; uniswapPercent = 20; mainToken = _mainToken; staking = _staking; uniswap = _uniswap; recipient = _recipient; init_ = true; } function auctionsOf_(address account) public view returns (uint256[] memory) { return auctionsOf[account]; } function setUniswapPercent(uint256 percent) external onlyManager { uniswapPercent = percent; } function getUniswapLastPrice() public view returns (uint256) { address[] memory path = new address[](2); path[0] = IUniswapV2Router02(uniswap).WETH(); path[1] = mainToken; uint256 price = IUniswapV2Router02(uniswap).getAmountsOut( 1e18, path )[1]; return price; } function getUniswapMiddlePriceForSevenDays() public view returns (uint256) { uint256 stepsFromStart = calculateStepsFromStart(); uint256 index = stepsFromStart; uint256 sum; uint256 points; while (points != 7) { if (reservesOf[index].uniswapLastPrice != 0) { sum = sum.add(reservesOf[index].uniswapLastPrice); points = points.add(1); } if (index == 0) break; index = index.sub(1); } if (sum == 0) return getUniswapLastPrice(); else return sum.div(points); } function _updatePrice() internal { uint256 stepsFromStart = calculateStepsFromStart(); reservesOf[stepsFromStart].uniswapLastPrice = getUniswapLastPrice(); reservesOf[stepsFromStart] .uniswapMiddlePrice = getUniswapMiddlePriceForSevenDays(); } function bet(uint256 deadline, address ref) external payable { _saveAuctionData(); _updatePrice(); require(_msgSender() != ref, "msg.sender == ref"); ( uint256 toRecipient, uint256 toUniswap ) = _calculateRecipientAndUniswapAmountsToSend(); _swapEth(toUniswap, deadline); uint256 stepsFromStart = calculateStepsFromStart(); auctionBetOf[stepsFromStart][_msgSender()].ref = ref; auctionBetOf[stepsFromStart][_msgSender()] .eth = auctionBetOf[stepsFromStart][_msgSender()].eth.add( msg.value ); if (!existAuctionsOf[stepsFromStart][_msgSender()]) { auctionsOf[_msgSender()].push(stepsFromStart); existAuctionsOf[stepsFromStart][_msgSender()] = true; } reservesOf[stepsFromStart].eth = reservesOf[stepsFromStart].eth.add( msg.value ); recipient.transfer(toRecipient); emit Bet(msg.sender, msg.value, stepsFromStart, now); } function withdraw(uint256 auctionId) external { _saveAuctionData(); _updatePrice(); uint256 stepsFromStart = calculateStepsFromStart(); require(stepsFromStart > auctionId, "auction is active"); uint256 auctionETHUserBalance = auctionBetOf[auctionId][_msgSender()] .eth; auctionBetOf[auctionId][_msgSender()].eth = 0; require(auctionETHUserBalance > 0, "zero balance in auction"); uint256 payout = _calculatePayout(auctionId, auctionETHUserBalance); uint256 uniswapPayoutWithPercent = _calculatePayoutWithUniswap( auctionId, auctionETHUserBalance, payout ); if (payout > uniswapPayoutWithPercent) { uint256 nextWeeklyAuction = calculateNearestWeeklyAuction(); reservesOf[nextWeeklyAuction].token = reservesOf[nextWeeklyAuction] .token .add(payout.sub(uniswapPayoutWithPercent)); payout = uniswapPayoutWithPercent; } if (address(auctionBetOf[auctionId][_msgSender()].ref) == address(0)) { IToken(mainToken).burn(address(this), payout); IStaking(staking).externalStake(payout, 14, _msgSender()); emit Withdraval(msg.sender, payout, stepsFromStart, now); } else { IToken(mainToken).burn(address(this), payout); ( uint256 toRefMintAmount, uint256 toUserMintAmount ) = _calculateRefAndUserAmountsToMint(payout); payout = payout.add(toUserMintAmount); IStaking(staking).externalStake(payout, 14, _msgSender()); emit Withdraval(msg.sender, payout, stepsFromStart, now); IStaking(staking).externalStake( toRefMintAmount, 14, auctionBetOf[auctionId][_msgSender()].ref ); } } function callIncomeDailyTokensTrigger(uint256 amount) external override onlyCaller { uint256 stepsFromStart = calculateStepsFromStart(); uint256 nextAuctionId = stepsFromStart.add(1); reservesOf[nextAuctionId].token = reservesOf[nextAuctionId].token.add( amount ); } function callIncomeWeeklyTokensTrigger(uint256 amount) external override onlyCaller { uint256 nearestWeeklyAuction = calculateNearestWeeklyAuction(); reservesOf[nearestWeeklyAuction] .token = reservesOf[nearestWeeklyAuction].token.add(amount); } function calculateNearestWeeklyAuction() public view returns (uint256) { uint256 stepsFromStart = calculateStepsFromStart(); return stepsFromStart.add(uint256(7).sub(stepsFromStart.mod(7))); } function calculateStepsFromStart() public view returns (uint256) { return now.sub(start).div(stepTimestamp); } function _calculatePayoutWithUniswap( uint256 auctionId, uint256 amount, uint256 payout ) internal view returns (uint256) { uint256 uniswapPayout = reservesOf[auctionId] .uniswapMiddlePrice .mul(amount) .div(1e18); uint256 uniswapPayoutWithPercent = uniswapPayout.add( uniswapPayout.mul(uniswapPercent).div(100) ); if (payout > uniswapPayoutWithPercent) { return uniswapPayoutWithPercent; } else { return payout; } } function _calculatePayout(uint256 auctionId, uint256 amount) internal view returns (uint256) { return amount.mul(reservesOf[auctionId].token).div( reservesOf[auctionId].eth ); } function _calculateRecipientAndUniswapAmountsToSend() private returns (uint256, uint256) { uint256 toRecipient = msg.value.mul(20).div(100); uint256 toUniswap = msg.value.sub(toRecipient); return (toRecipient, toUniswap); } function _calculateRefAndUserAmountsToMint(uint256 amount) private pure returns (uint256, uint256) { uint256 toRefMintAmount = amount.mul(20).div(100); uint256 toUserMintAmount = amount.mul(10).div(100); return (toRefMintAmount, toUserMintAmount); } function _swapEth(uint256 amount, uint256 deadline) private { address[] memory path = new address[](2); path[0] = IUniswapV2Router02(uniswap).WETH(); path[1] = mainToken; IUniswapV2Router02(uniswap).swapExactETHForTokens{value: amount}( 0, path, staking, deadline ); } function _saveAuctionData() internal { uint256 stepsFromStart = calculateStepsFromStart(); AuctionReserves memory reserves = reservesOf[stepsFromStart]; if (lastAuctionEventId < stepsFromStart) { emit AuctionIsOver(reserves.eth, reserves.token, stepsFromStart); lastAuctionEventId = stepsFromStart; } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"eth","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"token","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"AuctionIsOver","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Bet","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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"auctionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"Withdraval","type":"event"},{"inputs":[],"name":"CALLER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"auctionBetOf","outputs":[{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"address","name":"ref","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"auctionsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"auctionsOf_","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"address","name":"ref","type":"address"}],"name":"bet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"calculateNearestWeeklyAuction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"calculateStepsFromStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"callIncomeDailyTokensTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"callIncomeWeeklyTokensTrigger","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"existAuctionsOf","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapLastPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapMiddlePriceForSevenDays","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"uint256","name":"_stepTimestamp","type":"uint256"},{"internalType":"address","name":"_manager","type":"address"},{"internalType":"address","name":"_mainToken","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address payable","name":"_uniswap","type":"address"},{"internalType":"address payable","name":"_recipient","type":"address"},{"internalType":"address","name":"_nativeSwap","type":"address"},{"internalType":"address","name":"_foreignSwap","type":"address"},{"internalType":"address","name":"_subbalances","type":"address"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"init_","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastAuctionEventId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mainToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recipient","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reservesOf","outputs":[{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"uint256","name":"uniswapLastPrice","type":"uint256"},{"internalType":"uint256","name":"uniswapMiddlePrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"setUniswapPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"staking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"start","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stepTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswap","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"auctionId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b50600c805460ff60a01b191690556124988061002d6000396000f3fe6080604052600436106101f95760003560e01c80639010d07c1161010d578063c22fd76f116100a0578063d4b22c0a1161006f578063d4b22c0a146106e0578063d547741f146106f5578063d7e6bef81461072e578063ec87621c14610758578063fba6fc981461076d576101f9565b8063c22fd76f14610629578063ca15c87314610653578063ccbbc9b31461067d578063cd7c141c146106b6576101f9565b8063a217fddf116100dc578063a217fddf146105d5578063a2e6f9bf146105ea578063be9a6555146105ff578063c1c93a7314610614576101f9565b80639010d07c1461052e57806391d148541461055e578063982e52fb146105ab5780639d8cd337146105c0576101f9565b8063586f7c3a1161019057806366d003ac1161015f57806366d003ac146104665780637492ec691461047b57806375954a95146104cb578063774237fc146104e05780638501313f146104f5576101f9565b8063586f7c3a146103485780635ae6ea701461035d5780635f9406b4146103e05780635f9b71ce1461043a576101f9565b806336568abe116101cc57806336568abe146102d05780633fc15f15146103095780634bc2e48d1461031e5780634cf088d914610333576101f9565b8063248a9ca3146101fe5780632681f7e41461023a5780632e1a7d4d1461026b5780632f2ff15d14610297575b600080fd5b34801561020a57600080fd5b506102286004803603602081101561022157600080fd5b50356107e0565b60408051918252519081900360200190f35b34801561024657600080fd5b5061024f6107f5565b604080516001600160a01b039092168252519081900360200190f35b34801561027757600080fd5b506102956004803603602081101561028e57600080fd5b5035610804565b005b3480156102a357600080fd5b50610295600480360360408110156102ba57600080fd5b50803590602001356001600160a01b0316610d0b565b3480156102dc57600080fd5b50610295600480360360408110156102f357600080fd5b50803590602001356001600160a01b0316610d77565b34801561031557600080fd5b5061024f610dd8565b34801561032a57600080fd5b50610228610de7565b34801561033f57600080fd5b5061024f610e10565b34801561035457600080fd5b50610228610e1f565b34801561036957600080fd5b506103906004803603602081101561038057600080fd5b50356001600160a01b0316610e52565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103cc5781810151838201526020016103b4565b505050509050019250505060405180910390f35b3480156103ec57600080fd5b506104196004803603604081101561040357600080fd5b50803590602001356001600160a01b0316610ebe565b604080519283526001600160a01b0390911660208301528051918290030190f35b6102956004803603604081101561045057600080fd5b50803590602001356001600160a01b0316610eeb565b34801561047257600080fd5b5061024f6111b1565b34801561048757600080fd5b506104a56004803603602081101561049e57600080fd5b50356111c0565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156104d757600080fd5b506102286111e8565b3480156104ec57600080fd5b506102286111ee565b34801561050157600080fd5b506102286004803603604081101561051857600080fd5b506001600160a01b038135169060200135611200565b34801561053a57600080fd5b5061024f6004803603604081101561055157600080fd5b508035906020013561122e565b34801561056a57600080fd5b506105976004803603604081101561058157600080fd5b50803590602001356001600160a01b031661124f565b604080519115158252519081900360200190f35b3480156105b757600080fd5b50610597611267565b3480156105cc57600080fd5b50610228611277565b3480156105e157600080fd5b5061022861127d565b3480156105f657600080fd5b50610228611282565b34801561060b57600080fd5b50610228611288565b34801561062057600080fd5b5061022861128e565b34801561063557600080fd5b506102956004803603602081101561064c57600080fd5b50356114ee565b34801561065f57600080fd5b506102286004803603602081101561067657600080fd5b50356115ab565b34801561068957600080fd5b50610597600480360360408110156106a057600080fd5b50803590602001356001600160a01b03166115c2565b3480156106c257600080fd5b50610295600480360360208110156106d957600080fd5b50356115e2565b3480156106ec57600080fd5b5061022861168f565b34801561070157600080fd5b506102956004803603604081101561071857600080fd5b50803590602001356001600160a01b031661172b565b34801561073a57600080fd5b506102956004803603602081101561075157600080fd5b5035611784565b34801561076457600080fd5b50610228611806565b34801561077957600080fd5b50610295600480360361012081101561079157600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a082013581169160c081013582169160e082013581169161010001351661182a565b60009081526020819052604090206002015490565b600b546001600160a01b031681565b61080c611975565b610814611a21565b600061081e610de7565b9050818111610868576040805162461bcd60e51b815260206004820152601160248201527061756374696f6e2069732061637469766560781b604482015290519081900360640190fd5b60008281526003602052604081208161087f611a64565b6001600160a01b03166001600160a01b0316815260200190815260200160002060000154905060006003600085815260200190815260200160002060006108c4611a64565b6001600160a01b0316815260208101919091526040016000205580610930576040805162461bcd60e51b815260206004820152601760248201527f7a65726f2062616c616e636520696e2061756374696f6e000000000000000000604482015290519081900360640190fd5b600061093c8483611a68565b9050600061094b858484611a8d565b9050808211156109a057600061095f610e1f565b905061098761096e8484611b01565b6000838152600160208190526040909120015490611b43565b6000918252600160208190526040909220909101559050805b6000858152600360205260408120816109b7611a64565b6001600160a01b039081168252602082019290925260400160002060010154161415610b0a5760095460408051632770a7eb60e21b81523060048201526024810185905290516001600160a01b0390921691639dc29fac9160448082019260009290919082900301818387803b158015610a3057600080fd5b505af1158015610a44573d6000803e3d6000fd5b5050600a546001600160a01b03169150631f5a56a8905083600e610a66611a64565b6040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505060408051858152905142935087925033917ff2b908368f09f0315cc777a5e0b356c3524778809e0f218bd7e7fe86752bd262919081900360200190a4610d04565b60095460408051632770a7eb60e21b81523060048201526024810185905290516001600160a01b0390921691639dc29fac9160448082019260009290919082900301818387803b158015610b5d57600080fd5b505af1158015610b71573d6000803e3d6000fd5b50505050600080610b8184611b9d565b9092509050610b908482611b43565b600a549094506001600160a01b0316631f5a56a885600e610baf611a64565b6040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b158015610bfc57600080fd5b505af1158015610c10573d6000803e3d6000fd5b505060408051878152905142935089925033917ff2b908368f09f0315cc777a5e0b356c3524778809e0f218bd7e7fe86752bd262919081900360200190a4600a5460008881526003602052604081206001600160a01b0390921691631f5a56a8918591600e91610c7e611a64565b6001600160a01b0390811682526020820192909252604090810160009081206001015482516001600160e01b031960e089901b168152600481019690965260248601949094529290911660448401525160648084019382900301818387803b158015610ce957600080fd5b505af1158015610cfd573d6000803e3d6000fd5b5050505050505b5050505050565b600082815260208190526040902060020154610d2e90610d29611a64565b61124f565b610d695760405162461bcd60e51b815260040180806020018281038252602f815260200180612394602f913960400191505060405180910390fd5b610d738282611bd1565b5050565b610d7f611a64565b6001600160a01b0316816001600160a01b031614610dce5760405162461bcd60e51b815260040180806020018281038252602f815260200180612434602f913960400191505060405180910390fd5b610d738282611c3a565b6009546001600160a01b031681565b6000610e0a600754610e0460065442611b0190919063ffffffff16565b90611ca3565b90505b90565b600a546001600160a01b031681565b600080610e2a610de7565b9050610e4c610e45610e3d836007611ce5565b600790611b01565b8290611b43565b91505090565b6001600160a01b038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610eb257602002820191906000526020600020905b815481526020019060010190808311610e9e575b50505050509050919050565b6003602090815260009283526040808420909152908252902080546001909101546001600160a01b031682565b610ef3611975565b610efb611a21565b806001600160a01b0316610f0d611a64565b6001600160a01b03161415610f5d576040805162461bcd60e51b815260206004820152601160248201527036b9b39739b2b73232b9101e9e903932b360791b604482015290519081900360640190fd5b600080610f68611d27565b91509150610f768185611d54565b6000610f80610de7565b6000818152600360205260408120919250859190610f9c611a64565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061102434600360008481526020019081526020016000206000611004611a64565b6001600160a01b0316815260208101919091526040016000205490611b43565b60008281526003602052604081209061103b611a64565b6001600160a01b0316815260208082019290925260409081016000908120939093558383526004909152812090611070611a64565b6001600160a01b0316815260208101919091526040016000205460ff1661110b576002600061109d611a64565b6001600160a01b0316815260208082019290925260409081016000908120805460018181018355918352848320018590558482526004909352908120906110e2611a64565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6000818152600160205260409020546111249034611b43565b60008281526001602052604080822092909255600c5491516001600160a01b039092169185156108fc0291869190818181858888f1935050505015801561116f573d6000803e3d6000fd5b506040805134815290514291839133917f97371a3349bea11f577edf6e64350a3dfb9de665d1154c7e6d08eb0805aa0430919081900360200190a45050505050565b600c546001600160a01b031681565b6001602081905260009182526040909120805491810154600282015460039092015490919084565b60085481565b6000805160206123c383398151915281565b6002602052816000526040600020818154811061121957fe5b90600052602060002001600091509150505481565b60008281526020819052604081206112469083611fac565b90505b92915050565b60008281526020819052604081206112469083611fb8565b600c54600160a01b900460ff1681565b60055481565b600081565b60075481565b60065481565b60408051600280825260608083018452600093909291906020830190803683375050600b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156112f857600080fd5b505afa15801561130c573d6000803e3d6000fd5b505050506040513d602081101561132257600080fd5b50518151829060009061133157fe5b6001600160a01b03928316602091820292909201015260095482519116908290600190811061135c57fe5b6001600160a01b03928316602091820292909201810191909152600b546040805163d06ca61f60e01b8152670de0b6b3a76400006004820181815260248301938452875160448401528751600097959095169563d06ca61f9592948994929390926064019185810191028083838c5b838110156113e35781810151838201526020016113cb565b50505050905001935050505060006040518083038186803b15801561140757600080fd5b505afa15801561141b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561144457600080fd5b810190808051604051939291908464010000000082111561146457600080fd5b90830190602082018581111561147957600080fd5b825186602082028301116401000000008211171561149657600080fd5b82525081516020918201928201910280838360005b838110156114c35781810151838201526020016114ab565b505050509050016040525050506001815181106114dc57fe5b60200260200101519050809250505090565b6115086000805160206123c3833981519152610d29611a64565b611559576040805162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f7420612063616c6c657220726f6c650000000000604482015290519081900360640190fd5b6000611563610de7565b90506000611572826001611b43565b600081815260016020819052604090912001549091506115929084611b43565b6000918252600160208190526040909220909101555050565b600081815260208190526040812061124990611fcd565b600460209081526000928352604080842090915290825290205460ff1681565b6115fc6000805160206123c3833981519152610d29611a64565b61164d576040805162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f7420612063616c6c657220726f6c650000000000604482015290519081900360640190fd5b6000611657610e1f565b600081815260016020819052604090912001549091506116779083611b43565b60009182526001602081905260409092209091015550565b60008061169a610de7565b9050806000805b8060071461170957600083815260016020526040902060020154156116ed576000838152600160205260409020600201546116dd908390611b43565b91506116ea816001611b43565b90505b826116f757611709565b611702836001611b01565b92506116a1565b816117215761171661128e565b945050505050610e0d565b6117168282611ca3565b60008281526020819052604090206002015461174990610d29611a64565b610dce5760405162461bcd60e51b81526004018080602001828103825260308152602001806123e36030913960400191505060405180910390fd5b6117b07f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08610d29611a64565b611801576040805162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f7420612063616c6c657220726f6c650000000000604482015290519081900360640190fd5b600855565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b600c54600160a01b900460ff161561187a576040805162461bcd60e51b815260206004820152600e60248201526d696e69742069732061637469766560901b604482015290519081900360640190fd5b6118a47f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0889610d69565b6118bc6000805160206123c383398151915284610d69565b6118d46000805160206123c383398151915283610d69565b6118ec6000805160206123c383398151915287610d69565b6119046000805160206123c383398151915282610d69565b505042600655506007959095556014600855600980546001600160a01b03199081166001600160a01b0395861617909155600a8054821693851693909317909255600b80548316918416919091179055600c8054600160a01b9216929094169190911760ff60a01b19161790915550565b600061197f610de7565b9050611989612349565b600160008381526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050816005541015610d735780516020808301516040805193845291830152805184927fffb09ad5e94e90b2d6b7665b8971615b9cc37b1aa053b4e6d3bf02ffcda1449d92908290030190a250600555565b6000611a2b610de7565b9050611a3561128e565b600082815260016020526040902060020155611a4f61168f565b60009182526001602052604090912060030155565b3390565b6000828152600160208190526040822080549101546112469190610e04908590611fd8565b6000838152600160205260408120600301548190611ab990670de0b6b3a764000090610e049087611fd8565b90506000611ae1611ada6064610e0460085486611fd890919063ffffffff16565b8390611b43565b905080841115611af4579150611afa9050565b83925050505b9392505050565b600061124683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612031565b600082820183811015611246576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008080611bb16064610e04866014611fd8565b90506000611bc56064610e0487600a611fd8565b91935090915050915091565b6000828152602081905260409020611be990826120c8565b15610d7357611bf6611a64565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081905260409020611c5290826120dd565b15610d7357611c5f611a64565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600061124683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120f2565b600061124683836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612157565b60008080611d3b6064610e04346014611fd8565b90506000611d493483611b01565b919350909150509091565b60408051600280825260608083018452926020830190803683375050600b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611db857600080fd5b505afa158015611dcc573d6000803e3d6000fd5b505050506040513d6020811015611de257600080fd5b505181518290600090611df157fe5b6001600160a01b039283166020918202929092010152600954825191169082906001908110611e1c57fe5b6001600160a01b03928316602091820292909201810191909152600b54600a54604051637ff36ab560e01b815260006004820181815292861660448301819052606483018990526080602484019081528851608485015288519590971696637ff36ab5968b9693958a9593948c9491939260a49092019187810191028083838b5b83811015611eb5578181015183820152602001611e9d565b50505050905001955050505050506000604051808303818588803b158015611edc57600080fd5b505af1158015611ef0573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015611f1a57600080fd5b8101908080516040519392919084640100000000821115611f3a57600080fd5b908301906020820185811115611f4f57600080fd5b8251866020820283011164010000000082111715611f6c57600080fd5b82525081516020918201928201910280838360005b83811015611f99578181015183820152602001611f81565b5050505090500160405250505050505050565b600061124683836121b9565b6000611246836001600160a01b03841661221d565b600061124982612235565b600082611fe757506000611249565b82820282848281611ff457fe5b04146112465760405162461bcd60e51b81526004018080602001828103825260218152602001806124136021913960400191505060405180910390fd5b600081848411156120c05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561208557818101518382015260200161206d565b50505050905090810190601f1680156120b25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000611246836001600160a01b038416612239565b6000611246836001600160a01b038416612283565b600081836121415760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561208557818101518382015260200161206d565b50600083858161214d57fe5b0495945050505050565b600081836121a65760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561208557818101518382015260200161206d565b508284816121b057fe5b06949350505050565b815460009082106121fb5760405162461bcd60e51b81526004018080602001828103825260228152602001806123726022913960400191505060405180910390fd5b82600001828154811061220a57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b6000612245838361221d565b61227b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611249565b506000611249565b6000818152600183016020526040812054801561233f57835460001980830191908101906000908790839081106122b657fe5b90600052602060002001549050808760000184815481106122d357fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061230357fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611249565b6000915050611249565b604051806080016040528060008152602001600081526020016000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74843c3a00fa95510a35f425371231fd3fe4642e719cb4595160763d6d02594b50416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a264697066735822122074c5a53308520ab73da30c7f4430d9215d304eef3aadedf5406aed92a84eaede64736f6c634300060c0033
Deployed Bytecode
0x6080604052600436106101f95760003560e01c80639010d07c1161010d578063c22fd76f116100a0578063d4b22c0a1161006f578063d4b22c0a146106e0578063d547741f146106f5578063d7e6bef81461072e578063ec87621c14610758578063fba6fc981461076d576101f9565b8063c22fd76f14610629578063ca15c87314610653578063ccbbc9b31461067d578063cd7c141c146106b6576101f9565b8063a217fddf116100dc578063a217fddf146105d5578063a2e6f9bf146105ea578063be9a6555146105ff578063c1c93a7314610614576101f9565b80639010d07c1461052e57806391d148541461055e578063982e52fb146105ab5780639d8cd337146105c0576101f9565b8063586f7c3a1161019057806366d003ac1161015f57806366d003ac146104665780637492ec691461047b57806375954a95146104cb578063774237fc146104e05780638501313f146104f5576101f9565b8063586f7c3a146103485780635ae6ea701461035d5780635f9406b4146103e05780635f9b71ce1461043a576101f9565b806336568abe116101cc57806336568abe146102d05780633fc15f15146103095780634bc2e48d1461031e5780634cf088d914610333576101f9565b8063248a9ca3146101fe5780632681f7e41461023a5780632e1a7d4d1461026b5780632f2ff15d14610297575b600080fd5b34801561020a57600080fd5b506102286004803603602081101561022157600080fd5b50356107e0565b60408051918252519081900360200190f35b34801561024657600080fd5b5061024f6107f5565b604080516001600160a01b039092168252519081900360200190f35b34801561027757600080fd5b506102956004803603602081101561028e57600080fd5b5035610804565b005b3480156102a357600080fd5b50610295600480360360408110156102ba57600080fd5b50803590602001356001600160a01b0316610d0b565b3480156102dc57600080fd5b50610295600480360360408110156102f357600080fd5b50803590602001356001600160a01b0316610d77565b34801561031557600080fd5b5061024f610dd8565b34801561032a57600080fd5b50610228610de7565b34801561033f57600080fd5b5061024f610e10565b34801561035457600080fd5b50610228610e1f565b34801561036957600080fd5b506103906004803603602081101561038057600080fd5b50356001600160a01b0316610e52565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103cc5781810151838201526020016103b4565b505050509050019250505060405180910390f35b3480156103ec57600080fd5b506104196004803603604081101561040357600080fd5b50803590602001356001600160a01b0316610ebe565b604080519283526001600160a01b0390911660208301528051918290030190f35b6102956004803603604081101561045057600080fd5b50803590602001356001600160a01b0316610eeb565b34801561047257600080fd5b5061024f6111b1565b34801561048757600080fd5b506104a56004803603602081101561049e57600080fd5b50356111c0565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156104d757600080fd5b506102286111e8565b3480156104ec57600080fd5b506102286111ee565b34801561050157600080fd5b506102286004803603604081101561051857600080fd5b506001600160a01b038135169060200135611200565b34801561053a57600080fd5b5061024f6004803603604081101561055157600080fd5b508035906020013561122e565b34801561056a57600080fd5b506105976004803603604081101561058157600080fd5b50803590602001356001600160a01b031661124f565b604080519115158252519081900360200190f35b3480156105b757600080fd5b50610597611267565b3480156105cc57600080fd5b50610228611277565b3480156105e157600080fd5b5061022861127d565b3480156105f657600080fd5b50610228611282565b34801561060b57600080fd5b50610228611288565b34801561062057600080fd5b5061022861128e565b34801561063557600080fd5b506102956004803603602081101561064c57600080fd5b50356114ee565b34801561065f57600080fd5b506102286004803603602081101561067657600080fd5b50356115ab565b34801561068957600080fd5b50610597600480360360408110156106a057600080fd5b50803590602001356001600160a01b03166115c2565b3480156106c257600080fd5b50610295600480360360208110156106d957600080fd5b50356115e2565b3480156106ec57600080fd5b5061022861168f565b34801561070157600080fd5b506102956004803603604081101561071857600080fd5b50803590602001356001600160a01b031661172b565b34801561073a57600080fd5b506102956004803603602081101561075157600080fd5b5035611784565b34801561076457600080fd5b50610228611806565b34801561077957600080fd5b50610295600480360361012081101561079157600080fd5b508035906001600160a01b03602082013581169160408101358216916060820135811691608081013582169160a082013581169160c081013582169160e082013581169161010001351661182a565b60009081526020819052604090206002015490565b600b546001600160a01b031681565b61080c611975565b610814611a21565b600061081e610de7565b9050818111610868576040805162461bcd60e51b815260206004820152601160248201527061756374696f6e2069732061637469766560781b604482015290519081900360640190fd5b60008281526003602052604081208161087f611a64565b6001600160a01b03166001600160a01b0316815260200190815260200160002060000154905060006003600085815260200190815260200160002060006108c4611a64565b6001600160a01b0316815260208101919091526040016000205580610930576040805162461bcd60e51b815260206004820152601760248201527f7a65726f2062616c616e636520696e2061756374696f6e000000000000000000604482015290519081900360640190fd5b600061093c8483611a68565b9050600061094b858484611a8d565b9050808211156109a057600061095f610e1f565b905061098761096e8484611b01565b6000838152600160208190526040909120015490611b43565b6000918252600160208190526040909220909101559050805b6000858152600360205260408120816109b7611a64565b6001600160a01b039081168252602082019290925260400160002060010154161415610b0a5760095460408051632770a7eb60e21b81523060048201526024810185905290516001600160a01b0390921691639dc29fac9160448082019260009290919082900301818387803b158015610a3057600080fd5b505af1158015610a44573d6000803e3d6000fd5b5050600a546001600160a01b03169150631f5a56a8905083600e610a66611a64565b6040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505060408051858152905142935087925033917ff2b908368f09f0315cc777a5e0b356c3524778809e0f218bd7e7fe86752bd262919081900360200190a4610d04565b60095460408051632770a7eb60e21b81523060048201526024810185905290516001600160a01b0390921691639dc29fac9160448082019260009290919082900301818387803b158015610b5d57600080fd5b505af1158015610b71573d6000803e3d6000fd5b50505050600080610b8184611b9d565b9092509050610b908482611b43565b600a549094506001600160a01b0316631f5a56a885600e610baf611a64565b6040518463ffffffff1660e01b815260040180848152602001838152602001826001600160a01b031681526020019350505050600060405180830381600087803b158015610bfc57600080fd5b505af1158015610c10573d6000803e3d6000fd5b505060408051878152905142935089925033917ff2b908368f09f0315cc777a5e0b356c3524778809e0f218bd7e7fe86752bd262919081900360200190a4600a5460008881526003602052604081206001600160a01b0390921691631f5a56a8918591600e91610c7e611a64565b6001600160a01b0390811682526020820192909252604090810160009081206001015482516001600160e01b031960e089901b168152600481019690965260248601949094529290911660448401525160648084019382900301818387803b158015610ce957600080fd5b505af1158015610cfd573d6000803e3d6000fd5b5050505050505b5050505050565b600082815260208190526040902060020154610d2e90610d29611a64565b61124f565b610d695760405162461bcd60e51b815260040180806020018281038252602f815260200180612394602f913960400191505060405180910390fd5b610d738282611bd1565b5050565b610d7f611a64565b6001600160a01b0316816001600160a01b031614610dce5760405162461bcd60e51b815260040180806020018281038252602f815260200180612434602f913960400191505060405180910390fd5b610d738282611c3a565b6009546001600160a01b031681565b6000610e0a600754610e0460065442611b0190919063ffffffff16565b90611ca3565b90505b90565b600a546001600160a01b031681565b600080610e2a610de7565b9050610e4c610e45610e3d836007611ce5565b600790611b01565b8290611b43565b91505090565b6001600160a01b038116600090815260026020908152604091829020805483518184028101840190945280845260609392830182828015610eb257602002820191906000526020600020905b815481526020019060010190808311610e9e575b50505050509050919050565b6003602090815260009283526040808420909152908252902080546001909101546001600160a01b031682565b610ef3611975565b610efb611a21565b806001600160a01b0316610f0d611a64565b6001600160a01b03161415610f5d576040805162461bcd60e51b815260206004820152601160248201527036b9b39739b2b73232b9101e9e903932b360791b604482015290519081900360640190fd5b600080610f68611d27565b91509150610f768185611d54565b6000610f80610de7565b6000818152600360205260408120919250859190610f9c611a64565b6001600160a01b03166001600160a01b0316815260200190815260200160002060010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061102434600360008481526020019081526020016000206000611004611a64565b6001600160a01b0316815260208101919091526040016000205490611b43565b60008281526003602052604081209061103b611a64565b6001600160a01b0316815260208082019290925260409081016000908120939093558383526004909152812090611070611a64565b6001600160a01b0316815260208101919091526040016000205460ff1661110b576002600061109d611a64565b6001600160a01b0316815260208082019290925260409081016000908120805460018181018355918352848320018590558482526004909352908120906110e2611a64565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790555b6000818152600160205260409020546111249034611b43565b60008281526001602052604080822092909255600c5491516001600160a01b039092169185156108fc0291869190818181858888f1935050505015801561116f573d6000803e3d6000fd5b506040805134815290514291839133917f97371a3349bea11f577edf6e64350a3dfb9de665d1154c7e6d08eb0805aa0430919081900360200190a45050505050565b600c546001600160a01b031681565b6001602081905260009182526040909120805491810154600282015460039092015490919084565b60085481565b6000805160206123c383398151915281565b6002602052816000526040600020818154811061121957fe5b90600052602060002001600091509150505481565b60008281526020819052604081206112469083611fac565b90505b92915050565b60008281526020819052604081206112469083611fb8565b600c54600160a01b900460ff1681565b60055481565b600081565b60075481565b60065481565b60408051600280825260608083018452600093909291906020830190803683375050600b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b1580156112f857600080fd5b505afa15801561130c573d6000803e3d6000fd5b505050506040513d602081101561132257600080fd5b50518151829060009061133157fe5b6001600160a01b03928316602091820292909201015260095482519116908290600190811061135c57fe5b6001600160a01b03928316602091820292909201810191909152600b546040805163d06ca61f60e01b8152670de0b6b3a76400006004820181815260248301938452875160448401528751600097959095169563d06ca61f9592948994929390926064019185810191028083838c5b838110156113e35781810151838201526020016113cb565b50505050905001935050505060006040518083038186803b15801561140757600080fd5b505afa15801561141b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101561144457600080fd5b810190808051604051939291908464010000000082111561146457600080fd5b90830190602082018581111561147957600080fd5b825186602082028301116401000000008211171561149657600080fd5b82525081516020918201928201910280838360005b838110156114c35781810151838201526020016114ab565b505050509050016040525050506001815181106114dc57fe5b60200260200101519050809250505090565b6115086000805160206123c3833981519152610d29611a64565b611559576040805162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f7420612063616c6c657220726f6c650000000000604482015290519081900360640190fd5b6000611563610de7565b90506000611572826001611b43565b600081815260016020819052604090912001549091506115929084611b43565b6000918252600160208190526040909220909101555050565b600081815260208190526040812061124990611fcd565b600460209081526000928352604080842090915290825290205460ff1681565b6115fc6000805160206123c3833981519152610d29611a64565b61164d576040805162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f7420612063616c6c657220726f6c650000000000604482015290519081900360640190fd5b6000611657610e1f565b600081815260016020819052604090912001549091506116779083611b43565b60009182526001602081905260409092209091015550565b60008061169a610de7565b9050806000805b8060071461170957600083815260016020526040902060020154156116ed576000838152600160205260409020600201546116dd908390611b43565b91506116ea816001611b43565b90505b826116f757611709565b611702836001611b01565b92506116a1565b816117215761171661128e565b945050505050610e0d565b6117168282611ca3565b60008281526020819052604090206002015461174990610d29611a64565b610dce5760405162461bcd60e51b81526004018080602001828103825260308152602001806123e36030913960400191505060405180910390fd5b6117b07f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08610d29611a64565b611801576040805162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f7420612063616c6c657220726f6c650000000000604482015290519081900360640190fd5b600855565b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b600c54600160a01b900460ff161561187a576040805162461bcd60e51b815260206004820152600e60248201526d696e69742069732061637469766560901b604482015290519081900360640190fd5b6118a47f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0889610d69565b6118bc6000805160206123c383398151915284610d69565b6118d46000805160206123c383398151915283610d69565b6118ec6000805160206123c383398151915287610d69565b6119046000805160206123c383398151915282610d69565b505042600655506007959095556014600855600980546001600160a01b03199081166001600160a01b0395861617909155600a8054821693851693909317909255600b80548316918416919091179055600c8054600160a01b9216929094169190911760ff60a01b19161790915550565b600061197f610de7565b9050611989612349565b600160008381526020019081526020016000206040518060800160405290816000820154815260200160018201548152602001600282015481526020016003820154815250509050816005541015610d735780516020808301516040805193845291830152805184927fffb09ad5e94e90b2d6b7665b8971615b9cc37b1aa053b4e6d3bf02ffcda1449d92908290030190a250600555565b6000611a2b610de7565b9050611a3561128e565b600082815260016020526040902060020155611a4f61168f565b60009182526001602052604090912060030155565b3390565b6000828152600160208190526040822080549101546112469190610e04908590611fd8565b6000838152600160205260408120600301548190611ab990670de0b6b3a764000090610e049087611fd8565b90506000611ae1611ada6064610e0460085486611fd890919063ffffffff16565b8390611b43565b905080841115611af4579150611afa9050565b83925050505b9392505050565b600061124683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612031565b600082820183811015611246576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008080611bb16064610e04866014611fd8565b90506000611bc56064610e0487600a611fd8565b91935090915050915091565b6000828152602081905260409020611be990826120c8565b15610d7357611bf6611a64565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000828152602081905260409020611c5290826120dd565b15610d7357611c5f611a64565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600061124683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120f2565b600061124683836040518060400160405280601881526020017f536166654d6174683a206d6f64756c6f206279207a65726f0000000000000000815250612157565b60008080611d3b6064610e04346014611fd8565b90506000611d493483611b01565b919350909150509091565b60408051600280825260608083018452926020830190803683375050600b54604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b158015611db857600080fd5b505afa158015611dcc573d6000803e3d6000fd5b505050506040513d6020811015611de257600080fd5b505181518290600090611df157fe5b6001600160a01b039283166020918202929092010152600954825191169082906001908110611e1c57fe5b6001600160a01b03928316602091820292909201810191909152600b54600a54604051637ff36ab560e01b815260006004820181815292861660448301819052606483018990526080602484019081528851608485015288519590971696637ff36ab5968b9693958a9593948c9491939260a49092019187810191028083838b5b83811015611eb5578181015183820152602001611e9d565b50505050905001955050505050506000604051808303818588803b158015611edc57600080fd5b505af1158015611ef0573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f191682016040526020811015611f1a57600080fd5b8101908080516040519392919084640100000000821115611f3a57600080fd5b908301906020820185811115611f4f57600080fd5b8251866020820283011164010000000082111715611f6c57600080fd5b82525081516020918201928201910280838360005b83811015611f99578181015183820152602001611f81565b5050505090500160405250505050505050565b600061124683836121b9565b6000611246836001600160a01b03841661221d565b600061124982612235565b600082611fe757506000611249565b82820282848281611ff457fe5b04146112465760405162461bcd60e51b81526004018080602001828103825260218152602001806124136021913960400191505060405180910390fd5b600081848411156120c05760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561208557818101518382015260200161206d565b50505050905090810190601f1680156120b25780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000611246836001600160a01b038416612239565b6000611246836001600160a01b038416612283565b600081836121415760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561208557818101518382015260200161206d565b50600083858161214d57fe5b0495945050505050565b600081836121a65760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561208557818101518382015260200161206d565b508284816121b057fe5b06949350505050565b815460009082106121fb5760405162461bcd60e51b81526004018080602001828103825260228152602001806123726022913960400191505060405180910390fd5b82600001828154811061220a57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b6000612245838361221d565b61227b57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611249565b506000611249565b6000818152600183016020526040812054801561233f57835460001980830191908101906000908790839081106122b657fe5b90600052602060002001549050808760000184815481106122d357fe5b60009182526020808320909101929092558281526001898101909252604090209084019055865487908061230357fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611249565b6000915050611249565b604051806080016040528060008152602001600081526020016000815260200160008152509056fe456e756d657261626c655365743a20696e646578206f7574206f6620626f756e6473416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f206772616e74843c3a00fa95510a35f425371231fd3fe4642e719cb4595160763d6d02594b50416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e2061646d696e20746f207265766f6b65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66a264697066735822122074c5a53308520ab73da30c7f4430d9215d304eef3aadedf5406aed92a84eaede64736f6c634300060c0033
Deployed Bytecode Sourcemap
36711:10608:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22248:114;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22248:114:0;;:::i;:::-;;;;;;;;;;;;;;;;38023:30;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;38023:30:0;;;;;;;;;;;;;;42040:1993;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42040:1993:0;;:::i;:::-;;22624:227;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22624:227:0;;;;;;-1:-1:-1;;;;;22624:227:0;;:::i;23833:209::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23833:209:0;;;;;;-1:-1:-1;;;;;23833:209:0;;:::i;37963:24::-;;;;;;;;;;;;;:::i;44949:124::-;;;;;;;;;;;;;:::i;37994:22::-;;;;;;;;;;;;;:::i;44726:215::-;;;;;;;;;;;;;:::i;39374:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39374:154:0;-1:-1:-1;;;;;39374:154:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37675:67;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37675:67:0;;;;;;-1:-1:-1;;;;;37675:67:0;;:::i;:::-;;;;;;;-1:-1:-1;;;;;37675:67:0;;;;;;;;;;;;;;;;40952:1080;;;;;;;;;;;;;;;;-1:-1:-1;40952:1080:0;;;;;;-1:-1:-1;;;;;40952:1080:0;;:::i;38060:32::-;;;;;;;;;;;;;:::i;37561:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37561:53:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37927:29;;;;;;;;;;;;;:::i;37258:62::-;;;;;;;;;;;;;:::i;37621:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37621:47:0;;;;;;;;:::i;21921:138::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21921:138:0;;;;;;;:::i;20882:139::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20882:139:0;;;;;;-1:-1:-1;;;;;20882:139:0;;:::i;:::-;;;;;;;;;;;;;;;;;;38099:17;;;;;;;;;;;;;:::i;37825:33::-;;;;;;;;;;;;;:::i;19627:49::-;;;;;;;;;;;;;:::i;37892:28::-;;;;;;;;;;;;;:::i;37865:20::-;;;;;;;;;;;;;:::i;39652:354::-;;;;;;;;;;;;;:::i;44041:::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44041:354:0;;:::i;21195:127::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21195:127:0;;:::i;37749:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37749:67:0;;;;;;-1:-1:-1;;;;;37749:67:0;;:::i;44403:315::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;44403:315:0;;:::i;40014:630::-;;;;;;;;;;;;;:::i;23096:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23096:230:0;;;;;;-1:-1:-1;;;;;23096:230:0;;:::i;39536:108::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39536:108:0;;:::i;37187:64::-;;;;;;;;;;;;;:::i;38532:834::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38532:834:0;;;-1:-1:-1;;;;;38532:834:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22248:114::-;22305:7;22332:12;;;;;;;;;;:22;;;;22248:114::o;38023:30::-;;;-1:-1:-1;;;;;38023:30:0;;:::o;42040:1993::-;42097:18;:16;:18::i;:::-;42126:14;:12;:14::i;:::-;42153:22;42178:25;:23;:25::i;:::-;42153:50;;42241:9;42224:14;:26;42216:56;;;;;-1:-1:-1;;;42216:56:0;;;;;;;;;;;;-1:-1:-1;;;42216:56:0;;;;;;;;;;;;;;;42285:29;42317:23;;;:12;:23;;;;;42285:29;42341:12;:10;:12::i;:::-;-1:-1:-1;;;;;42317:37:0;-1:-1:-1;;;;;42317:37:0;;;;;;;;;;;;:55;;;42285:87;;42429:1;42385:12;:23;42398:9;42385:23;;;;;;;;;;;:37;42409:12;:10;:12::i;:::-;-1:-1:-1;;;;;42385:37:0;;;;;;;;;;;;-1:-1:-1;42385:37:0;:45;42451:25;42443:61;;;;;-1:-1:-1;;;42443:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42517:14;42534:50;42551:9;42562:21;42534:16;:50::i;:::-;42517:67;;42597:32;42632:119;42674:9;42698:21;42734:6;42632:27;:119::i;:::-;42597:154;;42777:24;42768:6;:33;42764:343;;;42818:25;42846:31;:29;:31::i;:::-;42818:59;-1:-1:-1;42932:113:0;43008:36;:6;43019:24;43008:10;:36::i;:::-;42932:29;;;;:10;:29;;;;;;;;:53;;;:75;:113::i;:::-;42894:29;;;;:10;:29;;;;;;;;:35;;;:151;43071:24;-1:-1:-1;43071:24:0;42764:343;43185:1;43131:23;;;:12;:23;;;;;43185:1;43155:12;:10;:12::i;:::-;-1:-1:-1;;;;;43131:37:0;;;;;;;;;;;;;;-1:-1:-1;43131:37:0;:41;;;;43123:64;43119:907;;;43211:9;;43204:45;;;-1:-1:-1;;;43204:45:0;;43235:4;43204:45;;;;;;;;;;;;-1:-1:-1;;;;;43211:9:0;;;;43204:22;;:45;;;;;43211:9;;43204:45;;;;;;;;43211:9;;43204:45;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43275:7:0;;-1:-1:-1;;;;;43275:7:0;;-1:-1:-1;43266:31:0;;-1:-1:-1;43298:6:0;43306:2;43310:12;:10;:12::i;:::-;43266:57;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43266:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43345:51:0;;;;;;;;43392:3;;-1:-1:-1;43376:14:0;;-1:-1:-1;43356:10:0;;43345:51;;;;;;;;;;43119:907;;;43436:9;;43429:45;;;-1:-1:-1;;;43429:45:0;;43460:4;43429:45;;;;;;;;;;;;-1:-1:-1;;;;;43436:9:0;;;;43429:22;;:45;;;;;43436:9;;43429:45;;;;;;;;43436:9;;43429:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43510:23;43552:24;43594:41;43628:6;43594:33;:41::i;:::-;43491:144;;-1:-1:-1;43491:144:0;-1:-1:-1;43661:28:0;:6;43491:144;43661:10;:28::i;:::-;43715:7;;43652:37;;-1:-1:-1;;;;;;43715:7:0;43706:31;43652:37;43746:2;43750:12;:10;:12::i;:::-;43706:57;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;43706:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;43785:51:0;;;;;;;;43832:3;;-1:-1:-1;43816:14:0;;-1:-1:-1;43796:10:0;;43785:51;;;;;;;;;;43862:7;;;43958:23;;;:12;:23;;;;;-1:-1:-1;;;;;43862:7:0;;;;43853:31;;43903:15;;43937:2;;43982:12;:10;:12::i;:::-;-1:-1:-1;;;;;43958:37:0;;;;;;;;;;;;;;;;-1:-1:-1;43958:37:0;;;:41;;;43853:161;;-1:-1:-1;;;;;;43853:161:0;;;;;;;;;;;;;;;;;;;;;43958:41;;;;43853:161;;;;;;;;;;;;;;;-1:-1:-1;43853:161:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43119:907;;;42040:1993;;;;;:::o;22624:227::-;22716:6;:12;;;;;;;;;;:22;;;22708:45;;22740:12;:10;:12::i;:::-;22708:7;:45::i;:::-;22700:105;;;;-1:-1:-1;;;22700:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22818:25;22829:4;22835:7;22818:10;:25::i;:::-;22624:227;;:::o;23833:209::-;23931:12;:10;:12::i;:::-;-1:-1:-1;;;;;23920:23:0;:7;-1:-1:-1;;;;;23920:23:0;;23912:83;;;;-1:-1:-1;;;23912:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24008:26;24020:4;24026:7;24008:11;:26::i;37963:24::-;;;-1:-1:-1;;;;;37963:24:0;;:::o;44949:124::-;45005:7;45032:33;45051:13;;45032:14;45040:5;;45032:3;:7;;:14;;;;:::i;:::-;:18;;:33::i;:::-;45025:40;;44949:124;;:::o;37994:22::-;;;-1:-1:-1;;;;;37994:22:0;;:::o;44726:215::-;44788:7;44808:22;44833:25;:23;:25::i;:::-;44808:50;-1:-1:-1;44876:57:0;44895:37;44910:21;44808:50;44929:1;44910:18;:21::i;:::-;44903:1;;44895:14;:37::i;:::-;44876:14;;:18;:57::i;:::-;44869:64;;;44726:215;:::o;39374:154::-;-1:-1:-1;;;;;39501:19:0;;;;;;:10;:19;;;;;;;;;39494:26;;;;;;;;;;;;;;;;;39460:16;;39494:26;;;39501:19;39494:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39374:154;;;:::o;37675:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37675:67:0;;:::o;40952:1080::-;41024:18;:16;:18::i;:::-;41053:14;:12;:14::i;:::-;41104:3;-1:-1:-1;;;;;41088:19:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;41088:19:0;;;41080:49;;;;;-1:-1:-1;;;41080:49:0;;;;;;;;;;;;-1:-1:-1;;;41080:49:0;;;;;;;;;;;;;;;41157:19;41191:17;41222:44;:42;:44::i;:::-;41142:124;;;;41279:29;41288:9;41299:8;41279;:29::i;:::-;41321:22;41346:25;:23;:25::i;:::-;41384:28;;;;:12;:28;;;;;41321:50;;-1:-1:-1;41433:3:0;;41384:28;41413:12;:10;:12::i;:::-;-1:-1:-1;;;;;41384:42:0;-1:-1:-1;;;;;41384:42:0;;;;;;;;;;;;:46;;;:52;;;;;-1:-1:-1;;;;;41384:52:0;;;;;-1:-1:-1;;;;;41384:52:0;;;;;;41512:85;41577:9;41512:12;:28;41525:14;41512:28;;;;;;;;;;;:42;41541:12;:10;:12::i;:::-;-1:-1:-1;;;;;41512:42:0;;;;;;;;;;;;-1:-1:-1;41512:42:0;:46;;:50;:85::i;:::-;41449:28;;;;:12;:28;;;;;;41478:12;:10;:12::i;:::-;-1:-1:-1;;;;;41449:42:0;;;;;;;;;;;;;;;-1:-1:-1;41449:42:0;;;:148;;;;41615:31;;;:15;:31;;;;;;41647:12;:10;:12::i;:::-;-1:-1:-1;;;;;41615:45:0;;;;;;;;;;;;-1:-1:-1;41615:45:0;;;;41610:191;;41677:10;:24;41688:12;:10;:12::i;:::-;-1:-1:-1;;;;;41677:24:0;;;;;;;;;;;;;;;-1:-1:-1;41677:24:0;;;:45;;;;;;;;;;;;;;;;;;41737:31;;;:15;:31;;;;;;;41769:12;:10;:12::i;:::-;-1:-1:-1;;;;;41737:45:0;;;;;;;;;;;;-1:-1:-1;41737:45:0;:52;;-1:-1:-1;;41737:52:0;;;;;;;;;;41610:191;41846:26;;;;:10;:26;;;;;:30;:69;;41895:9;41846:34;:69::i;:::-;41813:26;;;;:10;:26;;;;;;:102;;;;41928:9;;:31;;-1:-1:-1;;;;;41928:9:0;;;;:31;;;;;41947:11;;41928:31;;41813:26;41928:31;41947:11;41928:9;:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41977:47:0;;;41993:9;41977:47;;;;42020:3;;42004:14;;41981:10;;41977:47;;;;;;;;;;40952:1080;;;;;:::o;38060:32::-;;;-1:-1:-1;;;;;38060:32:0;;:::o;37561:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37927:29::-;;;;:::o;37258:62::-;-1:-1:-1;;;;;;;;;;;37258:62:0;:::o;37621:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21921:138::-;21994:7;22021:12;;;;;;;;;;:30;;22045:5;22021:23;:30::i;:::-;22014:37;;21921:138;;;;;:::o;20882:139::-;20951:4;20975:12;;;;;;;;;;:38;;21005:7;20975:29;:38::i;38099:17::-;;;-1:-1:-1;;;38099:17:0;;;;;:::o;37825:33::-;;;;:::o;19627:49::-;19672:4;19627:49;:::o;37892:28::-;;;;:::o;37865:20::-;;;;:::o;39652:354::-;39748:16;;;39762:1;39748:16;;;39724:21;39748:16;;;;;39704:7;;39724:21;;39748:16;39762:1;39748:16;;;;;;;;-1:-1:-1;;39806:7:0;;39787:34;;;-1:-1:-1;;;39787:34:0;;;;39724:40;;-1:-1:-1;;;;;;39806:7:0;;;;39787:32;;-1:-1:-1;39787:34:0;;;;;;;;;;;;;;39806:7;39787:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39787:34:0;39777:7;;:4;;39782:1;;39777:7;;;;-1:-1:-1;;;;;39777:44:0;;;:7;;;;;;;;;:44;39842:9;;39832:7;;39842:9;;;39832:4;;39842:9;;39832:7;;;;;;-1:-1:-1;;;;;39832:19:0;;;:7;;;;;;;;;;:19;;;;39899:7;;39880:90;;;-1:-1:-1;;;39880:90:0;;39936:4;39880:90;;;;;;;;;;;;;;;;;;;;39864:13;;39899:7;;;;;39880:41;;39936:4;;39955;;39880:90;;;;;;;;;;;;;;;39864:13;39880:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;39880:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39880:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39971:1;39880:93;;;;;;;;;;;;;;39864:109;;39993:5;39986:12;;;;39652:354;:::o;44041:::-;38180:34;-1:-1:-1;;;;;;;;;;;38201:12:0;:10;:12::i;38180:34::-;38158:111;;;;;-1:-1:-1;;;38158:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44167:22:::1;44192:25;:23;:25::i;:::-;44167:50:::0;-1:-1:-1;44228:21:0::1;44252;44167:50:::0;44271:1:::1;44252:18;:21::i;:::-;44320:25;::::0;;;:10:::1;:25;::::0;;;;;;;:31:::1;::::0;44228:45;;-1:-1:-1;44320:67:0::1;::::0;44370:6;44320:35:::1;:67::i;:::-;44286:25;::::0;;;:10:::1;:25;::::0;;;;;;;:31;;::::1;:101:::0;-1:-1:-1;;44041:354:0:o;21195:127::-;21258:7;21285:12;;;;;;;;;;:29;;:27;:29::i;37749:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44403:315::-;38180:34;-1:-1:-1;;;;;;;;;;;38201:12:0;:10;:12::i;38180:34::-;38158:111;;;;;-1:-1:-1;;;38158:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;44530:28:::1;44561:31;:29;:31::i;:::-;44660:32;::::0;;;:10:::1;:32;::::0;;;;;;;:38:::1;::::0;44530:62;;-1:-1:-1;44660:50:0::1;::::0;44703:6;44660:42:::1;:50::i;:::-;44605:32;::::0;;;:10:::1;:32;::::0;;;;;;;:52;;::::1;:105:::0;-1:-1:-1;44403:315:0:o;40014:630::-;40080:7;40100:22;40125:25;:23;:25::i;:::-;40100:50;-1:-1:-1;40100:50:0;40163:13;;40253:291;40260:6;40270:1;40260:11;40253:291;;40292:17;;;;:10;:17;;;;;:34;;;:39;40288:170;;40366:17;;;;:10;:17;;;;;:34;;;40358:43;;:3;;:7;:43::i;:::-;40352:49;-1:-1:-1;40429:13:0;:6;40440:1;40429:10;:13::i;:::-;40420:22;;40288:170;40478:10;40474:21;;40490:5;;40474:21;40520:12;:5;40530:1;40520:9;:12::i;:::-;40512:20;;40253:291;;;40560:8;40556:80;;40577:21;:19;:21::i;:::-;40570:28;;;;;;;;40556:80;40621:15;:3;40629:6;40621:7;:15::i;23096:230::-;23189:6;:12;;;;;;;;;;:22;;;23181:45;;23213:12;:10;:12::i;23181:45::-;23173:106;;;;-1:-1:-1;;;23173:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39536:108;38353:35;37226:25;38375:12;:10;:12::i;38353:35::-;38331:112;;;;;-1:-1:-1;;;38331:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;39612:14:::1;:24:::0;39536:108::o;37187:64::-;37226:25;37187:64;:::o;38532:834::-;38862:5;;-1:-1:-1;;;38862:5:0;;;;38861:6;38853:33;;;;;-1:-1:-1;;;38853:33:0;;;;;;;;;;;;-1:-1:-1;;;38853:33:0;;;;;;;;;;;;;;;38897:34;37226:25;38922:8;38897:10;:34::i;:::-;38942:36;-1:-1:-1;;;;;;;;;;;38966:11:0;38942:10;:36::i;:::-;38989:37;-1:-1:-1;;;;;;;;;;;39013:12:0;38989:10;:37::i;:::-;39037:33;-1:-1:-1;;;;;;;;;;;39061:8:0;39037:10;:33::i;:::-;39081:37;-1:-1:-1;;;;;;;;;;;39105:12:0;39081:10;:37::i;:::-;-1:-1:-1;;39137:3:0;39129:5;:11;-1:-1:-1;39151:13:0;:30;;;;39209:2;39192:14;:19;39222:9;:22;;-1:-1:-1;;;;;;39222:22:0;;;-1:-1:-1;;;;;39222:22:0;;;;;;;39255:7;:18;;;;;;;;;;;;;;39284:7;:18;;;;;;;;;;;;;39313:9;:22;;-1:-1:-1;;;39313:22:0;;;;;;;;;;-1:-1:-1;;;;39346:12:0;;;;;-1:-1:-1;38532:834:0:o;46945:371::-;46993:22;47018:25;:23;:25::i;:::-;46993:50;;47054:31;;:::i;:::-;47088:10;:26;47099:14;47088:26;;;;;;;;;;;47054:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47152:14;47131:18;;:35;47127:182;;;47202:12;;47216:14;;;;;47188:59;;;;;;;;;;;;47232:14;;47188:59;;;;;;;;;-1:-1:-1;47262:18:0;:35;46945:371::o;40652:292::-;40696:22;40721:25;:23;:25::i;:::-;40696:50;;40805:21;:19;:21::i;:::-;40759:26;;;;:10;:26;;;;;:43;;:67;40901:35;:33;:35::i;:::-;40839:26;;;;:10;:26;;;;;;:59;;:97;40652:292::o;17568:106::-;17656:10;17568:106;:::o;45678:266::-;45789:7;45896:21;;;:10;:21;;;;;;;:25;;45845:27;;;45834:102;;45896:25;45834:39;;:6;;:10;:39::i;45081:589::-;45226:7;45270:21;;;:10;:21;;;;;:54;;;45226:7;;45270:104;;45369:4;;45270:80;;45343:6;45270:72;:80::i;:104::-;45246:128;;45387:32;45422:85;45454:42;45492:3;45454:33;45472:14;;45454:13;:17;;:33;;;;:::i;:42::-;45422:13;;:17;:85::i;:::-;45387:120;;45533:24;45524:6;:33;45520:143;;;45581:24;-1:-1:-1;45574:31:0;;-1:-1:-1;45574:31:0;45520:143;45645:6;45638:13;;;;45081:589;;;;;;:::o;26860:136::-;26918:7;26945:43;26949:1;26952;26945:43;;;;;;;;;;;;;;;;;:3;:43::i;26396:181::-;26454:7;26486:5;;;26510:6;;;;26502:46;;;;;-1:-1:-1;;;26502:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;46240:315;46348:7;;;46408:23;46427:3;46408:14;:6;46419:2;46408:10;:14::i;:23::-;46382:49;-1:-1:-1;46442:24:0;46469:23;46488:3;46469:14;:6;46480:2;46469:10;:14::i;:23::-;46513:15;;-1:-1:-1;46442:50:0;;-1:-1:-1;;46240:315:0;;;:::o;25076:188::-;25150:6;:12;;;;;;;;;;:33;;25175:7;25150:24;:33::i;:::-;25146:111;;;25232:12;:10;:12::i;:::-;-1:-1:-1;;;;;25205:40:0;25223:7;-1:-1:-1;;;;;25205:40:0;25217:4;25205:40;;;;;;;;;;25076:188;;:::o;25272:192::-;25347:6;:12;;;;;;;;;;:36;;25375:7;25347:27;:36::i;:::-;25343:114;;;25432:12;:10;:12::i;:::-;-1:-1:-1;;;;;25405:40:0;25423:7;-1:-1:-1;;;;;25405:40:0;25417:4;25405:40;;;;;;;;;;25272:192;;:::o;28697:132::-;28755:7;28782:39;28786:1;28789;28782:39;;;;;;;;;;;;;;;;;:3;:39::i;30068:130::-;30126:7;30153:37;30157:1;30160;30153:37;;;;;;;;;;;;;;;;;:3;:37::i;45952:280::-;46041:7;;;46097:26;46119:3;46097:17;:9;46111:2;46097:13;:17::i;:26::-;46075:48;-1:-1:-1;46134:17:0;46154:26;:9;46075:48;46154:13;:26::i;:::-;46201:11;;-1:-1:-1;46134:46:0;;-1:-1:-1;;45952:280:0;;:::o;46563:374::-;46658:16;;;46672:1;46658:16;;;46634:21;46658:16;;;;;46634:21;46658:16;;;;;;;;-1:-1:-1;;46716:7:0;;46697:34;;;-1:-1:-1;;;46697:34:0;;;;46634:40;;-1:-1:-1;;;;;;46716:7:0;;;;46697:32;;-1:-1:-1;46697:34:0;;;;;;;;;;;;;;46716:7;46697:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46697:34:0;46687:7;;:4;;46692:1;;46687:7;;;;-1:-1:-1;;;;;46687:44:0;;;:7;;;;;;;;;:44;46752:9;;46742:7;;46752:9;;;46742:4;;46752:9;;46742:7;;;;;;-1:-1:-1;;;;;46742:19:0;;;:7;;;;;;;;;;:19;;;;46793:7;;46888;;46774:155;;-1:-1:-1;;;46774:155:0;;46793:7;46774:155;;;;;;46888:7;;;46774:155;;;;;;;;;;;;;;;;;;;;;;;;;;;46793:7;;;;;46774:49;;46831:6;;46793:7;;46869:4;;46888:7;;46910:8;;46774:155;;;;;;;;;;;;;;;;46793:7;46774:155;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;46774:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46774:155:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46563:374;;;:::o;9132:149::-;9206:7;9249:22;9253:3;9265:5;9249:3;:22::i;8427:158::-;8507:4;8531:46;8541:3;-1:-1:-1;;;;;8561:14:0;;8531:9;:46::i;8671:117::-;8734:7;8761:19;8769:3;8761:7;:19::i;27750:471::-;27808:7;28053:6;28049:47;;-1:-1:-1;28083:1:0;28076:8;;28049:47;28120:5;;;28124:1;28120;:5;:1;28144:5;;;;;:10;28136:56;;;;-1:-1:-1;;;28136:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27299:192;27385:7;27421:12;27413:6;;;;27405:29;;;;-1:-1:-1;;;27405:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;27457:5:0;;;27299:192::o;7873:143::-;7943:4;7967:41;7972:3;-1:-1:-1;;;;;7992:14:0;;7967:4;:41::i;8192:149::-;8265:4;8289:44;8297:3;-1:-1:-1;;;;;8317:14:0;;8289:7;:44::i;29325:278::-;29411:7;29446:12;29439:5;29431:28;;;;-1:-1:-1;;;29431:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29470:9;29486:1;29482;:5;;;;;;;29325:278;-1:-1:-1;;;;;29325:278:0:o;30683:166::-;30769:7;30805:12;30797:6;30789:29;;;;-1:-1:-1;;;30789:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30840:1;30836;:5;;;;;;;30683:166;-1:-1:-1;;;;30683:166:0:o;7415:204::-;7510:18;;7482:7;;7510:26;-1:-1:-1;7502:73:0;;;;-1:-1:-1;;;7502:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7593:3;:11;;7605:5;7593:18;;;;;;;;;;;;;;;;7586:25;;7415:204;;;;:::o;6747:129::-;6820:4;6844:19;;;:12;;;;;:19;;;;;;:24;;;6747:129::o;6962:109::-;7045:18;;6962:109::o;4527:414::-;4590:4;4612:21;4622:3;4627:5;4612:9;:21::i;:::-;4607:327;;-1:-1:-1;4650:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;4833:18;;4811:19;;;:12;;;:19;;;;;;:40;;;;4866:11;;4607:327;-1:-1:-1;4917:5:0;4910:12;;5117:1544;5183:4;5322:19;;;:12;;;:19;;;;;;5358:15;;5354:1300;;5793:18;;-1:-1:-1;;5744:14:0;;;;5793:22;;;;5720:21;;5793:3;;:22;;6080;;;;;;;;;;;;;;6060:42;;6226:9;6197:3;:11;;6209:13;6197:26;;;;;;;;;;;;;;;;;;;:38;;;;6303:23;;;6345:1;6303:12;;;:23;;;;;;6329:17;;;6303:43;;6455:17;;6303:3;;6455:17;;;;;;;;;;;;;;;;;;;;;;6550:3;:12;;:19;6563:5;6550:19;;;;;;;;;;;6543:26;;;6593:4;6586:11;;;;;;;;5354:1300;6637:5;6630:12;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o
Swarm Source
ipfs://74c5a53308520ab73da30c7f4430d9215d304eef3aadedf5406aed92a84eaede
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.